sinch-rtc
Version:
RTC JavaScript/Web SDK
180 lines • 6.34 kB
JavaScript
"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