signal-desktop/ts/main/challengeMain.ts
2021-10-26 14:15:33 -05:00

51 lines
1.3 KiB
TypeScript

// Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
/* eslint-disable no-console */
import type { IpcMainEvent } from 'electron';
import { ipcMain as ipc } from 'electron';
import type { IPCRequest, IPCResponse, ChallengeResponse } from '../challenge';
export class ChallengeMainHandler {
private handlers: Array<(response: ChallengeResponse) => void> = [];
constructor() {
this.initialize();
}
public handleCaptcha(captcha: string): void {
const response: ChallengeResponse = { captcha };
const { handlers } = this;
this.handlers = [];
for (const resolve of handlers) {
resolve(response);
}
}
private async onRequest(
event: IpcMainEvent,
request: IPCRequest
): Promise<void> {
console.log('Received challenge request, waiting for response');
const data = await new Promise<ChallengeResponse>(resolve => {
this.handlers.push(resolve);
});
console.log('Sending challenge response', data);
const ipcResponse: IPCResponse = {
seq: request.seq,
data,
};
event.sender.send('challenge:response', ipcResponse);
}
private initialize(): void {
ipc.on('challenge:request', (event, request) => {
this.onRequest(event, request);
});
}
}