@socket-mesh/server 18.1.4 → 19.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.
Files changed (40) hide show
  1. package/dist/broker/broker-events.d.ts +4 -4
  2. package/dist/broker/broker.d.ts +10 -10
  3. package/dist/broker/broker.js +2 -1
  4. package/dist/broker/exchange-client.d.ts +1 -1
  5. package/dist/broker/exchange.d.ts +6 -1
  6. package/dist/broker/exchange.js +6 -1
  7. package/dist/broker/index.d.ts +5 -0
  8. package/dist/broker/index.js +5 -0
  9. package/dist/broker/simple-broker.d.ts +8 -8
  10. package/dist/broker/simple-broker.js +26 -23
  11. package/dist/broker/simple-exchange.d.ts +6 -7
  12. package/dist/broker/simple-exchange.js +18 -14
  13. package/dist/events/index.d.ts +49 -0
  14. package/dist/handlers/authenticate.d.ts +11 -11
  15. package/dist/handlers/authenticate.js +31 -28
  16. package/dist/handlers/handshake.d.ts +2 -2
  17. package/dist/handlers/handshake.js +21 -16
  18. package/dist/handlers/index.d.ts +7 -0
  19. package/dist/handlers/index.js +7 -0
  20. package/dist/handlers/publish.d.ts +3 -3
  21. package/dist/handlers/publish.js +2 -2
  22. package/dist/handlers/remove-auth-token.d.ts +4 -4
  23. package/dist/handlers/server-request-handler.d.ts +6 -7
  24. package/dist/handlers/subscribe.d.ts +3 -3
  25. package/dist/handlers/subscribe.js +3 -3
  26. package/dist/handlers/unsubscribe.d.ts +2 -2
  27. package/dist/handlers/unsubscribe.js +2 -2
  28. package/dist/index.d.ts +20 -18
  29. package/dist/index.js +19 -20
  30. package/dist/plugin/server-plugin.d.ts +23 -25
  31. package/dist/server-options.d.ts +14 -11
  32. package/dist/server-socket.d.ts +68 -19
  33. package/dist/server-socket.js +27 -8
  34. package/dist/server-transport.d.ts +33 -23
  35. package/dist/server-transport.js +59 -50
  36. package/dist/server.d.ts +89 -90
  37. package/dist/server.js +110 -79
  38. package/package.json +46 -17
  39. package/dist/server-event.d.ts +0 -49
  40. /package/dist/{server-event.js → events/index.js} +0 -0
@@ -1,2 +1,2 @@
1
- import { ServerRequestHandlerArgs } from "./server-request-handler.js";
2
- export declare function unsubscribeHandler({ transport, options: channel }: ServerRequestHandlerArgs<string>): Promise<void>;
1
+ import { ServerRequestHandlerArgs } from './server-request-handler.js';
2
+ export declare function unsubscribeHandler({ options: channel, transport }: ServerRequestHandlerArgs<string>): Promise<void>;
@@ -1,5 +1,5 @@
1
- import { BrokerError } from "@socket-mesh/errors";
2
- export async function unsubscribeHandler({ transport, options: channel }) {
1
+ import { BrokerError } from '@socket-mesh/errors';
2
+ export async function unsubscribeHandler({ options: channel, transport }) {
3
3
  try {
4
4
  await transport.unsubscribe(channel);
5
5
  }
package/dist/index.d.ts CHANGED
@@ -1,30 +1,32 @@
1
- import http from "http";
2
- import { Server } from "./server.js";
3
- import { ServerOptions } from "./server-options.js";
4
- import { ChannelMap } from "@socket-mesh/channels";
5
- import { PrivateMethodMap, PublicMethodMap, ServiceMap } from "@socket-mesh/core";
6
- export { Server } from "./server.js";
7
- export { ServerSocket } from "./server-socket.js";
8
- export { PluginType } from "@socket-mesh/core";
9
- export { ServerRequestHandlerArgs } from './handlers/server-request-handler.js';
1
+ import { ChannelMap } from '@socket-mesh/channels';
2
+ import { PrivateMethodMap, PublicMethodMap, ServiceMap } from '@socket-mesh/core';
3
+ import http from 'http';
4
+ import { ServerOptions } from './server-options.js';
5
+ import { Server } from './server.js';
6
+ export type { ServerRequestHandlerArgs } from './handlers/server-request-handler.js';
7
+ export type { ServerOptions } from './server-options.js';
8
+ export type { ServerSocketState } from './server-socket-state.js';
9
+ export { ServerSocket } from './server-socket.js';
10
+ export { Server } from './server.js';
11
+ export type { PluginType } from '@socket-mesh/core';
10
12
  /**
11
- * Creates an http.Server exclusively used for WS upgrades.
13
+ * Captures upgrade requests for a http.Server.
12
14
  *
13
- * @param {Number} port
14
- * @param {Function} callback
15
+ * @param {http.Server} server
15
16
  * @param {Object} options
16
17
  * @return {AGServer} websocket cluster server
17
18
  * @api public
18
19
  */
19
- export declare function listen<TIncoming extends PublicMethodMap = {}, TChannel extends ChannelMap = {}, TService extends ServiceMap = {}, TOutgoing extends PublicMethodMap = {}, TPrivateIncoming extends PrivateMethodMap = {}, TPrivateOutgoing extends PrivateMethodMap = {}, TServerState extends object = {}, TState extends object = {}>(): Server<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>;
20
- export declare function listen<TIncoming extends PublicMethodMap = {}, TChannel extends ChannelMap = {}, TService extends ServiceMap = {}, TOutgoing extends PublicMethodMap = {}, TPrivateIncoming extends PrivateMethodMap = {}, TPrivateOutgoing extends PrivateMethodMap = {}, TServerState extends object = {}, TState extends object = {}>(port: number, options: ServerOptions<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>): Server<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>;
21
- export declare function listen<TIncoming extends PublicMethodMap = {}, TChannel extends ChannelMap = {}, TService extends ServiceMap = {}, TOutgoing extends PublicMethodMap = {}, TPrivateIncoming extends PrivateMethodMap = {}, TPrivateOutgoing extends PrivateMethodMap = {}, TServerState extends object = {}, TState extends object = {}>(port: number, options: ServerOptions<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>, fn: () => void): Server<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>;
20
+ export declare function attach<TIncoming extends PublicMethodMap = {}, TOutgoing extends PublicMethodMap = {}, TChannel extends ChannelMap = {}, TService extends ServiceMap = {}, TState extends object = {}, TPrivateIncoming extends PrivateMethodMap = {}, TPrivateOutgoing extends PrivateMethodMap = {}, TServerState extends object = {}>(server: http.Server, options?: ServerOptions<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>): Server<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>;
22
21
  /**
23
- * Captures upgrade requests for a http.Server.
22
+ * Creates an http.Server exclusively used for WS upgrades.
24
23
  *
25
- * @param {http.Server} server
24
+ * @param {Number} port
25
+ * @param {Function} callback
26
26
  * @param {Object} options
27
27
  * @return {AGServer} websocket cluster server
28
28
  * @api public
29
29
  */
30
- export declare function attach<TChannel extends ChannelMap = {}, TService extends ServiceMap = {}, TIncoming extends PublicMethodMap = {}, TOutgoing extends PublicMethodMap = {}, TPrivateIncoming extends PrivateMethodMap = {}, TPrivateOutgoing extends PrivateMethodMap = {}, TServerState extends object = {}, TState extends object = {}>(server: http.Server, options?: ServerOptions<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>): Server<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>;
30
+ export declare function listen<TIncoming extends PublicMethodMap = {}, TOutgoing extends PublicMethodMap = {}, TChannel extends ChannelMap = {}, TService extends ServiceMap = {}, TState extends object = {}, TPrivateIncoming extends PrivateMethodMap = {}, TPrivateOutgoing extends PrivateMethodMap = {}, TServerState extends object = {}>(): Server<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>;
31
+ export declare function listen<TIncoming extends PublicMethodMap = {}, TOutgoing extends PublicMethodMap = {}, TChannel extends ChannelMap = {}, TService extends ServiceMap = {}, TState extends object = {}, TPrivateIncoming extends PrivateMethodMap = {}, TPrivateOutgoing extends PrivateMethodMap = {}, TServerState extends object = {}>(port: number, options: ServerOptions<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>): Server<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>;
32
+ export declare function listen<TIncoming extends PublicMethodMap = {}, TOutgoing extends PublicMethodMap = {}, TChannel extends ChannelMap = {}, TService extends ServiceMap = {}, TState extends object = {}, TPrivateIncoming extends PrivateMethodMap = {}, TPrivateOutgoing extends PrivateMethodMap = {}, TServerState extends object = {}>(port: number, options: ServerOptions<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>, fn: () => void): Server<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>;
package/dist/index.js CHANGED
@@ -1,7 +1,22 @@
1
- import http from "http";
2
- import { Server } from "./server.js";
3
- export { Server } from "./server.js";
4
- export { ServerSocket } from "./server-socket.js";
1
+ import http from 'http';
2
+ import { Server } from './server.js';
3
+ export { ServerSocket } from './server-socket.js';
4
+ export { Server } from './server.js';
5
+ /**
6
+ * Captures upgrade requests for a http.Server.
7
+ *
8
+ * @param {http.Server} server
9
+ * @param {Object} options
10
+ * @return {AGServer} websocket cluster server
11
+ * @api public
12
+ */
13
+ export function attach(server, options) {
14
+ if (options == null) {
15
+ options = {};
16
+ }
17
+ options.server = server;
18
+ return new Server(options);
19
+ }
5
20
  export function listen(port, options, fn) {
6
21
  if (typeof options === 'function') {
7
22
  fn = options;
@@ -20,19 +35,3 @@ export function listen(port, options, fn) {
20
35
  return socketClusterServer;
21
36
  }
22
37
  ;
23
- /**
24
- * Captures upgrade requests for a http.Server.
25
- *
26
- * @param {http.Server} server
27
- * @param {Object} options
28
- * @return {AGServer} websocket cluster server
29
- * @api public
30
- */
31
- export function attach(server, options) {
32
- if (options == null) {
33
- options = {};
34
- }
35
- options.server = server;
36
- return new Server(options);
37
- }
38
- ;
@@ -1,33 +1,31 @@
1
- import { IncomingMessage } from "http";
2
- import { Plugin, PrivateMethodMap, PublicMethodMap, ServiceMap } from "@socket-mesh/core";
3
- import { AuthInfo } from "../handlers/authenticate.js";
4
- import { ServerSocket } from "../server-socket.js";
5
- import { ServerTransport } from "../server-transport.js";
6
- import { ChannelMap, ChannelOptions } from "@socket-mesh/channels";
7
- import { ClientPrivateMap, ServerPrivateMap } from "@socket-mesh/client";
8
- import { ServerSocketState } from "../server-socket-state.js";
9
- export interface HandshakePluginArgs<TChannel extends ChannelMap, TService extends ServiceMap, TIncoming extends PublicMethodMap, TOutgoing extends PublicMethodMap, TPrivateIncoming extends PrivateMethodMap, TPrivateOutgoing extends PrivateMethodMap, TServerState extends object, TState extends object> {
10
- socket: ServerSocket<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>;
11
- transport: ServerTransport<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>;
1
+ import { ChannelMap, ChannelOptions } from '@socket-mesh/channels';
2
+ import { Plugin, PrivateMethodMap, PublicMethodMap, ServiceMap } from '@socket-mesh/core';
3
+ import { IncomingMessage } from 'http';
4
+ import { AuthInfo } from '../handlers/authenticate.js';
5
+ import { ServerSocket } from '../server-socket.js';
6
+ import { ServerTransport } from '../server-transport.js';
7
+ export interface HandshakePluginArgs<TIncoming extends PublicMethodMap, TOutgoing extends PublicMethodMap, TChannel extends ChannelMap, TService extends ServiceMap, TState extends object, TPrivateIncoming extends PrivateMethodMap, TPrivateOutgoing extends PrivateMethodMap, TServerState extends object> {
12
8
  authInfo: AuthInfo;
9
+ socket: ServerSocket<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>;
10
+ transport: ServerTransport<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>;
13
11
  }
14
- export interface PublishPluginArgs<TChannel extends ChannelMap, TService extends ServiceMap, TIncoming extends PublicMethodMap, TOutgoing extends PublicMethodMap, TPrivateIncoming extends PrivateMethodMap, TPrivateOutgoing extends PrivateMethodMap, TServerState extends object, TState extends object> {
12
+ export interface PublishPluginArgs<TIncoming extends PublicMethodMap, TOutgoing extends PublicMethodMap, TChannel extends ChannelMap, TService extends ServiceMap, TState extends object, TPrivateIncoming extends PrivateMethodMap, TPrivateOutgoing extends PrivateMethodMap, TServerState extends object> {
15
13
  channel: string;
16
14
  data: any;
17
- socket: ServerSocket<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>;
18
- transport: ServerTransport<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>;
15
+ socket: ServerSocket<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>;
16
+ transport: ServerTransport<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>;
19
17
  }
20
- export interface SubscribePluginArgs<TChannel extends ChannelMap, TService extends ServiceMap, TIncoming extends PublicMethodMap, TOutgoing extends PublicMethodMap, TPrivateIncoming extends PrivateMethodMap, TPrivateOutgoing extends PrivateMethodMap, TServerState extends object, TState extends object> {
21
- channel: string;
22
- options: ChannelOptions;
23
- socket: ServerSocket<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>;
24
- transport: ServerTransport<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>;
25
- }
26
- export interface ServerPlugin<TIncoming extends PublicMethodMap, TChannel extends ChannelMap, TService extends ServiceMap, TOutgoing extends PublicMethodMap, TPrivateIncoming extends PrivateMethodMap, TPrivateOutgoing extends PrivateMethodMap, TServerState extends object, TState extends object> extends Plugin<TIncoming & TPrivateIncoming & ServerPrivateMap, TOutgoing, TPrivateOutgoing & ClientPrivateMap, TService, TState & ServerSocketState> {
18
+ export interface ServerPlugin<TIncoming extends PublicMethodMap, TOutgoing extends PublicMethodMap, TChannel extends ChannelMap, TService extends ServiceMap, TState extends object, TPrivateIncoming extends PrivateMethodMap, TPrivateOutgoing extends PrivateMethodMap, TServerState extends object> extends Plugin<ServerSocket<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>, ServerTransport<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>> {
27
19
  onAuthenticate?: (authInfo: AuthInfo) => void;
28
20
  onConnection?: (request: IncomingMessage) => Promise<void>;
29
- onHandshake?: (options: HandshakePluginArgs<TChannel, TService, TIncoming, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>) => Promise<void>;
30
- onPublishIn?: (options: PublishPluginArgs<TChannel, TService, TIncoming, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>) => Promise<any>;
31
- onPublishOut?: (options: PublishPluginArgs<TChannel, TService, TIncoming, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>) => Promise<any>;
32
- onSubscribe?: (options: SubscribePluginArgs<TChannel, TService, TIncoming, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>) => Promise<void>;
21
+ onHandshake?: (options: HandshakePluginArgs<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>) => Promise<void>;
22
+ onPublishIn?: (options: PublishPluginArgs<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>) => Promise<any>;
23
+ onPublishOut?: (options: PublishPluginArgs<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>) => Promise<any>;
24
+ onSubscribe?: (options: SubscribePluginArgs<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>) => Promise<void>;
25
+ }
26
+ export interface SubscribePluginArgs<TIncoming extends PublicMethodMap, TOutgoing extends PublicMethodMap, TChannel extends ChannelMap, TService extends ServiceMap, TState extends object, TPrivateIncoming extends PrivateMethodMap, TPrivateOutgoing extends PrivateMethodMap, TServerState extends object> {
27
+ channel: string;
28
+ options: ChannelOptions;
29
+ socket: ServerSocket<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>;
30
+ transport: ServerTransport<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>;
33
31
  }
@@ -1,25 +1,28 @@
1
- import ws from "ws";
2
- import { AuthEngine, AuthOptions } from "@socket-mesh/auth-engine";
3
- import { CallIdGenerator, HandlerMap, StreamCleanupMode, ServiceMap, PublicMethodMap, PrivateMethodMap } from "@socket-mesh/core";
4
- import { CodecEngine } from "@socket-mesh/formatter";
5
- import { ServerPlugin } from "./plugin/server-plugin.js";
6
- import { Broker } from "./broker/broker.js";
7
- import { ChannelMap } from "@socket-mesh/channels";
8
- import { ClientPrivateMap, ServerPrivateMap } from "@socket-mesh/client";
9
- export interface ServerOptions<TIncoming extends PublicMethodMap = {}, TChannel extends ChannelMap = {}, TService extends ServiceMap = {}, TOutgoing extends PublicMethodMap = {}, TPrivateIncoming extends PrivateMethodMap = {}, TPrivateOutgoing extends PrivateMethodMap = {}, TServerState extends object = {}, TState extends object = {}> extends ws.ServerOptions {
1
+ import { AuthEngine, AuthOptions } from '@socket-mesh/auth-engine';
2
+ import { ChannelMap } from '@socket-mesh/channels';
3
+ import { ServerPrivateMap } from '@socket-mesh/client';
4
+ import { CallIdGenerator, HandlerMap, PrivateMethodMap, PublicMethodMap, ServiceMap, StreamCleanupMode } from '@socket-mesh/core';
5
+ import { CodecEngine } from '@socket-mesh/formatter';
6
+ import { ServerOptions as WebSocketServerOptions } from 'ws';
7
+ import { Broker } from './broker/broker.js';
8
+ import { ServerPlugin } from './plugin/server-plugin.js';
9
+ import { ServerSocketState } from './server-socket-state.js';
10
+ import { ServerSocket } from './server-socket.js';
11
+ import { ServerTransport } from './server-transport.js';
12
+ export interface ServerOptions<TIncoming extends PublicMethodMap = {}, TOutgoing extends PublicMethodMap = {}, TChannel extends ChannelMap = {}, TService extends ServiceMap = {}, TState extends object = {}, TPrivateIncoming extends PrivateMethodMap = {}, TPrivateOutgoing extends PrivateMethodMap = {}, TServerState extends object = {}> extends WebSocketServerOptions {
10
13
  ackTimeoutMs?: number;
11
14
  allowClientPublish?: boolean;
12
15
  authEngine?: AuthEngine | AuthOptions;
13
16
  brokerEngine?: Broker<TChannel>;
14
17
  callIdGenerator?: CallIdGenerator;
15
18
  codecEngine?: CodecEngine;
19
+ handlers?: HandlerMap<TIncoming & TPrivateIncoming & ServerPrivateMap, TState & ServerSocketState, ServerSocket<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>, ServerTransport<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>>;
16
20
  handshakeTimeoutMs?: number;
17
- handlers?: HandlerMap<TIncoming & TPrivateIncoming & ServerPrivateMap, TOutgoing, TPrivateOutgoing & ClientPrivateMap, TService, TState>;
18
21
  isPingTimeoutDisabled?: boolean;
19
- plugins?: ServerPlugin<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>[];
20
22
  origins?: string;
21
23
  pingIntervalMs?: number;
22
24
  pingTimeoutMs?: number;
25
+ plugins?: ServerPlugin<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>[];
23
26
  socketChannelLimit?: number;
24
27
  socketStreamCleanupMode?: StreamCleanupMode;
25
28
  strictHandshake?: boolean;
@@ -1,29 +1,78 @@
1
- import { HandlerMap, PrivateMethodMap, PublicMethodMap, ServiceMap, Socket, SocketOptions } from "@socket-mesh/core";
2
- import ws from "ws";
3
- import { Exchange } from "./broker/exchange.js";
4
- import { Server } from "./server.js";
5
- import { IncomingMessage } from "http";
6
- import { ServerPlugin } from "./plugin/server-plugin.js";
7
- import { ChannelMap } from "@socket-mesh/channels";
8
- import { ServerSocketState } from "./server-socket-state.js";
9
- import { ClientPrivateMap, ServerPrivateMap } from "@socket-mesh/client";
10
- export interface ServerSocketOptions<TIncoming extends PublicMethodMap, TChannel extends ChannelMap, TService extends ServiceMap, TOutgoing extends PublicMethodMap, TPrivateIncoming extends PrivateMethodMap, TPrivateOutgoing extends PrivateMethodMap, TServerState extends object, TState extends object> extends SocketOptions<TIncoming & TPrivateIncoming & ServerPrivateMap, TOutgoing, TPrivateOutgoing & ClientPrivateMap, TService, TState & ServerSocketState> {
11
- handlers: HandlerMap<TIncoming & TPrivateIncoming & ServerPrivateMap, TOutgoing, TPrivateOutgoing & ClientPrivateMap, TService, TState & ServerSocketState>;
12
- plugins?: ServerPlugin<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>[];
1
+ import { ChannelMap } from '@socket-mesh/channels';
2
+ import { ClientPrivateMap, ServerPrivateMap } from '@socket-mesh/client';
3
+ import { AuthenticateEvent, AuthStateChangeEvent, BadAuthTokenEvent, BaseSocket, BaseSocketOptions, CloseEvent, ConnectEvent, ConnectingEvent, DeauthenticateEvent, DisconnectEvent, ErrorEvent, FunctionReturnType, InvokeMethodOptions, InvokeServiceOptions, LooseHandlerMap, MessageEvent, PingEvent, PongEvent, PrivateMethodMap, PublicMethodMap, RemoveAuthTokenEvent, RequestEvent, ResponseEvent, ServiceMap, ServiceMethodName, ServiceName, Socket, TypedRequestEvent, TypedResponseEvent, TypedSocketEvent } from '@socket-mesh/core';
4
+ import { DemuxedConsumableStream, StreamEvent } from '@socket-mesh/stream-demux';
5
+ import { IncomingMessage } from 'http';
6
+ import { WebSocket } from 'ws';
7
+ import { Exchange } from './broker/exchange.js';
8
+ import { ServerPlugin } from './plugin/server-plugin.js';
9
+ import { ServerSocketState } from './server-socket-state.js';
10
+ import { Server } from './server.js';
11
+ export interface ServerSocketOptions<TIncoming extends PublicMethodMap, TOutgoing extends PublicMethodMap, TChannel extends ChannelMap, TService extends ServiceMap, TState extends object, TPrivateIncoming extends PrivateMethodMap, TPrivateOutgoing extends PrivateMethodMap, TServerState extends object> extends BaseSocketOptions<TState & ServerSocketState> {
12
+ handlers: LooseHandlerMap;
13
13
  id?: string;
14
- service?: string;
15
- server: Server<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>;
14
+ plugins?: ServerPlugin<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>[];
16
15
  request: IncomingMessage;
17
- socket: ws.WebSocket;
16
+ server: Server<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>;
17
+ service?: string;
18
+ socket: WebSocket;
18
19
  }
19
- export declare class ServerSocket<TIncoming extends PublicMethodMap = {}, TChannel extends ChannelMap = {}, TService extends ServiceMap = {}, TOutgoing extends PublicMethodMap = {}, TPrivateIncoming extends PrivateMethodMap = {}, TPrivateOutgoing extends PrivateMethodMap = {}, TServerState extends object = {}, TState extends object = {}> extends Socket<TIncoming & TPrivateIncoming & ServerPrivateMap, TOutgoing, TPrivateOutgoing & ClientPrivateMap, TService, TState & ServerSocketState> {
20
- readonly server: Server<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>;
20
+ export declare class ServerSocket<TIncoming extends PublicMethodMap = {}, TOutgoing extends PublicMethodMap = {}, TChannel extends ChannelMap = {}, TService extends ServiceMap = {}, TState extends object = {}, TPrivateIncoming extends PrivateMethodMap = {}, TPrivateOutgoing extends PrivateMethodMap = {}, TServerState extends object = {}> extends BaseSocket<TState & ServerSocketState> implements Socket<TIncoming & TPrivateIncoming & ServerPrivateMap, TOutgoing, TState & ServerSocketState, TService, {}, TPrivateOutgoing & ClientPrivateMap> {
21
21
  private _serverTransport;
22
- constructor(options: ServerSocketOptions<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>);
22
+ readonly server: Server<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>;
23
+ constructor(options: ServerSocketOptions<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>);
23
24
  deauthenticate(rejectOnFailedDelivery?: boolean): Promise<boolean>;
25
+ emit(event: 'request', data: TypedRequestEvent<TIncoming & TPrivateIncoming & ServerPrivateMap, TService>): void;
26
+ emit(event: 'response', data: TypedResponseEvent<TOutgoing, TPrivateOutgoing & ClientPrivateMap, TService>): void;
27
+ emit(event: 'authStateChange', data: AuthStateChangeEvent): void;
28
+ emit(event: 'authenticate', data: AuthenticateEvent): void;
29
+ emit(event: 'badAuthToken', data: BadAuthTokenEvent): void;
30
+ emit(event: 'close', data: CloseEvent): void;
31
+ emit(event: 'connect', data: ConnectEvent): void;
32
+ emit(event: 'connectAbort', data: DisconnectEvent): void;
33
+ emit(event: 'connecting', data: ConnectingEvent): void;
34
+ emit(event: 'deauthenticate', data: DeauthenticateEvent): void;
35
+ emit(event: 'disconnect', data: DisconnectEvent): void;
36
+ emit(event: 'end'): void;
37
+ emit(event: 'error', data: ErrorEvent): void;
38
+ emit(event: 'message', data: MessageEvent): void;
39
+ emit(event: 'ping', data: PingEvent): void;
40
+ emit(event: 'pong', data: PongEvent): void;
41
+ emit(event: 'removeAuthToken', data: RemoveAuthTokenEvent): void;
42
+ emit(event: 'request', data: RequestEvent): void;
43
+ emit(event: 'response', data: ResponseEvent): void;
24
44
  get exchange(): Exchange<TChannel>;
45
+ get id(): string;
46
+ invoke<TMethod extends keyof TOutgoing & string>(method: TMethod, arg?: Parameters<TOutgoing[TMethod]>[0]): Promise<FunctionReturnType<TOutgoing[TMethod]>>;
47
+ 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]>>;
48
+ 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]>>;
49
+ invoke<TMethod extends keyof TOutgoing & string>(options: InvokeMethodOptions<TOutgoing, TMethod>, arg?: Parameters<TOutgoing[TMethod]>[0]): Promise<FunctionReturnType<TOutgoing[TMethod]>>;
50
+ invoke<TMethod extends keyof (TPrivateOutgoing & ClientPrivateMap) & string>(method: TMethod, arg: Parameters<(TPrivateOutgoing & ClientPrivateMap)[TMethod]>[0]): Promise<FunctionReturnType<(TPrivateOutgoing & ClientPrivateMap)[TMethod]>>;
51
+ invoke<TMethod extends keyof (TPrivateOutgoing & ClientPrivateMap) & string>(options: InvokeMethodOptions<(TPrivateOutgoing & ClientPrivateMap), TMethod>, arg?: Parameters<(TPrivateOutgoing & ClientPrivateMap)[TMethod]>[0]): Promise<FunctionReturnType<(TPrivateOutgoing & ClientPrivateMap)[TMethod]>>;
25
52
  kickOut(channel: string, message: string): Promise<void[]>;
53
+ listen(): DemuxedConsumableStream<StreamEvent<TypedSocketEvent<TIncoming & TPrivateIncoming & ServerPrivateMap, TOutgoing, TPrivateOutgoing & ClientPrivateMap, TService>>>;
54
+ listen(event: 'authStateChange'): DemuxedConsumableStream<AuthStateChangeEvent>;
55
+ listen(event: 'authenticate'): DemuxedConsumableStream<AuthenticateEvent>;
56
+ listen(event: 'badAuthToken'): DemuxedConsumableStream<BadAuthTokenEvent>;
57
+ listen(event: 'close'): DemuxedConsumableStream<CloseEvent>;
58
+ listen(event: 'connect'): DemuxedConsumableStream<ConnectEvent>;
59
+ listen(event: 'connectAbort'): DemuxedConsumableStream<DisconnectEvent>;
60
+ listen(event: 'connecting'): DemuxedConsumableStream<ConnectingEvent>;
61
+ listen(event: 'deauthenticate'): DemuxedConsumableStream<DeauthenticateEvent>;
62
+ listen(event: 'disconnect'): DemuxedConsumableStream<DisconnectEvent>;
63
+ listen(event: 'end'): DemuxedConsumableStream<void>;
64
+ listen(event: 'error'): DemuxedConsumableStream<ErrorEvent>;
65
+ listen(event: 'message'): DemuxedConsumableStream<MessageEvent>;
66
+ listen(event: 'ping'): DemuxedConsumableStream<PingEvent>;
67
+ listen(event: 'pong'): DemuxedConsumableStream<PongEvent>;
68
+ listen(event: 'removeAuthToken'): DemuxedConsumableStream<RemoveAuthTokenEvent>;
69
+ listen(event: 'request'): DemuxedConsumableStream<TypedRequestEvent<TIncoming & TPrivateIncoming & ServerPrivateMap, TService>>;
70
+ listen(event: 'response'): DemuxedConsumableStream<TypedResponseEvent<TOutgoing, TPrivateOutgoing & ClientPrivateMap, TService>>;
71
+ listen<U extends TypedSocketEvent<TIncoming & TPrivateIncoming & ServerPrivateMap, TOutgoing, TPrivateOutgoing & ClientPrivateMap, TService>, V = U>(event: string): DemuxedConsumableStream<V>;
26
72
  ping(): Promise<void>;
27
- get service(): string;
73
+ get service(): string | undefined;
74
+ transmit<TMethod extends keyof TOutgoing & string>(method: TMethod, arg?: Parameters<TOutgoing[TMethod]>[0]): Promise<void>;
75
+ transmit<TServiceName extends ServiceName<TService>, TMethod extends ServiceMethodName<TService, TServiceName>>(options: [TServiceName, TMethod], arg?: Parameters<TService[TServiceName][TMethod]>[0]): Promise<void>;
76
+ transmit<TMethod extends keyof (TPrivateOutgoing & ClientPrivateMap) & string>(method: TMethod, arg?: Parameters<(TPrivateOutgoing & ClientPrivateMap)[TMethod]>[0]): Promise<void>;
28
77
  get type(): 'server';
29
78
  }
@@ -1,6 +1,8 @@
1
- import { Socket } from "@socket-mesh/core";
2
- import { ServerTransport } from "./server-transport.js";
3
- export class ServerSocket extends Socket {
1
+ import { BaseSocket, toError } from '@socket-mesh/core';
2
+ import { ServerTransport } from './server-transport.js';
3
+ export class ServerSocket extends BaseSocket {
4
+ _serverTransport;
5
+ server;
4
6
  constructor(options) {
5
7
  const transport = new ServerTransport(options);
6
8
  super(transport, options);
@@ -8,42 +10,59 @@ export class ServerSocket extends Socket {
8
10
  this._serverTransport = transport;
9
11
  }
10
12
  async deauthenticate(rejectOnFailedDelivery) {
11
- await super.deauthenticate();
13
+ const result = await super.deauthenticate();
12
14
  if (rejectOnFailedDelivery) {
13
15
  try {
14
16
  await this._serverTransport.invoke('#removeAuthToken', undefined)[0];
15
17
  }
16
- catch (error) {
18
+ catch (err) {
19
+ const error = toError(err);
17
20
  this._serverTransport.onError(error);
18
21
  throw error;
19
22
  }
20
- return;
23
+ return result;
21
24
  }
22
25
  try {
23
26
  await this.transmit('#removeAuthToken');
24
27
  }
25
28
  catch (err) {
26
- if (err.name !== 'BadConnectionError') {
29
+ if (toError(err).name !== 'BadConnectionError') {
27
30
  throw err;
28
31
  }
29
32
  }
33
+ return result;
34
+ }
35
+ emit(event, data) {
36
+ super.emit(event, data);
30
37
  }
31
38
  get exchange() {
32
39
  return this.server.exchange;
33
40
  }
41
+ get id() {
42
+ return this._serverTransport.id;
43
+ }
44
+ invoke(methodOptions, arg) {
45
+ return super.invoke(methodOptions, arg);
46
+ }
34
47
  kickOut(channel, message) {
35
- const channels = channel ? [channel] : Object.keys(this.state.channelSubscriptions);
48
+ const channels = channel ? [channel] : Object.keys(this.state.channelSubscriptions || {});
36
49
  return Promise.all(channels.map((channelName) => {
37
50
  this.transmit('#kickOut', { channel: channelName, message });
38
51
  return this._serverTransport.unsubscribe(channelName);
39
52
  }));
40
53
  }
54
+ listen(event) {
55
+ return super.listen(event ?? '');
56
+ }
41
57
  ping() {
42
58
  return this._serverTransport.ping();
43
59
  }
44
60
  get service() {
45
61
  return this._serverTransport.service;
46
62
  }
63
+ transmit(serviceAndMethod, arg) {
64
+ return super.transmit(serviceAndMethod, arg);
65
+ }
47
66
  get type() {
48
67
  return this._serverTransport.type;
49
68
  }
@@ -1,37 +1,47 @@
1
- import { ServerSocket, ServerSocketOptions } from "./server-socket.js";
2
- import { AuthToken, SignedAuthToken } from "@socket-mesh/auth";
3
- import { AuthTokenOptions } from "@socket-mesh/auth-engine";
4
- import { Data } from "ws";
5
- import { AnyPacket, AnyResponse, SocketStatus, SocketTransport, InvokeMethodRequest, InvokeServiceRequest, TransmitMethodRequest, TransmitServiceRequest, InboundMessage, ServiceMap, PublicMethodMap, PrivateMethodMap } from "@socket-mesh/core";
6
- import { IncomingMessage } from "http";
7
- import { ServerPlugin } from "./plugin/server-plugin.js";
8
- import { ChannelMap, PublishOptions } from "@socket-mesh/channels";
9
- import { ClientPrivateMap, ServerPrivateMap } from "@socket-mesh/client";
10
- import { ServerSocketState } from "./server-socket-state.js";
11
- export declare class ServerTransport<TIncoming extends PublicMethodMap = {}, TChannel extends ChannelMap = {}, TService extends ServiceMap = {}, TOutgoing extends PublicMethodMap = {}, TPrivateIncoming extends PrivateMethodMap = {}, TPrivateOutgoing extends PrivateMethodMap = {}, TServerState extends object = {}, TState extends object = {}> extends SocketTransport<TIncoming & TPrivateIncoming & ServerPrivateMap, TOutgoing, TPrivateOutgoing & ClientPrivateMap, TService, TState & ServerSocketState> {
12
- readonly plugins: ServerPlugin<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>[];
13
- readonly service?: string;
1
+ import { AuthToken, SignedAuthToken } from '@socket-mesh/auth';
2
+ import { AuthTokenOptions } from '@socket-mesh/auth-engine';
3
+ import { ChannelMap, PublishOptions } from '@socket-mesh/channels';
4
+ import { ClientPrivateMap, ServerPrivateMap } from '@socket-mesh/client';
5
+ import { AnyPacket, AnyRequest, AnyResponse, BaseSocketTransport, FunctionReturnType, InboundMessage, InvokeMethodOptions, InvokeServiceOptions, PrivateMethodMap, PublicMethodMap, ServiceMap, ServiceMethodName, ServiceName, SocketStatus, SocketTransport } from '@socket-mesh/core';
6
+ import { IncomingMessage } from 'http';
7
+ import { Data } from 'ws';
8
+ import { ServerPlugin } from './plugin/server-plugin.js';
9
+ import { ServerSocketState } from './server-socket-state.js';
10
+ import { ServerSocket, ServerSocketOptions } from './server-socket.js';
11
+ export declare class ServerTransport<TIncoming extends PublicMethodMap = {}, TOutgoing extends PublicMethodMap = {}, TChannel extends ChannelMap = {}, TService extends ServiceMap = {}, TState extends object = {}, TPrivateIncoming extends PrivateMethodMap = {}, TPrivateOutgoing extends PrivateMethodMap = {}, TServerState extends object = {}> extends BaseSocketTransport<TState & ServerSocketState> implements SocketTransport<TIncoming & TPrivateIncoming & ServerPrivateMap, TOutgoing, TState & ServerSocketState, TService, {}, TPrivateOutgoing & ClientPrivateMap> {
12
+ id: string;
13
+ readonly plugins: ServerPlugin<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>[];
14
14
  readonly request: IncomingMessage;
15
- constructor(options: ServerSocketOptions<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>);
15
+ readonly service?: string;
16
+ type: 'server';
17
+ constructor(options: ServerSocketOptions<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>);
16
18
  changeToUnauthenticatedState(): Promise<boolean>;
17
- protected handleInboudMessage({ packet, timestamp }: InboundMessage<TIncoming & TPrivateIncoming & ServerPrivateMap, TOutgoing, TPrivateOutgoing & ClientPrivateMap, TService>): Promise<void>;
18
- protected onClose(code: number, reason?: string | Buffer): void;
19
+ protected handleInboudMessage({ packet, timestamp }: InboundMessage): Promise<void>;
20
+ invoke<TMethod extends keyof TOutgoing & string>(method: TMethod, arg?: Parameters<TOutgoing[TMethod]>[0]): [Promise<FunctionReturnType<TOutgoing[TMethod]>>, () => void];
21
+ invoke<TMethod extends keyof TOutgoing & string>(options: InvokeMethodOptions<TOutgoing, TMethod>, arg?: Parameters<TOutgoing[TMethod]>[0]): [Promise<FunctionReturnType<TOutgoing[TMethod]>>, () => void];
22
+ 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];
23
+ 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];
24
+ invoke<TMethod extends keyof (TPrivateOutgoing & ClientPrivateMap) & string>(method: TMethod, arg: Parameters<(TPrivateOutgoing & ClientPrivateMap)[TMethod]>[0]): [Promise<FunctionReturnType<(TPrivateOutgoing & ClientPrivateMap)[TMethod]>>, () => void];
25
+ invoke<TMethod extends keyof (TPrivateOutgoing & ClientPrivateMap) & string>(options: InvokeMethodOptions<(TPrivateOutgoing & ClientPrivateMap), TMethod>, arg?: Parameters<(TPrivateOutgoing & ClientPrivateMap)[TMethod]>[0]): [Promise<FunctionReturnType<(TPrivateOutgoing & ClientPrivateMap)[TMethod]>>, () => void];
26
+ protected onClose(code: number, reason?: Buffer | string): void;
19
27
  protected onDisconnect(status: SocketStatus, code: number, reason?: string): void;
20
28
  onError(error: Error): void;
21
- protected onInvoke<TServiceName extends keyof TService, TServiceMethod extends keyof TService[TServiceName], TMethod extends keyof TOutgoing, TPrivateMethod extends keyof TPrivateOutgoing>(request: InvokeMethodRequest<TOutgoing, TMethod> | InvokeMethodRequest<TPrivateOutgoing, TPrivateMethod> | InvokeServiceRequest<TService, TServiceName, TServiceMethod>): void;
29
+ protected onInvoke(request: AnyRequest): void;
22
30
  protected onMessage(data: Data, isBinary: boolean): void;
23
31
  protected onPingPong(): void;
24
32
  protected onPublish(options: PublishOptions): Promise<void>;
25
- protected onRequest(packet: AnyPacket<TIncoming & TPrivateIncoming & ServerPrivateMap, TService>, timestamp: Date, pluginError?: Error): Promise<boolean>;
26
- protected onResponse(response: AnyResponse<TOutgoing, TPrivateOutgoing & ClientPrivateMap, TService>): void;
27
- protected onTransmit<TServiceName extends keyof TService, TServiceMethod extends keyof TService[TServiceName], TMethod extends keyof TOutgoing>(request: TransmitMethodRequest<TOutgoing, TMethod> | TransmitServiceRequest<TService, TServiceName, TServiceMethod>): void;
33
+ protected onRequest(packet: AnyPacket, timestamp: Date, pluginError?: Error): Promise<boolean>;
34
+ protected onResponse(response: AnyResponse): void;
35
+ protected onTransmit(request: AnyRequest): void;
28
36
  ping(): Promise<void>;
29
37
  setAuthorization(authToken: AuthToken, options?: AuthTokenOptions): Promise<boolean>;
30
38
  setAuthorization(signedAuthToken: SignedAuthToken, authToken?: AuthToken): Promise<boolean>;
31
39
  setReadyStatus(pingTimeoutMs: number, authError?: Error): void;
32
- get socket(): ServerSocket<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>;
33
- set socket(value: ServerSocket<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>);
40
+ get socket(): ServerSocket<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>;
41
+ set socket(value: ServerSocket<TIncoming, TOutgoing, TChannel, TService, TState, TPrivateIncoming, TPrivateOutgoing, TServerState>);
42
+ transmit<TMethod extends keyof TOutgoing & string>(method: TMethod, arg?: Parameters<TOutgoing[TMethod]>[0]): Promise<void>;
43
+ transmit<TServiceName extends ServiceName<TService>, TMethod extends ServiceMethodName<TService, TServiceName>>(options: [TServiceName, TMethod], arg?: Parameters<TService[TServiceName][TMethod]>[0]): Promise<void>;
44
+ transmit<TMethod extends keyof (TPrivateOutgoing & ClientPrivateMap) & string>(method: TMethod, arg?: Parameters<(TPrivateOutgoing & ClientPrivateMap)[TMethod]>[0]): Promise<void>;
34
45
  triggerAuthenticationEvents(wasSigned: boolean, wasAuthenticated: boolean): void;
35
- type: 'server';
36
46
  unsubscribe(channel: string): Promise<void>;
37
47
  }