bitwarden-estensione-browser/proxy/ipc.ts

62 lines
1.9 KiB
TypeScript

/* tslint:disable:no-console */
import * as ipc from 'node-ipc';
import { spawn } from 'child_process';
const StartDesktopCooldown = 60 * 1000; // 1 minute delay between attempts to start desktop
ipc.config.id = 'proxy';
ipc.config.retry = 1500;
ipc.config.logger = console.warn; // Stdout is used for native messaging
export default class IPC {
private connected = false;
private lastStartedDesktop = 0;
connect() {
ipc.connectTo('bitwarden', () => {
ipc.of.bitwarden.on('connect', () => {
this.connected = true;
console.error(
'## connected to bitwarden desktop ##',
ipc.config.delay
);
ipc.of.bitwarden.emit('message', 'hello');
});
ipc.of.bitwarden.on('disconnect', () => {
this.connected = false;
console.error('disconnected from world');
});
ipc.of.bitwarden.on('message', (data: any) => {
console.error('got a message from world : ', data);
});
ipc.of.bitwarden.on('error', (err: any) => {
if (err.syscall === 'connect' && this.lastStartedDesktop + StartDesktopCooldown < Date.now()) {
this.lastStartedDesktop = Date.now();
console.error('Attempting to start Bitwarden desktop application');
this.startDesktop();
}
console.error('error', err);
});
});
}
isConnected() {
return this.connected;
}
send(json: object) {
ipc.of.bitwarden.emit('message', json);
}
// TODO: Do we want to start the desktop application? How do we get the install path?
private startDesktop() {
spawn(
'C:\\Users\\Oscar\\Documents\\Projects\\Bitwarden\\desktop\\dist\\Bitwarden-Portable-1.22.2.exe',
{ detached: true }
);
}
}