Switch to eslint and fix issues

This commit is contained in:
hensm
2021-04-26 05:36:55 +01:00
parent 2d0fa4c844
commit d478742c4b
100 changed files with 1537 additions and 608 deletions

View File

@@ -26,7 +26,7 @@ export class AirPlayAuthCredentials {
public clientSk: Uint8Array;
public clientPk: Uint8Array;
constructor (
constructor(
clientId?: string
, clientSk?: Uint8Array
, clientPk?: Uint8Array) {
@@ -53,7 +53,7 @@ export class AirPlayAuth {
private credentials: AirPlayAuthCredentials;
private baseUrl: URL;
constructor (address: string, credentials: AirPlayAuthCredentials) {
constructor(address: string, credentials: AirPlayAuthCredentials) {
this.address = address;
this.credentials = credentials;
@@ -63,7 +63,7 @@ export class AirPlayAuth {
/**
* Begins pairing process.
*/
public async beginPairing () {
public async beginPairing() {
return this.sendPostRequest("/pair-pin-start");
}
@@ -72,7 +72,7 @@ export class AirPlayAuth {
* beginPairing(). Coordinates the three pairing stages and
* manages request responses.
*/
public async finishPairing (pin: string) {
public async finishPairing(pin: string) {
// Stage 1 response
const { pk: serverPk
, salt: serverSalt } = await this.pairSetupPin1();
@@ -107,7 +107,7 @@ export class AirPlayAuth {
* Triggering the receiver passcode display and receiving
* its public key / salt.
*/
public async pairSetupPin1 (): Promise<any> {
public async pairSetupPin1(): Promise<any> {
const [ response ] = await this.sendPostRequestBplist(
"/pair-setup-pin"
, {
@@ -125,7 +125,7 @@ export class AirPlayAuth {
* public keys, sending them to the receiver and receiving its
* proof.
*/
public async pairSetupPin2 (
public async pairSetupPin2(
pk: Buffer
, proof: Buffer): Promise<any> {
@@ -143,7 +143,7 @@ export class AirPlayAuth {
* secret hash and sending it to the receiver. Receiver then
* responds confirming the pairing is complete.
*/
public async pairSetupPin3 (
public async pairSetupPin3(
sharedSecretHash: crypto.BinaryLike): Promise<any> {
// Create AES key
@@ -182,7 +182,7 @@ export class AirPlayAuth {
* Sends a POST request to receiver and returns the
* response.
*/
public async sendPostRequest (
public async sendPostRequest(
path: string
, contentType?: string
, data?: Buffer | string): Promise<any> {
@@ -216,7 +216,7 @@ export class AirPlayAuth {
* Encodes binary plist data, sends a POST request to
* receiver, then decodes and returns the response.
*/
public async sendPostRequestBplist (
public async sendPostRequestBplist(
path: string
, data?: object): Promise<any> {

View File

@@ -5,7 +5,7 @@ import castv2 from "castv2";
import Session from "./Session";
import { Message } from "../../messaging";
import { sendMessage } from "../../lib/nativeMessaging"
import { sendMessage } from "../../lib/nativeMessaging";
const NS_MEDIA = "urn:x-cast:com.google.cast.media";
@@ -27,7 +27,7 @@ export interface UpdateMessageData {
export default class Media {
private channel: castv2.Channel;
constructor (
constructor(
private referenceId: string
, private session: Session) {
@@ -67,7 +67,7 @@ export default class Media {
});
}
public messageHandler (message: Message) {
public messageHandler(message: Message) {
switch (message.subject) {
case "bridge:media/sendMediaMessage": {
let error = false;
@@ -87,7 +87,7 @@ export default class Media {
}
}
private sendMessage (subject: string, data: any) {
private sendMessage(subject: string, data: any) {
data._id = this.referenceId;
(sendMessage as any)({
subject

View File

@@ -26,7 +26,7 @@ export default class Session {
private transportConnection?: Channel;
private app: any;
constructor (
constructor(
public host: string
, public port: number
, private appId: string
@@ -46,7 +46,7 @@ export default class Session {
this.client = client;
}
private onConnect () {
private onConnect() {
let transportHeartbeat: Channel;
const sourceId = "sender-0";
@@ -67,7 +67,7 @@ export default class Session {
transportHeartbeat.send({ type: "PING" });
}
this.clientHeartbeat!.send({ type: "PING" });
this.clientHeartbeat?.send({ type: "PING" });
}, 5000);
this.clientReceiver.send({
@@ -124,7 +124,7 @@ export default class Session {
});
}
public messageHandler (message: Message) {
public messageHandler(message: Message) {
switch (message.subject) {
case "bridge:session/close":
this.close();
@@ -159,7 +159,7 @@ export default class Session {
}
}
public createChannel (namespace: string) {
public createChannel(namespace: string) {
if (!this.channelMap.has(namespace)) {
this.channelMap.set(namespace, this.client.createChannel(
this.clientId!, this.transportId!
@@ -167,16 +167,16 @@ export default class Session {
}
}
public close () {
public close() {
this.clientConnection?.send({ type: "CLOSE" });
this.transportConnection?.send({ type: "CLOSE" });
}
public stop () {
public stop() {
this.clientConnection?.send({ type: "STOP" });
}
private sendMessage (subject: string, data: any = {}) {
private sendMessage(subject: string, data: any = {}) {
data._id = this.referenceId;
sendMessage({
// @ts-ignore
@@ -185,7 +185,7 @@ export default class Session {
});
}
private _impl_addMessageListener (namespace: string) {
private _impl_addMessageListener(namespace: string) {
this.createChannel(namespace);
this.channelMap.get(namespace)?.on("message", (data: any) => {
this.sendMessage("shim:session/impl_addMessageListener", {
@@ -195,7 +195,7 @@ export default class Session {
});
}
private _impl_sendMessage (
private _impl_sendMessage(
namespace: string
, message: {} | string
, messageId: string) {
@@ -220,7 +220,7 @@ export default class Session {
});
}
private _impl_setReceiverMuted (muted: boolean, volumeId: string) {
private _impl_setReceiverMuted(muted: boolean, volumeId: string) {
let error = false;
@@ -240,7 +240,7 @@ export default class Session {
});
}
private _impl_setReceiverVolumeLevel (newLevel: number, volumeId: string) {
private _impl_setReceiverVolumeLevel(newLevel: number, volumeId: string) {
let error = false;
@@ -260,7 +260,7 @@ export default class Session {
});
}
private _impl_stop (stopId: string) {
private _impl_stop(stopId: string) {
let error = false;
try {

View File

@@ -17,7 +17,7 @@ export default class StatusListener extends EventEmitter {
private clientReceiver?: Channel;
private clientHeartbeatIntervalId?: NodeJS.Timeout;
constructor (host: string, port: number) {
constructor(host: string, port: number) {
super();
this.client = new Client();
@@ -35,7 +35,7 @@ export default class StatusListener extends EventEmitter {
/**
* Closes status listener connection.
*/
public deregister (): void {
public deregister(): void {
if (this.clientReceiver) {
this.clientReceiver.send({ type: "CLOSE" });
}
@@ -44,7 +44,7 @@ export default class StatusListener extends EventEmitter {
}
private onConnect (): void {
private onConnect(): void {
const sourceId = "sender-0";
const destinationId = "receiver-0";

View File

@@ -11,7 +11,7 @@ import { Receiver } from "../../types";
const existingSessions: Map<string, Session> = new Map();
const existingMedia: Map<string, Media> = new Map();
export function handleSessionMessage (message: any) {
export function handleSessionMessage(message: any) {
if (!message.data._id) {
console.error("Session message missing _id");
return;
@@ -34,7 +34,7 @@ export function handleSessionMessage (message: any) {
}
}
export function handleMediaMessage (message: any) {
export function handleMediaMessage(message: any) {
if (!message.data._id) {
console.error("Media message missing _id");
return;
@@ -44,7 +44,7 @@ export function handleMediaMessage (message: any) {
if (existingMedia.has(mediaId)) {
// Forward message to instance message handler
existingMedia.get(mediaId)!.messageHandler(message);
existingMedia.get(mediaId)?.messageHandler(message);
} else {
if (message.subject === "bridge:media/initialize") {
// Get Session object media belongs to
@@ -61,7 +61,7 @@ export function handleMediaMessage (message: any) {
}
}
export function stopReceiverApp (host: string, port: number) {
export function stopReceiverApp(host: string, port: number) {
const client = new castv2.Client();
client.connect({ host, port }, () => {

View File

@@ -25,7 +25,7 @@ const browser = mdns.createBrowser(mdns.tcp("googlecast"), {
]
});
function onBrowserServiceUp (service: mdns.Service) {
function onBrowserServiceUp(service: mdns.Service) {
// Ignore without txt record
if (!service.txtRecord) {
return;
@@ -44,7 +44,7 @@ function onBrowserServiceUp (service: mdns.Service) {
});
}
function onBrowserServiceDown (_service: mdns.Service) {
function onBrowserServiceDown(_service: mdns.Service) {
// TODO: Fix service down detection
}
@@ -56,7 +56,7 @@ interface InitializeOptions {
shouldWatchStatus?: boolean;
}
export function startDiscovery (options: InitializeOptions) {
export function startDiscovery(options: InitializeOptions) {
if (options.shouldWatchStatus) {
browser.on("serviceUp", onStatusBrowserServiceUp);
browser.on("serviceDown", onStatusBrowserServiceDown);
@@ -67,7 +67,7 @@ export function startDiscovery (options: InitializeOptions) {
// Receiver status listeners for status mode
const statusListeners = new Map<string, StatusListener>();
function onStatusBrowserServiceUp (service: mdns.Service) {
function onStatusBrowserServiceUp(service: mdns.Service) {
if (!service.txtRecord) {
return;
}
@@ -109,11 +109,11 @@ export function startDiscovery (options: InitializeOptions) {
statusListeners.set(id, listener);
}
function onStatusBrowserServiceDown (_service: mdns.Service) {
function onStatusBrowserServiceDown(_service: mdns.Service) {
// TODO: Fix service down detection
}
}
export function stopDiscovery () {
export function stopDiscovery() {
browser.stop();
}

View File

@@ -14,9 +14,9 @@ import { convertSrtToVtt } from "../lib/subtitles";
export let mediaServer: http.Server | undefined;
export async function startMediaServer (filePath: string, port: number) {
export async function startMediaServer(filePath: string, port: number) {
if (mediaServer?.listening) {
await stopMediaServer();
stopMediaServer();
}
let fileDir: string;
@@ -74,7 +74,9 @@ export async function startMediaServer (filePath: string, port: number) {
path.join(fileDir, dirEntry.name)));
}
}
} catch (err) {}
} catch (err) {
// TODO: Handle?
}
mediaServer = http.createServer(async (req, res) => {
if (!req.url) {
@@ -172,7 +174,7 @@ export async function startMediaServer (filePath: string, port: number) {
mediaServer.listen(port);
}
export function stopMediaServer () {
export function stopMediaServer() {
if (mediaServer?.listening) {
mediaServer.close();
mediaServer = undefined;

View File

@@ -6,7 +6,7 @@ import path from "path";
import { sendMessage } from "../lib/nativeMessaging";
function fatal (message: string) {
function fatal(message: string) {
console.error(message);
process.exit(1);
}
@@ -15,7 +15,7 @@ function fatal (message: string) {
let selectorApp: child_process.ChildProcess | undefined;
let selectorAppOpen = false;
export function startReceiverSelector (data: string) {
export function startReceiverSelector(data: string) {
if (process.platform !== "darwin") {
fatal("Invalid platform for native receiver selector.");
}
@@ -80,7 +80,7 @@ export function startReceiverSelector (data: string) {
});
}
export function stopReceiverSelector () {
export function stopReceiverSelector() {
if (!selectorApp?.killed) {
selectorApp?.kill();
selectorAppOpen = false;

View File

@@ -10,6 +10,6 @@ export const encodeTransform = new EncodeTransform();
process.stdin.pipe(decodeTransform);
encodeTransform.pipe(process.stdout);
export function sendMessage (message: Message) {
export function sendMessage(message: Message) {
encodeTransform.write(message);
}

View File

@@ -6,7 +6,7 @@ import fs from "fs";
/**
* Reads a SubRip file and outputs text content as WebVTT.
*/
export async function convertSrtToVtt (srtFilePath: string) {
export async function convertSrtToVtt(srtFilePath: string) {
const fileStream = fs.createReadStream(
srtFilePath, { encoding: "utf-8" });

View File

@@ -10,14 +10,16 @@ import { DecodeTransform
, EncodeTransform } from "./transforms";
export function init (port: number) {
export function init(port: number) {
process.stdout.write("Starting WebSocket server... ");
const wss = new WebSocket.Server({ port }, () => {
// eslint-disable-next-line no-console
console.log("Done!");
});
wss.on("error", (err) => {
// eslint-disable-next-line no-console
console.log("Failed!");
console.error(err);
});
@@ -26,6 +28,7 @@ export function init (port: number) {
wss.on("connection", socket => {
// Stream for incoming WebSocket messages
const messageStream = new Readable({ objectMode: true });
// eslint-disable-next-line @typescript-eslint/no-empty-function
messageStream._read = () => {};
socket.on("message", (message: string) => {

View File

@@ -22,8 +22,10 @@ const argv = minimist(process.argv.slice(2), {
if (argv.version) {
// eslint-disable-next-line no-console
console.log(`v${__applicationVersion}`);
} else if (argv.help) {
// eslint-disable-next-line no-console
console.log(
`Usage: ${argv.__name} [options]

View File

@@ -11,14 +11,14 @@ type ResponseHandlerFunction = (message: Message) => Promise<any>;
* and calls the transform callback.
*/
export class ResponseTransform extends Transform {
constructor (private _handler: ResponseHandlerFunction) {
constructor(private _handler: ResponseHandlerFunction) {
super({
readableObjectMode: true
, writableObjectMode: true
});
}
public _transform (
public _transform(
chunk: Message
, _encoding: string
// tslint:disable-next-line:ban-types
@@ -45,13 +45,13 @@ export class DecodeTransform extends Transform {
private _messageBuffer = Buffer.alloc(0);
private _messageLength?: number;
constructor () {
constructor() {
super({
readableObjectMode: true
});
}
public _transform (
public _transform(
chunk: any
, _encoding: string
// tslint:disable-next-line:ban-types
@@ -105,13 +105,13 @@ export class DecodeTransform extends Transform {
* outputs the encoded result.
*/
export class EncodeTransform extends Transform {
constructor () {
constructor() {
super({
writableObjectMode: true
});
}
public _transform (
public _transform(
chunk: any
, _encoding: string
// tslint:disable-next-line:ban-types