@socket-mesh/core 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,2 @@
1
+ # auth-engine
2
+ Auth module for SocketMesh
@@ -0,0 +1,10 @@
1
+ export * from "./maps/index.js";
2
+ export * from "./packet.js";
3
+ export * from "./plugins/index.js";
4
+ export * from "./request.js";
5
+ export * from "./request-handler.js";
6
+ export * from "./response.js";
7
+ export * from "./socket.js";
8
+ export * from "./socket-event.js";
9
+ export * from "./socket-transport.js";
10
+ export * from "./utils.js";
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ export * from "./maps/index.js";
2
+ export * from "./packet.js";
3
+ export * from "./plugins/index.js";
4
+ export * from "./request.js";
5
+ export * from "./request-handler.js";
6
+ export * from "./response.js";
7
+ export * from "./socket.js";
8
+ export * from "./socket-event.js";
9
+ export * from "./socket-transport.js";
10
+ export * from "./utils.js";
@@ -0,0 +1,5 @@
1
+ import { RequestHandler } from "../request-handler.js";
2
+ import { SocketMap } from "./socket-map.js";
3
+ export type HandlerMap<T extends SocketMap> = Partial<{
4
+ [K in keyof T['Incoming']]: RequestHandler<Parameters<T['Incoming'][K]>[0], ReturnType<T['Incoming'][K]>, T>;
5
+ }>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ export * from "./handler-map.js";
2
+ export * from "./method-map.js";
3
+ export * from "./socket-map.js";
@@ -0,0 +1,3 @@
1
+ export * from "./handler-map.js";
2
+ export * from "./method-map.js";
3
+ export * from "./socket-map.js";
@@ -0,0 +1,22 @@
1
+ export type RemoveIndexSignature<T> = {
2
+ [K in keyof T as string extends K ? never : number extends K ? never : symbol extends K ? never : K]: T[K];
3
+ };
4
+ export type MappedFunction = (...args: any) => any;
5
+ export type PromiseReturnType<T> = T extends Promise<infer Return> ? Return : T;
6
+ export type ServiceMap = {
7
+ [service: string]: MethodMap;
8
+ };
9
+ export type FunctionReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : never;
10
+ export type MethodMap = {
11
+ [method: string]: MappedFunction;
12
+ };
13
+ export type PrivateMethodMap = {
14
+ [method: string]: MappedFunction;
15
+ } & {
16
+ [method: `#${string}`]: MappedFunction;
17
+ };
18
+ export type PublicMethodMap = {
19
+ [method: string]: MappedFunction;
20
+ } & {
21
+ [method: `#${string}`]: never;
22
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ import { MethodMap, PrivateMethodMap, PublicMethodMap, ServiceMap } from "./method-map.js";
2
+ export interface SocketMap {
3
+ Incoming: MethodMap;
4
+ Service: ServiceMap;
5
+ Outgoing: PublicMethodMap;
6
+ PrivateOutgoing: PrivateMethodMap;
7
+ State: object;
8
+ }
9
+ export interface EmptySocketMap {
10
+ Incoming: {};
11
+ Service: {};
12
+ Outgoing: {};
13
+ PrivateOutgoing: {};
14
+ State: {};
15
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,27 @@
1
+ import { MethodMap, ServiceMap } from "./maps/method-map.js";
2
+ import { SocketMap } from "./maps/socket-map.js";
3
+ export type AnyPacket<T extends SocketMap> = ServicePacket<T['Service']> | MethodPacket<T['Incoming']>;
4
+ export type ServicePacket<TServiceMap extends ServiceMap> = {
5
+ [TService in keyof TServiceMap]: {
6
+ [TMethod in keyof TServiceMap[TService]]: ServiceRequestPacket<TServiceMap, TService, TMethod>;
7
+ }[keyof TServiceMap[TService]];
8
+ }[keyof TServiceMap];
9
+ interface RequestPacket {
10
+ cid?: number;
11
+ }
12
+ export type MethodPacket<TMethodMap extends MethodMap> = {
13
+ [TMethod in keyof TMethodMap]: MethodRequestPacket<TMethodMap, TMethod>;
14
+ }[keyof TMethodMap];
15
+ export interface ServiceRequestPacket<TServiceMap extends ServiceMap, TService extends keyof TServiceMap, TMethod extends keyof TServiceMap[TService]> extends RequestPacket {
16
+ service: TService;
17
+ method: TMethod;
18
+ ackTimeoutMs?: number | boolean;
19
+ data?: Parameters<TServiceMap[TService][TMethod]>[0];
20
+ }
21
+ export interface MethodRequestPacket<TMethodMap extends MethodMap, TMethod extends keyof TMethodMap> extends RequestPacket {
22
+ method: TMethod;
23
+ data: Parameters<TMethodMap[TMethod]>[0];
24
+ ackTimeoutMs?: number | boolean;
25
+ }
26
+ export declare function isRequestPacket<T extends SocketMap>(packet: unknown): packet is AnyPacket<T>;
27
+ export {};
package/dist/packet.js ADDED
@@ -0,0 +1,3 @@
1
+ export function isRequestPacket(packet) {
2
+ return (typeof packet === 'object') && 'method' in packet;
3
+ }
@@ -0,0 +1 @@
1
+ export * from "./plugin.js";
@@ -0,0 +1 @@
1
+ export * from "./plugin.js";
@@ -0,0 +1,50 @@
1
+ import { EmptySocketMap, SocketMap } from "../maps/socket-map.js";
2
+ import { AnyPacket } from "../packet.js";
3
+ import { AnyRequest } from "../request.js";
4
+ import { AnyResponse } from "../response.js";
5
+ import { SocketTransport } from "../socket-transport.js";
6
+ import { Socket, SocketStatus } from "../socket.js";
7
+ import ws from "isomorphic-ws";
8
+ import { HandlerMap } from "../maps/handler-map.js";
9
+ export type PluginType = 'request' | 'response' | 'handshake';
10
+ export interface PluginArgs<T extends SocketMap = EmptySocketMap> {
11
+ socket: Socket<T>;
12
+ transport: SocketTransport<T>;
13
+ }
14
+ export interface DisconnectedPluginArgs<T extends SocketMap = EmptySocketMap> extends PluginArgs<T> {
15
+ status: SocketStatus;
16
+ code: number;
17
+ reason?: string;
18
+ }
19
+ export interface MessagePluginArgs<T extends SocketMap = EmptySocketMap> extends PluginArgs<T> {
20
+ timestamp: Date;
21
+ packet: AnyPacket<T> | AnyResponse<T>;
22
+ }
23
+ export interface MessageRawPluginArgs<T extends SocketMap = EmptySocketMap> extends PluginArgs<T> {
24
+ timestamp: Date;
25
+ message: ws.RawData | string;
26
+ promise: Promise<void>;
27
+ }
28
+ export interface SendRequestPluginArgs<T extends SocketMap = EmptySocketMap> extends PluginArgs<T> {
29
+ requests: AnyRequest<T>[];
30
+ cont: (requests: AnyRequest<T>[]) => void;
31
+ }
32
+ export interface SendResponsePluginArgs<T extends SocketMap = EmptySocketMap> extends PluginArgs<T> {
33
+ responses: AnyResponse<T>[];
34
+ cont: (requests: AnyResponse<T>[]) => void;
35
+ }
36
+ export interface Plugin<T extends SocketMap = EmptySocketMap> {
37
+ type: string;
38
+ handlers?: HandlerMap<T>;
39
+ onAuthenticated?(options: PluginArgs<T>): void;
40
+ onClose?(options: PluginArgs<T>): void;
41
+ onDeauthenticate?(options: PluginArgs<T>): void;
42
+ onDisconnected?(options: DisconnectedPluginArgs<T>): void;
43
+ onEnd?(options: PluginArgs<T>): void;
44
+ onMessage?(options: MessagePluginArgs<T>): Promise<AnyPacket<T> | AnyResponse<T>>;
45
+ onMessageRaw?(options: MessageRawPluginArgs<T>): Promise<ws.RawData | string>;
46
+ onOpen?(options: PluginArgs<T>): void;
47
+ onReady?(options: PluginArgs<T>): void;
48
+ sendRequest?(options: SendRequestPluginArgs<T>): void;
49
+ sendResponse?(options: SendResponsePluginArgs<T>): void;
50
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,24 @@
1
+ import { Socket } from "./socket.js";
2
+ import { SocketTransport } from "./socket-transport.js";
3
+ import { EmptySocketMap, SocketMap } from "./maps/socket-map.js";
4
+ export interface RequestHandlerArgsOptions<TOptions, T extends SocketMap, TSocket extends Socket<T> = Socket<T>, TTransport extends SocketTransport<T> = SocketTransport<T>> {
5
+ isRpc: boolean;
6
+ method: string;
7
+ socket: TSocket;
8
+ transport: TTransport;
9
+ timeoutMs?: number | boolean;
10
+ options?: TOptions;
11
+ }
12
+ export declare class RequestHandlerArgs<TOptions, T extends SocketMap = EmptySocketMap, TSocket extends Socket<T> = Socket<T>, TTransport extends SocketTransport<T> = SocketTransport<T>> {
13
+ isRpc: boolean;
14
+ method: string;
15
+ options: TOptions;
16
+ requestedAt: Date;
17
+ socket: TSocket;
18
+ timeoutMs?: number | boolean;
19
+ transport: TTransport;
20
+ constructor(options: RequestHandlerArgsOptions<TOptions, T, TSocket, TTransport>);
21
+ checkTimeout(timeLeftMs?: number): void;
22
+ getRemainingTimeMs(): number;
23
+ }
24
+ export type RequestHandler<TOptions, U, T extends SocketMap, TSocket extends Socket<T> = Socket<T>, TTransport extends SocketTransport<T> = SocketTransport<T>> = (args: RequestHandlerArgs<TOptions, T, TSocket, TTransport>) => Promise<U>;
@@ -0,0 +1,23 @@
1
+ import { TimeoutError } from "@socket-mesh/errors";
2
+ export class RequestHandlerArgs {
3
+ constructor(options) {
4
+ this.isRpc = options.isRpc;
5
+ this.method = options.method;
6
+ this.options = options.options;
7
+ this.requestedAt = new Date();
8
+ this.socket = options.socket;
9
+ this.transport = options.transport;
10
+ this.timeoutMs = options.timeoutMs;
11
+ }
12
+ checkTimeout(timeLeftMs = 0) {
13
+ if (typeof this.timeoutMs === 'number' && this.getRemainingTimeMs() <= timeLeftMs) {
14
+ throw new TimeoutError(`Method \'${this.method}\' timed out.`);
15
+ }
16
+ }
17
+ getRemainingTimeMs() {
18
+ if (typeof this.timeoutMs === 'number') {
19
+ return (this.requestedAt.valueOf() + this.timeoutMs) - new Date().valueOf();
20
+ }
21
+ return Infinity;
22
+ }
23
+ }
@@ -0,0 +1,55 @@
1
+ import { MethodMap, ServiceMap } from "./maps/method-map.js";
2
+ import { SocketMap } from "./maps/socket-map.js";
3
+ export type AnyRequest<T extends SocketMap> = ServiceRequest<T['Service']> | MethodRequest<T['PrivateOutgoing']> | MethodRequest<T['Outgoing']>;
4
+ export declare function abortRequest<T extends SocketMap>(request: AnyRequest<T>, err: Error): void;
5
+ export declare class RequestCollection<T extends SocketMap> {
6
+ private readonly _requests;
7
+ private readonly _callbacks;
8
+ constructor(requests: AnyRequest<T> | AnyRequest<T>[]);
9
+ get items(): ReadonlyArray<AnyRequest<T>>;
10
+ listen(cb: () => void): void;
11
+ isDone(): boolean;
12
+ [Symbol.iterator](): {
13
+ next(): {
14
+ value: AnyRequest<T>;
15
+ done: boolean;
16
+ } | {
17
+ done: boolean;
18
+ value?: undefined;
19
+ };
20
+ };
21
+ }
22
+ export type ServiceRequest<TServiceMap extends ServiceMap> = {
23
+ [TService in keyof TServiceMap]: {
24
+ [TMethod in keyof TServiceMap[TService]]: TransmitServiceRequest<TServiceMap, TService, TMethod> | InvokeServiceRequest<TServiceMap, TService, TMethod>;
25
+ }[keyof TServiceMap[TService]];
26
+ }[keyof TServiceMap];
27
+ export type MethodRequest<TMethodMap extends MethodMap> = {
28
+ [TMethod in keyof TMethodMap]: TransmitMethodRequest<TMethodMap, TMethod> | InvokeMethodRequest<TMethodMap, TMethod>;
29
+ }[keyof TMethodMap];
30
+ export interface Request {
31
+ promise: Promise<void>;
32
+ sentCallback?: (err?: Error) => void;
33
+ }
34
+ export interface TransmitServiceRequest<TServiceMap extends ServiceMap, TService extends keyof TServiceMap, TMethod extends keyof TServiceMap[TService]> extends Request {
35
+ service: TService;
36
+ method: TMethod;
37
+ data?: Parameters<TServiceMap[TService][TMethod]>[0];
38
+ }
39
+ export interface TransmitMethodRequest<TMethodMap extends MethodMap, TMethod extends keyof TMethodMap> extends Request {
40
+ method: TMethod;
41
+ data?: Parameters<TMethodMap[TMethod]>[0];
42
+ }
43
+ export interface InvokeServiceRequest<TServiceMap extends ServiceMap, TService extends keyof TServiceMap, TMethod extends keyof TServiceMap[TService]> extends TransmitServiceRequest<TServiceMap, TService, TMethod> {
44
+ cid: number;
45
+ ackTimeoutMs: number | false;
46
+ timeoutId?: NodeJS.Timeout;
47
+ callback: (err: Error, result?: TServiceMap[TService][TMethod]) => void | null;
48
+ }
49
+ export interface InvokeMethodRequest<TMethodMap extends MethodMap, TMethod extends keyof TMethodMap> extends TransmitMethodRequest<TMethodMap, TMethod> {
50
+ cid: number;
51
+ ackTimeoutMs: number | false;
52
+ timeoutId?: NodeJS.Timeout;
53
+ callback: (err: Error, result?: TMethodMap[TMethod]) => void | null;
54
+ }
55
+ export declare function isRequestDone<T extends SocketMap>(request: AnyRequest<T>): boolean;
@@ -0,0 +1,56 @@
1
+ import { toArray } from "./utils.js";
2
+ export function abortRequest(request, err) {
3
+ if (request.sentCallback) {
4
+ request.sentCallback(err);
5
+ }
6
+ if ('callback' in request && request.callback) {
7
+ request.callback(err);
8
+ }
9
+ }
10
+ export class RequestCollection {
11
+ constructor(requests) {
12
+ this._requests = toArray(requests).filter(req => !isRequestDone(req));
13
+ this._callbacks = [];
14
+ }
15
+ get items() {
16
+ return this._requests;
17
+ }
18
+ listen(cb) {
19
+ for (const req of this._requests) {
20
+ this._callbacks.push(cb);
21
+ req.promise.finally(() => {
22
+ const i = this._requests.indexOf(req);
23
+ this._requests.splice(i, 1);
24
+ if (!this._requests.length) {
25
+ for (const cb of this._callbacks) {
26
+ cb();
27
+ }
28
+ }
29
+ });
30
+ }
31
+ }
32
+ isDone() {
33
+ return this._requests.length === 0;
34
+ }
35
+ [Symbol.iterator]() {
36
+ const values = this._requests;
37
+ let index = 0;
38
+ return {
39
+ next() {
40
+ if (index < values.length) {
41
+ const val = values[index];
42
+ index++;
43
+ return { value: val, done: false };
44
+ }
45
+ else
46
+ return { done: true };
47
+ }
48
+ };
49
+ }
50
+ }
51
+ export function isRequestDone(request) {
52
+ if ('callback' in request) {
53
+ return (request.callback === null);
54
+ }
55
+ return !request.sentCallback;
56
+ }
@@ -0,0 +1,22 @@
1
+ import { MethodMap, ServiceMap } from "./maps/method-map.js";
2
+ import { SocketMap } from "./maps/socket-map.js";
3
+ export type AnyResponse<T extends SocketMap> = Response | ErrorResponse | ServiceDataResponse<T['Service']> | MethodDataResponse<T['PrivateOutgoing']> | MethodDataResponse<T['Outgoing']>;
4
+ export declare function isResponsePacket<T extends SocketMap>(packet?: unknown): packet is AnyResponse<T>;
5
+ export type ServiceDataResponse<TServiceMap extends ServiceMap> = {
6
+ [TService in keyof TServiceMap]: {
7
+ [TMethod in keyof TServiceMap[TService]]: DataResponse<ReturnType<TServiceMap[TService][TMethod]>>;
8
+ }[keyof TServiceMap[TService]];
9
+ }[keyof TServiceMap];
10
+ export type MethodDataResponse<TMethodMap extends MethodMap> = {
11
+ [TMethod in keyof TMethodMap]: DataResponse<ReturnType<TMethodMap[TMethod]>>;
12
+ }[keyof TMethodMap];
13
+ export interface Response {
14
+ rid: number;
15
+ timeoutAt?: Date;
16
+ }
17
+ export interface ErrorResponse extends Response {
18
+ error: Error;
19
+ }
20
+ export interface DataResponse<T> extends Response {
21
+ data: T;
22
+ }
@@ -0,0 +1,3 @@
1
+ export function isResponsePacket(packet) {
2
+ return (typeof packet === 'object') && 'rid' in packet;
3
+ }
@@ -0,0 +1,76 @@
1
+ import ws from "isomorphic-ws";
2
+ import { ClientRequest, IncomingMessage } from "http";
3
+ import { MethodPacket, ServicePacket } from "./packet.js";
4
+ import { AuthToken, SignedAuthToken } from "@socket-mesh/auth";
5
+ import { AnyResponse } from "./response.js";
6
+ import { SocketMap } from "./maps/socket-map.js";
7
+ export type SocketEvent<T extends SocketMap> = AuthStateChangeEvent | RemoveAuthTokenEvent | AuthenticateEvent | BadAuthTokenEvent | CloseEvent | ConnectEvent | ConnectingEvent | DeauthenticateEvent | DisconnectEvent | ErrorEvent | MessageEvent | PingEvent | PongEvent | RequestEvent<T> | ResponseEvent<T> | UnexpectedResponseEvent | UpgradeEvent;
8
+ export type AuthStateChangeEvent = AuthenticatedChangeEvent | DeauthenticatedChangeEvent;
9
+ export interface AuthenticatedChangeEvent {
10
+ isAuthenticated: true;
11
+ wasAuthenticated: boolean;
12
+ signedAuthToken: SignedAuthToken;
13
+ authToken: AuthToken;
14
+ }
15
+ export interface AuthenticateEvent {
16
+ wasSigned: boolean;
17
+ signedAuthToken: SignedAuthToken;
18
+ authToken: AuthToken;
19
+ }
20
+ export interface BadAuthTokenEvent {
21
+ error: Error;
22
+ signedAuthToken: SignedAuthToken;
23
+ }
24
+ export interface CloseEvent {
25
+ code: number;
26
+ reason?: string;
27
+ }
28
+ export interface ConnectEvent {
29
+ id: string;
30
+ isAuthenticated: boolean;
31
+ pingTimeoutMs: number;
32
+ authError?: Error;
33
+ }
34
+ export interface ConnectingEvent {
35
+ }
36
+ export interface DeauthenticateEvent {
37
+ signedAuthToken: SignedAuthToken;
38
+ authToken: AuthToken;
39
+ }
40
+ export interface DeauthenticatedChangeEvent {
41
+ isAuthenticated: false;
42
+ wasAuthenticated: true;
43
+ }
44
+ export interface DisconnectEvent {
45
+ code: number;
46
+ reason?: string;
47
+ }
48
+ export interface ErrorEvent {
49
+ error: Error;
50
+ }
51
+ export interface MessageEvent {
52
+ data: string | ws.RawData;
53
+ isBinary: boolean;
54
+ }
55
+ export interface PingEvent {
56
+ data: Buffer;
57
+ }
58
+ export interface PongEvent {
59
+ data: Buffer;
60
+ }
61
+ export interface RemoveAuthTokenEvent {
62
+ oldAuthToken: SignedAuthToken;
63
+ }
64
+ export interface RequestEvent<T extends SocketMap> {
65
+ request: ServicePacket<T['Service']> | MethodPacket<T['Incoming']>;
66
+ }
67
+ export interface ResponseEvent<T extends SocketMap> {
68
+ response: AnyResponse<T>;
69
+ }
70
+ export interface UnexpectedResponseEvent {
71
+ request: ClientRequest;
72
+ response: IncomingMessage;
73
+ }
74
+ export interface UpgradeEvent {
75
+ request: IncomingMessage;
76
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,93 @@
1
+ import { CodecEngine } from "@socket-mesh/formatter";
2
+ import ws from "isomorphic-ws";
3
+ import { Plugin } from "./plugins/plugin.js";
4
+ import { AnyRequest, InvokeMethodRequest, InvokeServiceRequest, TransmitMethodRequest, TransmitServiceRequest } from "./request.js";
5
+ import { AnyPacket } from "./packet.js";
6
+ import { ClientRequest, IncomingMessage } from "http";
7
+ import { FunctionReturnType, MethodMap, ServiceMap } from "./maps/method-map.js";
8
+ import { AnyResponse } from "./response.js";
9
+ import { AuthToken, SignedAuthToken } from "@socket-mesh/auth";
10
+ import { Socket, SocketOptions, SocketStatus, StreamCleanupMode } from "./socket.js";
11
+ import { SocketMap } from "./maps/socket-map.js";
12
+ export type CallIdGenerator = () => number;
13
+ export interface InvokeMethodOptions<TMethodMap extends MethodMap, TMethod extends keyof TMethodMap> {
14
+ method: TMethod;
15
+ ackTimeoutMs?: number | false;
16
+ }
17
+ export interface InvokeServiceOptions<TServiceMap extends ServiceMap, TService extends keyof TServiceMap, TMethod extends keyof TServiceMap[TService]> {
18
+ service: TService;
19
+ method: TMethod;
20
+ ackTimeoutMs?: number | false;
21
+ }
22
+ export declare class SocketTransport<T extends SocketMap> {
23
+ private _socket;
24
+ private _webSocket;
25
+ private _inboundProcessedMessageCount;
26
+ private _inboundReceivedMessageCount;
27
+ private _outboundPreparedMessageCount;
28
+ private _outboundSentMessageCount;
29
+ private _isReady;
30
+ private _authToken?;
31
+ private _signedAuthToken?;
32
+ private readonly _callIdGenerator;
33
+ private readonly _callbackMap;
34
+ private readonly _handlers;
35
+ private _onUnhandledRequest;
36
+ readonly codecEngine: CodecEngine;
37
+ readonly plugins: Plugin<T>[];
38
+ streamCleanupMode: StreamCleanupMode;
39
+ id: string | null;
40
+ ackTimeoutMs: number;
41
+ private _pingTimeoutRef;
42
+ protected constructor(options?: SocketOptions<T>);
43
+ protected abortAllPendingCallbacksDueToBadConnection(status: SocketStatus): void;
44
+ get authToken(): AuthToken;
45
+ changeToUnauthenticatedState(): Promise<boolean>;
46
+ protected decode(data: string | ws.RawData): any;
47
+ disconnect(code?: number, reason?: string): void;
48
+ getBackpressure(): number;
49
+ getInboundBackpressure(): number;
50
+ getOutboundBackpressure(): number;
51
+ private handleInboudMessage;
52
+ protected onClose(code: number, reason?: Buffer | string): void;
53
+ protected onDisconnect(status: SocketStatus, code: number, reason?: string): void;
54
+ onError(error: Error): void;
55
+ protected onInvoke<TService extends keyof T['Service'], TServiceMethod extends keyof T['Service'][TService], TMethod extends keyof T['Outgoing'], TPrivateMethod extends keyof T['PrivateOutgoing']>(request: InvokeMethodRequest<T["Outgoing"], TMethod> | InvokeMethodRequest<T["PrivateOutgoing"], TPrivateMethod> | InvokeServiceRequest<T["Service"], TService, TServiceMethod>): void;
56
+ protected onMessage(data: ws.RawData, isBinary: boolean): void;
57
+ protected onOpen(): void;
58
+ protected onPing(data: Buffer): void;
59
+ protected onPong(data: Buffer): void;
60
+ protected onRequest(packet: AnyPacket<T>, timestamp: Date, pluginError?: Error): Promise<boolean>;
61
+ protected onResponse(response: AnyResponse<T>, pluginError?: Error): void;
62
+ protected onTransmit<TService extends keyof T['Service'], TServiceMethod extends keyof T['Service'][TService], TMethod extends keyof T['Outgoing']>(request: TransmitMethodRequest<T['Outgoing'], TMethod> | TransmitServiceRequest<T['Service'], TService, TServiceMethod>): void;
63
+ protected onUnexpectedResponse(request: ClientRequest, response: IncomingMessage): void;
64
+ protected onUnhandledRequest(packet: AnyPacket<T>): boolean;
65
+ protected onUpgrade(request: IncomingMessage): void;
66
+ ping(): Promise<void>;
67
+ protected resetPingTimeout(timeoutMs: number | false, code: number): void;
68
+ send(data: Buffer | string): Promise<void>;
69
+ protected sendRequest(requests: (AnyRequest<T>)[]): void;
70
+ protected sendRequest(index: number, requests: (AnyRequest<T>)[]): void;
71
+ protected sendResponse(responses: (AnyResponse<T>)[]): void;
72
+ protected sendResponse(index: number, responses: (AnyResponse<T>)[]): void;
73
+ setAuthorization(authToken: AuthToken): Promise<boolean>;
74
+ setAuthorization(signedAuthToken: SignedAuthToken, authToken?: AuthToken): Promise<boolean>;
75
+ setReadyStatus(pingTimeoutMs: number, authError?: Error): void;
76
+ get signedAuthToken(): SignedAuthToken;
77
+ get socket(): Socket<T>;
78
+ set socket(value: Socket<T>);
79
+ get status(): SocketStatus;
80
+ triggerAuthenticationEvents(wasSigned: boolean, wasAuthenticated: boolean): void;
81
+ transmit<TMethod extends keyof T['Outgoing']>(method: TMethod, arg?: Parameters<T['Outgoing'][TMethod]>[0]): Promise<void>;
82
+ transmit<TService extends keyof T['Service'], TMethod extends keyof T['Service'][TService]>(options: [TService, TMethod], arg?: Parameters<T['Service'][TService][TMethod]>[0]): Promise<void>;
83
+ transmit<TMethod extends keyof T['PrivateOutgoing']>(method: TMethod, arg?: Parameters<T['PrivateOutgoing'][TMethod]>[0]): Promise<void>;
84
+ invoke<TMethod extends keyof T['Outgoing']>(method: TMethod, arg?: Parameters<T['Outgoing'][TMethod]>[0]): [Promise<FunctionReturnType<T['Outgoing'][TMethod]>>, () => void];
85
+ invoke<TService extends keyof T['Service'], TMethod extends keyof T['Service'][TService]>(options: [TService, TMethod, (number | false)?], arg?: Parameters<T['Service'][TService][TMethod]>[0]): [Promise<FunctionReturnType<T['Service'][TService][TMethod]>>, () => void];
86
+ invoke<TService extends keyof T['Service'], TMethod extends keyof T['Service'][TService]>(options: InvokeServiceOptions<T['Service'], TService, TMethod>, arg?: Parameters<T['Service'][TService][TMethod]>[0]): [Promise<FunctionReturnType<T['Service'][TService][TMethod]>>, () => void];
87
+ invoke<TMethod extends keyof T['Outgoing']>(options: InvokeMethodOptions<T['Outgoing'], TMethod>, arg?: Parameters<T['Outgoing'][TMethod]>[0]): [Promise<FunctionReturnType<T['Outgoing'][TMethod]>>, () => void];
88
+ invoke<TMethod extends keyof T['PrivateOutgoing']>(method: TMethod, arg: Parameters<T['PrivateOutgoing'][TMethod]>[0]): [Promise<FunctionReturnType<T['PrivateOutgoing'][TMethod]>>, () => void];
89
+ invoke<TMethod extends keyof T['PrivateOutgoing']>(options: InvokeMethodOptions<T['PrivateOutgoing'], TMethod>, arg?: Parameters<T['PrivateOutgoing'][TMethod]>[0]): [Promise<FunctionReturnType<T['PrivateOutgoing'][TMethod]>>, () => void];
90
+ get url(): string;
91
+ protected get webSocket(): ws.WebSocket;
92
+ protected set webSocket(value: ws.WebSocket | null);
93
+ }