@socket-mesh/core 1.0.4 → 2.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/dist/maps/handler-map.d.ts +5 -3
- package/dist/maps/method-map.d.ts +2 -0
- package/dist/packet.d.ts +26 -11
- package/dist/plugins/plugin.d.ts +30 -30
- package/dist/request-handler.d.ts +9 -7
- package/dist/request.d.ts +20 -27
- package/dist/response.d.ts +15 -11
- package/dist/socket-event.d.ts +14 -7
- package/dist/socket-transport.d.ts +37 -32
- package/dist/socket-transport.js +17 -13
- package/dist/socket.d.ts +31 -25
- package/dist/socket.js +1 -1
- package/dist/utils.d.ts +1 -0
- package/dist/utils.js +3 -0
- package/package.json +1 -1
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { RequestHandler } from '../request-handler.js';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import { BaseSocketTransport } from '../socket-transport.js';
|
|
3
|
+
import { BaseSocket } from '../socket.js';
|
|
4
|
+
import { MethodMap } from './method-map.js';
|
|
5
|
+
export type HandlerMap<TIncoming extends MethodMap, TState extends object, TSocket extends BaseSocket<TState> = BaseSocket<TState>, TTransport extends BaseSocketTransport<TState> = BaseSocketTransport<TState>> = Partial<{
|
|
6
|
+
[K in keyof TIncoming]: RequestHandler<Parameters<TIncoming[K]>[0], ReturnType<TIncoming[K]>, TState, TSocket, TTransport>;
|
|
5
7
|
}>;
|
|
@@ -20,3 +20,5 @@ export type RemoveIndexSignature<T> = {
|
|
|
20
20
|
export type ServiceMap = {
|
|
21
21
|
[service: string]: MethodMap;
|
|
22
22
|
};
|
|
23
|
+
export type ServiceMethodName<TService extends ServiceMap, TServiceName extends ServiceName<TService>> = string & keyof TService[TServiceName];
|
|
24
|
+
export type ServiceName<TService extends ServiceMap> = string & keyof TService;
|
package/dist/packet.d.ts
CHANGED
|
@@ -1,26 +1,41 @@
|
|
|
1
1
|
import { MethodMap, ServiceMap } from './maps/method-map.js';
|
|
2
|
-
export type AnyPacket
|
|
3
|
-
export type
|
|
4
|
-
[TMethod in keyof TMethodMap]:
|
|
2
|
+
export type AnyPacket = MethodPacket | ServicePacket;
|
|
3
|
+
export type IncomingMethodPacket<TMethodMap extends MethodMap> = {
|
|
4
|
+
[TMethod in keyof TMethodMap]: IncomingMethodRequestPacket<TMethodMap, TMethod>;
|
|
5
5
|
}[keyof TMethodMap];
|
|
6
|
-
export interface
|
|
6
|
+
export interface IncomingMethodRequestPacket<TMethodMap extends MethodMap, TMethod extends keyof TMethodMap> extends RequestPacket {
|
|
7
7
|
ackTimeoutMs?: boolean | number;
|
|
8
8
|
data: Parameters<TMethodMap[TMethod]>[0];
|
|
9
9
|
method: TMethod;
|
|
10
10
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
14
|
-
export type ServicePacket<TServiceMap extends ServiceMap> = {
|
|
11
|
+
export type IncomingPacket<TIncoming extends MethodMap, TService extends ServiceMap> = IncomingMethodPacket<TIncoming> | IncomingServicePacket<TService>;
|
|
12
|
+
export type IncomingServicePacket<TServiceMap extends ServiceMap> = {
|
|
15
13
|
[TService in keyof TServiceMap]: {
|
|
16
|
-
[TMethod in keyof TServiceMap[TService]]:
|
|
14
|
+
[TMethod in keyof TServiceMap[TService]]: IncomingServiceRequestPacket<TServiceMap, TService, TMethod>;
|
|
17
15
|
}[keyof TServiceMap[TService]];
|
|
18
16
|
}[keyof TServiceMap];
|
|
19
|
-
export interface
|
|
17
|
+
export interface IncomingServiceRequestPacket<TServiceMap extends ServiceMap, TService extends keyof TServiceMap, TMethod extends keyof TServiceMap[TService]> extends RequestPacket {
|
|
20
18
|
ackTimeoutMs?: boolean | number;
|
|
21
19
|
data?: Parameters<TServiceMap[TService][TMethod]>[0];
|
|
22
20
|
method: TMethod;
|
|
23
21
|
service: TService;
|
|
24
22
|
}
|
|
25
|
-
export
|
|
23
|
+
export type MethodPacket = MethodRequestPacket;
|
|
24
|
+
export interface MethodRequestPacket extends RequestPacket {
|
|
25
|
+
ackTimeoutMs?: boolean | number;
|
|
26
|
+
data?: unknown;
|
|
27
|
+
method: string;
|
|
28
|
+
}
|
|
29
|
+
interface RequestPacket {
|
|
30
|
+
cid?: number;
|
|
31
|
+
}
|
|
32
|
+
export type ServicePacket = ServiceRequestPacket;
|
|
33
|
+
export interface ServiceRequestPacket extends RequestPacket {
|
|
34
|
+
ackTimeoutMs?: boolean | number;
|
|
35
|
+
data?: unknown;
|
|
36
|
+
method: string;
|
|
37
|
+
service: string;
|
|
38
|
+
}
|
|
39
|
+
export declare function isRequestPacket(packet: unknown): packet is AnyPacket;
|
|
40
|
+
export declare function isRequestPacket<TIncoming extends MethodMap, TService extends ServiceMap = {}>(packet: unknown): packet is IncomingPacket<TIncoming, TService>;
|
|
26
41
|
export {};
|
package/dist/plugins/plugin.d.ts
CHANGED
|
@@ -1,50 +1,50 @@
|
|
|
1
1
|
import ws from 'isomorphic-ws';
|
|
2
|
-
import { HandlerMap } from '../maps/handler-map.js';
|
|
3
|
-
import { MethodMap, PrivateMethodMap, PublicMethodMap, ServiceMap } from '../maps/method-map.js';
|
|
4
2
|
import { AnyPacket } from '../packet.js';
|
|
3
|
+
import { LooseHandlerMap } from '../request-handler.js';
|
|
5
4
|
import { AnyRequest } from '../request.js';
|
|
6
5
|
import { AnyResponse } from '../response.js';
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
export
|
|
6
|
+
import { BaseSocketTransport } from '../socket-transport.js';
|
|
7
|
+
import { BaseSocket, SocketStatus } from '../socket.js';
|
|
8
|
+
export type AnyPlugin = Plugin<any, any>;
|
|
9
|
+
export interface DisconnectedPluginArgs<TSocket extends BaseSocket = BaseSocket, TTransport extends BaseSocketTransport = BaseSocketTransport> extends PluginArgs<TSocket, TTransport> {
|
|
10
10
|
code: number;
|
|
11
11
|
reason?: string;
|
|
12
12
|
status: SocketStatus;
|
|
13
13
|
}
|
|
14
|
-
export interface MessagePluginArgs<
|
|
15
|
-
packet: AnyPacket
|
|
14
|
+
export interface MessagePluginArgs<TSocket extends BaseSocket = BaseSocket, TTransport extends BaseSocketTransport = BaseSocketTransport> extends PluginArgs<TSocket, TTransport> {
|
|
15
|
+
packet: AnyPacket | AnyResponse;
|
|
16
16
|
timestamp: Date;
|
|
17
17
|
}
|
|
18
|
-
export interface MessageRawPluginArgs<
|
|
18
|
+
export interface MessageRawPluginArgs<TSocket extends BaseSocket = BaseSocket, TTransport extends BaseSocketTransport = BaseSocketTransport> extends PluginArgs<TSocket, TTransport> {
|
|
19
19
|
message: string | ws.RawData;
|
|
20
20
|
promise: Promise<void>;
|
|
21
21
|
timestamp: Date;
|
|
22
22
|
}
|
|
23
|
-
export interface Plugin<
|
|
24
|
-
handlers?:
|
|
25
|
-
onAuthenticated?(options: PluginArgs<
|
|
26
|
-
onClose?(options: PluginArgs<
|
|
27
|
-
onDeauthenticate?(options: PluginArgs<
|
|
28
|
-
onDisconnected?(options: DisconnectedPluginArgs<
|
|
29
|
-
onEnd?(options: PluginArgs<
|
|
30
|
-
onMessage?(options: MessagePluginArgs<
|
|
31
|
-
onMessageRaw?(options: MessageRawPluginArgs<
|
|
32
|
-
onOpen?(options: PluginArgs<
|
|
33
|
-
onReady?(options: PluginArgs<
|
|
34
|
-
sendRequest?(options: SendRequestPluginArgs<
|
|
35
|
-
sendResponse?(options: SendResponsePluginArgs<
|
|
23
|
+
export interface Plugin<TSocket extends BaseSocket = BaseSocket, TTransport extends BaseSocketTransport = BaseSocketTransport> {
|
|
24
|
+
handlers?: LooseHandlerMap;
|
|
25
|
+
onAuthenticated?(options: PluginArgs<TSocket, TTransport>): void;
|
|
26
|
+
onClose?(options: PluginArgs<TSocket, TTransport>): void;
|
|
27
|
+
onDeauthenticate?(options: PluginArgs<TSocket, TTransport>): void;
|
|
28
|
+
onDisconnected?(options: DisconnectedPluginArgs<TSocket, TTransport>): void;
|
|
29
|
+
onEnd?(options: PluginArgs<TSocket, TTransport>): void;
|
|
30
|
+
onMessage?(options: MessagePluginArgs<TSocket, TTransport>): Promise<AnyPacket | AnyResponse>;
|
|
31
|
+
onMessageRaw?(options: MessageRawPluginArgs<TSocket, TTransport>): Promise<string | ws.RawData>;
|
|
32
|
+
onOpen?(options: PluginArgs<TSocket, TTransport>): void;
|
|
33
|
+
onReady?(options: PluginArgs<TSocket, TTransport>): void;
|
|
34
|
+
sendRequest?(options: SendRequestPluginArgs<TSocket, TTransport>): void;
|
|
35
|
+
sendResponse?(options: SendResponsePluginArgs<TSocket, TTransport>): void;
|
|
36
36
|
type: string;
|
|
37
37
|
}
|
|
38
|
-
export interface PluginArgs<
|
|
39
|
-
socket:
|
|
40
|
-
transport:
|
|
38
|
+
export interface PluginArgs<TSocket extends BaseSocket = BaseSocket, TTransport extends BaseSocketTransport = BaseSocketTransport> {
|
|
39
|
+
socket: TSocket;
|
|
40
|
+
transport: TTransport;
|
|
41
41
|
}
|
|
42
42
|
export type PluginType = 'handshake' | 'request' | 'response';
|
|
43
|
-
export interface SendRequestPluginArgs<
|
|
44
|
-
cont: (requests: AnyRequest
|
|
45
|
-
requests: AnyRequest
|
|
43
|
+
export interface SendRequestPluginArgs<TSocket extends BaseSocket = BaseSocket, TTransport extends BaseSocketTransport = BaseSocketTransport> extends PluginArgs<TSocket, TTransport> {
|
|
44
|
+
cont: (requests: AnyRequest[]) => void;
|
|
45
|
+
requests: AnyRequest[];
|
|
46
46
|
}
|
|
47
|
-
export interface SendResponsePluginArgs<
|
|
48
|
-
cont: (requests: AnyResponse
|
|
49
|
-
responses: AnyResponse
|
|
47
|
+
export interface SendResponsePluginArgs<TSocket extends BaseSocket = BaseSocket, TTransport extends BaseSocketTransport = BaseSocketTransport> extends PluginArgs<TSocket, TTransport> {
|
|
48
|
+
cont: (requests: AnyResponse[]) => void;
|
|
49
|
+
responses: AnyResponse[];
|
|
50
50
|
}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { BaseSocketTransport } from './socket-transport.js';
|
|
2
|
+
import { BaseSocket } from './socket.js';
|
|
3
|
+
export interface LooseHandlerMap {
|
|
4
|
+
[method: string]: ((args: RequestHandlerArgs<any, any, any, any>) => Promise<any>) | undefined;
|
|
5
|
+
}
|
|
6
|
+
export type RequestHandler<TOptions, U, TState extends object, TSocket extends BaseSocket<TState> = BaseSocket<TState>, TTransport extends BaseSocketTransport<TState> = BaseSocketTransport<TState>> = (args: RequestHandlerArgs<TOptions, TState, TSocket, TTransport>) => Promise<U>;
|
|
7
|
+
export interface RequestHandlerArgsOptions<TOptions, TState extends object, TSocket extends BaseSocket<TState> = BaseSocket<TState>, TTransport extends BaseSocketTransport<TState> = BaseSocketTransport<TState>> {
|
|
6
8
|
isRpc: boolean;
|
|
7
9
|
method: string;
|
|
8
10
|
options: TOptions;
|
|
@@ -10,7 +12,7 @@ export interface RequestHandlerArgsOptions<TOptions, TIncoming extends MethodMap
|
|
|
10
12
|
timeoutMs?: boolean | number;
|
|
11
13
|
transport: TTransport;
|
|
12
14
|
}
|
|
13
|
-
export declare class RequestHandlerArgs<TOptions,
|
|
15
|
+
export declare class RequestHandlerArgs<TOptions, TState extends object = {}, TSocket extends BaseSocket<TState> = BaseSocket<TState>, TTransport extends BaseSocketTransport<TState> = BaseSocketTransport<TState>> {
|
|
14
16
|
isRpc: boolean;
|
|
15
17
|
method: string;
|
|
16
18
|
options: TOptions;
|
|
@@ -18,7 +20,7 @@ export declare class RequestHandlerArgs<TOptions, TIncoming extends MethodMap =
|
|
|
18
20
|
socket: TSocket;
|
|
19
21
|
timeoutMs?: boolean | number;
|
|
20
22
|
transport: TTransport;
|
|
21
|
-
constructor(options: RequestHandlerArgsOptions<TOptions,
|
|
23
|
+
constructor(options: RequestHandlerArgsOptions<TOptions, TState, TSocket, TTransport>);
|
|
22
24
|
checkTimeout(timeLeftMs?: number): void;
|
|
23
25
|
getRemainingTimeMs(): number;
|
|
24
26
|
}
|
package/dist/request.d.ts
CHANGED
|
@@ -1,51 +1,44 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
export interface InvokeMethodRequest<TMethodMap extends MethodMap, TMethod extends keyof TMethodMap> extends TransmitMethodRequest<TMethodMap, TMethod> {
|
|
1
|
+
export type AnyRequest = MethodRequest | ServiceRequest;
|
|
2
|
+
export interface InvokeMethodRequest extends TransmitMethodRequest {
|
|
4
3
|
ackTimeoutMs: false | number;
|
|
5
|
-
callback: ((err: Error | null, result?:
|
|
4
|
+
callback: ((err: Error | null, result?: unknown) => void) | null;
|
|
6
5
|
cid: number;
|
|
7
6
|
timeoutId?: NodeJS.Timeout;
|
|
8
7
|
}
|
|
9
|
-
export interface InvokeServiceRequest
|
|
8
|
+
export interface InvokeServiceRequest extends TransmitServiceRequest {
|
|
10
9
|
ackTimeoutMs: false | number;
|
|
11
|
-
callback: ((err: Error | null, result?:
|
|
10
|
+
callback: ((err: Error | null, result?: unknown) => void) | null;
|
|
12
11
|
cid: number;
|
|
13
12
|
timeoutId?: NodeJS.Timeout;
|
|
14
13
|
}
|
|
15
|
-
export type MethodRequest
|
|
16
|
-
[TMethod in keyof TMethodMap]: InvokeMethodRequest<TMethodMap, TMethod> | TransmitMethodRequest<TMethodMap, TMethod>;
|
|
17
|
-
}[keyof TMethodMap];
|
|
14
|
+
export type MethodRequest = InvokeMethodRequest | TransmitMethodRequest;
|
|
18
15
|
export interface Request {
|
|
19
16
|
promise: Promise<void>;
|
|
20
17
|
sentCallback?: (err?: Error) => void;
|
|
21
18
|
}
|
|
22
|
-
export type ServiceRequest
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}[keyof TServiceMap];
|
|
27
|
-
export interface TransmitMethodRequest<TMethodMap extends MethodMap, TMethod extends keyof TMethodMap> extends Request {
|
|
28
|
-
data?: Parameters<TMethodMap[TMethod]>[0];
|
|
29
|
-
method: TMethod;
|
|
19
|
+
export type ServiceRequest = InvokeServiceRequest | TransmitServiceRequest;
|
|
20
|
+
export interface TransmitMethodRequest extends Request {
|
|
21
|
+
data?: unknown;
|
|
22
|
+
method: string;
|
|
30
23
|
}
|
|
31
|
-
export interface TransmitServiceRequest
|
|
32
|
-
data?:
|
|
33
|
-
method:
|
|
34
|
-
service:
|
|
24
|
+
export interface TransmitServiceRequest extends Request {
|
|
25
|
+
data?: unknown;
|
|
26
|
+
method: string;
|
|
27
|
+
service: string;
|
|
35
28
|
}
|
|
36
|
-
export declare function abortRequest
|
|
37
|
-
export declare function isRequestDone
|
|
38
|
-
export declare class RequestCollection
|
|
29
|
+
export declare function abortRequest(request: AnyRequest, err: Error): void;
|
|
30
|
+
export declare function isRequestDone(request: AnyRequest): boolean;
|
|
31
|
+
export declare class RequestCollection {
|
|
39
32
|
private readonly _callbacks;
|
|
40
33
|
private readonly _requests;
|
|
41
|
-
constructor(requests: AnyRequest
|
|
34
|
+
constructor(requests: AnyRequest | AnyRequest[]);
|
|
42
35
|
isDone(): boolean;
|
|
43
|
-
get items(): ReadonlyArray<AnyRequest
|
|
36
|
+
get items(): ReadonlyArray<AnyRequest>;
|
|
44
37
|
listen(cb: () => void): void;
|
|
45
38
|
[Symbol.iterator](): {
|
|
46
39
|
next(): {
|
|
47
40
|
done: boolean;
|
|
48
|
-
value: AnyRequest
|
|
41
|
+
value: AnyRequest | undefined;
|
|
49
42
|
} | {
|
|
50
43
|
done: boolean;
|
|
51
44
|
value?: undefined;
|
package/dist/response.d.ts
CHANGED
|
@@ -1,21 +1,25 @@
|
|
|
1
1
|
import { MethodMap, PrivateMethodMap, PublicMethodMap, ServiceMap } from './maps/method-map.js';
|
|
2
|
-
export type AnyResponse
|
|
3
|
-
export interface DataResponse
|
|
4
|
-
data:
|
|
2
|
+
export type AnyResponse = DataResponse | ErrorResponse | Response;
|
|
3
|
+
export interface DataResponse extends Response {
|
|
4
|
+
data: unknown;
|
|
5
5
|
}
|
|
6
6
|
export interface ErrorResponse extends Response {
|
|
7
7
|
error: Error;
|
|
8
8
|
}
|
|
9
|
-
export
|
|
10
|
-
|
|
9
|
+
export interface OutgoingDataResponse<T> extends Response {
|
|
10
|
+
data: T;
|
|
11
|
+
}
|
|
12
|
+
export type OutgoingMethodDataResponse<TMethodMap extends MethodMap> = {
|
|
13
|
+
[TMethod in keyof TMethodMap]: OutgoingDataResponse<ReturnType<TMethodMap[TMethod]>>;
|
|
11
14
|
}[keyof TMethodMap];
|
|
15
|
+
export type OutgoingResponse<TOutgoing extends PublicMethodMap, TPrivateOutgoing extends PrivateMethodMap, TService extends ServiceMap> = ErrorResponse | OutgoingMethodDataResponse<TOutgoing> | OutgoingMethodDataResponse<TPrivateOutgoing> | OutgoingServiceDataResponse<TService> | Response;
|
|
16
|
+
export type OutgoingServiceDataResponse<TServiceMap extends ServiceMap> = {
|
|
17
|
+
[TService in keyof TServiceMap]: {
|
|
18
|
+
[TMethod in keyof TServiceMap[TService]]: OutgoingDataResponse<ReturnType<TServiceMap[TService][TMethod]>>;
|
|
19
|
+
}[keyof TServiceMap[TService]];
|
|
20
|
+
}[keyof TServiceMap];
|
|
12
21
|
export interface Response {
|
|
13
22
|
rid: number;
|
|
14
23
|
timeoutAt?: Date;
|
|
15
24
|
}
|
|
16
|
-
export
|
|
17
|
-
[TService in keyof TServiceMap]: {
|
|
18
|
-
[TMethod in keyof TServiceMap[TService]]: DataResponse<ReturnType<TServiceMap[TService][TMethod]>>;
|
|
19
|
-
}[keyof TServiceMap[TService]];
|
|
20
|
-
}[keyof TServiceMap];
|
|
21
|
-
export declare function isResponsePacket<TOutgoing extends PublicMethodMap, TPrivateOutgoing extends PrivateMethodMap, TService extends ServiceMap>(packet?: unknown): packet is AnyResponse<TOutgoing, TPrivateOutgoing, TService>;
|
|
25
|
+
export declare function isResponsePacket(packet?: unknown): packet is AnyResponse;
|
package/dist/socket-event.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { AuthToken, SignedAuthToken } from '@socket-mesh/auth';
|
|
2
2
|
import ws from 'isomorphic-ws';
|
|
3
3
|
import { MethodMap, PrivateMethodMap, PublicMethodMap, ServiceMap } from './maps/method-map.js';
|
|
4
|
-
import {
|
|
5
|
-
import { AnyResponse } from './response.js';
|
|
4
|
+
import { AnyPacket, IncomingPacket } from './packet.js';
|
|
5
|
+
import { AnyResponse, OutgoingResponse } from './response.js';
|
|
6
6
|
export interface AuthenticatedChangeEvent {
|
|
7
7
|
authToken: AuthToken | null;
|
|
8
8
|
isAuthenticated: true;
|
|
@@ -54,10 +54,17 @@ export type PongEvent = object;
|
|
|
54
54
|
export interface RemoveAuthTokenEvent {
|
|
55
55
|
oldAuthToken: SignedAuthToken;
|
|
56
56
|
}
|
|
57
|
-
export interface RequestEvent
|
|
58
|
-
request:
|
|
57
|
+
export interface RequestEvent {
|
|
58
|
+
request: AnyPacket;
|
|
59
59
|
}
|
|
60
|
-
export interface ResponseEvent
|
|
61
|
-
response: AnyResponse
|
|
60
|
+
export interface ResponseEvent {
|
|
61
|
+
response: AnyResponse;
|
|
62
62
|
}
|
|
63
|
-
export type SocketEvent
|
|
63
|
+
export type SocketEvent = AuthenticateEvent | AuthStateChangeEvent | BadAuthTokenEvent | CloseEvent | ConnectEvent | ConnectingEvent | DeauthenticateEvent | DisconnectEvent | ErrorEvent | MessageEvent | PingEvent | PongEvent | RemoveAuthTokenEvent | RequestEvent | ResponseEvent;
|
|
64
|
+
export interface TypedRequestEvent<TIncoming extends MethodMap, TService extends ServiceMap = {}> {
|
|
65
|
+
request: IncomingPacket<TIncoming, TService>;
|
|
66
|
+
}
|
|
67
|
+
export interface TypedResponseEvent<TOutgoing extends PublicMethodMap, TPrivateOutgoing extends PrivateMethodMap = {}, TService extends ServiceMap = {}> {
|
|
68
|
+
response: OutgoingResponse<TOutgoing, TPrivateOutgoing, TService>;
|
|
69
|
+
}
|
|
70
|
+
export type TypedSocketEvent<TIncoming extends MethodMap, TOutgoing extends PublicMethodMap, TPrivateOutgoing extends PrivateMethodMap = {}, TService extends ServiceMap = {}> = AuthenticateEvent | AuthStateChangeEvent | BadAuthTokenEvent | CloseEvent | ConnectEvent | ConnectingEvent | DeauthenticateEvent | DisconnectEvent | ErrorEvent | MessageEvent | PingEvent | PongEvent | RemoveAuthTokenEvent | TypedRequestEvent<TIncoming, TService> | TypedResponseEvent<TOutgoing, TPrivateOutgoing, TService>;
|
|
@@ -1,27 +1,39 @@
|
|
|
1
1
|
import { AuthToken, SignedAuthToken } from '@socket-mesh/auth';
|
|
2
2
|
import { CodecEngine } from '@socket-mesh/formatter';
|
|
3
3
|
import ws from 'isomorphic-ws';
|
|
4
|
-
import { FunctionReturnType, MethodMap, PrivateMethodMap, PublicMethodMap, ServiceMap } from './maps/method-map.js';
|
|
4
|
+
import { FunctionReturnType, MethodMap, PrivateMethodMap, PublicMethodMap, ServiceMap, ServiceMethodName, ServiceName } from './maps/method-map.js';
|
|
5
5
|
import { AnyPacket } from './packet.js';
|
|
6
|
-
import {
|
|
7
|
-
import { AnyRequest
|
|
6
|
+
import { AnyPlugin } from './plugins/plugin.js';
|
|
7
|
+
import { AnyRequest } from './request.js';
|
|
8
8
|
import { AnyResponse } from './response.js';
|
|
9
|
-
import {
|
|
9
|
+
import { BaseSocket, BaseSocketOptions, Socket, SocketStatus, StreamCleanupMode } from './socket.js';
|
|
10
10
|
export type CallIdGenerator = () => number;
|
|
11
|
-
export interface InboundMessage
|
|
12
|
-
packet: (AnyPacket
|
|
11
|
+
export interface InboundMessage {
|
|
12
|
+
packet: (AnyPacket | AnyResponse)[] | (AnyPacket | AnyResponse) | null;
|
|
13
13
|
timestamp: Date;
|
|
14
14
|
}
|
|
15
|
-
export interface InvokeMethodOptions<TMethodMap extends MethodMap, TMethod extends keyof TMethodMap> {
|
|
15
|
+
export interface InvokeMethodOptions<TMethodMap extends MethodMap = MethodMap, TMethod extends keyof TMethodMap & string = keyof TMethodMap & string> {
|
|
16
16
|
ackTimeoutMs?: false | number;
|
|
17
17
|
method: TMethod;
|
|
18
18
|
}
|
|
19
|
-
export interface InvokeServiceOptions<TServiceMap extends ServiceMap, TService extends keyof TServiceMap, TMethod extends keyof TServiceMap[TService]> {
|
|
19
|
+
export interface InvokeServiceOptions<TServiceMap extends ServiceMap = ServiceMap, TService extends keyof TServiceMap & string = keyof TServiceMap & string, TMethod extends keyof TServiceMap[TService] & string = keyof TServiceMap[TService] & string> {
|
|
20
20
|
ackTimeoutMs?: false | number;
|
|
21
21
|
method: TMethod;
|
|
22
22
|
service: TService;
|
|
23
23
|
}
|
|
24
|
-
export
|
|
24
|
+
export type SocketTransport<TIncoming extends PublicMethodMap = {}, TOutgoing extends PublicMethodMap = {}, TState extends object = {}, TService extends ServiceMap = {}, TPrivateIncoming extends PrivateMethodMap = {}, TPrivateOutgoing extends PrivateMethodMap = {}> = Omit<BaseSocketTransport<TState>, 'invoke' | 'socket' | 'transmit'> & {
|
|
25
|
+
invoke<TMethod extends keyof TOutgoing & string>(method: TMethod, arg?: Parameters<TOutgoing[TMethod]>[0]): [Promise<FunctionReturnType<TOutgoing[TMethod]>>, () => void];
|
|
26
|
+
invoke<TMethod extends keyof TOutgoing & string>(options: InvokeMethodOptions<TOutgoing, TMethod>, arg?: Parameters<TOutgoing[TMethod]>[0]): [Promise<FunctionReturnType<TOutgoing[TMethod]>>, () => void];
|
|
27
|
+
invoke<TServiceName extends ServiceName<TService>, TMethod extends ServiceMethodName<TService, TServiceName>>(options: [TServiceName, TMethod, (false | number)?], arg?: Parameters<TService[TServiceName][TMethod]>[0]): [Promise<FunctionReturnType<TService[TServiceName][TMethod]>>, () => void];
|
|
28
|
+
invoke<TServiceName extends ServiceName<TService>, TMethod extends ServiceMethodName<TService, TServiceName>>(options: InvokeServiceOptions<TService, TServiceName, TMethod>, arg?: Parameters<TService[TServiceName][TMethod]>[0]): [Promise<FunctionReturnType<TService[TServiceName][TMethod]>>, () => void];
|
|
29
|
+
invoke<TMethod extends keyof TPrivateOutgoing & string>(method: TMethod, arg?: Parameters<TPrivateOutgoing[TMethod]>[0]): [Promise<FunctionReturnType<TPrivateOutgoing[TMethod]>>, () => void];
|
|
30
|
+
invoke<TMethod extends keyof TPrivateOutgoing & string>(options: InvokeMethodOptions<TPrivateOutgoing, TMethod>, arg?: Parameters<TPrivateOutgoing[TMethod]>[0]): [Promise<FunctionReturnType<TPrivateOutgoing[TMethod]>>, () => void];
|
|
31
|
+
readonly socket: Socket<TIncoming, TOutgoing, TState, TService, TPrivateIncoming, TPrivateOutgoing>;
|
|
32
|
+
transmit<TMethod extends keyof TOutgoing & string>(method: TMethod, arg?: Parameters<TOutgoing[TMethod]>[0]): Promise<void>;
|
|
33
|
+
transmit<TServiceName extends ServiceName<TService>, TMethod extends ServiceMethodName<TService, TServiceName>>(options: [TServiceName, TMethod], arg?: Parameters<TService[TServiceName][TMethod]>[0]): Promise<void>;
|
|
34
|
+
transmit<TMethod extends keyof TPrivateOutgoing & string>(method: TMethod, arg?: Parameters<TPrivateOutgoing[TMethod]>[0]): Promise<void>;
|
|
35
|
+
};
|
|
36
|
+
export declare class BaseSocketTransport<TState extends object = {}> {
|
|
25
37
|
private _authToken;
|
|
26
38
|
private readonly _callbackMap;
|
|
27
39
|
private readonly _callIdGenerator;
|
|
@@ -38,9 +50,9 @@ export declare class SocketTransport<TIncoming extends MethodMap, TOutgoing exte
|
|
|
38
50
|
ackTimeoutMs: number;
|
|
39
51
|
readonly codecEngine: CodecEngine;
|
|
40
52
|
id: null | string;
|
|
41
|
-
readonly plugins:
|
|
53
|
+
readonly plugins: AnyPlugin[];
|
|
42
54
|
streamCleanupMode: StreamCleanupMode;
|
|
43
|
-
protected constructor(options?:
|
|
55
|
+
protected constructor(options?: BaseSocketOptions<TState>);
|
|
44
56
|
protected abortAllPendingCallbacksDueToBadConnection(status: SocketStatus): void;
|
|
45
57
|
get authToken(): AuthToken | null;
|
|
46
58
|
changeToUnauthenticatedState(): Promise<boolean>;
|
|
@@ -49,42 +61,35 @@ export declare class SocketTransport<TIncoming extends MethodMap, TOutgoing exte
|
|
|
49
61
|
getBackpressure(): number;
|
|
50
62
|
getInboundBackpressure(): number;
|
|
51
63
|
getOutboundBackpressure(): number;
|
|
52
|
-
protected handleInboudMessage({ packet, timestamp }: InboundMessage
|
|
53
|
-
invoke
|
|
54
|
-
invoke<TServiceName extends keyof TService, TMethod extends keyof TService[TServiceName]>(options: [TServiceName, TMethod, (false | number)?], arg?: Parameters<TService[TServiceName][TMethod]>[0]): [Promise<FunctionReturnType<TService[TServiceName][TMethod]>>, () => void];
|
|
55
|
-
invoke<TServiceName extends keyof TService, TMethod extends keyof TService[TServiceName]>(options: InvokeServiceOptions<TService, TServiceName, TMethod>, arg?: Parameters<TService[TServiceName][TMethod]>[0]): [Promise<FunctionReturnType<TService[TServiceName][TMethod]>>, () => void];
|
|
56
|
-
invoke<TMethod extends keyof TOutgoing>(options: InvokeMethodOptions<TOutgoing, TMethod>, arg?: Parameters<TOutgoing[TMethod]>[0]): [Promise<FunctionReturnType<TOutgoing[TMethod]>>, () => void];
|
|
57
|
-
invoke<TMethod extends keyof TPrivateOutgoing>(method: TMethod, arg: Parameters<TPrivateOutgoing[TMethod]>[0]): [Promise<FunctionReturnType<TPrivateOutgoing[TMethod]>>, () => void];
|
|
58
|
-
invoke<TMethod extends keyof TPrivateOutgoing>(options: InvokeMethodOptions<TPrivateOutgoing, TMethod>, arg?: Parameters<TPrivateOutgoing[TMethod]>[0]): [Promise<FunctionReturnType<TPrivateOutgoing[TMethod]>>, () => void];
|
|
64
|
+
protected handleInboudMessage({ packet, timestamp }: InboundMessage): Promise<void>;
|
|
65
|
+
invoke(methodOptions: [string, string, (false | number)?] | InvokeMethodOptions | InvokeServiceOptions | string, arg?: unknown): [Promise<unknown>, () => void];
|
|
59
66
|
protected onClose(code: number, reason?: Buffer | string): void;
|
|
60
67
|
protected onDisconnect(status: SocketStatus, code: number, reason?: string): void;
|
|
61
68
|
onError(error: Error): void;
|
|
62
|
-
protected onInvoke
|
|
69
|
+
protected onInvoke(request: AnyRequest): void;
|
|
63
70
|
protected onMessage(data: ws.Data, isBinary: boolean): void;
|
|
64
71
|
protected onOpen(): void;
|
|
65
72
|
protected onPingPong(): void;
|
|
66
|
-
protected onRequest(packet: AnyPacket
|
|
67
|
-
protected onResponse(response: AnyResponse
|
|
73
|
+
protected onRequest(packet: AnyPacket, timestamp: Date, pluginError?: Error): Promise<boolean>;
|
|
74
|
+
protected onResponse(response: AnyResponse, pluginError?: Error): void;
|
|
68
75
|
private onSocketClose;
|
|
69
76
|
private onSocketError;
|
|
70
77
|
private onSocketMessage;
|
|
71
|
-
protected onTransmit
|
|
72
|
-
protected onUnhandledRequest(
|
|
78
|
+
protected onTransmit(request: AnyRequest): void;
|
|
79
|
+
protected onUnhandledRequest(_: AnyPacket): boolean;
|
|
73
80
|
protected resetPingTimeout(timeoutMs: false | number, code: number): void;
|
|
74
81
|
send(data: Buffer | string): Promise<void>;
|
|
75
|
-
protected sendRequest(requests:
|
|
76
|
-
protected sendRequest(index: number, requests:
|
|
77
|
-
protected sendResponse(responses:
|
|
78
|
-
protected sendResponse(index: number, responses:
|
|
82
|
+
protected sendRequest(requests: AnyRequest[]): void;
|
|
83
|
+
protected sendRequest(index: number, requests: AnyRequest[]): void;
|
|
84
|
+
protected sendResponse(responses: AnyResponse[]): void;
|
|
85
|
+
protected sendResponse(index: number, responses: AnyResponse[]): void;
|
|
79
86
|
setAuthorization(signedAuthToken: SignedAuthToken, authToken?: AuthToken): Promise<boolean>;
|
|
80
87
|
setReadyStatus(pingTimeoutMs: number, authError?: Error): void;
|
|
81
88
|
get signedAuthToken(): null | SignedAuthToken;
|
|
82
|
-
get socket():
|
|
83
|
-
set socket(value:
|
|
89
|
+
get socket(): BaseSocket<TState>;
|
|
90
|
+
set socket(value: BaseSocket<TState>);
|
|
84
91
|
get status(): SocketStatus;
|
|
85
|
-
transmit
|
|
86
|
-
transmit<TServiceName extends keyof TService, TMethod extends keyof TService[TServiceName]>(options: [TServiceName, TMethod], arg?: Parameters<TService[TServiceName][TMethod]>[0]): Promise<void>;
|
|
87
|
-
transmit<TMethod extends keyof TPrivateOutgoing>(method: TMethod, arg?: Parameters<TPrivateOutgoing[TMethod]>[0]): Promise<void>;
|
|
92
|
+
transmit(serviceAndMethod: [string, string] | string, arg?: unknown): Promise<void>;
|
|
88
93
|
triggerAuthenticationEvents(wasSigned: boolean, wasAuthenticated: boolean): void;
|
|
89
94
|
get url(): string;
|
|
90
95
|
protected get webSocket(): null | ws.WebSocket;
|
package/dist/socket-transport.js
CHANGED
|
@@ -6,8 +6,8 @@ import { isRequestPacket } from './packet.js';
|
|
|
6
6
|
import { RequestHandlerArgs } from './request-handler.js';
|
|
7
7
|
import { abortRequest, isRequestDone } from './request.js';
|
|
8
8
|
import { isResponsePacket } from './response.js';
|
|
9
|
-
import { toArray, wait } from './utils.js';
|
|
10
|
-
export class
|
|
9
|
+
import { toArray, toError, wait } from './utils.js';
|
|
10
|
+
export class BaseSocketTransport {
|
|
11
11
|
_authToken;
|
|
12
12
|
_callbackMap;
|
|
13
13
|
_callIdGenerator;
|
|
@@ -28,8 +28,10 @@ export class SocketTransport {
|
|
|
28
28
|
streamCleanupMode;
|
|
29
29
|
constructor(options) {
|
|
30
30
|
let cid = 1;
|
|
31
|
+
this._isReady = false;
|
|
31
32
|
this._authToken = null;
|
|
32
33
|
this._signedAuthToken = null;
|
|
34
|
+
this._webSocket = null;
|
|
33
35
|
this.ackTimeoutMs = options?.ackTimeoutMs ?? 10000;
|
|
34
36
|
this._callIdGenerator = options?.callIdGenerator || (() => {
|
|
35
37
|
return cid++;
|
|
@@ -80,10 +82,11 @@ export class SocketTransport {
|
|
|
80
82
|
return this.codecEngine.decode(data);
|
|
81
83
|
}
|
|
82
84
|
catch (err) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
+
const error = toError(err);
|
|
86
|
+
if (error.name === 'Error') {
|
|
87
|
+
error.name = 'InvalidMessageError';
|
|
85
88
|
}
|
|
86
|
-
this.onError(
|
|
89
|
+
this.onError(error);
|
|
87
90
|
return null;
|
|
88
91
|
}
|
|
89
92
|
}
|
|
@@ -117,7 +120,7 @@ export class SocketTransport {
|
|
|
117
120
|
}
|
|
118
121
|
}
|
|
119
122
|
catch (err) {
|
|
120
|
-
pluginError = err;
|
|
123
|
+
pluginError = toError(err);
|
|
121
124
|
}
|
|
122
125
|
// Check to see if it is a request or response packet.
|
|
123
126
|
if (isResponsePacket(curPacket)) {
|
|
@@ -156,7 +159,7 @@ export class SocketTransport {
|
|
|
156
159
|
cid: this._callIdGenerator(),
|
|
157
160
|
data: arg,
|
|
158
161
|
method: serviceMethod,
|
|
159
|
-
service
|
|
162
|
+
service: service
|
|
160
163
|
};
|
|
161
164
|
}
|
|
162
165
|
else {
|
|
@@ -165,7 +168,7 @@ export class SocketTransport {
|
|
|
165
168
|
callback: null,
|
|
166
169
|
cid: this._callIdGenerator(),
|
|
167
170
|
data: arg,
|
|
168
|
-
method: (
|
|
171
|
+
method: (typeof methodOptions === 'object') ? methodOptions.method : methodOptions
|
|
169
172
|
};
|
|
170
173
|
}
|
|
171
174
|
const callbackMap = this._callbackMap;
|
|
@@ -328,7 +331,7 @@ export class SocketTransport {
|
|
|
328
331
|
try {
|
|
329
332
|
const data = await handler(new RequestHandlerArgs({
|
|
330
333
|
isRpc: !!packet.cid,
|
|
331
|
-
method: packet.method
|
|
334
|
+
method: packet.method,
|
|
332
335
|
options: packet.data,
|
|
333
336
|
socket: this._socket,
|
|
334
337
|
timeoutMs: packet.ackTimeoutMs,
|
|
@@ -339,7 +342,7 @@ export class SocketTransport {
|
|
|
339
342
|
}
|
|
340
343
|
}
|
|
341
344
|
catch (err) {
|
|
342
|
-
error = err;
|
|
345
|
+
error = toError(err);
|
|
343
346
|
if (packet.cid) {
|
|
344
347
|
response = { error, rid: packet.cid, timeoutAt };
|
|
345
348
|
}
|
|
@@ -393,7 +396,7 @@ export class SocketTransport {
|
|
|
393
396
|
onTransmit(request) {
|
|
394
397
|
this.sendRequest([request]);
|
|
395
398
|
}
|
|
396
|
-
onUnhandledRequest(
|
|
399
|
+
onUnhandledRequest(_) {
|
|
397
400
|
return false;
|
|
398
401
|
}
|
|
399
402
|
resetPingTimeout(timeoutMs, code) {
|
|
@@ -456,8 +459,9 @@ export class SocketTransport {
|
|
|
456
459
|
});
|
|
457
460
|
}
|
|
458
461
|
catch (err) {
|
|
462
|
+
const error = toError(err);
|
|
459
463
|
for (const req of requests) {
|
|
460
|
-
abortRequest(req,
|
|
464
|
+
abortRequest(req, error);
|
|
461
465
|
}
|
|
462
466
|
}
|
|
463
467
|
return;
|
|
@@ -537,7 +541,7 @@ export class SocketTransport {
|
|
|
537
541
|
}
|
|
538
542
|
// If the socket is closed we need to call them back with an error.
|
|
539
543
|
if (this.status === 'closed') {
|
|
540
|
-
for (const
|
|
544
|
+
for (const _ of responses) {
|
|
541
545
|
this.onError(new Error(`WebSocket is not open: readyState 3 (CLOSED)`));
|
|
542
546
|
}
|
|
543
547
|
return;
|
package/dist/socket.d.ts
CHANGED
|
@@ -2,29 +2,39 @@ import { AsyncStreamEmitter } from '@socket-mesh/async-stream-emitter';
|
|
|
2
2
|
import { AuthToken, SignedAuthToken } from '@socket-mesh/auth';
|
|
3
3
|
import { CodecEngine } from '@socket-mesh/formatter';
|
|
4
4
|
import { DemuxedConsumableStream, StreamEvent } from '@socket-mesh/stream-demux';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
export interface SocketOptions<TIncoming extends MethodMap, TOutgoing extends PublicMethodMap, TPrivateOutgoing extends PrivateMethodMap, TService extends ServiceMap, TState extends object, TSocket extends Socket<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState> = Socket<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState>> {
|
|
5
|
+
import { FunctionReturnType, PrivateMethodMap, PublicMethodMap, ServiceMap, ServiceMethodName, ServiceName } from './maps/method-map.js';
|
|
6
|
+
import { AnyPlugin } from './plugins/plugin.js';
|
|
7
|
+
import { LooseHandlerMap } from './request-handler.js';
|
|
8
|
+
import { AuthenticateEvent, AuthStateChangeEvent, BadAuthTokenEvent, CloseEvent, ConnectEvent, ConnectingEvent, DeauthenticateEvent, DisconnectEvent, ErrorEvent, MessageEvent, PingEvent, PongEvent, RemoveAuthTokenEvent, RequestEvent, ResponseEvent, SocketEvent, TypedRequestEvent, TypedResponseEvent } from './socket-event.js';
|
|
9
|
+
import { BaseSocketTransport, CallIdGenerator, InvokeMethodOptions, InvokeServiceOptions } from './socket-transport.js';
|
|
10
|
+
export interface BaseSocketOptions<TState extends object = {}> {
|
|
12
11
|
ackTimeoutMs?: number;
|
|
13
12
|
callIdGenerator?: CallIdGenerator;
|
|
14
13
|
codecEngine?: CodecEngine;
|
|
15
|
-
handlers?:
|
|
14
|
+
handlers?: LooseHandlerMap;
|
|
16
15
|
isPingTimeoutDisabled?: boolean;
|
|
17
|
-
|
|
18
|
-
plugins?: Plugin<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState>[];
|
|
16
|
+
plugins?: AnyPlugin[];
|
|
19
17
|
state?: Partial<TState>;
|
|
20
18
|
streamCleanupMode?: StreamCleanupMode;
|
|
21
19
|
}
|
|
20
|
+
export type Socket<TIncoming extends PublicMethodMap = {}, TOutgoing extends PublicMethodMap = {}, TState extends object = {}, TService extends ServiceMap = {}, TPrivateIncoming extends PrivateMethodMap = {}, TPrivateOutgoing extends PrivateMethodMap = {}> = Omit<BaseSocket<TState>, 'invoke' | 'listen' | 'transmit'> & {
|
|
21
|
+
invoke<TMethod extends keyof TOutgoing & string>(method: TMethod, arg?: Parameters<TOutgoing[TMethod]>[0]): Promise<FunctionReturnType<TOutgoing[TMethod]>>;
|
|
22
|
+
invoke<TMethod extends keyof TOutgoing & string>(options: InvokeMethodOptions<TOutgoing, TMethod>, arg?: Parameters<TOutgoing[TMethod]>[0]): Promise<FunctionReturnType<TOutgoing[TMethod]>>;
|
|
23
|
+
invoke<TServiceName extends ServiceName<TService>, TMethod extends ServiceMethodName<TService, TServiceName>>(options: [TServiceName, TMethod, (false | number)?], arg?: Parameters<TService[TServiceName][TMethod]>[0]): Promise<FunctionReturnType<TService[TServiceName][TMethod]>>;
|
|
24
|
+
invoke<TServiceName extends ServiceName<TService>, TMethod extends ServiceMethodName<TService, TServiceName>>(options: InvokeServiceOptions<TService, TServiceName, TMethod>, arg?: Parameters<TService[TServiceName][TMethod]>[0]): Promise<FunctionReturnType<TService[TServiceName][TMethod]>>;
|
|
25
|
+
invoke<TMethod extends keyof TPrivateOutgoing & string>(method: TMethod, arg?: Parameters<TPrivateOutgoing[TMethod]>[0]): Promise<FunctionReturnType<TPrivateOutgoing[TMethod]>>;
|
|
26
|
+
listen(event: 'request'): DemuxedConsumableStream<TypedRequestEvent<TIncoming & TPrivateIncoming, TService>>;
|
|
27
|
+
listen(event: 'response'): DemuxedConsumableStream<TypedResponseEvent<TOutgoing, TPrivateOutgoing, TService>>;
|
|
28
|
+
transmit<TMethod extends keyof TOutgoing & string>(method: TMethod, arg?: Parameters<TOutgoing[TMethod]>[0]): Promise<void>;
|
|
29
|
+
transmit<TServiceName extends ServiceName<TService>, TMethod extends ServiceMethodName<TService, TServiceName>>(options: [TServiceName, TMethod], arg?: Parameters<TService[TServiceName][TMethod]>[0]): Promise<void>;
|
|
30
|
+
transmit<TMethod extends keyof TPrivateOutgoing & string>(method: TMethod, arg?: Parameters<TPrivateOutgoing[TMethod]>[0]): Promise<void>;
|
|
31
|
+
};
|
|
22
32
|
export type SocketStatus = 'closed' | 'closing' | 'connecting' | 'ready';
|
|
23
33
|
export type StreamCleanupMode = 'close' | 'kill' | 'none';
|
|
24
|
-
export declare class
|
|
34
|
+
export declare class BaseSocket<TState extends object = {}> extends AsyncStreamEmitter<SocketEvent | undefined> {
|
|
25
35
|
private readonly _transport;
|
|
26
36
|
readonly state: Partial<TState>;
|
|
27
|
-
protected constructor(transport:
|
|
37
|
+
protected constructor(transport: BaseSocketTransport<TState>, options?: BaseSocketOptions<TState>);
|
|
28
38
|
get authToken(): AuthToken | null;
|
|
29
39
|
deauthenticate(): Promise<boolean>;
|
|
30
40
|
disconnect(code?: number, reason?: string): void;
|
|
@@ -43,17 +53,14 @@ export declare class Socket<TIncoming extends MethodMap, TOutgoing extends Publi
|
|
|
43
53
|
emit(event: 'ping', data: PingEvent): void;
|
|
44
54
|
emit(event: 'pong', data: PongEvent): void;
|
|
45
55
|
emit(event: 'removeAuthToken', data: RemoveAuthTokenEvent): void;
|
|
46
|
-
emit(event: 'request', data: RequestEvent
|
|
47
|
-
emit(event: 'response', data: ResponseEvent
|
|
56
|
+
emit(event: 'request', data: RequestEvent): void;
|
|
57
|
+
emit(event: 'response', data: ResponseEvent): void;
|
|
48
58
|
getBackpressure(): number;
|
|
49
59
|
getInboundBackpressure(): number;
|
|
50
60
|
getOutboundBackpressure(): number;
|
|
51
61
|
get id(): null | string;
|
|
52
|
-
invoke
|
|
53
|
-
|
|
54
|
-
invoke<TServiceName extends keyof TService, TMethod extends keyof TService[TServiceName]>(options: InvokeServiceOptions<TService, TServiceName, TMethod>, arg?: Parameters<TService[TServiceName][TMethod]>[0]): Promise<FunctionReturnType<TService[TServiceName][TMethod]>>;
|
|
55
|
-
invoke<TMethod extends keyof TOutgoing>(options: InvokeMethodOptions<TOutgoing, TMethod>, arg?: Parameters<TOutgoing[TMethod]>[0]): Promise<FunctionReturnType<TOutgoing[TMethod]>>;
|
|
56
|
-
listen(): DemuxedConsumableStream<StreamEvent<SocketEvent<TIncoming, TOutgoing, TPrivateOutgoing, TService>>>;
|
|
62
|
+
invoke(methodOptions: [string, string, (false | number)?] | InvokeMethodOptions | InvokeServiceOptions | string, arg?: unknown): Promise<unknown>;
|
|
63
|
+
listen(): DemuxedConsumableStream<StreamEvent<SocketEvent>>;
|
|
57
64
|
listen(event: 'authStateChange'): DemuxedConsumableStream<AuthStateChangeEvent>;
|
|
58
65
|
listen(event: 'authenticate'): DemuxedConsumableStream<AuthenticateEvent>;
|
|
59
66
|
listen(event: 'badAuthToken'): DemuxedConsumableStream<BadAuthTokenEvent>;
|
|
@@ -61,7 +68,7 @@ export declare class Socket<TIncoming extends MethodMap, TOutgoing extends Publi
|
|
|
61
68
|
listen(event: 'connect'): DemuxedConsumableStream<ConnectEvent>;
|
|
62
69
|
listen(event: 'connectAbort'): DemuxedConsumableStream<DisconnectEvent>;
|
|
63
70
|
listen(event: 'connecting'): DemuxedConsumableStream<ConnectingEvent>;
|
|
64
|
-
listen(event: 'deauthenticate'): DemuxedConsumableStream<
|
|
71
|
+
listen(event: 'deauthenticate'): DemuxedConsumableStream<DeauthenticateEvent>;
|
|
65
72
|
listen(event: 'disconnect'): DemuxedConsumableStream<DisconnectEvent>;
|
|
66
73
|
listen(event: 'end'): DemuxedConsumableStream<void>;
|
|
67
74
|
listen(event: 'error'): DemuxedConsumableStream<ErrorEvent>;
|
|
@@ -69,12 +76,11 @@ export declare class Socket<TIncoming extends MethodMap, TOutgoing extends Publi
|
|
|
69
76
|
listen(event: 'ping'): DemuxedConsumableStream<PingEvent>;
|
|
70
77
|
listen(event: 'pong'): DemuxedConsumableStream<PongEvent>;
|
|
71
78
|
listen(event: 'removeAuthToken'): DemuxedConsumableStream<RemoveAuthTokenEvent>;
|
|
72
|
-
listen(event: 'request'): DemuxedConsumableStream<RequestEvent
|
|
73
|
-
listen(event: 'response'): DemuxedConsumableStream<ResponseEvent
|
|
74
|
-
listen<U extends SocketEvent
|
|
79
|
+
listen(event: 'request'): DemuxedConsumableStream<RequestEvent>;
|
|
80
|
+
listen(event: 'response'): DemuxedConsumableStream<ResponseEvent>;
|
|
81
|
+
listen<U extends SocketEvent, V = U>(event: string): DemuxedConsumableStream<V>;
|
|
75
82
|
get signedAuthToken(): null | SignedAuthToken;
|
|
76
83
|
get status(): SocketStatus;
|
|
77
|
-
transmit
|
|
78
|
-
transmit<TServiceName extends keyof TService, TMethod extends keyof TService[TServiceName]>(options: [TServiceName, TMethod], arg?: Parameters<TService[TServiceName][TMethod]>[0]): Promise<void>;
|
|
84
|
+
transmit(serviceAndMethod: [string, string] | string, arg?: unknown): Promise<void>;
|
|
79
85
|
get url(): string;
|
|
80
86
|
}
|
package/dist/socket.js
CHANGED
package/dist/utils.d.ts
CHANGED
package/dist/utils.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
export function toArray(arr) {
|
|
2
2
|
return Array.isArray(arr) ? arr : [arr];
|
|
3
3
|
}
|
|
4
|
+
export function toError(err) {
|
|
5
|
+
return err instanceof Error ? err : new Error(String(err));
|
|
6
|
+
}
|
|
4
7
|
export function wait(duration) {
|
|
5
8
|
return new Promise((resolve) => {
|
|
6
9
|
setTimeout(() => {
|