Socket
Socket
Sign inDemoInstall

@webex/calling

Package Overview
Dependencies
59
Maintainers
7
Versions
97
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 3.0.1 to 3.1.0-next.1

150

dist/CallHistory/CallHistory.js
"use strict";
var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
var _Object$keys = require("@babel/runtime-corejs2/core-js/object/keys");
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");

@@ -11,2 +16,3 @@ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");

var _values = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/values"));
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));

@@ -29,2 +35,4 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));

var _impl = require("../Events/impl");
function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }

@@ -79,2 +87,20 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } /* eslint-disable dot-notation */ /* eslint-disable no-underscore-dangle */

}());
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleUserReadSessionEvents", /*#__PURE__*/function () {
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(event) {
return _regenerator.default.wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
if (event && event.data.userReadSessions.userReadSessions) {
_this.emit(_types2.COMMON_EVENT_KEYS.CALL_HISTORY_USER_VIEWED_SESSIONS, event);
}
case 1:
case "end":
return _context2.stop();
}
}, _callee2);
}));
return function (_x2) {
return _ref2.apply(this, arguments);
};
}());
_this.sdkConnector = _SDKConnector.default;

@@ -101,3 +127,3 @@ if (!_this.sdkConnector.getWebex()) {

value: (function () {
var _getCallHistoryData = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
var _getCallHistoryData = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
var days,

@@ -115,10 +141,10 @@ limit,

errorStatus,
_args2 = arguments;
return _regenerator.default.wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
_args3 = arguments;
return _regenerator.default.wrap(function _callee3$(_context3) {
while (1) switch (_context3.prev = _context3.next) {
case 0:
days = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : _constants.NUMBER_OF_DAYS;
limit = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : _constants.LIMIT;
sort = _args2.length > 2 && _args2[2] !== undefined ? _args2[2] : _types.SORT.DEFAULT;
sortBy = _args2.length > 3 && _args2[3] !== undefined ? _args2[3] : _types.SORT_BY.DEFAULT;
days = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : _constants.NUMBER_OF_DAYS;
limit = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : _constants.LIMIT;
sort = _args3.length > 2 && _args3[2] !== undefined ? _args3[2] : _types.SORT.DEFAULT;
sortBy = _args3.length > 3 && _args3[3] !== undefined ? _args3[3] : _types.SORT_BY.DEFAULT;
/*

@@ -138,4 +164,4 @@ 1. Mandatory field for Janus API - fromDate

url = "".concat(this.janusUrl, "/").concat(_constants.HISTORY, "/").concat(_constants2.USER_SESSIONS).concat(_constants.FROM_DATE, "=").concat(this.fromDate, "&limit=").concat(limit, "&includeNewSessionTypes=true&sort=").concat(sortParam);
_context2.prev = 14;
_context2.next = 17;
_context3.prev = 14;
_context3.next = 17;
return this.webex.request({

@@ -147,3 +173,3 @@ uri: "".concat(url),

case 17:
janusResponse = _context2.sent;
janusResponse = _context3.sent;
this.userSessions = janusResponse.body;

@@ -168,14 +194,14 @@ if (sortByParam === _types.SORT_BY.START_TIME) {

};
return _context2.abrupt("return", responseDetails);
return _context3.abrupt("return", responseDetails);
case 24:
_context2.prev = 24;
_context2.t0 = _context2["catch"](14);
errorInfo = _context2.t0;
_context3.prev = 24;
_context3.t0 = _context3["catch"](14);
errorInfo = _context3.t0;
errorStatus = (0, _Utils.serviceErrorCodeHandler)(errorInfo, this.loggerContext);
return _context2.abrupt("return", errorStatus);
return _context3.abrupt("return", errorStatus);
case 29:
case "end":
return _context2.stop();
return _context3.stop();
}
}, _callee2, this, [[14, 24]]);
}, _callee3, this, [[14, 24]]);
}));

@@ -186,2 +212,89 @@ function getCallHistoryData() {

return getCallHistoryData;
}()
/**
* Function to update the missed call status in the call history using sessionId and time.
* @param endTimeSessionIds - An array of objects containing endTime and sessionId of the missed call history records
* @returns {Promise} Resolves to an object of type {@link UpdateMissedCallsResponse}.Response details with success or error status.
*/
)
}, {
key: "updateMissedCalls",
value: (function () {
var _updateMissedCalls = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(endTimeSessionIds) {
var loggerContext, santizedSessionIds, requestBody, updateMissedCallContentUrl, response, data, responseDetails, errorInfo, errorStatus;
return _regenerator.default.wrap(function _callee4$(_context4) {
while (1) switch (_context4.prev = _context4.next) {
case 0:
loggerContext = {
file: _constants.CALL_HISTORY_FILE,
method: 'updateMissedCalls'
}; // Convert endTime to milliseconds for each session
santizedSessionIds = endTimeSessionIds.map(function (session) {
return _objectSpread(_objectSpread({}, session), {}, {
endTime: new Date(session.endTime).getTime()
});
});
requestBody = {
endTimeSessionIds: santizedSessionIds
};
_context4.prev = 3;
updateMissedCallContentUrl = "".concat(this.janusUrl, "/").concat(_constants.HISTORY, "/").concat(_constants2.USER_SESSIONS, "/").concat(_constants.UPDATE_MISSED_CALLS_ENDPOINT); // Make a POST request to update missed calls
_context4.t0 = fetch;
_context4.t1 = updateMissedCallContentUrl;
_context4.t2 = _types.HTTP_METHODS.POST;
_context4.t3 = _defineProperty2.default;
_context4.t4 = (0, _defineProperty2.default)({}, _constants.CONTENT_TYPE, _constants.APPLICATION_JSON);
_context4.next = 12;
return this.webex.credentials.getUserToken();
case 12:
_context4.t5 = _context4.sent;
_context4.t6 = (0, _context4.t3)(_context4.t4, "Authorization", _context4.t5);
_context4.t7 = (0, _stringify.default)(requestBody);
_context4.t8 = {
method: _context4.t2,
headers: _context4.t6,
body: _context4.t7
};
_context4.next = 18;
return (0, _context4.t0)(_context4.t1, _context4.t8);
case 18:
response = _context4.sent;
if (response.ok) {
_context4.next = 21;
break;
}
throw new Error("".concat(response.status));
case 21:
_context4.next = 23;
return response.json();
case 23:
data = _context4.sent;
_Logger.default.info("Missed calls are succesfully read by the user", loggerContext);
responseDetails = {
statusCode: data.statusCode,
data: {
readStatusMessage: _constants.SET_READ_STATE_SUCCESS_MESSAGE
},
message: _constants2.SUCCESS_MESSAGE
};
return _context4.abrupt("return", responseDetails);
case 29:
_context4.prev = 29;
_context4.t9 = _context4["catch"](3);
// Catch the 401 error from try block, return the error object to user
errorInfo = {
statusCode: _context4.t9 instanceof Error ? Number(_context4.t9.message) : ''
};
errorStatus = (0, _Utils.serviceErrorCodeHandler)(errorInfo, loggerContext);
return _context4.abrupt("return", errorStatus);
case 34:
case "end":
return _context4.stop();
}
}, _callee4, this, [[3, 29]]);
}));
function updateMissedCalls(_x3) {
return _updateMissedCalls.apply(this, arguments);
}
return updateMissedCalls;
}())

@@ -197,2 +310,3 @@ }, {

this.sdkConnector.registerListener(_types2.MOBIUS_EVENT_KEYS.CALL_SESSION_EVENT_LEGACY, this.handleSessionEvents);
this.sdkConnector.registerListener(_types2.MOBIUS_EVENT_KEYS.CALL_SESSION_EVENT_VIEWED, this.handleUserReadSessionEvents);
}

@@ -199,0 +313,0 @@ }]);

"use strict";
var _typeof = require("@babel/runtime-corejs2/helpers/typeof");
var _Object$keys = require("@babel/runtime-corejs2/core-js/object/keys");
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
var _WeakMap = require("@babel/runtime-corejs2/core-js/weak-map");
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));

@@ -12,7 +23,10 @@ var _types = require("../Logger/types");

var _types3 = require("../Events/types");
/* eslint-disable @typescript-eslint/no-unused-vars */
/* eslint-disable dot-notation */
/* eslint-disable @typescript-eslint/no-shadow */
var _constants = require("./constants");
var utils = _interopRequireWildcard(require("../common/Utils"));
function _getRequireWildcardCache(e) { if ("function" != typeof _WeakMap) return null; var r = new _WeakMap(), t = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? _Object$getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? _Object$defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; } /* eslint-disable @typescript-eslint/no-unused-vars */ /* eslint-disable dot-notation */ /* eslint-disable @typescript-eslint/no-shadow */
var webex = (0, _testUtil.getTestUtilsWebex)();
var serviceErrorCodeHandlerSpy;
describe('Call history tests', function () {

@@ -141,4 +155,200 @@ var callHistory;

});
it('verify the user viewed session event for missed calls update', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {
return _regenerator.default.wrap(function _callee5$(_context5) {
while (1) switch (_context5.prev = _context5.next) {
case 0:
_context5.next = 2;
return new _promise.default(function (resolve) {
callHistory.on(_types3.COMMON_EVENT_KEYS.CALL_HISTORY_USER_VIEWED_SESSIONS, function (event) {
expect(event.data).toEqual(_callHistoryFixtures.MOCK_SESSION_EVENT_VIEWED.data);
resolve();
});
expect(mockOn.mock.calls[2][0]).toEqual(_types3.MOBIUS_EVENT_KEYS.CALL_SESSION_EVENT_VIEWED);
var callSessionCallback = mockOn.mock.calls[2][1];
callSessionCallback(_callHistoryFixtures.MOCK_SESSION_EVENT_VIEWED);
});
case 2:
case "end":
return _context5.stop();
}
}, _callee5);
})));
});
describe('Update missed calls test', function () {
var methodDetails = {
file: _constants.CALL_HISTORY_FILE,
method: 'updateMissedCalls'
};
afterEach(function () {
jest.clearAllMocks();
});
beforeEach( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {
return _regenerator.default.wrap(function _callee6$(_context6) {
while (1) switch (_context6.prev = _context6.next) {
case 0:
serviceErrorCodeHandlerSpy = jest.spyOn(utils, 'serviceErrorCodeHandler');
global.fetch = jest.fn(function () {
return _promise.default.resolve({
status: 200,
ok: true,
json: function json() {
return _promise.default.resolve(_callHistoryFixtures.MOCK_UPDATE_MISSED_CALL_RESPONSE);
}
});
});
case 2:
case "end":
return _context6.stop();
}
}, _callee6);
})));
it('successfully updates missed calls', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() {
var endTimeSessionIds, response, convertedEndTimeSessionIds;
return _regenerator.default.wrap(function _callee7$(_context7) {
while (1) switch (_context7.prev = _context7.next) {
case 0:
endTimeSessionIds = [{
endTime: '1234568',
sessionId: '123'
}];
_context7.next = 3;
return callHistory.updateMissedCalls(endTimeSessionIds);
case 3:
response = _context7.sent;
convertedEndTimeSessionIds = endTimeSessionIds.map(function (session) {
return _objectSpread(_objectSpread({}, session), {}, {
endTime: new Date(session.endTime).getTime()
});
});
expect(response.statusCode).toEqual(200);
expect(response).toEqual(_callHistoryFixtures.MOCK_UPDATE_MISSED_CALL_RESPONSE);
_context7.t0 = expect(global.fetch);
_context7.t1 = _callHistoryFixtures.janusSetReadStateUrl;
_context7.t2 = _types2.HTTP_METHODS.POST;
_context7.t3 = _defineProperty2.default;
_context7.t4 = (0, _defineProperty2.default)({}, _constants.CONTENT_TYPE, _constants.APPLICATION_JSON);
_context7.next = 14;
return webex.credentials.getUserToken();
case 14:
_context7.t5 = _context7.sent;
_context7.t6 = (0, _context7.t3)(_context7.t4, "Authorization", _context7.t5);
_context7.t7 = (0, _stringify.default)({
endTimeSessionIds: convertedEndTimeSessionIds
});
_context7.t8 = {
method: _context7.t2,
headers: _context7.t6,
body: _context7.t7
};
_context7.t0.toBeCalledOnceWith.call(_context7.t0, _context7.t1, _context7.t8);
case 19:
case "end":
return _context7.stop();
}
}, _callee7);
})));
it('Error: updateMissedCalls throw 400 error', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8() {
var endTimeSessionIds, response, convertedEndTimeSessionIds;
return _regenerator.default.wrap(function _callee8$(_context8) {
while (1) switch (_context8.prev = _context8.next) {
case 0:
endTimeSessionIds = [];
global.fetch = jest.fn(function () {
return _promise.default.resolve({
status: 400,
ok: false
});
});
_context8.next = 4;
return callHistory.updateMissedCalls(endTimeSessionIds);
case 4:
response = _context8.sent;
convertedEndTimeSessionIds = endTimeSessionIds.map(function (session) {
return _objectSpread(_objectSpread({}, session), {}, {
endTime: new Date(session.endTime).getTime()
});
});
expect(response).toStrictEqual(_callHistoryFixtures.ERROR_DETAILS_400);
expect(response.statusCode).toBe(400);
_context8.t0 = expect(global.fetch);
_context8.t1 = _callHistoryFixtures.janusSetReadStateUrl;
_context8.t2 = _types2.HTTP_METHODS.POST;
_context8.t3 = _defineProperty2.default;
_context8.t4 = (0, _defineProperty2.default)({}, _constants.CONTENT_TYPE, _constants.APPLICATION_JSON);
_context8.next = 15;
return webex.credentials.getUserToken();
case 15:
_context8.t5 = _context8.sent;
_context8.t6 = (0, _context8.t3)(_context8.t4, "Authorization", _context8.t5);
_context8.t7 = (0, _stringify.default)({
endTimeSessionIds: convertedEndTimeSessionIds
});
_context8.t8 = {
method: _context8.t2,
headers: _context8.t6,
body: _context8.t7
};
_context8.t0.toBeCalledOnceWith.call(_context8.t0, _context8.t1, _context8.t8);
expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith({
statusCode: 400
}, methodDetails);
case 21:
case "end":
return _context8.stop();
}
}, _callee8);
})));
it('Error: updateMissedCalls throw 401 error', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9() {
var endTimeSessionIds, response, convertedEndTimeSessionIds;
return _regenerator.default.wrap(function _callee9$(_context9) {
while (1) switch (_context9.prev = _context9.next) {
case 0:
endTimeSessionIds = [];
global.fetch = jest.fn(function () {
return _promise.default.resolve({
status: 401,
ok: false
});
});
_context9.next = 4;
return callHistory.updateMissedCalls(endTimeSessionIds);
case 4:
response = _context9.sent;
convertedEndTimeSessionIds = endTimeSessionIds.map(function (session) {
return _objectSpread(_objectSpread({}, session), {}, {
endTime: new Date(session.endTime).getTime()
});
});
expect(response).toStrictEqual(_callHistoryFixtures.ERROR_DETAILS_401);
expect(response.statusCode).toBe(401);
_context9.t0 = expect(global.fetch);
_context9.t1 = _callHistoryFixtures.janusSetReadStateUrl;
_context9.t2 = _types2.HTTP_METHODS.POST;
_context9.t3 = _defineProperty2.default;
_context9.t4 = (0, _defineProperty2.default)({}, _constants.CONTENT_TYPE, _constants.APPLICATION_JSON);
_context9.next = 15;
return webex.credentials.getUserToken();
case 15:
_context9.t5 = _context9.sent;
_context9.t6 = (0, _context9.t3)(_context9.t4, "Authorization", _context9.t5);
_context9.t7 = (0, _stringify.default)({
endTimeSessionIds: convertedEndTimeSessionIds
});
_context9.t8 = {
method: _context9.t2,
headers: _context9.t6,
body: _context9.t7
};
_context9.t0.toBeCalledOnceWith.call(_context9.t0, _context9.t1, _context9.t8);
expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith({
statusCode: 401
}, methodDetails);
case 21:
case "end":
return _context9.stop();
}
}, _callee9);
})));
});
});
//# sourceMappingURL=CallHistory.test.js.map

