@fishjam-cloud/webrtc-client
Version:
Typescript client library for ExWebRTC/WebRTC endpoint in Membrane RTC Engine
1,548 lines (1,540 loc) • 169 kB
JavaScript
// ../protobufs/fishjam/media_events/peer/peer.ts
import { BinaryReader as BinaryReader2, BinaryWriter as BinaryWriter2 } from "@bufbuild/protobuf/wire";
// ../protobufs/fishjam/media_events/shared.ts
import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
var Variant = /* @__PURE__ */ ((Variant4) => {
Variant4[Variant4["VARIANT_UNSPECIFIED"] = 0] = "VARIANT_UNSPECIFIED";
Variant4[Variant4["VARIANT_LOW"] = 1] = "VARIANT_LOW";
Variant4[Variant4["VARIANT_MEDIUM"] = 2] = "VARIANT_MEDIUM";
Variant4[Variant4["VARIANT_HIGH"] = 3] = "VARIANT_HIGH";
Variant4[Variant4["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
return Variant4;
})(Variant || {});
function variantFromJSON(object) {
switch (object) {
case 0:
case "VARIANT_UNSPECIFIED":
return 0 /* VARIANT_UNSPECIFIED */;
case 1:
case "VARIANT_LOW":
return 1 /* VARIANT_LOW */;
case 2:
case "VARIANT_MEDIUM":
return 2 /* VARIANT_MEDIUM */;
case 3:
case "VARIANT_HIGH":
return 3 /* VARIANT_HIGH */;
case -1:
case "UNRECOGNIZED":
default:
return -1 /* UNRECOGNIZED */;
}
}
function variantToJSON(object) {
switch (object) {
case 0 /* VARIANT_UNSPECIFIED */:
return "VARIANT_UNSPECIFIED";
case 1 /* VARIANT_LOW */:
return "VARIANT_LOW";
case 2 /* VARIANT_MEDIUM */:
return "VARIANT_MEDIUM";
case 3 /* VARIANT_HIGH */:
return "VARIANT_HIGH";
case -1 /* UNRECOGNIZED */:
default:
return "UNRECOGNIZED";
}
}
function createBaseCandidate() {
return { candidate: "", sdpMLineIndex: 0, sdpMid: "", usernameFragment: "" };
}
var Candidate = {
encode(message, writer = new BinaryWriter()) {
if (message.candidate !== "") {
writer.uint32(10).string(message.candidate);
}
if (message.sdpMLineIndex !== 0) {
writer.uint32(16).int32(message.sdpMLineIndex);
}
if (message.sdpMid !== "") {
writer.uint32(26).string(message.sdpMid);
}
if (message.usernameFragment !== "") {
writer.uint32(34).string(message.usernameFragment);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
let end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseCandidate();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.candidate = reader.string();
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.sdpMLineIndex = reader.int32();
continue;
}
case 3: {
if (tag !== 26) {
break;
}
message.sdpMid = reader.string();
continue;
}
case 4: {
if (tag !== 34) {
break;
}
message.usernameFragment = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
},
fromJSON(object) {
return {
candidate: isSet(object.candidate) ? globalThis.String(object.candidate) : "",
sdpMLineIndex: isSet(object.sdpMLineIndex) ? globalThis.Number(object.sdpMLineIndex) : 0,
sdpMid: isSet(object.sdpMid) ? globalThis.String(object.sdpMid) : "",
usernameFragment: isSet(object.usernameFragment) ? globalThis.String(object.usernameFragment) : ""
};
},
toJSON(message) {
const obj = {};
if (message.candidate !== "") {
obj.candidate = message.candidate;
}
if (message.sdpMLineIndex !== 0) {
obj.sdpMLineIndex = Math.round(message.sdpMLineIndex);
}
if (message.sdpMid !== "") {
obj.sdpMid = message.sdpMid;
}
if (message.usernameFragment !== "") {
obj.usernameFragment = message.usernameFragment;
}
return obj;
},
create(base) {
return Candidate.fromPartial(base ?? {});
},
fromPartial(object) {
const message = createBaseCandidate();
message.candidate = object.candidate ?? "";
message.sdpMLineIndex = object.sdpMLineIndex ?? 0;
message.sdpMid = object.sdpMid ?? "";
message.usernameFragment = object.usernameFragment ?? "";
return message;
}
};
function isSet(value) {
return value !== null && value !== void 0;
}
// ../protobufs/fishjam/media_events/peer/peer.ts
function createBaseMediaEvent() {
return {
connect: void 0,
disconnect: void 0,
updateEndpointMetadata: void 0,
updateTrackMetadata: void 0,
renegotiateTracks: void 0,
candidate: void 0,
sdpOffer: void 0,
trackBitrates: void 0,
enableTrackVariant: void 0,
disableTrackVariant: void 0,
setTargetTrackVariant: void 0,
unmuteTrack: void 0
};
}
var MediaEvent = {
encode(message, writer = new BinaryWriter2()) {
if (message.connect !== void 0) {
MediaEvent_Connect.encode(message.connect, writer.uint32(10).fork()).join();
}
if (message.disconnect !== void 0) {
MediaEvent_Disconnect.encode(message.disconnect, writer.uint32(18).fork()).join();
}
if (message.updateEndpointMetadata !== void 0) {
MediaEvent_UpdateEndpointMetadata.encode(message.updateEndpointMetadata, writer.uint32(26).fork()).join();
}
if (message.updateTrackMetadata !== void 0) {
MediaEvent_UpdateTrackMetadata.encode(message.updateTrackMetadata, writer.uint32(34).fork()).join();
}
if (message.renegotiateTracks !== void 0) {
MediaEvent_RenegotiateTracks.encode(message.renegotiateTracks, writer.uint32(42).fork()).join();
}
if (message.candidate !== void 0) {
Candidate.encode(message.candidate, writer.uint32(50).fork()).join();
}
if (message.sdpOffer !== void 0) {
MediaEvent_SdpOffer.encode(message.sdpOffer, writer.uint32(58).fork()).join();
}
if (message.trackBitrates !== void 0) {
MediaEvent_TrackBitrates.encode(message.trackBitrates, writer.uint32(66).fork()).join();
}
if (message.enableTrackVariant !== void 0) {
MediaEvent_EnableTrackVariant.encode(message.enableTrackVariant, writer.uint32(74).fork()).join();
}
if (message.disableTrackVariant !== void 0) {
MediaEvent_DisableTrackVariant.encode(message.disableTrackVariant, writer.uint32(82).fork()).join();
}
if (message.setTargetTrackVariant !== void 0) {
MediaEvent_SetTargetTrackVariant.encode(message.setTargetTrackVariant, writer.uint32(90).fork()).join();
}
if (message.unmuteTrack !== void 0) {
MediaEvent_UnmuteTrack.encode(message.unmuteTrack, writer.uint32(98).fork()).join();
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
let end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMediaEvent();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.connect = MediaEvent_Connect.decode(reader, reader.uint32());
continue;
}
case 2: {
if (tag !== 18) {
break;
}
message.disconnect = MediaEvent_Disconnect.decode(reader, reader.uint32());
continue;
}
case 3: {
if (tag !== 26) {
break;
}
message.updateEndpointMetadata = MediaEvent_UpdateEndpointMetadata.decode(reader, reader.uint32());
continue;
}
case 4: {
if (tag !== 34) {
break;
}
message.updateTrackMetadata = MediaEvent_UpdateTrackMetadata.decode(reader, reader.uint32());
continue;
}
case 5: {
if (tag !== 42) {
break;
}
message.renegotiateTracks = MediaEvent_RenegotiateTracks.decode(reader, reader.uint32());
continue;
}
case 6: {
if (tag !== 50) {
break;
}
message.candidate = Candidate.decode(reader, reader.uint32());
continue;
}
case 7: {
if (tag !== 58) {
break;
}
message.sdpOffer = MediaEvent_SdpOffer.decode(reader, reader.uint32());
continue;
}
case 8: {
if (tag !== 66) {
break;
}
message.trackBitrates = MediaEvent_TrackBitrates.decode(reader, reader.uint32());
continue;
}
case 9: {
if (tag !== 74) {
break;
}
message.enableTrackVariant = MediaEvent_EnableTrackVariant.decode(reader, reader.uint32());
continue;
}
case 10: {
if (tag !== 82) {
break;
}
message.disableTrackVariant = MediaEvent_DisableTrackVariant.decode(reader, reader.uint32());
continue;
}
case 11: {
if (tag !== 90) {
break;
}
message.setTargetTrackVariant = MediaEvent_SetTargetTrackVariant.decode(reader, reader.uint32());
continue;
}
case 12: {
if (tag !== 98) {
break;
}
message.unmuteTrack = MediaEvent_UnmuteTrack.decode(reader, reader.uint32());
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
},
fromJSON(object) {
return {
connect: isSet2(object.connect) ? MediaEvent_Connect.fromJSON(object.connect) : void 0,
disconnect: isSet2(object.disconnect) ? MediaEvent_Disconnect.fromJSON(object.disconnect) : void 0,
updateEndpointMetadata: isSet2(object.updateEndpointMetadata) ? MediaEvent_UpdateEndpointMetadata.fromJSON(object.updateEndpointMetadata) : void 0,
updateTrackMetadata: isSet2(object.updateTrackMetadata) ? MediaEvent_UpdateTrackMetadata.fromJSON(object.updateTrackMetadata) : void 0,
renegotiateTracks: isSet2(object.renegotiateTracks) ? MediaEvent_RenegotiateTracks.fromJSON(object.renegotiateTracks) : void 0,
candidate: isSet2(object.candidate) ? Candidate.fromJSON(object.candidate) : void 0,
sdpOffer: isSet2(object.sdpOffer) ? MediaEvent_SdpOffer.fromJSON(object.sdpOffer) : void 0,
trackBitrates: isSet2(object.trackBitrates) ? MediaEvent_TrackBitrates.fromJSON(object.trackBitrates) : void 0,
enableTrackVariant: isSet2(object.enableTrackVariant) ? MediaEvent_EnableTrackVariant.fromJSON(object.enableTrackVariant) : void 0,
disableTrackVariant: isSet2(object.disableTrackVariant) ? MediaEvent_DisableTrackVariant.fromJSON(object.disableTrackVariant) : void 0,
setTargetTrackVariant: isSet2(object.setTargetTrackVariant) ? MediaEvent_SetTargetTrackVariant.fromJSON(object.setTargetTrackVariant) : void 0,
unmuteTrack: isSet2(object.unmuteTrack) ? MediaEvent_UnmuteTrack.fromJSON(object.unmuteTrack) : void 0
};
},
toJSON(message) {
const obj = {};
if (message.connect !== void 0) {
obj.connect = MediaEvent_Connect.toJSON(message.connect);
}
if (message.disconnect !== void 0) {
obj.disconnect = MediaEvent_Disconnect.toJSON(message.disconnect);
}
if (message.updateEndpointMetadata !== void 0) {
obj.updateEndpointMetadata = MediaEvent_UpdateEndpointMetadata.toJSON(message.updateEndpointMetadata);
}
if (message.updateTrackMetadata !== void 0) {
obj.updateTrackMetadata = MediaEvent_UpdateTrackMetadata.toJSON(message.updateTrackMetadata);
}
if (message.renegotiateTracks !== void 0) {
obj.renegotiateTracks = MediaEvent_RenegotiateTracks.toJSON(message.renegotiateTracks);
}
if (message.candidate !== void 0) {
obj.candidate = Candidate.toJSON(message.candidate);
}
if (message.sdpOffer !== void 0) {
obj.sdpOffer = MediaEvent_SdpOffer.toJSON(message.sdpOffer);
}
if (message.trackBitrates !== void 0) {
obj.trackBitrates = MediaEvent_TrackBitrates.toJSON(message.trackBitrates);
}
if (message.enableTrackVariant !== void 0) {
obj.enableTrackVariant = MediaEvent_EnableTrackVariant.toJSON(message.enableTrackVariant);
}
if (message.disableTrackVariant !== void 0) {
obj.disableTrackVariant = MediaEvent_DisableTrackVariant.toJSON(message.disableTrackVariant);
}
if (message.setTargetTrackVariant !== void 0) {
obj.setTargetTrackVariant = MediaEvent_SetTargetTrackVariant.toJSON(message.setTargetTrackVariant);
}
if (message.unmuteTrack !== void 0) {
obj.unmuteTrack = MediaEvent_UnmuteTrack.toJSON(message.unmuteTrack);
}
return obj;
},
create(base) {
return MediaEvent.fromPartial(base ?? {});
},
fromPartial(object) {
const message = createBaseMediaEvent();
message.connect = object.connect !== void 0 && object.connect !== null ? MediaEvent_Connect.fromPartial(object.connect) : void 0;
message.disconnect = object.disconnect !== void 0 && object.disconnect !== null ? MediaEvent_Disconnect.fromPartial(object.disconnect) : void 0;
message.updateEndpointMetadata = object.updateEndpointMetadata !== void 0 && object.updateEndpointMetadata !== null ? MediaEvent_UpdateEndpointMetadata.fromPartial(object.updateEndpointMetadata) : void 0;
message.updateTrackMetadata = object.updateTrackMetadata !== void 0 && object.updateTrackMetadata !== null ? MediaEvent_UpdateTrackMetadata.fromPartial(object.updateTrackMetadata) : void 0;
message.renegotiateTracks = object.renegotiateTracks !== void 0 && object.renegotiateTracks !== null ? MediaEvent_RenegotiateTracks.fromPartial(object.renegotiateTracks) : void 0;
message.candidate = object.candidate !== void 0 && object.candidate !== null ? Candidate.fromPartial(object.candidate) : void 0;
message.sdpOffer = object.sdpOffer !== void 0 && object.sdpOffer !== null ? MediaEvent_SdpOffer.fromPartial(object.sdpOffer) : void 0;
message.trackBitrates = object.trackBitrates !== void 0 && object.trackBitrates !== null ? MediaEvent_TrackBitrates.fromPartial(object.trackBitrates) : void 0;
message.enableTrackVariant = object.enableTrackVariant !== void 0 && object.enableTrackVariant !== null ? MediaEvent_EnableTrackVariant.fromPartial(object.enableTrackVariant) : void 0;
message.disableTrackVariant = object.disableTrackVariant !== void 0 && object.disableTrackVariant !== null ? MediaEvent_DisableTrackVariant.fromPartial(object.disableTrackVariant) : void 0;
message.setTargetTrackVariant = object.setTargetTrackVariant !== void 0 && object.setTargetTrackVariant !== null ? MediaEvent_SetTargetTrackVariant.fromPartial(object.setTargetTrackVariant) : void 0;
message.unmuteTrack = object.unmuteTrack !== void 0 && object.unmuteTrack !== null ? MediaEvent_UnmuteTrack.fromPartial(object.unmuteTrack) : void 0;
return message;
}
};
function createBaseMediaEvent_VariantBitrate() {
return { variant: 0, bitrate: 0 };
}
var MediaEvent_VariantBitrate = {
encode(message, writer = new BinaryWriter2()) {
if (message.variant !== 0) {
writer.uint32(8).int32(message.variant);
}
if (message.bitrate !== 0) {
writer.uint32(16).int32(message.bitrate);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
let end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMediaEvent_VariantBitrate();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.variant = reader.int32();
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.bitrate = reader.int32();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
},
fromJSON(object) {
return {
variant: isSet2(object.variant) ? variantFromJSON(object.variant) : 0,
bitrate: isSet2(object.bitrate) ? globalThis.Number(object.bitrate) : 0
};
},
toJSON(message) {
const obj = {};
if (message.variant !== 0) {
obj.variant = variantToJSON(message.variant);
}
if (message.bitrate !== 0) {
obj.bitrate = Math.round(message.bitrate);
}
return obj;
},
create(base) {
return MediaEvent_VariantBitrate.fromPartial(base ?? {});
},
fromPartial(object) {
const message = createBaseMediaEvent_VariantBitrate();
message.variant = object.variant ?? 0;
message.bitrate = object.bitrate ?? 0;
return message;
}
};
function createBaseMediaEvent_Connect() {
return { metadataJson: "" };
}
var MediaEvent_Connect = {
encode(message, writer = new BinaryWriter2()) {
if (message.metadataJson !== "") {
writer.uint32(10).string(message.metadataJson);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
let end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMediaEvent_Connect();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.metadataJson = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
},
fromJSON(object) {
return { metadataJson: isSet2(object.metadataJson) ? globalThis.String(object.metadataJson) : "" };
},
toJSON(message) {
const obj = {};
if (message.metadataJson !== "") {
obj.metadataJson = message.metadataJson;
}
return obj;
},
create(base) {
return MediaEvent_Connect.fromPartial(base ?? {});
},
fromPartial(object) {
const message = createBaseMediaEvent_Connect();
message.metadataJson = object.metadataJson ?? "";
return message;
}
};
function createBaseMediaEvent_Disconnect() {
return {};
}
var MediaEvent_Disconnect = {
encode(_, writer = new BinaryWriter2()) {
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
let end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMediaEvent_Disconnect();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
},
fromJSON(_) {
return {};
},
toJSON(_) {
const obj = {};
return obj;
},
create(base) {
return MediaEvent_Disconnect.fromPartial(base ?? {});
},
fromPartial(_) {
const message = createBaseMediaEvent_Disconnect();
return message;
}
};
function createBaseMediaEvent_UpdateEndpointMetadata() {
return { metadataJson: "" };
}
var MediaEvent_UpdateEndpointMetadata = {
encode(message, writer = new BinaryWriter2()) {
if (message.metadataJson !== "") {
writer.uint32(10).string(message.metadataJson);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
let end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMediaEvent_UpdateEndpointMetadata();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.metadataJson = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
},
fromJSON(object) {
return { metadataJson: isSet2(object.metadataJson) ? globalThis.String(object.metadataJson) : "" };
},
toJSON(message) {
const obj = {};
if (message.metadataJson !== "") {
obj.metadataJson = message.metadataJson;
}
return obj;
},
create(base) {
return MediaEvent_UpdateEndpointMetadata.fromPartial(base ?? {});
},
fromPartial(object) {
const message = createBaseMediaEvent_UpdateEndpointMetadata();
message.metadataJson = object.metadataJson ?? "";
return message;
}
};
function createBaseMediaEvent_UpdateTrackMetadata() {
return { trackId: "", metadataJson: "" };
}
var MediaEvent_UpdateTrackMetadata = {
encode(message, writer = new BinaryWriter2()) {
if (message.trackId !== "") {
writer.uint32(10).string(message.trackId);
}
if (message.metadataJson !== "") {
writer.uint32(18).string(message.metadataJson);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
let end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMediaEvent_UpdateTrackMetadata();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.trackId = reader.string();
continue;
}
case 2: {
if (tag !== 18) {
break;
}
message.metadataJson = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
},
fromJSON(object) {
return {
trackId: isSet2(object.trackId) ? globalThis.String(object.trackId) : "",
metadataJson: isSet2(object.metadataJson) ? globalThis.String(object.metadataJson) : ""
};
},
toJSON(message) {
const obj = {};
if (message.trackId !== "") {
obj.trackId = message.trackId;
}
if (message.metadataJson !== "") {
obj.metadataJson = message.metadataJson;
}
return obj;
},
create(base) {
return MediaEvent_UpdateTrackMetadata.fromPartial(base ?? {});
},
fromPartial(object) {
const message = createBaseMediaEvent_UpdateTrackMetadata();
message.trackId = object.trackId ?? "";
message.metadataJson = object.metadataJson ?? "";
return message;
}
};
function createBaseMediaEvent_RenegotiateTracks() {
return {};
}
var MediaEvent_RenegotiateTracks = {
encode(_, writer = new BinaryWriter2()) {
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
let end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMediaEvent_RenegotiateTracks();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
},
fromJSON(_) {
return {};
},
toJSON(_) {
const obj = {};
return obj;
},
create(base) {
return MediaEvent_RenegotiateTracks.fromPartial(base ?? {});
},
fromPartial(_) {
const message = createBaseMediaEvent_RenegotiateTracks();
return message;
}
};
function createBaseMediaEvent_SdpOffer() {
return { sdp: "", trackIdToMetadataJson: {}, trackIdToBitrates: {}, midToTrackId: {} };
}
var MediaEvent_SdpOffer = {
encode(message, writer = new BinaryWriter2()) {
if (message.sdp !== "") {
writer.uint32(10).string(message.sdp);
}
Object.entries(message.trackIdToMetadataJson).forEach(([key, value]) => {
MediaEvent_SdpOffer_TrackIdToMetadataJsonEntry.encode({ key, value }, writer.uint32(18).fork()).join();
});
Object.entries(message.trackIdToBitrates).forEach(([key, value]) => {
MediaEvent_SdpOffer_TrackIdToBitratesEntry.encode({ key, value }, writer.uint32(26).fork()).join();
});
Object.entries(message.midToTrackId).forEach(([key, value]) => {
MediaEvent_SdpOffer_MidToTrackIdEntry.encode({ key, value }, writer.uint32(34).fork()).join();
});
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
let end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMediaEvent_SdpOffer();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.sdp = reader.string();
continue;
}
case 2: {
if (tag !== 18) {
break;
}
const entry2 = MediaEvent_SdpOffer_TrackIdToMetadataJsonEntry.decode(reader, reader.uint32());
if (entry2.value !== void 0) {
message.trackIdToMetadataJson[entry2.key] = entry2.value;
}
continue;
}
case 3: {
if (tag !== 26) {
break;
}
const entry3 = MediaEvent_SdpOffer_TrackIdToBitratesEntry.decode(reader, reader.uint32());
if (entry3.value !== void 0) {
message.trackIdToBitrates[entry3.key] = entry3.value;
}
continue;
}
case 4: {
if (tag !== 34) {
break;
}
const entry4 = MediaEvent_SdpOffer_MidToTrackIdEntry.decode(reader, reader.uint32());
if (entry4.value !== void 0) {
message.midToTrackId[entry4.key] = entry4.value;
}
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
},
fromJSON(object) {
return {
sdp: isSet2(object.sdp) ? globalThis.String(object.sdp) : "",
trackIdToMetadataJson: isObject(object.trackIdToMetadataJson) ? Object.entries(object.trackIdToMetadataJson).reduce((acc, [key, value]) => {
acc[key] = String(value);
return acc;
}, {}) : {},
trackIdToBitrates: isObject(object.trackIdToBitrates) ? Object.entries(object.trackIdToBitrates).reduce(
(acc, [key, value]) => {
acc[key] = MediaEvent_TrackBitrates.fromJSON(value);
return acc;
},
{}
) : {},
midToTrackId: isObject(object.midToTrackId) ? Object.entries(object.midToTrackId).reduce((acc, [key, value]) => {
acc[key] = String(value);
return acc;
}, {}) : {}
};
},
toJSON(message) {
const obj = {};
if (message.sdp !== "") {
obj.sdp = message.sdp;
}
if (message.trackIdToMetadataJson) {
const entries = Object.entries(message.trackIdToMetadataJson);
if (entries.length > 0) {
obj.trackIdToMetadataJson = {};
entries.forEach(([k, v]) => {
obj.trackIdToMetadataJson[k] = v;
});
}
}
if (message.trackIdToBitrates) {
const entries = Object.entries(message.trackIdToBitrates);
if (entries.length > 0) {
obj.trackIdToBitrates = {};
entries.forEach(([k, v]) => {
obj.trackIdToBitrates[k] = MediaEvent_TrackBitrates.toJSON(v);
});
}
}
if (message.midToTrackId) {
const entries = Object.entries(message.midToTrackId);
if (entries.length > 0) {
obj.midToTrackId = {};
entries.forEach(([k, v]) => {
obj.midToTrackId[k] = v;
});
}
}
return obj;
},
create(base) {
return MediaEvent_SdpOffer.fromPartial(base ?? {});
},
fromPartial(object) {
const message = createBaseMediaEvent_SdpOffer();
message.sdp = object.sdp ?? "";
message.trackIdToMetadataJson = Object.entries(object.trackIdToMetadataJson ?? {}).reduce((acc, [key, value]) => {
if (value !== void 0) {
acc[key] = globalThis.String(value);
}
return acc;
}, {});
message.trackIdToBitrates = Object.entries(object.trackIdToBitrates ?? {}).reduce((acc, [key, value]) => {
if (value !== void 0) {
acc[key] = MediaEvent_TrackBitrates.fromPartial(value);
}
return acc;
}, {});
message.midToTrackId = Object.entries(object.midToTrackId ?? {}).reduce(
(acc, [key, value]) => {
if (value !== void 0) {
acc[key] = globalThis.String(value);
}
return acc;
},
{}
);
return message;
}
};
function createBaseMediaEvent_SdpOffer_TrackIdToMetadataJsonEntry() {
return { key: "", value: "" };
}
var MediaEvent_SdpOffer_TrackIdToMetadataJsonEntry = {
encode(message, writer = new BinaryWriter2()) {
if (message.key !== "") {
writer.uint32(10).string(message.key);
}
if (message.value !== "") {
writer.uint32(18).string(message.value);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
let end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMediaEvent_SdpOffer_TrackIdToMetadataJsonEntry();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.key = reader.string();
continue;
}
case 2: {
if (tag !== 18) {
break;
}
message.value = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
},
fromJSON(object) {
return {
key: isSet2(object.key) ? globalThis.String(object.key) : "",
value: isSet2(object.value) ? globalThis.String(object.value) : ""
};
},
toJSON(message) {
const obj = {};
if (message.key !== "") {
obj.key = message.key;
}
if (message.value !== "") {
obj.value = message.value;
}
return obj;
},
create(base) {
return MediaEvent_SdpOffer_TrackIdToMetadataJsonEntry.fromPartial(base ?? {});
},
fromPartial(object) {
const message = createBaseMediaEvent_SdpOffer_TrackIdToMetadataJsonEntry();
message.key = object.key ?? "";
message.value = object.value ?? "";
return message;
}
};
function createBaseMediaEvent_SdpOffer_TrackIdToBitratesEntry() {
return { key: "", value: void 0 };
}
var MediaEvent_SdpOffer_TrackIdToBitratesEntry = {
encode(message, writer = new BinaryWriter2()) {
if (message.key !== "") {
writer.uint32(10).string(message.key);
}
if (message.value !== void 0) {
MediaEvent_TrackBitrates.encode(message.value, writer.uint32(18).fork()).join();
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
let end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMediaEvent_SdpOffer_TrackIdToBitratesEntry();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.key = reader.string();
continue;
}
case 2: {
if (tag !== 18) {
break;
}
message.value = MediaEvent_TrackBitrates.decode(reader, reader.uint32());
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
},
fromJSON(object) {
return {
key: isSet2(object.key) ? globalThis.String(object.key) : "",
value: isSet2(object.value) ? MediaEvent_TrackBitrates.fromJSON(object.value) : void 0
};
},
toJSON(message) {
const obj = {};
if (message.key !== "") {
obj.key = message.key;
}
if (message.value !== void 0) {
obj.value = MediaEvent_TrackBitrates.toJSON(message.value);
}
return obj;
},
create(base) {
return MediaEvent_SdpOffer_TrackIdToBitratesEntry.fromPartial(base ?? {});
},
fromPartial(object) {
const message = createBaseMediaEvent_SdpOffer_TrackIdToBitratesEntry();
message.key = object.key ?? "";
message.value = object.value !== void 0 && object.value !== null ? MediaEvent_TrackBitrates.fromPartial(object.value) : void 0;
return message;
}
};
function createBaseMediaEvent_SdpOffer_MidToTrackIdEntry() {
return { key: "", value: "" };
}
var MediaEvent_SdpOffer_MidToTrackIdEntry = {
encode(message, writer = new BinaryWriter2()) {
if (message.key !== "") {
writer.uint32(10).string(message.key);
}
if (message.value !== "") {
writer.uint32(18).string(message.value);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
let end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMediaEvent_SdpOffer_MidToTrackIdEntry();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.key = reader.string();
continue;
}
case 2: {
if (tag !== 18) {
break;
}
message.value = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
},
fromJSON(object) {
return {
key: isSet2(object.key) ? globalThis.String(object.key) : "",
value: isSet2(object.value) ? globalThis.String(object.value) : ""
};
},
toJSON(message) {
const obj = {};
if (message.key !== "") {
obj.key = message.key;
}
if (message.value !== "") {
obj.value = message.value;
}
return obj;
},
create(base) {
return MediaEvent_SdpOffer_MidToTrackIdEntry.fromPartial(base ?? {});
},
fromPartial(object) {
const message = createBaseMediaEvent_SdpOffer_MidToTrackIdEntry();
message.key = object.key ?? "";
message.value = object.value ?? "";
return message;
}
};
function createBaseMediaEvent_TrackBitrates() {
return { trackId: "", variantBitrates: [] };
}
var MediaEvent_TrackBitrates = {
encode(message, writer = new BinaryWriter2()) {
if (message.trackId !== "") {
writer.uint32(10).string(message.trackId);
}
for (const v of message.variantBitrates) {
MediaEvent_VariantBitrate.encode(v, writer.uint32(18).fork()).join();
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
let end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMediaEvent_TrackBitrates();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.trackId = reader.string();
continue;
}
case 2: {
if (tag !== 18) {
break;
}
message.variantBitrates.push(MediaEvent_VariantBitrate.decode(reader, reader.uint32()));
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
},
fromJSON(object) {
return {
trackId: isSet2(object.trackId) ? globalThis.String(object.trackId) : "",
variantBitrates: globalThis.Array.isArray(object?.variantBitrates) ? object.variantBitrates.map((e) => MediaEvent_VariantBitrate.fromJSON(e)) : []
};
},
toJSON(message) {
const obj = {};
if (message.trackId !== "") {
obj.trackId = message.trackId;
}
if (message.variantBitrates?.length) {
obj.variantBitrates = message.variantBitrates.map((e) => MediaEvent_VariantBitrate.toJSON(e));
}
return obj;
},
create(base) {
return MediaEvent_TrackBitrates.fromPartial(base ?? {});
},
fromPartial(object) {
const message = createBaseMediaEvent_TrackBitrates();
message.trackId = object.trackId ?? "";
message.variantBitrates = object.variantBitrates?.map((e) => MediaEvent_VariantBitrate.fromPartial(e)) || [];
return message;
}
};
function createBaseMediaEvent_DisableTrackVariant() {
return { trackId: "", variant: 0 };
}
var MediaEvent_DisableTrackVariant = {
encode(message, writer = new BinaryWriter2()) {
if (message.trackId !== "") {
writer.uint32(10).string(message.trackId);
}
if (message.variant !== 0) {
writer.uint32(16).int32(message.variant);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
let end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMediaEvent_DisableTrackVariant();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.trackId = reader.string();
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.variant = reader.int32();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
},
fromJSON(object) {
return {
trackId: isSet2(object.trackId) ? globalThis.String(object.trackId) : "",
variant: isSet2(object.variant) ? variantFromJSON(object.variant) : 0
};
},
toJSON(message) {
const obj = {};
if (message.trackId !== "") {
obj.trackId = message.trackId;
}
if (message.variant !== 0) {
obj.variant = variantToJSON(message.variant);
}
return obj;
},
create(base) {
return MediaEvent_DisableTrackVariant.fromPartial(base ?? {});
},
fromPartial(object) {
const message = createBaseMediaEvent_DisableTrackVariant();
message.trackId = object.trackId ?? "";
message.variant = object.variant ?? 0;
return message;
}
};
function createBaseMediaEvent_EnableTrackVariant() {
return { trackId: "", variant: 0 };
}
var MediaEvent_EnableTrackVariant = {
encode(message, writer = new BinaryWriter2()) {
if (message.trackId !== "") {
writer.uint32(10).string(message.trackId);
}
if (message.variant !== 0) {
writer.uint32(16).int32(message.variant);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
let end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMediaEvent_EnableTrackVariant();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.trackId = reader.string();
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.variant = reader.int32();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
},
fromJSON(object) {
return {
trackId: isSet2(object.trackId) ? globalThis.String(object.trackId) : "",
variant: isSet2(object.variant) ? variantFromJSON(object.variant) : 0
};
},
toJSON(message) {
const obj = {};
if (message.trackId !== "") {
obj.trackId = message.trackId;
}
if (message.variant !== 0) {
obj.variant = variantToJSON(message.variant);
}
return obj;
},
create(base) {
return MediaEvent_EnableTrackVariant.fromPartial(base ?? {});
},
fromPartial(object) {
const message = createBaseMediaEvent_EnableTrackVariant();
message.trackId = object.trackId ?? "";
message.variant = object.variant ?? 0;
return message;
}
};
function createBaseMediaEvent_SetTargetTrackVariant() {
return { trackId: "", variant: 0 };
}
var MediaEvent_SetTargetTrackVariant = {
encode(message, writer = new BinaryWriter2()) {
if (message.trackId !== "") {
writer.uint32(10).string(message.trackId);
}
if (message.variant !== 0) {
writer.uint32(16).int32(message.variant);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
let end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMediaEvent_SetTargetTrackVariant();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.trackId = reader.string();
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.variant = reader.int32();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
},
fromJSON(object) {
return {
trackId: isSet2(object.trackId) ? globalThis.String(object.trackId) : "",
variant: isSet2(object.variant) ? variantFromJSON(object.variant) : 0
};
},
toJSON(message) {
const obj = {};
if (message.trackId !== "") {
obj.trackId = message.trackId;
}
if (message.variant !== 0) {
obj.variant = variantToJSON(message.variant);
}
return obj;
},
create(base) {
return MediaEvent_SetTargetTrackVariant.fromPartial(base ?? {});
},
fromPartial(object) {
const message = createBaseMediaEvent_SetTargetTrackVariant();
message.trackId = object.trackId ?? "";
message.variant = object.variant ?? 0;
return message;
}
};
function createBaseMediaEvent_UnmuteTrack() {
return { trackId: "" };
}
var MediaEvent_UnmuteTrack = {
encode(message, writer = new BinaryWriter2()) {
if (message.trackId !== "") {
writer.uint32(10).string(message.trackId);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader2 ? input : new BinaryReader2(input);
let end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMediaEvent_UnmuteTrack();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.trackId = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
},
fromJSON(object) {
return { trackId: isSet2(object.trackId) ? globalThis.String(object.trackId) : "" };
},
toJSON(message) {
const obj = {};
if (message.trackId !== "") {
obj.trackId = message.trackId;
}
return obj;
},
create(base) {
return MediaEvent_UnmuteTrack.fromPartial(base ?? {});
},
fromPartial(object) {
const message = createBaseMediaEvent_UnmuteTrack();
message.trackId = object.trackId ?? "";
return message;
}
};
function isObject(value) {
return typeof value === "object" && value !== null;
}
function isSet2(value) {
return value !== null && value !== void 0;
}
// src/webRTCEndpoint.ts
import EventEmitter2 from "events";
import { v4 as uuidv4 } from "uuid";
// src/CommandsQueue.ts
var CommandsQueue = class {
localTrackManager;
connection = null;
clearConnectionCallbacks = null;
constructor(localTrackManager) {
this.localTrackManager = localTrackManager;
}
initConnection = (connection) => {
this.connection = connection;
const onSignalingStateChange = () => {
if (connection.getConnection().signalingState === "stable") {
this.processNextCommand();
}
};
const onIceGatheringStateChange = () => {
if (connection.getConnection().iceGatheringState === "complete") {
this.processNextCommand();
}
};
const onConnectionStateChange = () => {
if (connection.getConnection().connectionState === "connected") {
this.processNextCommand();
}
};
const onIceConnectionStateChange = () => {
if (connection.getConnection().iceConnectionState === "connected") {
this.processNextCommand();
}
};
this.clearConnectionCallbacks = () => {
connection.getConnection().removeEventListener("signalingstatechange", onSignalingStateChange);
connection.getConnection().removeEventListener("icegatheringstatechange", onIceGatheringStateChange);
connection.getConnection().removeEventListener("connectionstatechange", onConnectionStateChange);
connection.getConnection().removeEventListener("iceconnectionstatechange", onIceConnectionStateChange);
};
connection.getConnection().addEventListener("icegatheringstatechange", onIceConnectionStateChange);
connection.getConnection().addEventListener("connectionstatechange", onConnectionStateChange);
connection.getConnection().addEventListener("iceconnectionstatechange", onIceConnectionStateChange);
connection.getConnection().addEventListener("signalingstatechange", onSignalingStateChange);
};
commandsQueue = [];
commandResolutionNotifier = null;
pushCommand = (command) => {
this.commandsQueue.push(command);
this.processNextCommand();
};
processNextCommand = () => {
if (this.localTrackManager.isNegotiationInProgress()) return;
if (this.connection?.isConnectionUnstable()) return;
this.resolvePreviousCommand();
const command = this.commandsQueue.shift();
if (!command) return;
this.commandResolutionNotifier = command.resolutionNotifier;
this.handleCommand(command);
};
handleCommand = async (command) => {
try {
command.parse?.();
const promise = command.handler();
if (command.resolve === "on-handler-resolve") {
await promise;
this.resolvePreviousCommand();
this.processNextCommand();
}
} catch (error) {
this.commandResolutionNotifier?.reject(error);
this.commandResolutionNotifier = null;
this.processNextCommand();
}
};
resolvePreviousCommand = () => {
if (!this.commandResolutionNotifier) return;
this.commandResolutionNotifier.resolve();
this.commandResolutionNotifier = null;
};
cleanUp = () => {
this.commandResolutionNotifier?.reject("Disconnected");
this.commandResolutionNotifier = null;
this.commandsQueue = [];
this.clearConnectionCallbacks?.();
};
};
// src/ConnectionManager.ts
var ConnectionManager = class {
connection;
constructor(iceServers) {
this.connection = new RTCPeerConnection({
bundlePolicy: "max-bundle",
iceServers,
iceTransportPolicy: "all"
});
}
isConnectionUnstable = () => {
if (!this.connection) return false;
const isSignalingUnstable = this.connection.signalingState !== "stable";
const isConnectionNotConnected = this.connection.connectionState !== "connected";
const isIceNotConnected = this.connection.iceConnectionState !== "connected";
return isSignalingUnstable && isConnectionNotConnected && isIceNotConnected;
};
getConnection = () => {
return this.connection;
};
addTransceiversIfNeeded = (serverTracks) => {
const recvTransceivers = this.connection.getTransceivers().filter((elem) => elem.direction === "recvonly");
const videoTransceiversAmount = recvTransceivers.filter((elem) => elem.receiver.track.kind === "video").length;
const audioTransceiversAmount = recvTransceivers.filter((elem) => elem.receiver.track.kind === "audio").length;
const videoNeededTypes = Array(serverTracks.video - videoTransceiversAmount).fill("video");
const audioNeededTypes = Array(serverTracks.audio - audioTransceiversAmount).fill("audio");
[...videoNeededTypes, ...audioNeededTypes].forEach(
(kind) => this.connection.addTransceiver(kind, { direction: "recvonly" })
);
};
addTransceiver = (track, transceiverConfig) => {
this.connection.addTransceiver(track, transceiverConfig);
};
setOnTrackReady = (onTrackReady) => {
this.connection.ontrack = onTrackReady;
};
setRemoteDescription = async (data) => {
await this.connection.setRemoteDescription(data);
};
isTrackInUse = (track) => this.connection.getSenders().some((val) => val.track === track);
removeTrack = (sender) => {
this.connection.removeTrack(sender);
};
findSender = (mediaStreamTrackId) => this.connection.getSenders().find((sender) => sender.track && sender.track.id === mediaStreamTrackId);
addIceCandidate = async (iceCandidate) => {
await this.connection.addIceCandidate(iceCandidate);
};
};
// src/deferred.ts
var Deferred = class {
promise;
resolveFn = () => null;
rejectFn = () => null;
constructor() {
this.promise = new Promise((resolve, reject) => {
this.resolveFn = resolve;
this.rejectFn = reject;
});
}
resolve(value) {
this.resolveFn(value);
}
reject(reason) {
this.rejectFn(reason);
}
};
// ../protobufs/fishjam/media_events/server/server.ts
import { BinaryReader as BinaryReader3, BinaryWriter as BinaryWriter3 } from "@bufbuild/protobuf/wire";
function mediaEvent_VadNotification_StatusFromJSON(object) {
switch (object) {
case 0:
case "STATUS_UNSPECIFIED":
return 0 /* STATUS_UNSPECIFIED */;
case 1: