UNPKG

sinch-rtc

Version:

RTC JavaScript/Web SDK

109 lines 4.27 kB
"use strict"; 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