@@ -7,3 +7,3 @@ "use strict";

});
exports.sortedCallHistory = exports.mockCallHistoryBody = exports.MOCK_SESSION_EVENT_LEGACY = exports.MOCK_SESSION_EVENT = void 0;
exports.sortedCallHistory = exports.mockCallHistoryBody = exports.janusSetReadStateUrl = exports.MOCK_UPDATE_MISSED_CALL_RESPONSE = exports.MOCK_SESSION_EVENT_VIEWED = exports.MOCK_SESSION_EVENT_LEGACY = exports.MOCK_SESSION_EVENT = exports.ERROR_DETAILS_401 = exports.ERROR_DETAILS_400 = void 0;
var _types = require("../Events/types");

@@ -343,2 +343,5 @@ var sortedCallHistory = exports.sortedCallHistory = {

};
var SPARK_CALL_VIEWED_SESSION = {
sessionId: '2ce4b9e0-7ee7-12a1-4a94-df524443b520'
};
var MOCK_SESSION_EVENT = exports.MOCK_SESSION_EVENT = {

@@ -368,2 +371,36 @@ id: 'id',

};
var MOCK_SESSION_EVENT_VIEWED = exports.MOCK_SESSION_EVENT_VIEWED = {
id: 'id',
data: {
userReadSessions: {
userReadSessions: [SPARK_CALL_VIEWED_SESSION],
statusCode: 0
},
eventType: _types.MOBIUS_EVENT_KEYS.CALL_SESSION_EVENT_VIEWED
},
timestamp: 12345,
trackingId: 'tracking-id'
};
var MOCK_UPDATE_MISSED_CALL_RESPONSE = exports.MOCK_UPDATE_MISSED_CALL_RESPONSE = {
statusCode: 200,
data: {
readStatusMessage: 'Missed calls are read by the user.'
},
message: 'SUCCESS'
};
var janusSetReadStateUrl = exports.janusSetReadStateUrl = 'https://janus-intb.ciscospark.com/janus/api/v1/history/userSessions/setReadState';
var ERROR_DETAILS_401 = exports.ERROR_DETAILS_401 = {
statusCode: 401,
data: {
error: 'User is unauthorised, possible token expiry'
},
message: 'FAILURE'
};
var ERROR_DETAILS_400 = exports.ERROR_DETAILS_400 = {
statusCode: 400,
data: {
error: '400 Bad request'
},
message: 'FAILURE'
};
//# sourceMappingURL=callHistoryFixtures.js.map

@@ -7,4 +7,6 @@ "use strict";

});
exports.USER_SESSIONS = exports.SUCCESS_MESSAGE = exports.STATUS_CODE = exports.RESPONSE_MESSAGE = exports.NUMBER_OF_DAYS = exports.LIMIT = exports.HISTORY = exports.FROM_DATE = exports.CALL_HISTORY_FILE = void 0;
exports.USER_SESSIONS = exports.UPDATE_MISSED_CALLS_ENDPOINT = exports.SUCCESS_MESSAGE = exports.STATUS_CODE = exports.SET_READ_STATE_SUCCESS_MESSAGE = exports.RESPONSE_MESSAGE = exports.NUMBER_OF_DAYS = exports.LIMIT = exports.HISTORY = exports.FROM_DATE = exports.CONTENT_TYPE = exports.CALL_HISTORY_FILE = exports.APPLICATION_JSON = void 0;
var APPLICATION_JSON = exports.APPLICATION_JSON = 'application/json';
var CALL_HISTORY_FILE = exports.CALL_HISTORY_FILE = 'CallHistory';
var CONTENT_TYPE = exports.CONTENT_TYPE = 'Content-Type';
var FROM_DATE = exports.FROM_DATE = '?from';

@@ -15,2 +17,4 @@ var HISTORY = exports.HISTORY = 'history';

var RESPONSE_MESSAGE = exports.RESPONSE_MESSAGE = 'responseMessage';
var UPDATE_MISSED_CALLS_ENDPOINT = exports.UPDATE_MISSED_CALLS_ENDPOINT = 'setReadState';
var SET_READ_STATE_SUCCESS_MESSAGE = exports.SET_READ_STATE_SUCCESS_MESSAGE = 'Missed calls are read by the user.';
var SUCCESS_MESSAGE = exports.SUCCESS_MESSAGE = 'SUCCESS';

@@ -17,0 +21,0 @@ var STATUS_CODE = exports.STATUS_CODE = 'statusCode';

4

dist/CallingClient/constants.js

@@ -7,3 +7,4 @@ "use strict";

});
exports.WEB_AGENT = exports.WEBEX_WEB_CLIENT = exports.WEBEX = exports.VERSION = exports.VALID_PHONE = exports.UTILS_FILE = exports.URL_ENDPOINT = exports.TYPE = exports.TRANSPORT = exports.TRANSFER_ENDPOINT = exports.TOTAL_SAMPLES_DURATION = exports.TOTAL_ROUND_TRIP_TIME = exports.TIMESTAMP = exports.TARGET_BIT_RATE = exports.SUPPLEMENTARY_SERVICES_TIMEOUT = exports.SPARK_USER_AGENT = exports.SELECTED_CANDIDATE_PAIR_ID = exports.SEC_TO_MSEC_MFACTOR = exports.SCIM_USER_FILTER = exports.SCIM_ENDPOINT_RESOURCE = exports.RTP_TX_STAT = exports.RTP_RX_STAT = exports.RTC_ICE_CANDIDATE_PAIR = exports.RTC_ICE_CANDIDATE = exports.RTC_CODEC = exports.ROUND_TRIP_TIME_MEASUREMENTS = exports.RESUME_ENDPOINT = exports.REPO_NAME = exports.REMOTE_INBOUND_RTP = exports.REG_TRY_BACKUP_TIMER_VAL_IN_SEC = exports.REG_RANDOM_T_FACTOR_UPPER_LIMIT = exports.REG_FAILBACK_429_MAX_RETRIES = exports.REGISTRATION_FILE = exports.REGISTER_UTIL = exports.REGISTER_RETRY_TIMEOUT = exports.RECONNECT_UTIL = exports.PACKETS_SENT = exports.PACKETS_RECEIVED = exports.PACKETS_LOST = exports.PACKETS_DISCARDED = exports.OUTBOUND_RTP = exports.OUTBOUND_CODEC_MATCH = exports.NETWORK_TYPE = exports.NETWORK_FLAP_TIMEOUT = exports.NETWORK_CHANGE_DETECTION_UTIL = exports.MOBIUS_US_PROD = exports.MOBIUS_US_INT = exports.MOBIUS_EU_PROD = exports.MOBIUS_EU_INT = exports.MINUTES_TO_SEC_MFACTOR = exports.MIME_TYPE = exports.METRIC_FILE = exports.MEDIA_SOURCE = exports.MEDIA_ID = exports.MEDIA_ENDPOINT_RESOURCE = exports.LOCAL_CANDIDATE_ID = exports.LINE_FILE = exports.KEEPALIVE_UTIL = exports.JITTER_BUFFER_EMITTED_COUNT = exports.JITTER_BUFFER_DELAY = exports.IP_ENDPOINT = exports.INITIAL_SEQ_NUMBER = exports.INBOUND_RTP = exports.INBOUND_CODEC_MATCH = exports.IDENTITY_ENDPOINT_RESOURCE = exports.IDENTITY_BROKER = exports.HOLD_ENDPOINT = exports.GET_MOBIUS_SERVERS_UTIL = exports.FETCH_NAME = exports.FAILOVER_UTIL = exports.FAILBACK_UTIL = exports.FAILBACK_429_RETRY_UTIL = exports.DUMMY_MOBIUS_URL = exports.DUMMY_METRICS = exports.DISCOVERY_URL = exports.DEVICES_ENDPOINT_RESOURCE = exports.DEFAULT_SESSION_TIMER = exports.DEFAULT_REHOMING_INTERVAL_MIN = exports.DEFAULT_REHOMING_INTERVAL_MAX = exports.DEFAULT_LOCAL_CALL_ID = exports.DEFAULT_KEEPALIVE_INTERVAL = exports.CRLF = exports.CODEC_ID = exports.CISCO_DEVICE_URL = exports.CALL_TRANSFER_SERVICE = exports.CALL_STATUS_RESOURCE = exports.CALL_MANAGER_FILE = exports.CALL_HOLD_SERVICE = exports.CALL_FILE = exports.CALL_ENDPOINT_RESOURCE = exports.CALLS_ENDPOINT_RESOURCE = exports.CALLS_CLEARED_HANDLER_UTIL = exports.CALLING_USER_AGENT = exports.CALLING_CLIENT_FILE = exports.CALLER_ID_FILE = exports.BYTES_SENT = exports.BYTES_RECEIVED = exports.BASE_REG_TIMER_MFACTOR = exports.BASE_REG_RETRY_TIMER_VAL_IN_SEC = exports.API_V1 = void 0;
exports.WEBEX_WEB_CLIENT = exports.WEBEX = exports.VERSION = exports.VALID_PHONE = exports.UTILS_FILE = exports.URL_ENDPOINT = exports.TYPE = exports.TRANSPORT = exports.TRANSFER_ENDPOINT = exports.TOTAL_SAMPLES_DURATION = exports.TOTAL_ROUND_TRIP_TIME = exports.TIMESTAMP = exports.TARGET_BIT_RATE = exports.SUPPLEMENTARY_SERVICES_TIMEOUT = exports.SPARK_USER_AGENT = exports.SELECTED_CANDIDATE_PAIR_ID = exports.SEC_TO_MSEC_MFACTOR = exports.SCIM_USER_FILTER = exports.SCIM_ENDPOINT_RESOURCE = exports.RTP_TX_STAT = exports.RTP_RX_STAT = exports.RTC_ICE_CANDIDATE_PAIR = exports.RTC_ICE_CANDIDATE = exports.RTC_CODEC = exports.ROUND_TRIP_TIME_MEASUREMENTS = exports.RESUME_ENDPOINT = exports.REPO_NAME = exports.REMOTE_INBOUND_RTP = exports.REG_TRY_BACKUP_TIMER_VAL_IN_SEC = exports.REG_RANDOM_T_FACTOR_UPPER_LIMIT = exports.REG_FAILBACK_429_MAX_RETRIES = exports.REGISTRATION_FILE = exports.REGISTER_UTIL = exports.REGISTER_RETRY_TIMEOUT = exports.RECONNECT_UTIL = exports.PACKETS_SENT = exports.PACKETS_RECEIVED = exports.PACKETS_LOST = exports.PACKETS_DISCARDED = exports.OUTBOUND_RTP = exports.OUTBOUND_CODEC_MATCH = exports.NOISE_REDUCTION_EFFECT = exports.NETWORK_TYPE = exports.NETWORK_FLAP_TIMEOUT = exports.NETWORK_CHANGE_DETECTION_UTIL = exports.MOBIUS_US_PROD = exports.MOBIUS_US_INT = exports.MOBIUS_EU_PROD = exports.MOBIUS_EU_INT = exports.MINUTES_TO_SEC_MFACTOR = exports.MIME_TYPE = exports.METRIC_FILE = exports.MEDIA_SOURCE = exports.MEDIA_ID = exports.MEDIA_ENDPOINT_RESOURCE = exports.LOCAL_CANDIDATE_ID = exports.LINE_FILE = exports.KEEPALIVE_UTIL = exports.JITTER_BUFFER_EMITTED_COUNT = exports.JITTER_BUFFER_DELAY = exports.IP_ENDPOINT = exports.INITIAL_SEQ_NUMBER = exports.INBOUND_RTP = exports.INBOUND_CODEC_MATCH = exports.IDENTITY_ENDPOINT_RESOURCE = exports.IDENTITY_BROKER = exports.HOLD_ENDPOINT = exports.GET_MOBIUS_SERVERS_UTIL = exports.FETCH_NAME = exports.FAILOVER_UTIL = exports.FAILBACK_UTIL = exports.FAILBACK_429_RETRY_UTIL = exports.DUMMY_MOBIUS_URL = exports.DUMMY_METRICS = exports.DISCOVERY_URL = exports.DEVICES_ENDPOINT_RESOURCE = exports.DEFAULT_SESSION_TIMER = exports.DEFAULT_REHOMING_INTERVAL_MIN = exports.DEFAULT_REHOMING_INTERVAL_MAX = exports.DEFAULT_LOCAL_CALL_ID = exports.DEFAULT_KEEPALIVE_INTERVAL = exports.CRLF = exports.CODEC_ID = exports.CISCO_DEVICE_URL = exports.CALL_TRANSFER_SERVICE = exports.CALL_STATUS_RESOURCE = exports.CALL_MANAGER_FILE = exports.CALL_HOLD_SERVICE = exports.CALL_FILE = exports.CALL_ENDPOINT_RESOURCE = exports.CALLS_ENDPOINT_RESOURCE = exports.CALLS_CLEARED_HANDLER_UTIL = exports.CALLING_USER_AGENT = exports.CALLING_CLIENT_FILE = exports.CALLER_ID_FILE = exports.BYTES_SENT = exports.BYTES_RECEIVED = exports.BASE_REG_TIMER_MFACTOR = exports.BASE_REG_RETRY_TIMER_VAL_IN_SEC = exports.API_V1 = void 0;
exports.WEB_AGENT = void 0;
var VERSION = exports.VERSION = 'beta';

@@ -131,2 +132,3 @@ var REPO_NAME = exports.REPO_NAME = 'webex-calling';

var RECONNECT_UTIL = exports.RECONNECT_UTIL = 'reconnectOnFailure';
var NOISE_REDUCTION_EFFECT = exports.NOISE_REDUCTION_EFFECT = 'noise-reduction-effect';
var MOBIUS_US_PROD = exports.MOBIUS_US_PROD = 'mobius-us-east-1.prod.infra.webex.com';

@@ -133,0 +135,0 @@ var MOBIUS_EU_PROD = exports.MOBIUS_EU_PROD = 'mobius-eu-central-1.prod.infra.webex.com';

@@ -15,2 +15,3 @@ "use strict";

COMMON_EVENT_KEYS["CALL_HISTORY_USER_SESSION_INFO"] = "callHistory:user_recent_sessions";
COMMON_EVENT_KEYS["CALL_HISTORY_USER_VIEWED_SESSIONS"] = "callHistory:user_viewed_sessions";
return COMMON_EVENT_KEYS;

@@ -74,2 +75,3 @@ }({});

MOBIUS_EVENT_KEYS["CALL_SESSION_EVENT_LEGACY"] = "event:janus.user_sessions";
MOBIUS_EVENT_KEYS["CALL_SESSION_EVENT_VIEWED"] = "event:janus.user_viewed_sessions";
return MOBIUS_EVENT_KEYS;

@@ -76,0 +78,0 @@ }({});

@@ -313,2 +313,32 @@ "use strict";

}
}, {
key: "submitBNRMetric",
value: function submitBNRMetric(name, type, callId, correlationId) {
var data;
if (name === _types.METRIC_EVENT.BNR_ENABLED || name === _types.METRIC_EVENT.BNR_DISABLED) {
var _this$deviceInfo23, _this$deviceInfo23$de, _this$deviceInfo24, _this$deviceInfo24$de, _this$deviceInfo25, _this$deviceInfo25$de;
data = {
tags: {
device_id: (_this$deviceInfo23 = this.deviceInfo) === null || _this$deviceInfo23 === void 0 ? void 0 : (_this$deviceInfo23$de = _this$deviceInfo23.device) === null || _this$deviceInfo23$de === void 0 ? void 0 : _this$deviceInfo23$de.deviceId,
service_indicator: this.serviceIndicator
},
fields: {
device_url: (_this$deviceInfo24 = this.deviceInfo) === null || _this$deviceInfo24 === void 0 ? void 0 : (_this$deviceInfo24$de = _this$deviceInfo24.device) === null || _this$deviceInfo24$de === void 0 ? void 0 : _this$deviceInfo24$de.clientDeviceUri,
mobius_url: (_this$deviceInfo25 = this.deviceInfo) === null || _this$deviceInfo25 === void 0 ? void 0 : (_this$deviceInfo25$de = _this$deviceInfo25.device) === null || _this$deviceInfo25$de === void 0 ? void 0 : _this$deviceInfo25$de.uri,
calling_sdk_version: _constants.VERSION,
call_id: callId,
correlation_id: correlationId
},
type: type
};
} else {
_Logger.default.warn('Invalid metric name received. Rejecting request to submit metric.', {
file: _constants.METRIC_FILE,
method: this.submitBNRMetric.name
});
}
if (data) {
this.webex.internal.metrics.submitClientMetrics(name, data);
}
}
}]);

@@ -315,0 +345,0 @@ return MetricManager;

@@ -60,3 +60,3 @@ "use strict";

};
metricManager.submitRegistrationMetric(_types.METRIC_EVENT.REGISTRATION, _types.REG_ACTION.REGISTER, _types.METRIC_TYPE.BEHAVIORAL);
metricManager.submitRegistrationMetric(_types.METRIC_EVENT.REGISTRATION, _types.REG_ACTION.REGISTER, _types.METRIC_TYPE.BEHAVIORAL, undefined);
expect(mockSubmitClientMetric).toBeCalledOnceWith(_types.METRIC_EVENT.REGISTRATION, expectedData);

@@ -92,3 +92,3 @@ });

var logSpy = jest.spyOn(_Logger.default, 'warn');
metricManager.submitRegistrationMetric('invalidMetricName', _types.REG_ACTION.REGISTER, _types.METRIC_TYPE.OPERATIONAL);
metricManager.submitRegistrationMetric('invalidMetricName', _types.REG_ACTION.REGISTER, _types.METRIC_TYPE.OPERATIONAL, undefined);
expect(mockSubmitClientMetric).not.toBeCalled();

@@ -226,2 +226,52 @@ expect(logSpy).toBeCalledOnceWith('Invalid metric name received. Rejecting request to submit metric.', {

});
describe('BNR metric tests', function () {
beforeAll(function () {
metricManager.setDeviceInfo(mockDeviceInfo);
});
it('submit bnr enabled metric', function () {
var expectedData = {
tags: {
device_id: mockDeviceInfo.device.deviceId,
service_indicator: _types3.ServiceIndicator.CALLING
},
fields: {
device_url: mockDeviceInfo.device.clientDeviceUri,
mobius_url: mockDeviceInfo.device.uri,
calling_sdk_version: _constants.VERSION,
call_id: mockCallId,
correlation_id: mockCorrelationId
},
type: _types.METRIC_TYPE.BEHAVIORAL
};
metricManager.submitBNRMetric(_types.METRIC_EVENT.BNR_ENABLED, _types.METRIC_TYPE.BEHAVIORAL, mockCallId, mockCorrelationId);
expect(mockSubmitClientMetric).toBeCalledOnceWith(_types.METRIC_EVENT.BNR_ENABLED, expectedData);
});
it('submit bnr disabled metric', function () {
var expectedData = {
tags: {
device_id: mockDeviceInfo.device.deviceId,
service_indicator: _types3.ServiceIndicator.CALLING
},
fields: {
device_url: mockDeviceInfo.device.clientDeviceUri,
mobius_url: mockDeviceInfo.device.uri,
calling_sdk_version: _constants.VERSION,
call_id: mockCallId,
correlation_id: mockCorrelationId
},
type: _types.METRIC_TYPE.BEHAVIORAL
};
metricManager.submitBNRMetric(_types.METRIC_EVENT.BNR_DISABLED, _types.METRIC_TYPE.BEHAVIORAL, mockCallId, mockCorrelationId);
expect(mockSubmitClientMetric).toBeCalledOnceWith(_types.METRIC_EVENT.BNR_DISABLED, expectedData);
});
it('submit unknown bnr metric', function () {
var logSpy = jest.spyOn(_Logger.default, 'warn');
metricManager.submitBNRMetric('invalidMetricName', _types.METRIC_TYPE.BEHAVIORAL, mockCallId, mockCorrelationId);
expect(mockSubmitClientMetric).not.toBeCalled();
expect(logSpy).toBeCalledOnceWith('Invalid metric name received. Rejecting request to submit metric.', {
file: 'metric',
method: 'submitBNRMetric'
});
});
});
describe('Voicemail metric tests', function () {

@@ -228,0 +278,0 @@ beforeAll(function () {

@@ -14,2 +14,4 @@ "use strict";

var METRIC_EVENT = exports.METRIC_EVENT = /*#__PURE__*/function (METRIC_EVENT) {
METRIC_EVENT["BNR_ENABLED"] = "web-calling-sdk-bnr-enabled";
METRIC_EVENT["BNR_DISABLED"] = "web-calling-sdk-bnr-disabled";
METRIC_EVENT["CALL"] = "web-calling-sdk-callcontrol";

@@ -16,0 +18,0 @@ METRIC_EVENT["CALL_ERROR"] = "web-calling-sdk-callcontrol-error";

@@ -5,3 +5,3 @@ import SDKConnector from '../SDKConnector';

import { serviceErrorCodeHandler } from '../common/Utils';
import { CALL_HISTORY_FILE, FROM_DATE, HISTORY, LIMIT, NUMBER_OF_DAYS } from './constants';
import { APPLICATION_JSON, CALL_HISTORY_FILE, CONTENT_TYPE, FROM_DATE, HISTORY, LIMIT, NUMBER_OF_DAYS, UPDATE_MISSED_CALLS_ENDPOINT, SET_READ_STATE_SUCCESS_MESSAGE, } from './constants';
import { STATUS_CODE, SUCCESS_MESSAGE, USER_SESSIONS } from '../common/constants';

@@ -74,2 +74,46 @@ import { COMMON_EVENT_KEYS, MOBIUS_EVENT_KEYS, } from '../Events/types';

}
async updateMissedCalls(endTimeSessionIds) {
const loggerContext = {
file: CALL_HISTORY_FILE,
method: 'updateMissedCalls',
};
const santizedSessionIds = endTimeSessionIds.map((session) => ({
...session,
endTime: new Date(session.endTime).getTime(),
}));
const requestBody = {
endTimeSessionIds: santizedSessionIds,
};
try {
const updateMissedCallContentUrl = `${this.janusUrl}/${HISTORY}/${USER_SESSIONS}/${UPDATE_MISSED_CALLS_ENDPOINT}`;
const response = await fetch(updateMissedCallContentUrl, {
method: HTTP_METHODS.POST,
headers: {
[CONTENT_TYPE]: APPLICATION_JSON,
Authorization: await this.webex.credentials.getUserToken(),
},
body: JSON.stringify(requestBody),
});
if (!response.ok) {
throw new Error(`${response.status}`);
}
const data = await response.json();
log.info(`Missed calls are succesfully read by the user`, loggerContext);
const responseDetails = {
statusCode: data.statusCode,
data: {
readStatusMessage: SET_READ_STATE_SUCCESS_MESSAGE,
},
message: SUCCESS_MESSAGE,
};
return responseDetails;
}
catch (err) {
const errorInfo = {
statusCode: err instanceof Error ? Number(err.message) : '',
};
const errorStatus = serviceErrorCodeHandler(errorInfo, loggerContext);
return errorStatus;
}
}
handleSessionEvents = async (event) => {

@@ -80,7 +124,13 @@ if (event && event.data.userSessions.userSessions) {

};
handleUserReadSessionEvents = async (event) => {
if (event && event.data.userReadSessions.userReadSessions) {
this.emit(COMMON_EVENT_KEYS.CALL_HISTORY_USER_VIEWED_SESSIONS, event);
}
};
registerSessionsListener() {
this.sdkConnector.registerListener(MOBIUS_EVENT_KEYS.CALL_SESSION_EVENT_INCLUSIVE, this.handleSessionEvents);
this.sdkConnector.registerListener(MOBIUS_EVENT_KEYS.CALL_SESSION_EVENT_LEGACY, this.handleSessionEvents);
this.sdkConnector.registerListener(MOBIUS_EVENT_KEYS.CALL_SESSION_EVENT_VIEWED, this.handleUserReadSessionEvents);
}
}
export const createCallHistoryClient = (webex, logger) => new CallHistory(webex, logger);

@@ -1,2 +0,2 @@

import { Disposition, MOBIUS_EVENT_KEYS, SessionType } from '../Events/types';
import { Disposition, MOBIUS_EVENT_KEYS, SessionType, } from '../Events/types';
export const sortedCallHistory = {

@@ -343,2 +343,5 @@ body: {

};
const SPARK_CALL_VIEWED_SESSION = {
sessionId: '2ce4b9e0-7ee7-12a1-4a94-df524443b520',
};
export const MOCK_SESSION_EVENT = {

@@ -368,1 +371,35 @@ id: 'id',

};
export const MOCK_SESSION_EVENT_VIEWED = {
id: 'id',
data: {
userReadSessions: {
userReadSessions: [SPARK_CALL_VIEWED_SESSION],
statusCode: 0,
},
eventType: MOBIUS_EVENT_KEYS.CALL_SESSION_EVENT_VIEWED,
},
timestamp: 12345,
trackingId: 'tracking-id',
};
export const MOCK_UPDATE_MISSED_CALL_RESPONSE = {
statusCode: 200,
data: {
readStatusMessage: 'Missed calls are read by the user.',
},
message: 'SUCCESS',
};
export const janusSetReadStateUrl = 'https://janus-intb.ciscospark.com/janus/api/v1/history/userSessions/setReadState';
export const ERROR_DETAILS_401 = {
statusCode: 401,
data: {
error: 'User is unauthorised, possible token expiry',
},
message: 'FAILURE',
};
export const ERROR_DETAILS_400 = {
statusCode: 400,
data: {
error: '400 Bad request',
},
message: 'FAILURE',
};

@@ -0,2 +1,4 @@

export const APPLICATION_JSON = 'application/json';
export const CALL_HISTORY_FILE = 'CallHistory';
export const CONTENT_TYPE = 'Content-Type';
export const FROM_DATE = '?from';

@@ -7,4 +9,6 @@ export const HISTORY = 'history';

export const RESPONSE_MESSAGE = 'responseMessage';
export const UPDATE_MISSED_CALLS_ENDPOINT = 'setReadState';
export const SET_READ_STATE_SUCCESS_MESSAGE = 'Missed calls are read by the user.';
export const SUCCESS_MESSAGE = 'SUCCESS';
export const STATUS_CODE = 'statusCode';
export const USER_SESSIONS = 'userSessions';

@@ -123,2 +123,3 @@ export const VERSION = 'beta';

export const RECONNECT_UTIL = 'reconnectOnFailure';
export const NOISE_REDUCTION_EFFECT = 'noise-reduction-effect';
export const MOBIUS_US_PROD = 'mobius-us-east-1.prod.infra.webex.com';

@@ -125,0 +126,0 @@ export const MOBIUS_EU_PROD = 'mobius-eu-central-1.prod.infra.webex.com';

@@ -6,2 +6,3 @@ import { LINE_EVENTS } from '../CallingClient/line/types';

COMMON_EVENT_KEYS["CALL_HISTORY_USER_SESSION_INFO"] = "callHistory:user_recent_sessions";
COMMON_EVENT_KEYS["CALL_HISTORY_USER_VIEWED_SESSIONS"] = "callHistory:user_viewed_sessions";
})(COMMON_EVENT_KEYS || (COMMON_EVENT_KEYS = {}));

@@ -65,2 +66,3 @@ export var LINE_EVENT_KEYS;

MOBIUS_EVENT_KEYS["CALL_SESSION_EVENT_LEGACY"] = "event:janus.user_sessions";
MOBIUS_EVENT_KEYS["CALL_SESSION_EVENT_VIEWED"] = "event:janus.user_viewed_sessions";
})(MOBIUS_EVENT_KEYS || (MOBIUS_EVENT_KEYS = {}));

@@ -67,0 +69,0 @@ export var MEDIA_CONNECTION_EVENT_KEYS;

@@ -225,2 +225,30 @@ import { METRIC_FILE, VERSION } from '../CallingClient/constants';

}
submitBNRMetric(name, type, callId, correlationId) {
let data;
if (name === METRIC_EVENT.BNR_ENABLED || name === METRIC_EVENT.BNR_DISABLED) {
data = {
tags: {
device_id: this.deviceInfo?.device?.deviceId,
service_indicator: this.serviceIndicator,
},
fields: {
device_url: this.deviceInfo?.device?.clientDeviceUri,
mobius_url: this.deviceInfo?.device?.uri,
calling_sdk_version: VERSION,
call_id: callId,
correlation_id: correlationId,
},
type,
};
}
else {
log.warn('Invalid metric name received. Rejecting request to submit metric.', {
file: METRIC_FILE,
method: this.submitBNRMetric.name,
});
}
if (data) {
this.webex.internal.metrics.submitClientMetrics(name, data);
}
}
}

