sinch-rtc
Version:
RTC JavaScript/Web SDK
109 lines • 4.27 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.OcraPushService = exports.PUSH_VERSION = exports.REQUEST_VIDEO_FLAG = void 0;
const Errors_1 = require("../utils/Errors");
const utils_1 = require("../utils");
const models_1 = require("../models");
const PushPayload_1 = require("./PushPayload");
exports.REQUEST_VIDEO_FLAG = 0x01;
exports.PUSH_VERSION = 4;
class Capabilities {
static getVersion(capabilities, capability) {
const capabilityName = capability.toLowerCase().split(".")[0];
const versions = capabilities
.filter((c) => c.startsWith(capabilityName))
.map((c) => {
const parts = c.split(".");
return parts.length === 2 ? Number(parts[1]) : 0;
});
if (versions.length === 0)
return -1;
return Math.max(...versions);
}
}
class OcraPushService {
constructor(userId, apiClient) {
this.userId = userId;
this.apiClient = apiClient;
}
unregisterPushToken(instance) {
return this.apiClient.deletePushProfile({
instanceId: instance.id,
userId: this.userId,
});
}
registerPushToken(subscription, applicationServerKey, instance) {
const json = subscription.toJSON();
if (json.endpoint && json.keys) {
return this.apiClient.updatePushProfile({
instanceId: instance.id,
userId: this.userId,
pushProfile: {
maxPayloadSize: OcraPushService.MaxPayloadSize,
w3c: {
endpoint: json.endpoint,
keys: {
p256dh: json.keys.p256dh,
auth: json.keys.auth,
},
applicationServerKey: applicationServerKey,
// todo: set correct exp time, for no set 32 days
expirationTime: new Date(Date.now() + 32 * 24 * 3600 * 1000),
},
},
});
}
else {
throw new Errors_1.ArgumentError("Invalid subscription", (0, utils_1.nameof)(subscription));
}
}
getTemplateParameters(call) {
const params = {
sinch: (0, PushPayload_1.generatePushPayload)(call),
};
if (this.pushNotificationDisplayName)
params.displayName = this.pushNotificationDisplayName;
return params;
}
mapPushInstances(userId, instances) {
return instances
.filter((i) => i.capabilities &&
Capabilities.getVersion(i.capabilities, models_1.Capability.Push) >=
OcraPushService.MinSupportedPushVersion)
.map((i) => this.mapPushInstance(userId, i));
}
mapPushInstance(userId, instance) {
return {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
instanceId: instance.id, // todo: id should be requeried in RemotePeerInstance
userId: userId,
};
}
sendPush(call, instances) {
return this.apiClient.sendPushNotification({
pushNotification: {
collapseId: call.id,
templateId: call.requestedVideo
? "incoming_video_call"
: "incoming_call",
templateParameters: this.getTemplateParameters(call),
to: this.mapPushInstances(call.remoteUserId, instances),
},
});
}
getManagedPushRecipients(instances) {
if (!instances)
return new Set();
const ids = instances
.filter((i) => i.capabilities &&
Capabilities.getVersion(i.capabilities, models_1.Capability.Push) >=
OcraPushService.MinSupportedPushVersion &&
i.pushProfile != null)
.map((i) => { var _a; return (_a = i.id) !== null && _a !== void 0 ? _a : ""; });
return new Set(ids);
}
}
exports.OcraPushService = OcraPushService;
OcraPushService.MaxPayloadSize = 3393; // https://datatracker.ietf.org/doc/html/rfc8291#section-4
OcraPushService.MinSupportedPushVersion = 4;
//# sourceMappingURL=OcraPushService.js.map