feat: complete Ancestor quote bot with production-ready Docker support

This commit is contained in:
unfunny
2026-09-13 14:14:38 -04:00
parent f2016da05a
commit fe7351a7dc
1145 changed files with 30890 additions and 97684 deletions

View File

@@ -1,4 +1,16 @@
import _defineProperty from "@babel/runtime/helpers/defineProperty";
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.SPEAKING_THRESHOLD = exports.CallFeedEvent = exports.CallFeed = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _callEventTypes = require("./callEventTypes");
var _audioContext = require("./audioContext");
var _logger = require("../logger");
var _typedEventEmitter = require("../models/typed-event-emitter");
var _call = require("./call");
/*
Copyright 2021 Šimon Brandner <simon.bra.ag@gmail.com>
@@ -15,16 +27,11 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import { SDPStreamMetadataPurpose } from "./callEventTypes.js";
import { acquireContext, releaseContext } from "./audioContext.js";
import { logger } from "../logger.js";
import { TypedEventEmitter } from "../models/typed-event-emitter.js";
import { CallEvent, CallState } from "./call.js";
const POLLING_INTERVAL = 200; // ms
export const SPEAKING_THRESHOLD = -60; // dB
const SPEAKING_THRESHOLD = -60; // dB
exports.SPEAKING_THRESHOLD = SPEAKING_THRESHOLD;
const SPEAKING_SAMPLE_COUNT = 8; // samples
export let CallFeedEvent = /*#__PURE__*/function (CallFeedEvent) {
let CallFeedEvent = /*#__PURE__*/function (CallFeedEvent) {
CallFeedEvent["NewStream"] = "new_stream";
CallFeedEvent["MuteStateChanged"] = "mute_state_changed";
CallFeedEvent["LocalVolumeChanged"] = "local_volume_changed";
@@ -34,41 +41,42 @@ export let CallFeedEvent = /*#__PURE__*/function (CallFeedEvent) {
CallFeedEvent["Disposed"] = "disposed";
return CallFeedEvent;
}({});
export class CallFeed extends TypedEventEmitter {
exports.CallFeedEvent = CallFeedEvent;
class CallFeed extends _typedEventEmitter.TypedEventEmitter {
constructor(opts) {
super();
_defineProperty(this, "stream", void 0);
_defineProperty(this, "sdpMetadataStreamId", void 0);
_defineProperty(this, "userId", void 0);
_defineProperty(this, "deviceId", void 0);
_defineProperty(this, "purpose", void 0);
_defineProperty(this, "speakingVolumeSamples", void 0);
_defineProperty(this, "client", void 0);
_defineProperty(this, "call", void 0);
_defineProperty(this, "roomId", void 0);
_defineProperty(this, "audioMuted", void 0);
_defineProperty(this, "videoMuted", void 0);
_defineProperty(this, "localVolume", 1);
_defineProperty(this, "measuringVolumeActivity", false);
_defineProperty(this, "audioContext", void 0);
_defineProperty(this, "analyser", void 0);
_defineProperty(this, "frequencyBinCount", void 0);
_defineProperty(this, "speakingThreshold", SPEAKING_THRESHOLD);
_defineProperty(this, "speaking", false);
_defineProperty(this, "volumeLooperTimeout", void 0);
_defineProperty(this, "_disposed", false);
_defineProperty(this, "_connected", false);
_defineProperty(this, "onAddTrack", () => {
(0, _defineProperty2.default)(this, "stream", void 0);
(0, _defineProperty2.default)(this, "sdpMetadataStreamId", void 0);
(0, _defineProperty2.default)(this, "userId", void 0);
(0, _defineProperty2.default)(this, "deviceId", void 0);
(0, _defineProperty2.default)(this, "purpose", void 0);
(0, _defineProperty2.default)(this, "speakingVolumeSamples", void 0);
(0, _defineProperty2.default)(this, "client", void 0);
(0, _defineProperty2.default)(this, "call", void 0);
(0, _defineProperty2.default)(this, "roomId", void 0);
(0, _defineProperty2.default)(this, "audioMuted", void 0);
(0, _defineProperty2.default)(this, "videoMuted", void 0);
(0, _defineProperty2.default)(this, "localVolume", 1);
(0, _defineProperty2.default)(this, "measuringVolumeActivity", false);
(0, _defineProperty2.default)(this, "audioContext", void 0);
(0, _defineProperty2.default)(this, "analyser", void 0);
(0, _defineProperty2.default)(this, "frequencyBinCount", void 0);
(0, _defineProperty2.default)(this, "speakingThreshold", SPEAKING_THRESHOLD);
(0, _defineProperty2.default)(this, "speaking", false);
(0, _defineProperty2.default)(this, "volumeLooperTimeout", void 0);
(0, _defineProperty2.default)(this, "_disposed", false);
(0, _defineProperty2.default)(this, "_connected", false);
(0, _defineProperty2.default)(this, "onAddTrack", () => {
this.emit(CallFeedEvent.NewStream, this.stream);
});
_defineProperty(this, "onCallState", state => {
if (state === CallState.Connected) {
(0, _defineProperty2.default)(this, "onCallState", state => {
if (state === _call.CallState.Connected) {
this.connected = true;
} else if (state === CallState.Connecting) {
} else if (state === _call.CallState.Connecting) {
this.connected = false;
}
});
_defineProperty(this, "volumeLooper", () => {
(0, _defineProperty2.default)(this, "volumeLooper", () => {
if (!this.analyser) return;
if (!this.measuringVolumeActivity) return;
this.analyser.getFloatFrequencyData(this.frequencyBinCount);
@@ -111,7 +119,7 @@ export class CallFeed extends TypedEventEmitter {
this.initVolumeMeasuring();
}
if (opts.call) {
opts.call.addListener(CallEvent.State, this.onCallState);
opts.call.addListener(_call.CallEvent.State, this.onCallState);
this.onCallState(opts.call.state);
}
}
@@ -145,7 +153,7 @@ export class CallFeed extends TypedEventEmitter {
}
initVolumeMeasuring() {
if (!this.hasAudioTrack) return;
if (!this.audioContext) this.audioContext = acquireContext();
if (!this.audioContext) this.audioContext = (0, _audioContext.acquireContext)();
this.analyser = this.audioContext.createAnalyser();
this.analyser.fftSize = 512;
this.analyser.smoothingTimeConstant = 0.1;
@@ -158,8 +166,9 @@ export class CallFeed extends TypedEventEmitter {
* @returns member of the callRoom
*/
getMember() {
var _callRoom$getMember;
const callRoom = this.client.getRoom(this.roomId);
return callRoom?.getMember(this.userId) ?? null;
return (_callRoom$getMember = callRoom === null || callRoom === void 0 ? void 0 : callRoom.getMember(this.userId)) !== null && _callRoom$getMember !== void 0 ? _callRoom$getMember : null;
}
/**
@@ -241,8 +250,8 @@ export class CallFeed extends TypedEventEmitter {
clone() {
const mediaHandler = this.client.getMediaHandler();
const stream = this.stream.clone();
logger.log(`CallFeed clone() cloning stream (originalStreamId=${this.stream.id}, newStreamId${stream.id})`);
if (this.purpose === SDPStreamMetadataPurpose.Usermedia) {
_logger.logger.log(`CallFeed clone() cloning stream (originalStreamId=${this.stream.id}, newStreamId${stream.id})`);
if (this.purpose === _callEventTypes.SDPStreamMetadataPurpose.Usermedia) {
mediaHandler.userMediaStreams.push(stream);
} else {
mediaHandler.screensharingStreams.push(stream);
@@ -259,13 +268,14 @@ export class CallFeed extends TypedEventEmitter {
});
}
dispose() {
var _this$stream, _this$call;
clearTimeout(this.volumeLooperTimeout);
this.stream?.removeEventListener("addtrack", this.onAddTrack);
this.call?.removeListener(CallEvent.State, this.onCallState);
(_this$stream = this.stream) === null || _this$stream === void 0 ? void 0 : _this$stream.removeEventListener("addtrack", this.onAddTrack);
(_this$call = this.call) === null || _this$call === void 0 ? void 0 : _this$call.removeListener(_call.CallEvent.State, this.onCallState);
if (this.audioContext) {
this.audioContext = undefined;
this.analyser = undefined;
releaseContext();
(0, _audioContext.releaseContext)();
}
this._disposed = true;
this.emit(CallFeedEvent.Disposed);
@@ -284,4 +294,5 @@ export class CallFeed extends TypedEventEmitter {
this.emit(CallFeedEvent.LocalVolumeChanged, localVolume);
}
}
exports.CallFeed = CallFeed;
//# sourceMappingURL=callFeed.js.map