@@ -227,0 +255,0 @@ export const getMetricManager = (webex, indicator) => {

@@ -8,2 +8,4 @@ export var METRIC_TYPE;

(function (METRIC_EVENT) {
METRIC_EVENT["BNR_ENABLED"] = "web-calling-sdk-bnr-enabled";
METRIC_EVENT["BNR_DISABLED"] = "web-calling-sdk-bnr-disabled";
METRIC_EVENT["CALL"] = "web-calling-sdk-callcontrol";

@@ -10,0 +12,0 @@ METRIC_EVENT["CALL_ERROR"] = "web-calling-sdk-callcontrol-error";

import { WebexSDK } from '../SDKConnector/types';
import { SORT, SORT_BY } from '../common/types';
import { ICallHistory, JanusResponseEvent, LoggerInterface } from './types';
import { CallHistoryEventTypes, CallSessionEvent } from '../Events/types';
import { ICallHistory, JanusResponseEvent, LoggerInterface, UpdateMissedCallsResponse } from './types';
import { CallHistoryEventTypes, CallSessionEvent, EndTimeSessionId, CallSessionViewedEvent } from '../Events/types';
import { Eventing } from '../Events/impl';

@@ -15,3 +15,5 @@ export declare class CallHistory extends Eventing<CallHistoryEventTypes> implements ICallHistory {

getCallHistoryData(days?: number, limit?: number, sort?: SORT, sortBy?: SORT_BY): Promise<JanusResponseEvent>;
updateMissedCalls(endTimeSessionIds: EndTimeSessionId[]): Promise<UpdateMissedCallsResponse>;
handleSessionEvents: (event?: CallSessionEvent) => Promise<void>;
handleUserReadSessionEvents: (event?: CallSessionViewedEvent) => Promise<void>;
private registerSessionsListener;

@@ -18,0 +20,0 @@ }

@@ -1,2 +0,3 @@

import { CallSessionEvent } from '../Events/types';
import { CallSessionEvent, CallSessionViewedEvent } from '../Events/types';
import { UpdateMissedCallsResponse } from './types';
export declare const sortedCallHistory: {

@@ -96,2 +97,19 @@ body: {

export declare const MOCK_SESSION_EVENT_LEGACY: CallSessionEvent;
export declare const MOCK_SESSION_EVENT_VIEWED: CallSessionViewedEvent;
export declare const MOCK_UPDATE_MISSED_CALL_RESPONSE: UpdateMissedCallsResponse;
export declare const janusSetReadStateUrl = "https://janus-intb.ciscospark.com/janus/api/v1/history/userSessions/setReadState";
export declare const ERROR_DETAILS_401: {
statusCode: number;
data: {
error: string;
};
message: string;
};
export declare const ERROR_DETAILS_400: {
statusCode: number;
data: {
error: string;
};
message: string;
};
//# sourceMappingURL=callHistoryFixtures.d.ts.map

@@ -0,2 +1,4 @@

export declare const APPLICATION_JSON = "application/json";
export declare const CALL_HISTORY_FILE = "CallHistory";
export declare const CONTENT_TYPE = "Content-Type";
export declare const FROM_DATE = "?from";

@@ -7,2 +9,4 @@ export declare const HISTORY = "history";

export declare const RESPONSE_MESSAGE = "responseMessage";
export declare const UPDATE_MISSED_CALLS_ENDPOINT = "setReadState";
export declare const SET_READ_STATE_SUCCESS_MESSAGE = "Missed calls are read by the user.";
export declare const SUCCESS_MESSAGE = "SUCCESS";

@@ -9,0 +13,0 @@ export declare const STATUS_CODE = "statusCode";

import { Eventing } from '../Events/impl';
import { CallHistoryEventTypes, UserSession } from '../Events/types';
import { CallHistoryEventTypes, EndTimeSessionId, UserSession } from '../Events/types';
import { LOGGER } from '../Logger/types';

@@ -16,5 +16,14 @@ import { SORT, SORT_BY } from '../common/types';

};
export type UpdateMissedCallsResponse = {
statusCode: number;
data: {
readStatusMessage?: string;
error?: string;
};
message: string | null;
};
export interface ICallHistory extends Eventing<CallHistoryEventTypes> {
getCallHistoryData(days: number, limit: number, sort: SORT, sortBy: SORT_BY): Promise<JanusResponseEvent>;
updateMissedCalls(endTimeSessionIds: EndTimeSessionId[]): Promise<UpdateMissedCallsResponse>;
}
//# sourceMappingURL=types.d.ts.map

@@ -39,2 +39,3 @@ import { LocalMicrophoneStream } from '@webex/internal-media-core';

private receivedRoapOKSeq;
private localAudioStream?;
isMuted(): boolean;

@@ -84,3 +85,7 @@ isConnected(): boolean;

private mediaTrackListener;
private outputTrackUpdateListener;
private onEffectEnabled;
private onEffectDisabled;
private registerEffectListener;
private unregisterListeners;
private registerListeners;
private delete;

@@ -87,0 +92,0 @@ private submitCallErrorMetric;

@@ -123,2 +123,3 @@ export declare const VERSION = "beta";

export declare const RECONNECT_UTIL = "reconnectOnFailure";
export declare const NOISE_REDUCTION_EFFECT = "noise-reduction-effect";
export declare const MOBIUS_US_PROD = "mobius-us-east-1.prod.infra.webex.com";

@@ -125,0 +126,0 @@ export declare const MOBIUS_EU_PROD = "mobius-eu-central-1.prod.infra.webex.com";

@@ -7,3 +7,3 @@ import { restoreRegistrationCallBack } from '../CallingClient/registration/types';

import { CALLING_BACKEND, CorrelationId, DecodeType, DisplayInformation, MobiusServers, SORT, ServiceData, WebexRequestPayload } from './types';
import { JanusResponseEvent } from '../CallHistory/types';
import { JanusResponseEvent, UpdateMissedCallsResponse } from '../CallHistory/types';
import { VoicemailResponseEvent, MessageInfo, CallingPartyInfo, FilteredVoicemail } from '../Voicemail/types';

@@ -22,3 +22,3 @@ import { WebexSDK } from '../SDKConnector/types';

export declare function handleCallErrors(emitterCb: CallErrorEmitterCallBack, errorLayer: ERROR_LAYER, retryCb: RetryCallBack, correlationId: CorrelationId, err: WebexRequestPayload, caller: string, file: string): Promise<void>;
export declare function serviceErrorCodeHandler(err: WebexRequestPayload, loggerContext: LogContext): Promise<JanusResponseEvent | VoicemailResponseEvent | CallSettingResponse | ContactResponse>;
export declare function serviceErrorCodeHandler(err: WebexRequestPayload, loggerContext: LogContext): Promise<JanusResponseEvent | VoicemailResponseEvent | CallSettingResponse | ContactResponse | UpdateMissedCallsResponse>;
export declare function parseMediaQualityStatistics(stats: RTCStatsReport): CallRtpStats;

@@ -25,0 +25,0 @@ export declare const waitForMsecs: (msec: number) => Promise<unknown>;

@@ -22,3 +22,3 @@ import { LoggerInterface } from '../Voicemail/types';

createContactGroup(displayName: string, encryptionKeyUrl?: string, groupType?: GroupType): Promise<ContactResponse>;
deleteContactGroup(groupId: string): Promise<import("..").JanusResponseEvent | import("../Voicemail/types").VoicemailResponseEvent | import("..").CallSettingResponse | ContactResponse>;
deleteContactGroup(groupId: string): Promise<import("..").JanusResponseEvent | import("../CallHistory/types").UpdateMissedCallsResponse | import("../Voicemail/types").VoicemailResponseEvent | import("..").CallSettingResponse | ContactResponse>;
createContact(contactInfo: Contact): Promise<ContactResponse>;

@@ -25,0 +25,0 @@ deleteContact(contactId: string): Promise<ContactResponse>;

@@ -8,3 +8,4 @@ import { ILine } from '../api';

CB_VOICEMESSAGE_CONTENT_GET = "call_back_voicemail_content_get",
CALL_HISTORY_USER_SESSION_INFO = "callHistory:user_recent_sessions"
CALL_HISTORY_USER_SESSION_INFO = "callHistory:user_recent_sessions",
CALL_HISTORY_USER_VIEWED_SESSIONS = "callHistory:user_viewed_sessions"
}

@@ -139,3 +140,4 @@ export declare enum LINE_EVENT_KEYS {

CALL_SESSION_EVENT_INCLUSIVE = "event:janus.user_recent_sessions",
CALL_SESSION_EVENT_LEGACY = "event:janus.user_sessions"
CALL_SESSION_EVENT_LEGACY = "event:janus.user_sessions",
CALL_SESSION_EVENT_VIEWED = "event:janus.user_viewed_sessions"
}

@@ -203,2 +205,3 @@ export type CallSessionData = {

[COMMON_EVENT_KEYS.CALL_HISTORY_USER_SESSION_INFO]: (event: CallSessionEvent) => void;
[COMMON_EVENT_KEYS.CALL_HISTORY_USER_VIEWED_SESSIONS]: (event: CallSessionViewedEvent) => void;
};

@@ -314,3 +317,27 @@ type eventType = string;

}
export type UserReadSessions = {
sessionId: string;
};
export type CallSessionViewedData = {
userReadSessions: {
userReadSessions: UserReadSessions[];
statusCode: number;
};
eventType: MOBIUS_EVENT_KEYS.CALL_SESSION_EVENT_VIEWED;
};
export type CallSessionViewedEvent = {
id: string;
data: CallSessionViewedData;
timestamp: number;
trackingId: string;
};
export type EndTimeSessionId = {
endTime: string;
sessionId: string;
};
export type SanitizedEndTimeAndSessionId = {
endTime: number;
sessionId: string;
};
export {};
//# sourceMappingURL=types.d.ts.map

@@ -9,2 +9,4 @@ import { LineError } from '../Errors/catalog/LineError';

export declare enum METRIC_EVENT {
BNR_ENABLED = "web-calling-sdk-bnr-enabled",
BNR_DISABLED = "web-calling-sdk-bnr-disabled",
CALL = "web-calling-sdk-callcontrol",

@@ -40,2 +42,3 @@ CALL_ERROR = "web-calling-sdk-callcontrol-error",

submitRegistrationMetric: (name: METRIC_EVENT, metricAction: REG_ACTION, type: METRIC_TYPE, error: LineError | CallingClientError | undefined) => void;
submitBNRMetric: (name: METRIC_EVENT, type: METRIC_TYPE, callId: CallId, correlationId: CorrelationId) => void;
submitCallMetric: (name: METRIC_EVENT, metricAction: string, type: METRIC_TYPE, callId: CallId, correlationId: CorrelationId, callError?: CallError) => void;

@@ -42,0 +45,0 @@ submitMediaMetric: (name: METRIC_EVENT, metricAction: string, type: METRIC_TYPE, callId: CallId, correlationId: CorrelationId, localSdp?: string, remoteSdp?: string, callError?: CallError) => void;

@@ -15,3 +15,3 @@ import { ISDKConnector, WebexSDK } from '../SDKConnector/types';

private setUcmVoiceMessageBaseURI;
getVoicemailList(offset: number, offsetLimit: number, sort: SORT): Promise<import("..").JanusResponseEvent | VoicemailResponseEvent | import("..").CallSettingResponse | import("..").ContactResponse>;
getVoicemailList(offset: number, offsetLimit: number, sort: SORT): Promise<import("..").JanusResponseEvent | import("../CallHistory/types").UpdateMissedCallsResponse | VoicemailResponseEvent | import("..").CallSettingResponse | import("..").ContactResponse>;
getVoicemailContent(messageId: string): Promise<VoicemailResponseEvent>;

@@ -18,0 +18,0 @@ getVoicemailSummary(): Promise<VoicemailResponseEvent | null>;

@@ -15,3 +15,3 @@ import { ISDKConnector, WebexSDK } from '../SDKConnector/types';

private setXsiVoiceMessageURI;
getVoicemailList(offset: number, offsetLimit: number, sort: SORT, refresh?: boolean): Promise<import("..").JanusResponseEvent | VoicemailResponseEvent | import("..").CallSettingResponse | import("..").ContactResponse>;
getVoicemailList(offset: number, offsetLimit: number, sort: SORT, refresh?: boolean): Promise<import("..").JanusResponseEvent | import("../CallHistory/types").UpdateMissedCallsResponse | VoicemailResponseEvent | import("..").CallSettingResponse | import("..").ContactResponse>;
getVoicemailContent(messageId: string): Promise<VoicemailResponseEvent>;

@@ -18,0 +18,0 @@ getVoicemailSummary(): Promise<VoicemailResponseEvent>;

@@ -40,4 +40,4 @@ {

"@types/platform": "1.3.4",
"@webex/internal-media-core": "2.0.0",
"@webex/media-helpers": "3.0.1",
"@webex/internal-media-core": "2.5.0",
"@webex/media-helpers": "3.1.0-next.1",
"async-mutex": "0.4.0",

@@ -133,3 +133,3 @@ "buffer": "6.0.3",

},
"version": "3.0.1"
"version": "3.1.0-next.1"
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc