UNPKG

cryptobox-hd

Version:

High-level API with persistent storage for Proteus-HD.

49 lines (43 loc) 1.3 kB
import * as Proteus from "proteus-hd"; import {CryptoboxStore} from "./CryptoboxStore"; /** * This store holds IDs of PreKeys which should be deleted. */ export class ReadOnlyStore extends Proteus.session.PreKeyStore { public prekeys: Array<number> = []; constructor(private store: CryptoboxStore) { super(); } /** * 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<Proteus.keys.PreKey> { if (this.prekeys.indexOf(prekey_id) !== -1) { return Promise.reject(new Error(`PreKey "${prekey_id}" not found.`)); } return this.store.load_prekey(prekey_id) .then(function (prekey: Proteus.keys.PreKey) { return prekey; }); } /** * Saves the PreKey ID which should get deleted. * @override */ remove(prekey_id: number): Promise<number> { this.prekeys.push(prekey_id); return Promise.resolve(prekey_id); } }