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,14 @@
import _defineProperty from "@babel/runtime/helpers/defineProperty";
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.EventTimeline = exports.Direction = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _logger = require("../logger");
var _roomState2 = require("./room-state");
var _event = require("../@types/event");
/*
Copyright 2016 - 2021 The Matrix.org Foundation C.I.C.
@@ -14,15 +24,13 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import { RoomState } from "./room-state.js";
import { EventType } from "../@types/event.js";
export let Direction = /*#__PURE__*/function (Direction) {
let Direction = /*#__PURE__*/function (Direction) {
Direction["Backward"] = "b";
Direction["Forward"] = "f";
return Direction;
}({});
export class EventTimeline {
exports.Direction = Direction;
class EventTimeline {
/**
* Static helper method to set sender and target properties
*
@@ -31,7 +39,27 @@ export class EventTimeline {
* @param toStartOfTimeline - if true the event's forwardLooking flag is set false
*/
static setEventMetadata(event, stateContext, toStartOfTimeline) {
event.setMetadata(stateContext, toStartOfTimeline);
var _event$sender, _event$target;
// When we try to generate a sentinel member before we have that member
// in the members object, we still generate a sentinel but it doesn't
// have a membership event, so test to see if events.member is set. We
// check this to avoid overriding non-sentinel members by sentinel ones
// when adding the event to a filtered timeline
if (!((_event$sender = event.sender) !== null && _event$sender !== void 0 && (_event$sender = _event$sender.events) !== null && _event$sender !== void 0 && _event$sender.member)) {
event.sender = stateContext.getSentinelMember(event.getSender());
}
if (!((_event$target = event.target) !== null && _event$target !== void 0 && (_event$target = _event$target.events) !== null && _event$target !== void 0 && _event$target.member) && event.getType() === _event.EventType.RoomMember) {
event.target = stateContext.getSentinelMember(event.getStateKey());
}
if (event.isState()) {
// room state has no concept of 'old' or 'current', but we want the
// room state to regress back to previous values if toStartOfTimeline
// is set, which means inspecting prev_content if it exists. This
// is done by toggling the forwardLooking flag.
if (toStartOfTimeline) {
event.forwardLooking = false;
}
}
}
/**
* Construct a new EventTimeline
@@ -53,27 +81,28 @@ export class EventTimeline {
* @param eventTimelineSet - the set of timelines this is part of
*/
constructor(eventTimelineSet) {
_defineProperty(this, "roomId", void 0);
_defineProperty(this, "name", void 0);
_defineProperty(this, "events", []);
_defineProperty(this, "baseIndex", 0);
_defineProperty(this, "startState", void 0);
_defineProperty(this, "endState", void 0);
var _eventTimelineSet$roo, _eventTimelineSet$roo2;
this.eventTimelineSet = eventTimelineSet;
(0, _defineProperty2.default)(this, "roomId", void 0);
(0, _defineProperty2.default)(this, "name", void 0);
(0, _defineProperty2.default)(this, "events", []);
(0, _defineProperty2.default)(this, "baseIndex", 0);
(0, _defineProperty2.default)(this, "startState", void 0);
(0, _defineProperty2.default)(this, "endState", void 0);
// If we have a roomId then we delegate pagination token storage to the room state objects `startState` and
// `endState`, but for things like the notification timeline which mix multiple rooms we store the tokens ourselves.
_defineProperty(this, "startToken", null);
_defineProperty(this, "endToken", null);
_defineProperty(this, "prevTimeline", null);
_defineProperty(this, "nextTimeline", null);
_defineProperty(this, "paginationRequests", {
(0, _defineProperty2.default)(this, "startToken", null);
(0, _defineProperty2.default)(this, "endToken", null);
(0, _defineProperty2.default)(this, "prevTimeline", null);
(0, _defineProperty2.default)(this, "nextTimeline", null);
(0, _defineProperty2.default)(this, "paginationRequests", {
[Direction.Backward]: null,
[Direction.Forward]: null
});
this.eventTimelineSet = eventTimelineSet;
this.roomId = eventTimelineSet.room?.roomId ?? null;
this.roomId = (_eventTimelineSet$roo = (_eventTimelineSet$roo2 = eventTimelineSet.room) === null || _eventTimelineSet$roo2 === void 0 ? void 0 : _eventTimelineSet$roo2.roomId) !== null && _eventTimelineSet$roo !== void 0 ? _eventTimelineSet$roo : null;
if (this.roomId) {
this.startState = new RoomState(this.roomId);
this.endState = new RoomState(this.roomId);
this.startState = new _roomState2.RoomState(this.roomId);
this.endState = new _roomState2.RoomState(this.roomId);
}
// this is used by client.js
@@ -96,13 +125,14 @@ export class EventTimeline {
initialiseState(stateEvents, {
timelineWasEmpty
} = {}) {
var _this$startState, _this$endState;
if (this.events.length > 0) {
throw new Error("Cannot initialise state after events are added");
}
this.startState?.setStateEvents(stateEvents, {
(_this$startState = this.startState) === null || _this$startState === void 0 ? void 0 : _this$startState.setStateEvents(stateEvents, {
timelineWasEmpty
});
this.endState?.setStateEvents(stateEvents, {
(_this$endState = this.endState) === null || _this$endState === void 0 ? void 0 : _this$endState.setStateEvents(stateEvents, {
timelineWasEmpty
});
}
@@ -121,7 +151,7 @@ export class EventTimeline {
forkLive(direction) {
const forkState = this.getState(direction);
const timeline = new EventTimeline(this.eventTimelineSet);
timeline.startState = forkState?.clone();
timeline.startState = forkState === null || forkState === void 0 ? void 0 : forkState.clone();
// Now clobber the end state of the new live timeline with that from the
// previous live timeline. It will be identical except that we'll keep
// using the same RoomMember objects for the 'live' set of members with any
@@ -129,7 +159,7 @@ export class EventTimeline {
timeline.endState = forkState;
// Firstly, we just stole the current timeline's end state, so it needs a new one.
// Make an immutable copy of the state so back pagination will get the correct sentinels.
this.endState = forkState?.clone();
this.endState = forkState === null || forkState === void 0 ? void 0 : forkState.clone();
return timeline;
}
@@ -145,8 +175,8 @@ export class EventTimeline {
fork(direction) {
const forkState = this.getState(direction);
const timeline = new EventTimeline(this.eventTimelineSet);
timeline.startState = forkState?.clone();
timeline.endState = forkState?.clone();
timeline.startState = forkState === null || forkState === void 0 ? void 0 : forkState.clone();
timeline.endState = forkState === null || forkState === void 0 ? void 0 : forkState.clone();
return timeline;
}
@@ -218,7 +248,7 @@ export class EventTimeline {
/**
* Get a pagination token
*
* @param direction - EventTimeline.BACKWARDS to get the pagination
* @param direction - EventTimeline.BACKWARDS to get the pagination
* token for going backwards in time; EventTimeline.FORWARDS to get the
* pagination token for going forwards in time.
*
@@ -305,12 +335,25 @@ export class EventTimeline {
* @param event - new event
* @param options - addEvent options
*/
addEvent(event, {
toStartOfTimeline,
roomState,
timelineWasEmpty,
addToState
}) {
/**
* @deprecated In favor of the overload with `IAddEventOptions`
*/
addEvent(event, toStartOfTimelineOrOpts, roomState) {
let toStartOfTimeline = !!toStartOfTimelineOrOpts;
let timelineWasEmpty;
if (typeof toStartOfTimelineOrOpts === "object") {
({
toStartOfTimeline,
roomState,
timelineWasEmpty
} = toStartOfTimelineOrOpts);
} else if (toStartOfTimelineOrOpts !== undefined) {
// Deprecation warning
// FIXME: Remove after 2023-06-01 (technical debt)
_logger.logger.warn("Overload deprecated: " + "`EventTimeline.addEvent(event, toStartOfTimeline, roomState?)` " + "is deprecated in favor of the overload with `EventTimeline.addEvent(event, IAddEventOptions)`");
}
if (!roomState) {
roomState = toStartOfTimeline ? this.startState : this.endState;
}
@@ -319,8 +362,9 @@ export class EventTimeline {
EventTimeline.setEventMetadata(event, roomState, toStartOfTimeline);
// modify state but only on unfiltered timelineSets
if (addToState && event.isState() && timelineSet.room.getUnfilteredTimelineSet() === timelineSet) {
roomState?.setStateEvents([event], {
if (event.isState() && timelineSet.room.getUnfilteredTimelineSet() === timelineSet) {
var _roomState;
(_roomState = roomState) === null || _roomState === void 0 ? void 0 : _roomState.setStateEvents([event], {
timelineWasEmpty
});
// it is possible that the act of setting the state event means we
@@ -333,7 +377,7 @@ export class EventTimeline {
// back in time, else we'll set the .sender value for BEFORE the given
// member event, whereas we want to set the .sender value for the ACTUAL
// member event itself.
if (!event.sender || event.getType() === EventType.RoomMember && !toStartOfTimeline) {
if (!event.sender || event.getType() === _event.EventType.RoomMember && !toStartOfTimeline) {
EventTimeline.setEventMetadata(event, roomState, toStartOfTimeline);
}
}
@@ -361,13 +405,13 @@ export class EventTimeline {
*
* @internal
*/
insertEvent(event, insertIndex, roomState, addToState) {
insertEvent(event, insertIndex, roomState) {
const timelineSet = this.getTimelineSet();
if (timelineSet.room) {
EventTimeline.setEventMetadata(event, roomState, false);
// modify state but only on unfiltered timelineSets
if (addToState && event.isState() && timelineSet.room.getUnfilteredTimelineSet() === timelineSet) {
if (event.isState() && timelineSet.room.getUnfilteredTimelineSet() === timelineSet) {
roomState.setStateEvents([event], {});
// it is possible that the act of setting the state event means we
// can set more metadata (specifically sender/target props), so try
@@ -379,7 +423,7 @@ export class EventTimeline {
// back in time, else we'll set the .sender value for BEFORE the given
// member event, whereas we want to set the .sender value for the ACTUAL
// member event itself.
if (!event.sender || event.getType() === EventType.RoomMember) {
if (!event.sender || event.getType() === _event.EventType.RoomMember) {
EventTimeline.setEventMetadata(event, roomState, false);
}
}
@@ -416,14 +460,15 @@ export class EventTimeline {
return this.name;
}
}
exports.EventTimeline = EventTimeline;
/**
* Symbolic constant for methods which take a 'direction' argument:
* refers to the start of the timeline, or backwards in time.
*/
_defineProperty(EventTimeline, "BACKWARDS", Direction.Backward);
(0, _defineProperty2.default)(EventTimeline, "BACKWARDS", Direction.Backward);
/**
* Symbolic constant for methods which take a 'direction' argument:
* refers to the end of the timeline, or forwards in time.
*/
_defineProperty(EventTimeline, "FORWARDS", Direction.Forward);
(0, _defineProperty2.default)(EventTimeline, "FORWARDS", Direction.Forward);
//# sourceMappingURL=event-timeline.js.map