// Captures the globals put in place by preload.js, background.js and others import * as Backbone from 'backbone'; import * as Underscore from 'underscore'; import { Ref } from 'react'; import { ConversationModelCollectionType, ConversationModelType, MessageModelCollectionType, MessageModelType, } from './model-types.d'; import { LibSignalType, SignalProtocolAddressClass, StorageType, } from './libsignal.d'; import { ContactRecordIdentityState, TextSecureType } from './textsecure.d'; import { WebAPIConnectType } from './textsecure/WebAPI'; import { CallingClass } from './services/calling'; import * as Crypto from './Crypto'; import { LocalizerType } from './types/Util'; import { CallHistoryDetailsType } from './types/Calling'; import { ColorType } from './types/Colors'; import { ConversationController } from './ConversationController'; import { SendOptionsType } from './textsecure/SendMessage'; import Data from './sql/Client'; export { Long } from 'long'; type TaskResultType = any; declare global { interface Window { dcodeIO: DCodeIOType; getAlwaysRelayCalls: () => Promise; getCallRingtoneNotification: () => Promise; getCallSystemNotification: () => Promise; getConversations: () => ConversationModelCollectionType; getEnvironment: () => string; getExpiration: () => string; getGuid: () => string; getInboxCollection: () => ConversationModelCollectionType; getIncomingCallNotification: () => Promise; getMediaCameraPermissions: () => Promise; getMediaPermissions: () => Promise; getSocketStatus: () => number; getTitle: () => string; showCallingPermissionsPopup: (forCamera: boolean) => Promise; i18n: LocalizerType; isValidGuid: (maybeGuid: string) => boolean; libphonenumber: { util: { getRegionCodeForNumber: (number: string) => string; }; }; libsignal: LibSignalType; log: { info: LoggerType; warn: LoggerType; error: LoggerType; }; normalizeUuids: (obj: any, paths: Array, context: string) => any; platform: string; restart: () => void; showWindow: () => void; setBadgeCount: (count: number) => void; storage: { put: (key: string, value: any) => void; remove: (key: string) => Promise; get: (key: string) => T | undefined; addBlockedNumber: (number: string) => void; isBlocked: (number: string) => boolean; removeBlockedNumber: (number: string) => void; }; textsecure: TextSecureType; updateTrayIcon: (count: number) => void; Backbone: typeof Backbone; Signal: { Crypto: typeof Crypto; Data: typeof Data; Metadata: { SecretSessionCipher: typeof SecretSessionCipherClass; createCertificateValidator: ( trustRoot: ArrayBuffer ) => CertificateValidatorType; }; Services: { calling: CallingClass; }; }; ConversationController: ConversationController; WebAPI: WebAPIConnectType; Whisper: WhisperType; // Flags CALLING: boolean; } interface Error { cause?: Event; } } export type DCodeIOType = { ByteBuffer: typeof ByteBufferClass & { BIG_ENDIAN: number; LITTLE_ENDIAN: number; Long: DCodeIOType['Long']; }; Long: Long & { fromBits: (low: number, high: number, unsigned: boolean) => number; fromString: (str: string) => Long; }; }; export class CertificateValidatorType { validate: (cerficate: any, certificateTime: number) => Promise; } export class SecretSessionCipherClass { constructor(storage: StorageType); decrypt: ( validator: CertificateValidatorType, ciphertext: ArrayBuffer, serverTimestamp: number, me: any ) => Promise<{ isMe: boolean; sender: SignalProtocolAddressClass; senderUuid: SignalProtocolAddressClass; content: ArrayBuffer; }>; getRemoteRegistrationId: ( address: SignalProtocolAddressClass ) => Promise; closeOpenSessionForDevice: ( address: SignalProtocolAddressClass ) => Promise; encrypt: ( address: SignalProtocolAddressClass, senderCertificate: any, plaintext: ArrayBuffer | Uint8Array ) => Promise; } export class ByteBufferClass { constructor(value?: any, littleEndian?: number); static wrap: ( value: any, encoding?: string, littleEndian?: number ) => ByteBufferClass; buffer: ArrayBuffer; toString: (type: string) => string; toArrayBuffer: () => ArrayBuffer; toBinary: () => string; slice: (start: number, end?: number) => ByteBufferClass; append: (data: ArrayBuffer) => void; limit: number; offset: 0; readInt: (offset: number) => number; readLong: (offset: number) => Long; readShort: (offset: number) => number; readVarint32: () => number; writeLong: (l: Long) => void; skip: (length: number) => void; } export class GumVideoCapturer { constructor( maxWidth: number, maxHeight: number, maxFramerate: number, localPreview: Ref ); } export class CanvasVideoRenderer { constructor(canvas: Ref); } export type LoggerType = (...args: Array) => void; export type WhisperType = { events: { trigger: (name: string, param1: any, param2?: any) => void; }; Database: { open: () => Promise; handleDOMException: ( context: string, error: DOMException | null, reject: Function ) => void; }; ConversationCollection: typeof ConversationModelCollectionType; Conversation: typeof ConversationModelType; MessageCollection: typeof MessageModelCollectionType; Message: typeof MessageModelType; };