Strictify server.tsx

Summary: As per title

Reviewed By: danielbuechele

Differential Revision: D17267564

fbshipit-source-id: d99fe62cc22fa3664d5aa6d4770d864fdd212ef4
This commit is contained in:
Pritesh Nandgaonkar
2019-09-10 07:45:45 -07:00
committed by Facebook Github Bot
parent 72a8b8967d
commit a492ddaae8
2 changed files with 35 additions and 21 deletions

View File

@@ -108,7 +108,7 @@ export default class Client extends EventEmitter {
lessPlugins: Plugins; lessPlugins: Plugins;
showAllPlugins: boolean; showAllPlugins: boolean;
connection: RSocketClientSocket<any, any> | null | undefined; connection: RSocketClientSocket<any, any> | null | undefined;
responder: Partial<Responder<any, any>>; responder: Partial<Responder<string, any>>;
store: Store; store: Store;
activePlugins: Set<string>; activePlugins: Set<string>;
device: Promise<BaseDevice>; device: Promise<BaseDevice>;

View File

@@ -19,8 +19,9 @@ import {reportPlatformFailures} from './utils/metrics';
import EventEmitter from 'events'; import EventEmitter from 'events';
import invariant from 'invariant'; import invariant from 'invariant';
import tls from 'tls'; import tls from 'tls';
import net from 'net'; import net, {Socket} from 'net';
import {RSocketClientSocket} from 'rsocket-core/RSocketClient'; import {RSocketClientSocket} from 'rsocket-core/RSocketClient';
import {Responder, Payload, ReactiveSocket} from 'rsocket-types';
type ClientInfo = { type ClientInfo = {
connection: RSocketClientSocket<any, any> | null | undefined; connection: RSocketClientSocket<any, any> | null | undefined;
@@ -49,6 +50,12 @@ class Server extends EventEmitter {
this.connections = new Map(); this.connections = new Map();
this.certificateProvider = new CertificateProvider(this, logger); this.certificateProvider = new CertificateProvider(this, logger);
this.connectionTracker = new ConnectionTracker(logger); this.connectionTracker = new ConnectionTracker(logger);
// eslint-disable-next-line prefer-promise-reject-errors
this.secureServer = Promise.reject();
// eslint-disable-next-line prefer-promise-reject-errors
this.insecureServer = Promise.reject();
// eslint-disable-next-line prefer-promise-reject-errors
this.initialisePromise = Promise.reject();
this.store = store; this.store = store;
} }
@@ -72,7 +79,7 @@ class Server extends EventEmitter {
const server = this; const server = this;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let rsServer: RSocketServer<any, any> | undefined; // eslint-disable-line prefer-const let rsServer: RSocketServer<any, any> | undefined; // eslint-disable-line prefer-const
const serverFactory = onConnect => { const serverFactory = (onConnect: (socket: Socket) => void) => {
const transportServer = sslConfig const transportServer = sslConfig
? tls.createServer(sslConfig, socket => { ? tls.createServer(sslConfig, socket => {
onConnect(socket); onConnect(socket);
@@ -96,7 +103,6 @@ class Server extends EventEmitter {
}); });
return transportServer; return transportServer;
}; };
rsServer = new RSocketServer({ rsServer = new RSocketServer({
getRequestHandler: sslConfig getRequestHandler: sslConfig
? this._trustedRequestHandler ? this._trustedRequestHandler
@@ -106,22 +112,24 @@ class Server extends EventEmitter {
serverFactory: serverFactory, serverFactory: serverFactory,
}), }),
}); });
rsServer.start(); rsServer && rsServer.start();
}); });
} }
_trustedRequestHandler = ( _trustedRequestHandler = (
conn: RSocketClientSocket<any, any>, socket: ReactiveSocket<string, any>,
connectRequest: {data: string}, payload: Payload<string, any>,
) => { ): Partial<Responder<string, any>> => {
const server = this; const server = this;
if (!payload.data) {
const clientData: ClientQuery = JSON.parse(connectRequest.data); return {};
}
const clientData: ClientQuery = JSON.parse(payload.data);
this.connectionTracker.logConnectionAttempt(clientData); this.connectionTracker.logConnectionAttempt(clientData);
const client = this.addConnection(conn, clientData); const client = this.addConnection(socket, clientData);
conn.connectionStatus().subscribe({ socket.connectionStatus().subscribe({
onNext(payload) { onNext(payload) {
if (payload.kind == 'ERROR' || payload.kind == 'CLOSED') { if (payload.kind == 'ERROR' || payload.kind == 'CLOSED') {
console.debug(`Device disconnected ${client.id}`, 'server'); console.debug(`Device disconnected ${client.id}`, 'server');
@@ -137,10 +145,13 @@ class Server extends EventEmitter {
}; };
_untrustedRequestHandler = ( _untrustedRequestHandler = (
_conn: RSocketClientSocket<any, any>, socket: ReactiveSocket<string, any>,
connectRequest: {data: string}, payload: Payload<string, any>,
) => { ): Partial<Responder<string, any>> => {
const clientData: ClientQuery = JSON.parse(connectRequest.data); if (!payload.data) {
return {};
}
const clientData: ClientQuery = JSON.parse(payload.data);
this.connectionTracker.logConnectionAttempt(clientData); this.connectionTracker.logConnectionAttempt(clientData);
const client: UninitializedClient = { const client: UninitializedClient = {
@@ -151,9 +162,11 @@ class Server extends EventEmitter {
this.emit('start-client-setup', client); this.emit('start-client-setup', client);
return { return {
requestResponse: (payload: {data: string}) => { requestResponse: (
payload: Payload<string, any>,
): Single<Payload<string, any>> => {
if (typeof payload.data !== 'string') { if (typeof payload.data !== 'string') {
return; return new Single(_ => {});
} }
let rawData; let rawData;
@@ -165,7 +178,7 @@ class Server extends EventEmitter {
'clientMessage', 'clientMessage',
'server', 'server',
); );
return; return new Single(_ => {});
} }
const json: { const json: {
@@ -205,12 +218,13 @@ class Server extends EventEmitter {
}); });
}); });
} }
return new Single(_ => {});
}, },
// Leaving this here for a while for backwards compatibility, // Leaving this here for a while for backwards compatibility,
// but for up to date SDKs it will no longer used. // but for up to date SDKs it will no longer used.
// We can delete it after the SDK change has been using requestResponse for a few weeks. // We can delete it after the SDK change has been using requestResponse for a few weeks.
fireAndForget: (payload: {data: string}) => { fireAndForget: (payload: Payload<string, any>) => {
if (typeof payload.data !== 'string') { if (typeof payload.data !== 'string') {
return; return;
} }
@@ -229,7 +243,7 @@ class Server extends EventEmitter {
return; return;
} }
if (json.method === 'signCertificate') { if (json && json.method === 'signCertificate') {
console.debug('CSR received from device', 'server'); console.debug('CSR received from device', 'server');
const {csr, destination} = json; const {csr, destination} = json;
this.certificateProvider this.certificateProvider