UNPKG

@wireapp/cryptobox

Version:

High-level API with persistent storage for Proteus.

51 lines (43 loc) 1.42 kB
import * as ProteusKeys from '@wireapp/proteus/dist/keys/root'; import * as ProteusSession from '@wireapp/proteus/dist/session/root'; import {CryptoboxStore} from '../store/root'; /** * This store holds IDs of PreKeys which should be deleted. */ class ReadOnlyStore implements ProteusSession.PreKeyStore { public prekeys: Array<number> = []; constructor(private store: CryptoboxStore) {} public get_prekeys(): Promise<ProteusKeys.PreKey[]> { return this.store.load_prekeys(); } /** * Releases PreKeys from list. Called when PreKeys have been deleted. */ public release_prekeys(deletedPreKeyIds: Array<number>): void { deletedPreKeyIds.forEach((id: number) => { const index: number = this.prekeys.indexOf(id); if (index > -1) { this.prekeys.splice(index, 1); } }); } /** * Returns a PreKey (if it's not marked for deletion) via the Cryptobox store. * @override */ get_prekey(prekey_id: number): Promise<ProteusKeys.PreKey | undefined> { if (this.prekeys.indexOf(prekey_id) !== -1) { return Promise.reject(new Error(`PreKey "${prekey_id}" not found.`)); } return this.store.load_prekey(prekey_id); } /** * Saves the PreKey ID which should get deleted. * @override */ remove(prekey_id: number): Promise<void> { this.prekeys.push(prekey_id); return Promise.resolve(); } } export default ReadOnlyStore;