fix: correct error typings for websocket

This commit is contained in:
Paul Makles
2024-10-30 00:21:42 +00:00
parent 09cb54ce24
commit 53808df75e
3 changed files with 17 additions and 5 deletions
+3 -2
View File
@@ -1,7 +1,7 @@
import { Accessor, Setter, batch, createSignal } from "solid-js";
import EventEmitter from "eventemitter3";
import type { DataLogin, RevoltConfig } from "revolt-api";
import type { DataLogin, Error, RevoltConfig } from "revolt-api";
import { API, Role } from "revolt-api";
import {
@@ -47,7 +47,8 @@ export type Session = { _id: string; token: string; user_id: string } | string;
* Events provided by the client
*/
export type Events = {
error(error: Error): void;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
error(error: any): void;
connected(): void;
connecting(): void;
+12 -2
View File
@@ -2,6 +2,7 @@ import { Accessor, Setter, createSignal } from "solid-js";
import EventEmitter from "eventemitter3";
import WebSocket from "isomorphic-ws";
import { Error } from "revolt-api";
import type { AvailableProtocols, EventProtocol } from "./index.js";
@@ -75,7 +76,8 @@ export class EventClient<T extends AvailableProtocols> extends EventEmitter<
#pongTimeoutReference: number | undefined;
#connectTimeoutReference: number | undefined;
#lastError: any;
#lastError: // eslint-disable-next-line @typescript-eslint/no-explicit-any
{ type: "socket"; data: any } | { type: "revolt"; data: Error } | undefined;
/**
* Create a new event client.
@@ -153,7 +155,7 @@ export class EventClient<T extends AvailableProtocols> extends EventEmitter<
};
this.#socket.onerror = (error) => {
this.#lastError = error;
this.#lastError = { type: "socket", data: error };
this.emit("error", error as never);
};
@@ -171,6 +173,7 @@ export class EventClient<T extends AvailableProtocols> extends EventEmitter<
this.#socket.onclose = () => {
if (closed) return;
closed = true;
this.#socket = undefined;
this.setState(ConnectionState.Disconnected);
this.disconnect();
};
@@ -218,6 +221,10 @@ export class EventClient<T extends AvailableProtocols> extends EventEmitter<
this.options.debug && console.debug(`[ping] ${this.ping()}ms`);
return;
case "Error":
this.#lastError = {
type: "revolt",
data: event.data,
};
this.emit("error", event as never);
this.disconnect();
return;
@@ -248,6 +255,9 @@ export class EventClient<T extends AvailableProtocols> extends EventEmitter<
}
}
/**
* Last error encountered by events client
*/
get lastError() {
return this.#lastError;
}
+2 -1
View File
@@ -5,6 +5,7 @@ import type {
Channel,
Embed,
Emoji,
Error,
FieldsChannel,
FieldsMember,
FieldsServer,
@@ -55,7 +56,7 @@ type ClientMessage =
* Messages sent from the server
*/
type ServerMessage =
| ({ type: "Error" } & WebSocketError)
| { type: "Error"; data: Error }
| { type: "Bulk"; v: ServerMessage[] }
| { type: "Authenticated" }
| ({ type: "Ready" } & ReadyData)