UNPKG

@wireapp/cryptobox

Version:

High-level API with persistent storage for Proteus.

121 lines (105 loc) 4.51 kB
// Type definitions for dexie-observable v1.0.0-beta.4 // Project: https://github.com/dfahlander/Dexie.js/tree/master/addons/Dexie.Observable // Definitions by: David Fahlander <http://github.com/dfahlander> import Dexie from 'dexie'; import { IDatabaseChange } from '../api'; // // Extend Dexie interface // declare module 'dexie' { // Extend methods on db (db.sendMessage(), ...) interface Dexie { // Placeholder where to access the SyncNode class constructor. // (makes it valid to do new db.observable.SyncNode()) observable: { SyncNode: Dexie.Observable.SyncNodeConstructor; sendMessage( type: string, // Don't use 'response' as it is used internally by the framework message: any, // anything that can be saved by IndexedDB destinationNode: number, options: { wantReply?: boolean; } ): Promise<any> | void; // When wantReply is undefined or false return is void broadcastMessage( type: string, message: any, // anything that can be saved by IndexedDB bIncludeSelf: boolean ): void; } readonly _localSyncNode: Dexie.Observable.SyncNode; _changes: Dexie.Table<IDatabaseChange & {rev: number}, number>; _syncNodes: Dexie.Table<Dexie.Observable.SyncNode, number>; _intercomm: Dexie.Table<any, number>; } module Dexie { // Extended events db.on('changes', subscriber), ... interface DbEvents { (eventName: 'changes', subscriber: (changes: IDatabaseChange[], partial: boolean)=>void): void; (eventName: 'cleanup', subscriber: ()=>any): void; (eventName: 'message', subscriber: (msg: Dexie.Observable.MessageEvent)=>any): void; } // Extended IndexSpec with uuid boolean for primary key. interface IndexSpec { uuid: boolean; } var Observable: { (db: Dexie) : void; // // // createUUID: () => string; on: Observable.ObservableEventSet; localStorageImpl: { setItem(key: string, value: string): void, getItem(key: string): string, removeItem(key: string): void; }; _onStorage: (event: StorageEvent) => void; } // // Define Dexie.Observable // module Observable { // // Interfaces of Dexie.Observable // interface SyncNodeConstructor { new() : SyncNode; } /** * A SyncNode represents a local database instance that subscribes * to changes made on the database. * SyncNodes are stored in the _syncNodes table. * * Dexie.Syncable extends this interface and allows 'remote' nodes to be stored * as well. */ interface SyncNode { id?: number, myRevision: number, type: 'local' | 'remote', lastHeartBeat: number, deleteTimeStamp: number, // In case lastHeartBeat is too old, a value of now + HIBERNATE_GRACE_PERIOD will be set here. If reached before node wakes up, node will be deleted. isMaster: number // 1 if true. Not using Boolean because it's not possible to index Booleans. } interface ObservableEventSet extends Dexie.DexieEventSet { (eventName: 'latestRevisionIncremented', subscriber: (dbName: string, latestRevision: number) => void): void; (eventName: 'suicideNurseCall', subscriber: (dbName: string, nodeID: number) => void): void; (eventName: 'intercomm', subscriber: (dbName: string) => void): void; (eventName: 'beforeunload', subscriber: () => void): void; } // Object received by on('message') after sendMessage() or broadcastMessage() interface MessageEvent { id: number; type: string; message: any; destinationNode: number; wantReply?: boolean; resolve(result: any): void; reject(error: any): void; } } } } export default Dexie.Observable;