Class IndexedDBStore

A store for most of the data js-sdk needs to store, apart from crypto data

Hierarchy (view full)

Constructors

  • Construct a new Indexed Database store, which extends MemoryStore.

    This store functions like a MemoryStore except it periodically persists the contents of the store to an IndexedDB backend.

    All data is still kept in-memory but can be loaded from disk by calling startup(). This can make startup times quicker as a complete sync from the server is not required. This does not reduce memory usage as all the data is eagerly fetched when startup() is called.

    let opts = { indexedDB: window.indexedDB, localStorage: window.localStorage };
    let store = new IndexedDBStore(opts);
    let client = sdk.createClient({
    store: store,
    });
    await store.startup(); // load from indexed db, must be called after createClient
    client.startClient();
    client.on("sync", function(state, prevState, data) {
    if (state === "PREPARED") {
    console.log("Started up, now with go faster stripes!");
    }
    });

    Parameters

    • opts: IOpts

      Options object.

    Returns IndexedDBStore

Properties

accountData: Map<string, MatrixEvent> = ...

The backend instance. Call through to this API if you need to perform specific indexeddb actions like deleting the database.

clearOutOfBandMembers: DegradableFn<[roomId: string], void> = ...
createUser?: UserCreator
deleteAllData: DegradableFn<[], void> = ...

Delete all data from this store.

Returns

Promise which resolves if the data was deleted from the database.

getClientOptions: DegradableFn<[], undefined | IStoredClientOpts> = ...
getOutOfBandMembers: DegradableFn<[roomId: string], null | IStateEventWithRoomId[]> = ...

Returns the out-of-band membership events for this room that were previously loaded.

Returns

the events, potentially an empty array if OOB loading didn't yield any new members

Returns

in case the members for this room haven't been stored yet

getSavedSync: DegradableFn<[], null | ISavedSync> = ...

Returns

Promise which resolves with a sync response to restore the client state to where it was at the last save, or null if there is no saved sync data.

getSavedSyncToken: DegradableFn<[], null | string> = ...

Returns

If there is a saved sync, the nextBatch token for this sync, otherwise null.

isNewlyCreated: DegradableFn<[], boolean> = ...

Returns

whether or not the database was newly created in this session.

localStorage?: Storage
on: (<T>(event, listener) => this) = ...

Type declaration

    • <T>(event, listener): this
    • Adds the listener function to the end of the listeners array for the event named event.

      No checks are made to see if the listener has already been added. Multiple calls passing the same combination of event and listener will result in the listener being added, and called, multiple times.

      By default, event listeners are invoked in the order they are added. The TypedEventEmitter#prependListener method can be used as an alternative to add the event listener to the beginning of the listeners array.

      Type Parameters

      Parameters

      Returns this

      a reference to the EventEmitter, so that calls can be chained.

reallySave: DegradableFn<[], void> = ...
setOutOfBandMembers: DegradableFn<[roomId: string, membershipEvents: IStateEventWithRoomId[]], void> = ...

Stores the out-of-band membership events for this room. Note that it still makes sense to store an empty array as the OOB status for the room is marked as fetched, and getOutOfBandMembers will return an empty array instead of null

Param: membershipEvents

the membership events to store

Returns

when all members have been stored

setSyncData: DegradableFn<[syncData: ISyncResponse], void> = ...
startedUp: boolean = false
storeClientOptions: DegradableFn<[options: IStoredClientOpts], void> = ...
syncTs: number = 0
userModifiedMap: Record<string, number> = {}

Methods

  • All member functions of IndexedDBStore that access the backend use this wrapper to watch for failures after initial store startup, including QuotaExceededError as free disk space changes, etc.

    When IndexedDB fails via any of these paths, we degrade this back to a MemoryStore in place so that the current operation and all future ones are in-memory only.

    Type Parameters

    • A extends any[]
    • R = void

    Parameters

    • func: DegradableFn<A, R>

      The degradable work to do.

    • Optional fallback: keyof MemoryStore

      The method name for fallback.

    Returns DegradableFn<A, R>

    A wrapped member function.

  • Possibly write data to the database.

    Parameters

    • force: boolean = false

      True to force a save to happen

    Returns Promise<void>

    Promise resolves after the write completes (or immediately if no write is performed)

  • Retrieve scrollback for this room.

    Parameters

    • room: Room

      The matrix room

    • limit: number

      The max number of old events to retrieve.

    Returns MatrixEvent[]

    An array of objects which will be at most 'limit' length and at least 0. The objects are the raw event JSON.

  • Store user-scoped account data events. N.B. that account data only allows a single event per type, so multiple events with the same type will replace each other.

    Parameters

    Returns void

  • Store events for a room. The events have already been added to the timeline

    Parameters

    • room: Room

      The room to store events for.

    • events: MatrixEvent[]

      The events to store.

    • token: null | string

      The token associated with these events.

    • toStart: boolean

      True if these are paginated results.

    Returns void

  • Whether this store would like to save its data Note that obviously whether the store wants to save or not could change between calling this function and calling save().

    Returns boolean

    True if calling save() will actually save (at the time this function is called).

Generated using TypeDoc