UNPKG

sinch-rtc

Version:

RTC JavaScript/Web SDK

180 lines 6.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Message = exports.HeaderBooleanValue = void 0; const TerminationCause_1 = require("../session/TerminationCause"); const SinchError_1 = require("../SinchError"); const models_1 = require("./models"); var HeaderBooleanValue; (function (HeaderBooleanValue) { HeaderBooleanValue["Yes"] = "yes"; HeaderBooleanValue["No"] = "no"; })(HeaderBooleanValue || (exports.HeaderBooleanValue = HeaderBooleanValue = {})); /** * Describes MXP Message structure */ class Message { constructor(method, sessionId, from, body, values) { this.method = method; this.sessionId = sessionId; this.from = from; this.body = body; this.values = values; } isMethod(method) { return this.method == method; } // todo: move this to a better place static tryExtractSessionKey(message, out) { var _a; if ((_a = message.values) === null || _a === void 0 ? void 0 : _a.key) { try { out(new models_1.SymmetricKey(message.values.key)); } catch (error) { console.error(error); return false; } return true; } return false; } getError() { var _a; if ((_a = this.body) === null || _a === void 0 ? void 0 : _a.isError()) { const bodyError = Message.parseSinchErrorFromJson(this.body.data); if (bodyError) { return bodyError; } } return this.getHeaderError(); } getSdp() { var _a, _b, _c, _d; try { if ((_a = this.body) === null || _a === void 0 ? void 0 : _a.isSdp()) return ((_b = this.body) === null || _b === void 0 ? void 0 : _b.data) ? JSON.parse(this.body.data) : null; else if ((_c = this.values) === null || _c === void 0 ? void 0 : _c.sdp) return JSON.parse((_d = this.values) === null || _d === void 0 ? void 0 : _d.sdp); } catch (error) { console.log(error); return null; } } getIceCandidate() { var _a; return (_a = this.getSdp()) === null || _a === void 0 ? void 0 : _a.cand; } getTerminationCause() { if (this.isIceFailureFlagSet()) { return TerminationCause_1.TerminationCause.IceFailedToConnect; } if (this.isFailureTermination()) { return TerminationCause_1.TerminationCause.Error; } return undefined; } isIceFailureFlagSet() { if (!this.values || !(Message.KEY_ICE_FAILURE in this.values)) { return false; } return this.values[Message.KEY_ICE_FAILURE] === HeaderBooleanValue.Yes; } isFailureTermination() { if (!this.values || !(Message.KEY_FAILURE_TERMINATION in this.values)) { return false; } return (this.values[Message.KEY_FAILURE_TERMINATION] === HeaderBooleanValue.Yes); } getHeaderError() { var _a; const errorJson = (_a = this.values) === null || _a === void 0 ? void 0 : _a[Message.ERROR_JSON]; if (!errorJson) { return undefined; } return Message.parseSinchErrorFromJson(errorJson); } isDoNotDenyAllMessage() { var _a; if (this.method != models_1.Method.Deny) { return false; } return ((_a = this.values) === null || _a === void 0 ? void 0 : _a[Message.KEY_DENY_ALL]) === HeaderBooleanValue.No; } stringifiedValues() { if (!this.values || Object.keys(this.values).length === 0) { return ""; } else { return JSON.stringify(this.values); } } isAddressedToInstance(instanceId) { if (!this.values || !("to" in this.values)) { return true; } return this.values["to"] === instanceId; } static errorToJsonString(error) { return JSON.stringify({ code: error.code, reason: error.message.slice(0, Message.MAX_ERROR_MESSAGE_JSON_LENGTH), domain: SinchError_1.ErrorType[error.domain].toLowerCase(), isFatal: error.isFatal, }); } static parseSinchErrorFromJson(data) { try { const root = JSON.parse(data); if (!root || typeof root !== "object") { return undefined; } const obj = root; const code = obj["code"]; const reason = obj["reason"]; const isFatal = obj["isFatal"]; let domain = obj["domain"]; if (code === undefined || typeof code !== "number" || reason === undefined || typeof reason !== "string") { return undefined; } if (typeof domain === "string") { domain = domain === null || domain === void 0 ? void 0 : domain.toLowerCase(); } let domainEnum = SinchError_1.ErrorType.Generic; switch (domain) { case "network": domainEnum = SinchError_1.ErrorType.Network; break; case "session": domainEnum = SinchError_1.ErrorType.Session; break; case "api": domainEnum = SinchError_1.ErrorType.Api; break; case "persistence": domainEnum = SinchError_1.ErrorType.Persistence; break; case "sip": domainEnum = SinchError_1.ErrorType.Sip; break; case "http": domainEnum = SinchError_1.ErrorType.Http; break; } return new SinchError_1.SinchError(reason, code, domainEnum, isFatal); } catch (error) { return undefined; } } } exports.Message = Message; Message.KEY_ICE_FAILURE = "iceFailed"; Message.KEY_FAILURE_TERMINATION = "failureterm"; Message.KEY_DENY_ALL = "denyall"; Message.ERROR_JSON = "error_json"; Message.MAX_ERROR_MESSAGE_JSON_LENGTH = 256; //# sourceMappingURL=Message.js.map