UNPKG

@fishjam-cloud/webrtc-client

Version:

Typescript client library for ExWebRTC/WebRTC endpoint in Membrane RTC Engine

1,548 lines (1,540 loc) 169 kB
// ../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: