@socket-mesh/core 1.0.3 → 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/index.d.ts CHANGED
@@ -1,10 +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";
1
+ export * from './maps/index.js';
2
+ export * from './packet.js';
3
+ export * from './plugins/index.js';
4
+ export * from './request-handler.js';
5
+ export * from './request.js';
6
+ export * from './response.js';
7
+ export * from './socket-event.js';
8
+ export * from './socket-transport.js';
9
+ export * from './socket.js';
10
+ export * from './utils.js';
package/dist/index.js CHANGED
@@ -1,10 +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";
1
+ export * from './maps/index.js';
2
+ export * from './packet.js';
3
+ export * from './plugins/index.js';
4
+ export * from './request-handler.js';
5
+ export * from './request.js';
6
+ export * from './response.js';
7
+ export * from './socket-event.js';
8
+ export * from './socket-transport.js';
9
+ export * from './socket.js';
10
+ export * from './utils.js';
@@ -1,5 +1,7 @@
1
- import { RequestHandler } from "../request-handler.js";
2
- import { MethodMap, PrivateMethodMap, PublicMethodMap, ServiceMap } from "./method-map.js";
3
- export type HandlerMap<TIncoming extends MethodMap, TOutgoing extends PublicMethodMap, TPrivateOutgoing extends PrivateMethodMap, TService extends ServiceMap, TState extends object> = Partial<{
4
- [K in keyof TIncoming]: RequestHandler<Parameters<TIncoming[K]>[0], ReturnType<TIncoming[K]>, TIncoming, TOutgoing, TPrivateOutgoing, TService, TState>;
1
+ import { RequestHandler } from '../request-handler.js';
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
  }>;
@@ -1,2 +1,2 @@
1
- export * from "./handler-map.js";
2
- export * from "./method-map.js";
1
+ export * from './handler-map.js';
2
+ export * from './method-map.js';
@@ -1,2 +1,2 @@
1
- export * from "./handler-map.js";
2
- export * from "./method-map.js";
1
+ export * from './handler-map.js';
2
+ export * from './method-map.js';
@@ -1,12 +1,5 @@
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
1
  export type FunctionReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : never;
2
+ export type MappedFunction = (...args: any) => any;
10
3
  export type MethodMap = {
11
4
  [method: string]: MappedFunction;
12
5
  };
@@ -15,8 +8,17 @@ export type PrivateMethodMap = {
15
8
  } & {
16
9
  [method: `#${string}`]: MappedFunction;
17
10
  };
11
+ export type PromiseReturnType<T> = T extends Promise<infer Return> ? Return : T;
18
12
  export type PublicMethodMap = {
19
13
  [method: string]: MappedFunction;
20
14
  } & {
21
15
  [method: `#${string}`]: never;
22
16
  };
17
+ export type RemoveIndexSignature<T> = {
18
+ [K in keyof T as string extends K ? never : number extends K ? never : symbol extends K ? never : K]: T[K];
19
+ };
20
+ export type ServiceMap = {
21
+ [service: string]: MethodMap;
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;
@@ -1 +1,2 @@
1
+ /* eslint-disable @typescript-eslint/consistent-type-definitions */
1
2
  export {};
package/dist/packet.d.ts CHANGED
@@ -1,26 +1,41 @@
1
- import { MethodMap, ServiceMap } from "./maps/method-map.js";
2
- export type AnyPacket<TIncoming extends MethodMap, TService extends ServiceMap> = ServicePacket<TService> | MethodPacket<TIncoming>;
3
- export type ServicePacket<TServiceMap extends ServiceMap> = {
1
+ import { MethodMap, ServiceMap } from './maps/method-map.js';
2
+ export type AnyPacket = MethodPacket | ServicePacket;
3
+ export type IncomingMethodPacket<TMethodMap extends MethodMap> = {
4
+ [TMethod in keyof TMethodMap]: IncomingMethodRequestPacket<TMethodMap, TMethod>;
5
+ }[keyof TMethodMap];
6
+ export interface IncomingMethodRequestPacket<TMethodMap extends MethodMap, TMethod extends keyof TMethodMap> extends RequestPacket {
7
+ ackTimeoutMs?: boolean | number;
8
+ data: Parameters<TMethodMap[TMethod]>[0];
9
+ method: TMethod;
10
+ }
11
+ export type IncomingPacket<TIncoming extends MethodMap, TService extends ServiceMap> = IncomingMethodPacket<TIncoming> | IncomingServicePacket<TService>;
12
+ export type IncomingServicePacket<TServiceMap extends ServiceMap> = {
4
13
  [TService in keyof TServiceMap]: {
5
- [TMethod in keyof TServiceMap[TService]]: ServiceRequestPacket<TServiceMap, TService, TMethod>;
14
+ [TMethod in keyof TServiceMap[TService]]: IncomingServiceRequestPacket<TServiceMap, TService, TMethod>;
6
15
  }[keyof TServiceMap[TService]];
7
16
  }[keyof TServiceMap];
17
+ export interface IncomingServiceRequestPacket<TServiceMap extends ServiceMap, TService extends keyof TServiceMap, TMethod extends keyof TServiceMap[TService]> extends RequestPacket {
18
+ ackTimeoutMs?: boolean | number;
19
+ data?: Parameters<TServiceMap[TService][TMethod]>[0];
20
+ method: TMethod;
21
+ service: TService;
22
+ }
23
+ export type MethodPacket = MethodRequestPacket;
24
+ export interface MethodRequestPacket extends RequestPacket {
25
+ ackTimeoutMs?: boolean | number;
26
+ data?: unknown;
27
+ method: string;
28
+ }
8
29
  interface RequestPacket {
9
30
  cid?: number;
10
31
  }
11
- export type MethodPacket<TMethodMap extends MethodMap> = {
12
- [TMethod in keyof TMethodMap]: MethodRequestPacket<TMethodMap, TMethod>;
13
- }[keyof TMethodMap];
14
- export interface ServiceRequestPacket<TServiceMap extends ServiceMap, TService extends keyof TServiceMap, TMethod extends keyof TServiceMap[TService]> extends RequestPacket {
15
- service: TService;
16
- method: TMethod;
17
- ackTimeoutMs?: number | boolean;
18
- data?: Parameters<TServiceMap[TService][TMethod]>[0];
19
- }
20
- export interface MethodRequestPacket<TMethodMap extends MethodMap, TMethod extends keyof TMethodMap> extends RequestPacket {
21
- method: TMethod;
22
- data: Parameters<TMethodMap[TMethod]>[0];
23
- ackTimeoutMs?: number | boolean;
32
+ export type ServicePacket = ServiceRequestPacket;
33
+ export interface ServiceRequestPacket extends RequestPacket {
34
+ ackTimeoutMs?: boolean | number;
35
+ data?: unknown;
36
+ method: string;
37
+ service: string;
24
38
  }
25
- export declare function isRequestPacket<TIncoming extends MethodMap, TService extends ServiceMap>(packet: unknown): packet is AnyPacket<TIncoming, TService>;
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/packet.js CHANGED
@@ -1,3 +1,5 @@
1
1
  export function isRequestPacket(packet) {
2
- return (typeof packet === 'object') && 'method' in packet;
2
+ return (packet !== null
3
+ && typeof packet === 'object'
4
+ && 'method' in packet);
3
5
  }
@@ -1 +1 @@
1
- export * from "./plugin.js";
1
+ export * from './plugin.js';
@@ -1 +1 @@
1
- export * from "./plugin.js";
1
+ export * from './plugin.js';
@@ -1,50 +1,50 @@
1
- import { AnyPacket } from "../packet.js";
2
- import { AnyRequest } from "../request.js";
3
- import { AnyResponse } from "../response.js";
4
- import { SocketTransport } from "../socket-transport.js";
5
- import { Socket, SocketStatus } from "../socket.js";
6
- import ws from "isomorphic-ws";
7
- import { HandlerMap } from "../maps/handler-map.js";
8
- import { MethodMap, PrivateMethodMap, PublicMethodMap, ServiceMap } from "../maps/method-map.js";
9
- export type PluginType = 'request' | 'response' | 'handshake';
10
- export interface PluginArgs<TIncoming extends MethodMap, TOutgoing extends PublicMethodMap, TPrivateOutgoing extends PrivateMethodMap, TService extends ServiceMap, TState extends object> {
11
- socket: Socket<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState>;
12
- transport: SocketTransport<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState>;
13
- }
14
- export interface DisconnectedPluginArgs<TIncoming extends MethodMap, TOutgoing extends PublicMethodMap, TPrivateOutgoing extends PrivateMethodMap, TService extends ServiceMap, TState extends object> extends PluginArgs<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState> {
15
- status: SocketStatus;
1
+ import ws from 'isomorphic-ws';
2
+ import { AnyPacket } from '../packet.js';
3
+ import { LooseHandlerMap } from '../request-handler.js';
4
+ import { AnyRequest } from '../request.js';
5
+ import { AnyResponse } from '../response.js';
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> {
16
10
  code: number;
17
11
  reason?: string;
12
+ status: SocketStatus;
18
13
  }
19
- export interface MessagePluginArgs<TIncoming extends MethodMap, TOutgoing extends PublicMethodMap, TPrivateOutgoing extends PrivateMethodMap, TService extends ServiceMap, TState extends object> extends PluginArgs<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState> {
14
+ export interface MessagePluginArgs<TSocket extends BaseSocket = BaseSocket, TTransport extends BaseSocketTransport = BaseSocketTransport> extends PluginArgs<TSocket, TTransport> {
15
+ packet: AnyPacket | AnyResponse;
20
16
  timestamp: Date;
21
- packet: AnyPacket<TIncoming, TService> | AnyResponse<TOutgoing, TPrivateOutgoing, TService>;
22
17
  }
23
- export interface MessageRawPluginArgs<TIncoming extends MethodMap, TOutgoing extends PublicMethodMap, TPrivateOutgoing extends PrivateMethodMap, TService extends ServiceMap, TState extends object> extends PluginArgs<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState> {
24
- timestamp: Date;
25
- message: ws.RawData | string;
18
+ export interface MessageRawPluginArgs<TSocket extends BaseSocket = BaseSocket, TTransport extends BaseSocketTransport = BaseSocketTransport> extends PluginArgs<TSocket, TTransport> {
19
+ message: string | ws.RawData;
26
20
  promise: Promise<void>;
21
+ timestamp: Date;
22
+ }
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
+ type: string;
27
37
  }
28
- export interface SendRequestPluginArgs<TIncoming extends MethodMap, TOutgoing extends PublicMethodMap, TPrivateOutgoing extends PrivateMethodMap, TService extends ServiceMap, TState extends object> extends PluginArgs<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState> {
29
- requests: AnyRequest<TOutgoing, TPrivateOutgoing, TService>[];
30
- cont: (requests: AnyRequest<TOutgoing, TPrivateOutgoing, TService>[]) => void;
38
+ export interface PluginArgs<TSocket extends BaseSocket = BaseSocket, TTransport extends BaseSocketTransport = BaseSocketTransport> {
39
+ socket: TSocket;
40
+ transport: TTransport;
31
41
  }
32
- export interface SendResponsePluginArgs<TIncoming extends MethodMap, TOutgoing extends PublicMethodMap, TPrivateOutgoing extends PrivateMethodMap, TService extends ServiceMap, TState extends object> extends PluginArgs<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState> {
33
- responses: AnyResponse<TOutgoing, TPrivateOutgoing, TService>[];
34
- cont: (requests: AnyResponse<TOutgoing, TPrivateOutgoing, TService>[]) => void;
42
+ export type PluginType = 'handshake' | 'request' | 'response';
43
+ export interface SendRequestPluginArgs<TSocket extends BaseSocket = BaseSocket, TTransport extends BaseSocketTransport = BaseSocketTransport> extends PluginArgs<TSocket, TTransport> {
44
+ cont: (requests: AnyRequest[]) => void;
45
+ requests: AnyRequest[];
35
46
  }
36
- export interface Plugin<TIncoming extends MethodMap, TOutgoing extends PublicMethodMap, TPrivateOutgoing extends PrivateMethodMap, TService extends ServiceMap, TState extends object> {
37
- type: string;
38
- handlers?: HandlerMap<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState>;
39
- onAuthenticated?(options: PluginArgs<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState>): void;
40
- onClose?(options: PluginArgs<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState>): void;
41
- onDeauthenticate?(options: PluginArgs<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState>): void;
42
- onDisconnected?(options: DisconnectedPluginArgs<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState>): void;
43
- onEnd?(options: PluginArgs<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState>): void;
44
- onMessage?(options: MessagePluginArgs<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState>): Promise<AnyPacket<TIncoming, TService> | AnyResponse<TOutgoing, TPrivateOutgoing, TService>>;
45
- onMessageRaw?(options: MessageRawPluginArgs<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState>): Promise<ws.RawData | string>;
46
- onOpen?(options: PluginArgs<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState>): void;
47
- onReady?(options: PluginArgs<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState>): void;
48
- sendRequest?(options: SendRequestPluginArgs<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState>): void;
49
- sendResponse?(options: SendResponsePluginArgs<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState>): void;
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,24 +1,26 @@
1
- import { Socket } from "./socket.js";
2
- import { SocketTransport } from "./socket-transport.js";
3
- import { MethodMap, PrivateMethodMap, PublicMethodMap, ServiceMap } from "./maps/method-map.js";
4
- export interface RequestHandlerArgsOptions<TOptions, 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>, TTransport extends SocketTransport<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState> = SocketTransport<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState>> {
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>> {
5
8
  isRpc: boolean;
6
9
  method: string;
10
+ options: TOptions;
7
11
  socket: TSocket;
12
+ timeoutMs?: boolean | number;
8
13
  transport: TTransport;
9
- timeoutMs?: number | boolean;
10
- options?: TOptions;
11
14
  }
12
- export declare class RequestHandlerArgs<TOptions, 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>, TTransport extends SocketTransport<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState> = SocketTransport<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState>> {
15
+ export declare class RequestHandlerArgs<TOptions, TState extends object = {}, TSocket extends BaseSocket<TState> = BaseSocket<TState>, TTransport extends BaseSocketTransport<TState> = BaseSocketTransport<TState>> {
13
16
  isRpc: boolean;
14
17
  method: string;
15
18
  options: TOptions;
16
19
  requestedAt: Date;
17
20
  socket: TSocket;
18
- timeoutMs?: number | boolean;
21
+ timeoutMs?: boolean | number;
19
22
  transport: TTransport;
20
- constructor(options: RequestHandlerArgsOptions<TOptions, TIncoming, TOutgoing, TPrivateOutgoing, TService, TState, TSocket, TTransport>);
23
+ constructor(options: RequestHandlerArgsOptions<TOptions, TState, TSocket, TTransport>);
21
24
  checkTimeout(timeLeftMs?: number): void;
22
25
  getRemainingTimeMs(): number;
23
26
  }
24
- export type RequestHandler<TOptions, U, 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>, TTransport extends SocketTransport<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState> = SocketTransport<TIncoming, TOutgoing, TPrivateOutgoing, TService, TState>> = (args: RequestHandlerArgs<TOptions, TIncoming, TOutgoing, TPrivateOutgoing, TService, TState, TSocket, TTransport>) => Promise<U>;
@@ -1,5 +1,12 @@
1
- import { TimeoutError } from "@socket-mesh/errors";
1
+ import { TimeoutError } from '@socket-mesh/errors';
2
2
  export class RequestHandlerArgs {
3
+ isRpc;
4
+ method;
5
+ options;
6
+ requestedAt;
7
+ socket;
8
+ timeoutMs;
9
+ transport;
3
10
  constructor(options) {
4
11
  this.isRpc = options.isRpc;
5
12
  this.method = options.method;
@@ -11,7 +18,7 @@ export class RequestHandlerArgs {
11
18
  }
12
19
  checkTimeout(timeLeftMs = 0) {
13
20
  if (typeof this.timeoutMs === 'number' && this.getRemainingTimeMs() <= timeLeftMs) {
14
- throw new TimeoutError(`Method \'${this.method}\' timed out.`);
21
+ throw new TimeoutError(`Method '${this.method}' timed out.`);
15
22
  }
16
23
  }
17
24
  getRemainingTimeMs() {
package/dist/request.d.ts CHANGED
@@ -1,54 +1,47 @@
1
- import { MethodMap, PrivateMethodMap, PublicMethodMap, ServiceMap } from "./maps/method-map.js";
2
- export type AnyRequest<TOutgoing extends PublicMethodMap, TPrivateOutgoing extends PrivateMethodMap, TService extends ServiceMap> = ServiceRequest<TService> | MethodRequest<TPrivateOutgoing> | MethodRequest<TOutgoing>;
3
- export declare function abortRequest<TOutgoing extends PublicMethodMap, TPrivateOutgoing extends PrivateMethodMap, TService extends ServiceMap>(request: AnyRequest<TOutgoing, TPrivateOutgoing, TService>, err: Error): void;
4
- export declare class RequestCollection<TOutgoing extends PublicMethodMap, TPrivateOutgoing extends PrivateMethodMap, TService extends ServiceMap> {
5
- private readonly _requests;
1
+ export type AnyRequest = MethodRequest | ServiceRequest;
2
+ export interface InvokeMethodRequest extends TransmitMethodRequest {
3
+ ackTimeoutMs: false | number;
4
+ callback: ((err: Error | null, result?: unknown) => void) | null;
5
+ cid: number;
6
+ timeoutId?: NodeJS.Timeout;
7
+ }
8
+ export interface InvokeServiceRequest extends TransmitServiceRequest {
9
+ ackTimeoutMs: false | number;
10
+ callback: ((err: Error | null, result?: unknown) => void) | null;
11
+ cid: number;
12
+ timeoutId?: NodeJS.Timeout;
13
+ }
14
+ export type MethodRequest = InvokeMethodRequest | TransmitMethodRequest;
15
+ export interface Request {
16
+ promise: Promise<void>;
17
+ sentCallback?: (err?: Error) => void;
18
+ }
19
+ export type ServiceRequest = InvokeServiceRequest | TransmitServiceRequest;
20
+ export interface TransmitMethodRequest extends Request {
21
+ data?: unknown;
22
+ method: string;
23
+ }
24
+ export interface TransmitServiceRequest extends Request {
25
+ data?: unknown;
26
+ method: string;
27
+ service: string;
28
+ }
29
+ export declare function abortRequest(request: AnyRequest, err: Error): void;
30
+ export declare function isRequestDone(request: AnyRequest): boolean;
31
+ export declare class RequestCollection {
6
32
  private readonly _callbacks;
7
- constructor(requests: AnyRequest<TOutgoing, TPrivateOutgoing, TService> | AnyRequest<TOutgoing, TPrivateOutgoing, TService>[]);
8
- get items(): ReadonlyArray<AnyRequest<TOutgoing, TPrivateOutgoing, TService>>;
9
- listen(cb: () => void): void;
33
+ private readonly _requests;
34
+ constructor(requests: AnyRequest | AnyRequest[]);
10
35
  isDone(): boolean;
36
+ get items(): ReadonlyArray<AnyRequest>;
37
+ listen(cb: () => void): void;
11
38
  [Symbol.iterator](): {
12
39
  next(): {
13
- value: AnyRequest<TOutgoing, TPrivateOutgoing, TService>;
14
40
  done: boolean;
41
+ value: AnyRequest | undefined;
15
42
  } | {
16
43
  done: boolean;
17
44
  value?: undefined;
18
45
  };
19
46
  };
20
47
  }
21
- export type ServiceRequest<TServiceMap extends ServiceMap> = {
22
- [TService in keyof TServiceMap]: {
23
- [TMethod in keyof TServiceMap[TService]]: TransmitServiceRequest<TServiceMap, TService, TMethod> | InvokeServiceRequest<TServiceMap, TService, TMethod>;
24
- }[keyof TServiceMap[TService]];
25
- }[keyof TServiceMap];
26
- export type MethodRequest<TMethodMap extends MethodMap> = {
27
- [TMethod in keyof TMethodMap]: TransmitMethodRequest<TMethodMap, TMethod> | InvokeMethodRequest<TMethodMap, TMethod>;
28
- }[keyof TMethodMap];
29
- export interface Request {
30
- promise: Promise<void>;
31
- sentCallback?: (err?: Error) => void;
32
- }
33
- export interface TransmitServiceRequest<TServiceMap extends ServiceMap, TService extends keyof TServiceMap, TMethod extends keyof TServiceMap[TService]> extends Request {
34
- service: TService;
35
- method: TMethod;
36
- data?: Parameters<TServiceMap[TService][TMethod]>[0];
37
- }
38
- export interface TransmitMethodRequest<TMethodMap extends MethodMap, TMethod extends keyof TMethodMap> extends Request {
39
- method: TMethod;
40
- data?: Parameters<TMethodMap[TMethod]>[0];
41
- }
42
- export interface InvokeServiceRequest<TServiceMap extends ServiceMap, TService extends keyof TServiceMap, TMethod extends keyof TServiceMap[TService]> extends TransmitServiceRequest<TServiceMap, TService, TMethod> {
43
- cid: number;
44
- ackTimeoutMs: number | false;
45
- timeoutId?: NodeJS.Timeout;
46
- callback: (err: Error, result?: TServiceMap[TService][TMethod]) => void | null;
47
- }
48
- export interface InvokeMethodRequest<TMethodMap extends MethodMap, TMethod extends keyof TMethodMap> extends TransmitMethodRequest<TMethodMap, TMethod> {
49
- cid: number;
50
- ackTimeoutMs: number | false;
51
- timeoutId?: NodeJS.Timeout;
52
- callback: (err: Error, result?: TMethodMap[TMethod]) => void | null;
53
- }
54
- export declare function isRequestDone<TOutgoing extends PublicMethodMap, TPrivateOutgoing extends PrivateMethodMap, TService extends ServiceMap>(request: AnyRequest<TOutgoing, TPrivateOutgoing, TService>): boolean;
package/dist/request.js CHANGED
@@ -1,4 +1,4 @@
1
- import { toArray } from "./utils.js";
1
+ import { toArray } from './utils.js';
2
2
  export function abortRequest(request, err) {
3
3
  if (request.sentCallback) {
4
4
  request.sentCallback(err);
@@ -7,11 +7,22 @@ export function abortRequest(request, err) {
7
7
  request.callback(err);
8
8
  }
9
9
  }
10
+ export function isRequestDone(request) {
11
+ if ('callback' in request) {
12
+ return (request.callback === null);
13
+ }
14
+ return !request.sentCallback;
15
+ }
10
16
  export class RequestCollection {
17
+ _callbacks;
18
+ _requests;
11
19
  constructor(requests) {
12
20
  this._requests = toArray(requests).filter(req => !isRequestDone(req));
13
21
  this._callbacks = [];
14
22
  }
23
+ isDone() {
24
+ return this._requests.length === 0;
25
+ }
15
26
  get items() {
16
27
  return this._requests;
17
28
  }
@@ -29,9 +40,6 @@ export class RequestCollection {
29
40
  });
30
41
  }
31
42
  }
32
- isDone() {
33
- return this._requests.length === 0;
34
- }
35
43
  [Symbol.iterator]() {
36
44
  const values = this._requests;
37
45
  let index = 0;
@@ -40,7 +48,7 @@ export class RequestCollection {
40
48
  if (index < values.length) {
41
49
  const val = values[index];
42
50
  index++;
43
- return { value: val, done: false };
51
+ return { done: false, value: val };
44
52
  }
45
53
  else
46
54
  return { done: true };
@@ -48,9 +56,3 @@ export class RequestCollection {
48
56
  };
49
57
  }
50
58
  }
51
- export function isRequestDone(request) {
52
- if ('callback' in request) {
53
- return (request.callback === null);
54
- }
55
- return !request.sentCallback;
56
- }
@@ -1,21 +1,25 @@
1
- import { MethodMap, PrivateMethodMap, PublicMethodMap, ServiceMap } from "./maps/method-map.js";
2
- export type AnyResponse<TOutgoing extends PublicMethodMap, TPrivateOutgoing extends PrivateMethodMap, TService extends ServiceMap> = Response | ErrorResponse | ServiceDataResponse<TService> | MethodDataResponse<TPrivateOutgoing> | MethodDataResponse<TOutgoing>;
3
- export declare function isResponsePacket<TOutgoing extends PublicMethodMap, TPrivateOutgoing extends PrivateMethodMap, TService extends ServiceMap>(packet?: unknown): packet is AnyResponse<TOutgoing, TPrivateOutgoing, TService>;
4
- export type ServiceDataResponse<TServiceMap extends ServiceMap> = {
1
+ import { MethodMap, PrivateMethodMap, PublicMethodMap, ServiceMap } from './maps/method-map.js';
2
+ export type AnyResponse = DataResponse | ErrorResponse | Response;
3
+ export interface DataResponse extends Response {
4
+ data: unknown;
5
+ }
6
+ export interface ErrorResponse extends Response {
7
+ error: Error;
8
+ }
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]>>;
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> = {
5
17
  [TService in keyof TServiceMap]: {
6
- [TMethod in keyof TServiceMap[TService]]: DataResponse<ReturnType<TServiceMap[TService][TMethod]>>;
18
+ [TMethod in keyof TServiceMap[TService]]: OutgoingDataResponse<ReturnType<TServiceMap[TService][TMethod]>>;
7
19
  }[keyof TServiceMap[TService]];
8
20
  }[keyof TServiceMap];
9
- export type MethodDataResponse<TMethodMap extends MethodMap> = {
10
- [TMethod in keyof TMethodMap]: DataResponse<ReturnType<TMethodMap[TMethod]>>;
11
- }[keyof TMethodMap];
12
21
  export interface Response {
13
22
  rid: number;
14
23
  timeoutAt?: Date;
15
24
  }
16
- export interface ErrorResponse extends Response {
17
- error: Error;
18
- }
19
- export interface DataResponse<T> extends Response {
20
- data: T;
21
- }
25
+ export declare function isResponsePacket(packet?: unknown): packet is AnyResponse;
package/dist/response.js CHANGED
@@ -1,3 +1,5 @@
1
1
  export function isResponsePacket(packet) {
2
- return (typeof packet === 'object') && 'rid' in packet;
2
+ return (packet !== null
3
+ && typeof packet === 'object'
4
+ && 'rid' in packet);
3
5
  }
@@ -1,21 +1,20 @@
1
- import ws from "isomorphic-ws";
2
- import { MethodPacket, ServicePacket } from "./packet.js";
3
- import { AuthToken, SignedAuthToken } from "@socket-mesh/auth";
4
- import { AnyResponse } from "./response.js";
5
- import { MethodMap, PrivateMethodMap, PublicMethodMap, ServiceMap } from "./maps/method-map.js";
6
- export type SocketEvent<TIncoming extends MethodMap, TOutgoing extends PublicMethodMap, TPrivateOutgoing extends PrivateMethodMap, TService extends ServiceMap> = AuthStateChangeEvent | RemoveAuthTokenEvent | AuthenticateEvent | BadAuthTokenEvent | CloseEvent | ConnectEvent | ConnectingEvent | DeauthenticateEvent | DisconnectEvent | ErrorEvent | MessageEvent | PingEvent | PongEvent | RequestEvent<TIncoming, TService> | ResponseEvent<TOutgoing, TPrivateOutgoing, TService>;
7
- export type AuthStateChangeEvent = AuthenticatedChangeEvent | DeauthenticatedChangeEvent;
1
+ import { AuthToken, SignedAuthToken } from '@socket-mesh/auth';
2
+ import ws from 'isomorphic-ws';
3
+ import { MethodMap, PrivateMethodMap, PublicMethodMap, ServiceMap } from './maps/method-map.js';
4
+ import { AnyPacket, IncomingPacket } from './packet.js';
5
+ import { AnyResponse, OutgoingResponse } from './response.js';
8
6
  export interface AuthenticatedChangeEvent {
7
+ authToken: AuthToken | null;
9
8
  isAuthenticated: true;
10
- wasAuthenticated: boolean;
11
9
  signedAuthToken: SignedAuthToken;
12
- authToken: AuthToken;
10
+ wasAuthenticated: boolean;
13
11
  }
14
12
  export interface AuthenticateEvent {
15
- wasSigned: boolean;
13
+ authToken: AuthToken | null;
16
14
  signedAuthToken: SignedAuthToken;
17
- authToken: AuthToken;
15
+ wasSigned: boolean;
18
16
  }
17
+ export type AuthStateChangeEvent = AuthenticatedChangeEvent | DeauthenticatedChangeEvent;
19
18
  export interface BadAuthTokenEvent {
20
19
  error: Error;
21
20
  signedAuthToken: SignedAuthToken;
@@ -25,21 +24,20 @@ export interface CloseEvent {
25
24
  reason?: string;
26
25
  }
27
26
  export interface ConnectEvent {
28
- id: string;
27
+ authError?: Error;
28
+ id: null | string;
29
29
  isAuthenticated: boolean;
30
30
  pingTimeoutMs: number;
31
- authError?: Error;
32
- }
33
- export interface ConnectingEvent {
34
- }
35
- export interface DeauthenticateEvent {
36
- signedAuthToken: SignedAuthToken;
37
- authToken: AuthToken;
38
31
  }
32
+ export type ConnectingEvent = object;
39
33
  export interface DeauthenticatedChangeEvent {
40
34
  isAuthenticated: false;
41
35
  wasAuthenticated: true;
42
36
  }
37
+ export interface DeauthenticateEvent {
38
+ authToken: AuthToken | null;
39
+ signedAuthToken: SignedAuthToken;
40
+ }
43
41
  export interface DisconnectEvent {
44
42
  code: number;
45
43
  reason?: string;
@@ -51,16 +49,22 @@ export interface MessageEvent {
51
49
  data: string | ws.RawData;
52
50
  isBinary: boolean;
53
51
  }
54
- export interface PingEvent {
55
- }
56
- export interface PongEvent {
57
- }
52
+ export type PingEvent = object;
53
+ export type PongEvent = object;
58
54
  export interface RemoveAuthTokenEvent {
59
55
  oldAuthToken: SignedAuthToken;
60
56
  }
61
- export interface RequestEvent<TIncoming extends MethodMap, TService extends ServiceMap> {
62
- request: ServicePacket<TService> | MethodPacket<TIncoming>;
57
+ export interface RequestEvent {
58
+ request: AnyPacket;
59
+ }
60
+ export interface ResponseEvent {
61
+ response: AnyResponse;
62
+ }
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>;
63
66
  }
64
- export interface ResponseEvent<TOutgoing extends PublicMethodMap, TPrivateOutgoing extends PrivateMethodMap, TService extends ServiceMap> {
65
- response: AnyResponse<TOutgoing, TPrivateOutgoing, TService>;
67
+ export interface TypedResponseEvent<TOutgoing extends PublicMethodMap, TPrivateOutgoing extends PrivateMethodMap = {}, TService extends ServiceMap = {}> {
68
+ response: OutgoingResponse<TOutgoing, TPrivateOutgoing, TService>;
66
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>;