matrix-js-sdk
Version:
Matrix Client-Server SDK for Javascript
231 lines • 8.61 kB
TypeScript
import { Room } from "./models/room";
import { IStoredClientOpts, MatrixClient } from "./client";
import { MatrixError } from "./http-api";
export declare enum SyncState {
/** Emitted after we try to sync more than `FAILED_SYNC_ERROR_THRESHOLD`
* times and are still failing. Or when we enounter a hard error like the
* token being invalid. */
Error = "ERROR",
/** Emitted after the first sync events are ready (this could even be sync
* events from the cache) */
Prepared = "PREPARED",
/** Emitted when the sync loop is no longer running */
Stopped = "STOPPED",
/** Emitted after each sync request happens */
Syncing = "SYNCING",
/** Emitted after a connectivity error and we're ready to start syncing again */
Catchup = "CATCHUP",
/** Emitted for each time we try reconnecting. Will switch to `Error` after
* we reach the `FAILED_SYNC_ERROR_THRESHOLD`
*/
Reconnecting = "RECONNECTING"
}
export interface ISyncStateData {
error?: MatrixError;
oldSyncToken?: string;
nextSyncToken?: string;
catchingUp?: boolean;
fromCache?: boolean;
}
/**
* <b>Internal class - unstable.</b>
* Construct an entity which is able to sync with a homeserver.
* @constructor
* @param {MatrixClient} client The matrix client instance to use.
* @param {Object} opts Config options
* @param {module:crypto=} opts.crypto Crypto manager
* @param {Function=} opts.canResetEntireTimeline A function which is called
* with a room ID and returns a boolean. It should return 'true' if the SDK can
* SAFELY remove events from this room. It may not be safe to remove events if
* there are other references to the timelines for this room.
* Default: returns false.
* @param {Boolean=} opts.disablePresence True to perform syncing without automatically
* updating presence.
*/
export declare class SyncApi {
private readonly client;
private readonly opts;
private _peekRoom;
private currentSyncRequest;
private syncState;
private syncStateData;
private catchingUp;
private running;
private keepAliveTimer;
private connectionReturnedDefer;
private notifEvents;
private failedSyncCount;
private storeIsInvalid;
constructor(client: MatrixClient, opts?: Partial<IStoredClientOpts>);
/**
* @param {string} roomId
* @return {Room}
*/
createRoom(roomId: string): Room;
/** When we see the marker state change in the room, we know there is some
* new historical messages imported by MSC2716 `/batch_send` somewhere in
* the room and we need to throw away the timeline to make sure the
* historical messages are shown when we paginate `/messages` again.
* @param {Room} room The room where the marker event was sent
* @param {MatrixEvent} markerEvent The new marker event
* @param {ISetStateOptions} setStateOptions When `timelineWasEmpty` is set
* as `true`, the given marker event will be ignored
*/
private onMarkerStateEvent;
/**
* Sync rooms the user has left.
* @return {Promise} Resolved when they've been added to the store.
*/
syncLeftRooms(): Promise<any[]>;
/**
* Peek into a room. This will result in the room in question being synced so it
* is accessible via getRooms(). Live updates for the room will be provided.
* @param {string} roomId The room ID to peek into.
* @return {Promise} A promise which resolves once the room has been added to the
* store.
*/
peek(roomId: string): Promise<Room>;
/**
* Stop polling for updates in the peeked room. NOPs if there is no room being
* peeked.
*/
stopPeeking(): void;
/**
* Do a peek room poll.
* @param {Room} peekRoom
* @param {string?} token from= token
*/
private peekPoll;
/**
* Returns the current state of this sync object
* @see module:client~MatrixClient#event:"sync"
* @return {?String}
*/
getSyncState(): SyncState;
/**
* Returns the additional data object associated with
* the current sync state, or null if there is no
* such data.
* Sync errors, if available, are put in the 'error' key of
* this object.
* @return {?Object}
*/
getSyncStateData(): ISyncStateData;
recoverFromSyncStartupError(savedSyncPromise: Promise<void>, err: MatrixError): Promise<void>;
/**
* Is the lazy loading option different than in previous session?
* @param {boolean} lazyLoadMembers current options for lazy loading
* @return {boolean} whether or not the option has changed compared to the previous session */
private wasLazyLoadingToggled;
private shouldAbortSync;
/**
* Main entry point
*/
sync(): void;
/**
* Stops the sync object from syncing.
*/
stop(): void;
/**
* Retry a backed off syncing request immediately. This should only be used when
* the user <b>explicitly</b> attempts to retry their lost connection.
* @return {boolean} True if this resulted in a request being retried.
*/
retryImmediately(): boolean;
/**
* Process a single set of cached sync data.
* @param {Object} savedSync a saved sync that was persisted by a store. This
* should have been acquired via client.store.getSavedSync().
*/
private syncFromCache;
/**
* Invoke me to do /sync calls
* @param {Object} syncOptions
* @param {string} syncOptions.filterId
* @param {boolean} syncOptions.hasSyncedBefore
*/
private doSync;
private doSyncRequest;
private getSyncParams;
private onSyncError;
/**
* Process data returned from a sync response and propagate it
* into the model objects
*
* @param {Object} syncEventData Object containing sync tokens associated with this sync
* @param {Object} data The response from /sync
*/
private processSyncResponse;
/**
* Starts polling the connectivity check endpoint
* @param {number} delay How long to delay until the first poll.
* defaults to a short, randomised interval (to prevent
* tight-looping if /versions succeeds but /sync etc. fail).
* @return {promise} which resolves once the connection returns
*/
private startKeepAlives;
/**
* Make a dummy call to /_matrix/client/versions, to see if the HS is
* reachable.
*
* On failure, schedules a call back to itself. On success, resolves
* this.connectionReturnedDefer.
*
* @param {boolean} connDidFail True if a connectivity failure has been detected. Optional.
*/
private pokeKeepAlive;
/**
* @param {Object} obj
* @return {Object[]}
*/
private mapSyncResponseToRoomArray;
/**
* @param {Object} obj
* @param {Room} room
* @param {boolean} decrypt
* @return {MatrixEvent[]}
*/
private mapSyncEventsFormat;
/**
* @param {Room} room
*/
private resolveInvites;
/**
* @param {Room} room
* @param {MatrixEvent[]} stateEventList A list of state events. This is the state
* at the *START* of the timeline list if it is supplied.
* @param {MatrixEvent[]} [timelineEventList] A list of timeline events, including threaded. Lower index
* @param {boolean} fromCache whether the sync response came from cache
* is earlier in time. Higher index is later.
*/
private processRoomEvents;
/**
* Takes a list of timelineEvents and adds and adds to notifEvents
* as appropriate.
* This must be called after the room the events belong to has been stored.
*
* @param {Room} room
* @param {MatrixEvent[]} [timelineEventList] A list of timeline events. Lower index
* is earlier in time. Higher index is later.
*/
private processEventsForNotifs;
/**
* @return {string}
*/
private getGuestFilter;
/**
* Sets the sync state and emits an event to say so
* @param {String} newState The new state string
* @param {Object} data Object of additional data to emit in the event
*/
private updateSyncState;
/**
* Event handler for the 'online' event
* This event is generally unreliable and precise behaviour
* varies between browsers, so we poll for connectivity too,
* but this might help us reconnect a little faster.
*/
private onOnline;
}
export declare function _createAndReEmitRoom(client: MatrixClient, roomId: string, opts: Partial<IStoredClientOpts>): Room;
//# sourceMappingURL=sync.d.ts.map