/// declare const __APP_VERSION__: string; declare module 'browser-encrypt-attachment' { export interface EncryptedAttachmentInfo { v: string; key: { alg: string; key_ops: string[]; kty: string; k: string; ext: boolean; }; iv: string; hashes: { [alg: string]: string; }; } export interface EncryptedAttachment { data: ArrayBuffer; info: EncryptedAttachmentInfo; } export function encryptAttachment(dataBuffer: ArrayBuffer): Promise; export function decryptAttachment( dataBuffer: ArrayBuffer, info: EncryptedAttachmentInfo ): Promise; } declare module '*.svg' { const content: string; export default content; } // opus-recorder ships no types. We only touch a small slice of the API: the // constructor config, start/stop, and the data/stop callbacks. See // docs/plans/voice_messages.md ยง3 (Phase 2). declare module 'opus-recorder' { export interface OpusRecorderConfig { encoderPath?: string; sourceNode?: MediaStreamAudioSourceNode; encoderSampleRate?: number; numberOfChannels?: number; encoderApplication?: number; encoderBitRate?: number; encoderFrameSize?: number; maxFramesPerPage?: number; resampleQuality?: number; streamPages?: boolean; mediaTrackConstraints?: boolean | MediaTrackConstraints; } export default class Recorder { constructor(config?: OpusRecorderConfig); ondataavailable: ((data: Uint8Array) => void) | null; onstart: (() => void) | null; onstop: (() => void) | null; start(): Promise; stop(): Promise; readonly audioContext?: AudioContext; } }