summaryrefslogtreecommitdiff
path: root/includes/external/matrix/node_modules/matrix-js-sdk/lib/sliding-sync.d.ts
diff options
context:
space:
mode:
Diffstat (limited to 'includes/external/matrix/node_modules/matrix-js-sdk/lib/sliding-sync.d.ts')
-rw-r--r--includes/external/matrix/node_modules/matrix-js-sdk/lib/sliding-sync.d.ts343
1 files changed, 343 insertions, 0 deletions
diff --git a/includes/external/matrix/node_modules/matrix-js-sdk/lib/sliding-sync.d.ts b/includes/external/matrix/node_modules/matrix-js-sdk/lib/sliding-sync.d.ts
new file mode 100644
index 0000000..e4eface
--- /dev/null
+++ b/includes/external/matrix/node_modules/matrix-js-sdk/lib/sliding-sync.d.ts
@@ -0,0 +1,343 @@
+import { MatrixClient } from "./client";
+import { IRoomEvent, IStateEvent } from "./sync-accumulator";
+import { TypedEventEmitter } from "./models/typed-event-emitter";
+export declare const MSC3575_WILDCARD = "*";
+export declare const MSC3575_STATE_KEY_ME = "$ME";
+export declare const MSC3575_STATE_KEY_LAZY = "$LAZY";
+/**
+ * Represents a subscription to a room or set of rooms. Controls which events are returned.
+ */
+export interface MSC3575RoomSubscription {
+ required_state?: string[][];
+ timeline_limit?: number;
+ include_old_rooms?: MSC3575RoomSubscription;
+}
+/**
+ * Controls which rooms are returned in a given list.
+ */
+export interface MSC3575Filter {
+ is_dm?: boolean;
+ is_encrypted?: boolean;
+ is_invite?: boolean;
+ room_name_like?: string;
+ room_types?: string[];
+ not_room_types?: string[];
+ spaces?: string[];
+ tags?: string[];
+ not_tags?: string[];
+}
+/**
+ * Represents a list subscription.
+ */
+export interface MSC3575List extends MSC3575RoomSubscription {
+ ranges: number[][];
+ sort?: string[];
+ filters?: MSC3575Filter;
+ slow_get_all_rooms?: boolean;
+}
+/**
+ * A complete Sliding Sync request.
+ */
+export interface MSC3575SlidingSyncRequest {
+ lists?: Record<string, MSC3575List>;
+ unsubscribe_rooms?: string[];
+ room_subscriptions?: Record<string, MSC3575RoomSubscription>;
+ extensions?: object;
+ txn_id?: string;
+ pos?: string;
+ timeout?: number;
+ clientTimeout?: number;
+}
+export interface MSC3575RoomData {
+ name: string;
+ required_state: IStateEvent[];
+ timeline: (IRoomEvent | IStateEvent)[];
+ notification_count?: number;
+ highlight_count?: number;
+ joined_count?: number;
+ invited_count?: number;
+ invite_state?: IStateEvent[];
+ initial?: boolean;
+ limited?: boolean;
+ is_dm?: boolean;
+ prev_batch?: string;
+ num_live?: number;
+}
+interface ListResponse {
+ count: number;
+ ops: Operation[];
+}
+interface BaseOperation {
+ op: string;
+}
+interface DeleteOperation extends BaseOperation {
+ op: "DELETE";
+ index: number;
+}
+interface InsertOperation extends BaseOperation {
+ op: "INSERT";
+ index: number;
+ room_id: string;
+}
+interface InvalidateOperation extends BaseOperation {
+ op: "INVALIDATE";
+ range: [number, number];
+}
+interface SyncOperation extends BaseOperation {
+ op: "SYNC";
+ range: [number, number];
+ room_ids: string[];
+}
+type Operation = DeleteOperation | InsertOperation | InvalidateOperation | SyncOperation;
+/**
+ * A complete Sliding Sync response
+ */
+export interface MSC3575SlidingSyncResponse {
+ pos: string;
+ txn_id?: string;
+ lists: Record<string, ListResponse>;
+ rooms: Record<string, MSC3575RoomData>;
+ extensions: Record<string, object>;
+}
+export declare enum SlidingSyncState {
+ /**
+ * Fired by SlidingSyncEvent.Lifecycle event immediately before processing the response.
+ */
+ RequestFinished = "FINISHED",
+ /**
+ * Fired by SlidingSyncEvent.Lifecycle event immediately after all room data listeners have been
+ * invoked, but before list listeners.
+ */
+ Complete = "COMPLETE"
+}
+/**
+ * When onResponse extensions should be invoked: before or after processing the main response.
+ */
+export declare enum ExtensionState {
+ PreProcess = "ExtState.PreProcess",
+ PostProcess = "ExtState.PostProcess"
+}
+/**
+ * An interface that must be satisfied to register extensions
+ */
+export interface Extension<Req extends {}, Res extends {}> {
+ /**
+ * The extension name to go under 'extensions' in the request body.
+ * @returns The JSON key.
+ */
+ name(): string;
+ /**
+ * A function which is called when the request JSON is being formed.
+ * Returns the data to insert under this key.
+ * @param isInitial - True when this is part of the initial request (send sticky params)
+ * @returns The request JSON to send.
+ */
+ onRequest(isInitial: boolean): Req | undefined;
+ /**
+ * A function which is called when there is response JSON under this extension.
+ * @param data - The response JSON under the extension name.
+ */
+ onResponse(data: Res): void;
+ /**
+ * Controls when onResponse should be called.
+ * @returns The state when it should be called.
+ */
+ when(): ExtensionState;
+}
+/**
+ * Events which can be fired by the SlidingSync class. These are designed to provide different levels
+ * of information when processing sync responses.
+ * - RoomData: concerns rooms, useful for SlidingSyncSdk to update its knowledge of rooms.
+ * - Lifecycle: concerns callbacks at various well-defined points in the sync process.
+ * - List: concerns lists, useful for UI layers to re-render room lists.
+ * Specifically, the order of event invocation is:
+ * - Lifecycle (state=RequestFinished)
+ * - RoomData (N times)
+ * - Lifecycle (state=Complete)
+ * - List (at most once per list)
+ */
+export declare enum SlidingSyncEvent {
+ /**
+ * This event fires when there are updates for a room. Fired as and when rooms are encountered
+ * in the response.
+ */
+ RoomData = "SlidingSync.RoomData",
+ /**
+ * This event fires at various points in the /sync loop lifecycle.
+ * - SlidingSyncState.RequestFinished: Fires after we receive a valid response but before the
+ * response has been processed. Perform any pre-process steps here. If there was a problem syncing,
+ * `err` will be set (e.g network errors).
+ * - SlidingSyncState.Complete: Fires after all SlidingSyncEvent.RoomData have been fired but before
+ * SlidingSyncEvent.List.
+ */
+ Lifecycle = "SlidingSync.Lifecycle",
+ /**
+ * This event fires whenever there has been a change to this list index. It fires exactly once
+ * per list, even if there were multiple operations for the list.
+ * It fires AFTER Lifecycle and RoomData events.
+ */
+ List = "SlidingSync.List"
+}
+export type SlidingSyncEventHandlerMap = {
+ [SlidingSyncEvent.RoomData]: (roomId: string, roomData: MSC3575RoomData) => void;
+ [SlidingSyncEvent.Lifecycle]: (state: SlidingSyncState, resp: MSC3575SlidingSyncResponse | null, err?: Error) => void;
+ [SlidingSyncEvent.List]: (listKey: string, joinedCount: number, roomIndexToRoomId: Record<number, string>) => void;
+};
+/**
+ * SlidingSync is a high-level data structure which controls the majority of sliding sync.
+ * It has no hooks into JS SDK except for needing a MatrixClient to perform the HTTP request.
+ * This means this class (and everything it uses) can be used in isolation from JS SDK if needed.
+ * To hook this up with the JS SDK, you need to use SlidingSyncSdk.
+ */
+export declare class SlidingSync extends TypedEventEmitter<SlidingSyncEvent, SlidingSyncEventHandlerMap> {
+ private readonly proxyBaseUrl;
+ private roomSubscriptionInfo;
+ private readonly client;
+ private readonly timeoutMS;
+ private lists;
+ private listModifiedCount;
+ private terminated;
+ private needsResend;
+ private txnId;
+ private txnIdDefers;
+ private extensions;
+ private desiredRoomSubscriptions;
+ private confirmedRoomSubscriptions;
+ private customSubscriptions;
+ private roomIdToCustomSubscription;
+ private pendingReq?;
+ private abortController?;
+ /**
+ * Create a new sliding sync instance
+ * @param proxyBaseUrl - The base URL of the sliding sync proxy
+ * @param lists - The lists to use for sliding sync.
+ * @param roomSubscriptionInfo - The params to use for room subscriptions.
+ * @param client - The client to use for /sync calls.
+ * @param timeoutMS - The number of milliseconds to wait for a response.
+ */
+ constructor(proxyBaseUrl: string, lists: Map<string, MSC3575List>, roomSubscriptionInfo: MSC3575RoomSubscription, client: MatrixClient, timeoutMS: number);
+ /**
+ * Add a custom room subscription, referred to by an arbitrary name. If a subscription with this
+ * name already exists, it is replaced. No requests are sent by calling this method.
+ * @param name - The name of the subscription. Only used to reference this subscription in
+ * useCustomSubscription.
+ * @param sub - The subscription information.
+ */
+ addCustomSubscription(name: string, sub: MSC3575RoomSubscription): void;
+ /**
+ * Use a custom subscription previously added via addCustomSubscription. No requests are sent
+ * by calling this method. Use modifyRoomSubscriptions to resend subscription information.
+ * @param roomId - The room to use the subscription in.
+ * @param name - The name of the subscription. If this name is unknown, the default subscription
+ * will be used.
+ */
+ useCustomSubscription(roomId: string, name: string): void;
+ /**
+ * Get the room index data for a list.
+ * @param key - The list key
+ * @returns The list data which contains the rooms in this list
+ */
+ getListData(key: string): {
+ joinedCount: number;
+ roomIndexToRoomId: Record<number, string>;
+ } | null;
+ /**
+ * Get the full request list parameters for a list index. This function is provided for callers to use
+ * in conjunction with setList to update fields on an existing list.
+ * @param key - The list key to get the params for.
+ * @returns A copy of the list params or undefined.
+ */
+ getListParams(key: string): MSC3575List | null;
+ /**
+ * Set new ranges for an existing list. Calling this function when _only_ the ranges have changed
+ * is more efficient than calling setList(index,list) as this function won't resend sticky params,
+ * whereas setList always will.
+ * @param key - The list key to modify
+ * @param ranges - The new ranges to apply.
+ * @returns A promise which resolves to the transaction ID when it has been received down sync
+ * (or rejects with the transaction ID if the action was not applied e.g the request was cancelled
+ * immediately after sending, in which case the action will be applied in the subsequent request)
+ */
+ setListRanges(key: string, ranges: number[][]): Promise<string>;
+ /**
+ * Add or replace a list. Calling this function will interrupt the /sync request to resend new
+ * lists.
+ * @param key - The key to modify
+ * @param list - The new list parameters.
+ * @returns A promise which resolves to the transaction ID when it has been received down sync
+ * (or rejects with the transaction ID if the action was not applied e.g the request was cancelled
+ * immediately after sending, in which case the action will be applied in the subsequent request)
+ */
+ setList(key: string, list: MSC3575List): Promise<string>;
+ /**
+ * Get the room subscriptions for the sync API.
+ * @returns A copy of the desired room subscriptions.
+ */
+ getRoomSubscriptions(): Set<string>;
+ /**
+ * Modify the room subscriptions for the sync API. Calling this function will interrupt the
+ * /sync request to resend new subscriptions. If the /sync stream has not started, this will
+ * prepare the room subscriptions for when start() is called.
+ * @param s - The new desired room subscriptions.
+ * @returns A promise which resolves to the transaction ID when it has been received down sync
+ * (or rejects with the transaction ID if the action was not applied e.g the request was cancelled
+ * immediately after sending, in which case the action will be applied in the subsequent request)
+ */
+ modifyRoomSubscriptions(s: Set<string>): Promise<string>;
+ /**
+ * Modify which events to retrieve for room subscriptions. Invalidates all room subscriptions
+ * such that they will be sent up afresh.
+ * @param rs - The new room subscription fields to fetch.
+ * @returns A promise which resolves to the transaction ID when it has been received down sync
+ * (or rejects with the transaction ID if the action was not applied e.g the request was cancelled
+ * immediately after sending, in which case the action will be applied in the subsequent request)
+ */
+ modifyRoomSubscriptionInfo(rs: MSC3575RoomSubscription): Promise<string>;
+ /**
+ * Register an extension to send with the /sync request.
+ * @param ext - The extension to register.
+ */
+ registerExtension(ext: Extension<any, any>): void;
+ private getExtensionRequest;
+ private onPreExtensionsResponse;
+ private onPostExtensionsResponse;
+ /**
+ * Invoke all attached room data listeners.
+ * @param roomId - The room which received some data.
+ * @param roomData - The raw sliding sync response JSON.
+ */
+ private invokeRoomDataListeners;
+ /**
+ * Invoke all attached lifecycle listeners.
+ * @param state - The Lifecycle state
+ * @param resp - The raw sync response JSON
+ * @param err - Any error that occurred when making the request e.g. network errors.
+ */
+ private invokeLifecycleListeners;
+ private shiftRight;
+ private shiftLeft;
+ private removeEntry;
+ private addEntry;
+ private processListOps;
+ /**
+ * Resend a Sliding Sync request. Used when something has changed in the request. Resolves with
+ * the transaction ID of this request on success. Rejects with the transaction ID of this request
+ * on failure.
+ */
+ resend(): Promise<string>;
+ private resolveTransactionDefers;
+ /**
+ * Stop syncing with the server.
+ */
+ stop(): void;
+ /**
+ * Re-setup this connection e.g in the event of an expired session.
+ */
+ private resetup;
+ /**
+ * Start syncing with the server. Blocks until stopped.
+ */
+ start(): Promise<void>;
+}
+export {};
+//# sourceMappingURL=sliding-sync.d.ts.map \ No newline at end of file