@socket-mesh/server 18.1.4 → 18.1.5

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 (39) 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 +1 -1
  6. package/dist/broker/exchange.js +2 -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 +7 -7
  12. package/dist/broker/simple-exchange.js +15 -12
  13. package/dist/{server-event.d.ts → events/index.d.ts} +15 -15
  14. package/dist/handlers/authenticate.d.ts +11 -11
  15. package/dist/handlers/authenticate.js +29 -28
  16. package/dist/handlers/handshake.d.ts +2 -2
  17. package/dist/handlers/handshake.js +17 -13
  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 +3 -3
  23. package/dist/handlers/server-request-handler.d.ts +6 -6
  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 +15 -15
  31. package/dist/server-options.d.ts +11 -11
  32. package/dist/server-socket.d.ts +16 -15
  33. package/dist/server-socket.js +11 -5
  34. package/dist/server-transport.d.ts +14 -13
  35. package/dist/server-transport.js +44 -36
  36. package/dist/server.d.ts +54 -54
  37. package/dist/server.js +100 -73
  38. package/package.json +46 -17
  39. /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<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>;
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 = {}, 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>;
31
+ 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>;
32
+ 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>;
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,15 +1,15 @@
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";
1
+ import { ChannelMap, ChannelOptions } from '@socket-mesh/channels';
2
+ import { ClientPrivateMap, ServerPrivateMap } from '@socket-mesh/client';
3
+ import { Plugin, PrivateMethodMap, PublicMethodMap, ServiceMap } from '@socket-mesh/core';
4
+ import { IncomingMessage } from 'http';
5
+ import { AuthInfo } from '../handlers/authenticate.js';
6
+ import { ServerSocketState } from '../server-socket-state.js';
7
+ import { ServerSocket } from '../server-socket.js';
8
+ import { ServerTransport } from '../server-transport.js';
9
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
+ authInfo: AuthInfo;
10
11
  socket: ServerSocket<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>;
11
12
  transport: ServerTransport<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>;
12
- authInfo: AuthInfo;
13
13
  }
14
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> {
15
15
  channel: string;
@@ -17,12 +17,6 @@ export interface PublishPluginArgs<TChannel extends ChannelMap, TService extends
17
17
  socket: ServerSocket<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>;
18
18
  transport: ServerTransport<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>;
19
19
  }
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
20
  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> {
27
21
  onAuthenticate?: (authInfo: AuthInfo) => void;
28
22
  onConnection?: (request: IncomingMessage) => Promise<void>;
@@ -31,3 +25,9 @@ export interface ServerPlugin<TIncoming extends PublicMethodMap, TChannel extend
31
25
  onPublishOut?: (options: PublishPluginArgs<TChannel, TService, TIncoming, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>) => Promise<any>;
32
26
  onSubscribe?: (options: SubscribePluginArgs<TChannel, TService, TIncoming, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>) => Promise<void>;
33
27
  }
28
+ 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> {
29
+ channel: string;
30
+ options: ChannelOptions;
31
+ socket: ServerSocket<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>;
32
+ transport: ServerTransport<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>;
33
+ }
@@ -1,25 +1,25 @@
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 { ClientPrivateMap, 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
+ 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 WebSocketServerOptions {
10
10
  ackTimeoutMs?: number;
11
11
  allowClientPublish?: boolean;
12
12
  authEngine?: AuthEngine | AuthOptions;
13
13
  brokerEngine?: Broker<TChannel>;
14
14
  callIdGenerator?: CallIdGenerator;
15
15
  codecEngine?: CodecEngine;
16
- handshakeTimeoutMs?: number;
17
16
  handlers?: HandlerMap<TIncoming & TPrivateIncoming & ServerPrivateMap, TOutgoing, TPrivateOutgoing & ClientPrivateMap, TService, TState>;
17
+ handshakeTimeoutMs?: number;
18
18
  isPingTimeoutDisabled?: boolean;
19
- plugins?: ServerPlugin<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>[];
20
19
  origins?: string;
21
20
  pingIntervalMs?: number;
22
21
  pingTimeoutMs?: number;
22
+ plugins?: ServerPlugin<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>[];
23
23
  socketChannelLimit?: number;
24
24
  socketStreamCleanupMode?: StreamCleanupMode;
25
25
  strictHandshake?: boolean;
@@ -1,29 +1,30 @@
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";
1
+ import { ChannelMap } from '@socket-mesh/channels';
2
+ import { ClientPrivateMap, ServerPrivateMap } from '@socket-mesh/client';
3
+ import { HandlerMap, PrivateMethodMap, PublicMethodMap, ServiceMap, Socket, SocketOptions } from '@socket-mesh/core';
4
+ import { IncomingMessage } from 'http';
5
+ import { WebSocket } from 'ws';
6
+ import { Exchange } from './broker/exchange.js';
7
+ import { ServerPlugin } from './plugin/server-plugin.js';
8
+ import { ServerSocketState } from './server-socket-state.js';
9
+ import { Server } from './server.js';
10
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
11
  handlers: HandlerMap<TIncoming & TPrivateIncoming & ServerPrivateMap, TOutgoing, TPrivateOutgoing & ClientPrivateMap, TService, TState & ServerSocketState>;
12
- plugins?: ServerPlugin<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>[];
13
12
  id?: string;
14
- service?: string;
15
- server: Server<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>;
13
+ plugins?: ServerPlugin<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>[];
16
14
  request: IncomingMessage;
17
- socket: ws.WebSocket;
15
+ server: Server<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>;
16
+ service?: string;
17
+ socket: WebSocket;
18
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>;
21
20
  private _serverTransport;
21
+ readonly server: Server<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>;
22
22
  constructor(options: ServerSocketOptions<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>);
23
23
  deauthenticate(rejectOnFailedDelivery?: boolean): Promise<boolean>;
24
24
  get exchange(): Exchange<TChannel>;
25
+ get id(): string;
25
26
  kickOut(channel: string, message: string): Promise<void[]>;
26
27
  ping(): Promise<void>;
27
- get service(): string;
28
+ get service(): string | undefined;
28
29
  get type(): 'server';
29
30
  }
@@ -1,6 +1,8 @@
1
- import { Socket } from "@socket-mesh/core";
2
- import { ServerTransport } from "./server-transport.js";
1
+ import { Socket } from '@socket-mesh/core';
2
+ import { ServerTransport } from './server-transport.js';
3
3
  export class ServerSocket extends Socket {
4
+ _serverTransport;
5
+ server;
4
6
  constructor(options) {
5
7
  const transport = new ServerTransport(options);
6
8
  super(transport, options);
@@ -8,7 +10,7 @@ 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];
@@ -17,7 +19,7 @@ export class ServerSocket extends Socket {
17
19
  this._serverTransport.onError(error);
18
20
  throw error;
19
21
  }
20
- return;
22
+ return result;
21
23
  }
22
24
  try {
23
25
  await this.transmit('#removeAuthToken');
@@ -27,12 +29,16 @@ export class ServerSocket extends Socket {
27
29
  throw err;
28
30
  }
29
31
  }
32
+ return result;
30
33
  }
31
34
  get exchange() {
32
35
  return this.server.exchange;
33
36
  }
37
+ get id() {
38
+ return this._serverTransport.id;
39
+ }
34
40
  kickOut(channel, message) {
35
- const channels = channel ? [channel] : Object.keys(this.state.channelSubscriptions);
41
+ const channels = channel ? [channel] : Object.keys(this.state.channelSubscriptions || {});
36
42
  return Promise.all(channels.map((channelName) => {
37
43
  this.transmit('#kickOut', { channel: channelName, message });
38
44
  return this._serverTransport.unsubscribe(channelName);
@@ -1,21 +1,23 @@
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";
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, AnyResponse, InboundMessage, InvokeMethodRequest, InvokeServiceRequest, PrivateMethodMap, PublicMethodMap, ServiceMap, SocketStatus, SocketTransport, TransmitMethodRequest, TransmitServiceRequest } 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
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
+ id: string;
12
13
  readonly plugins: ServerPlugin<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>[];
13
- readonly service?: string;
14
14
  readonly request: IncomingMessage;
15
+ readonly service?: string;
16
+ type: 'server';
15
17
  constructor(options: ServerSocketOptions<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>);
16
18
  changeToUnauthenticatedState(): Promise<boolean>;
17
19
  protected handleInboudMessage({ packet, timestamp }: InboundMessage<TIncoming & TPrivateIncoming & ServerPrivateMap, TOutgoing, TPrivateOutgoing & ClientPrivateMap, TService>): Promise<void>;
18
- protected onClose(code: number, reason?: string | Buffer): void;
20
+ protected onClose(code: number, reason?: Buffer | string): void;
19
21
  protected onDisconnect(status: SocketStatus, code: number, reason?: string): void;
20
22
  onError(error: Error): void;
21
23
  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;
@@ -32,6 +34,5 @@ export declare class ServerTransport<TIncoming extends PublicMethodMap = {}, TCh
32
34
  get socket(): ServerSocket<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>;
33
35
  set socket(value: ServerSocket<TIncoming, TChannel, TService, TOutgoing, TPrivateIncoming, TPrivateOutgoing, TServerState, TState>);
34
36
  triggerAuthenticationEvents(wasSigned: boolean, wasAuthenticated: boolean): void;
35
- type: 'server';
36
37
  unsubscribe(channel: string): Promise<void>;
37
38
  }
@@ -1,12 +1,17 @@
1
- import { AuthError, BrokerError, InvalidActionError, socketProtocolErrorStatuses } from "@socket-mesh/errors";
2
- import { SocketTransport, abortRequest } from "@socket-mesh/core";
3
- import base64id from "base64id";
1
+ import { abortRequest, SocketTransport } from '@socket-mesh/core';
2
+ import { AuthError, BrokerError, InvalidActionError, SocketProtocolErrorStatuses } from '@socket-mesh/errors';
3
+ import base64id from 'base64id';
4
4
  export class ServerTransport extends SocketTransport {
5
+ id;
6
+ plugins;
7
+ request;
8
+ service;
9
+ type;
5
10
  constructor(options) {
6
11
  super(options);
7
12
  this.type = 'server';
8
13
  this.request = options.request;
9
- this.plugins = options.plugins;
14
+ this.plugins = options.plugins || [];
10
15
  this.service = options.service;
11
16
  this.webSocket = options.socket;
12
17
  this.id = (options.id || base64id.generateId());
@@ -17,38 +22,38 @@ export class ServerTransport extends SocketTransport {
17
22
  if (this.signedAuthToken) {
18
23
  const authToken = this.authToken;
19
24
  const signedAuthToken = this.signedAuthToken;
20
- this.socket.server.emit('socketAuthStateChange', { socket: this.socket, wasAuthenticated: true, isAuthenticated: false });
25
+ this.socket.server.emit('socketAuthStateChange', { isAuthenticated: false, socket: this.socket, wasAuthenticated: true });
21
26
  await super.changeToUnauthenticatedState();
22
- this.socket.server.emit('socketDeauthenticate', { socket: this.socket, signedAuthToken, authToken });
27
+ this.socket.server.emit('socketDeauthenticate', { authToken, signedAuthToken, socket: this.socket });
23
28
  return true;
24
29
  }
25
30
  return false;
26
31
  }
27
- handleInboudMessage({ packet, timestamp }) {
32
+ async handleInboudMessage({ packet, timestamp }) {
28
33
  if ((packet === null || typeof packet !== 'object') && this.socket.server.strictHandshake && this.status === 'connecting') {
29
34
  this.disconnect(4009);
30
35
  return;
31
36
  }
32
- return super.handleInboudMessage({ packet, timestamp });
37
+ return await super.handleInboudMessage({ packet, timestamp });
33
38
  }
34
39
  onClose(code, reason) {
35
40
  const status = this.status;
36
- const strReason = reason?.toString() || socketProtocolErrorStatuses[code];
41
+ const strReason = reason?.toString() || SocketProtocolErrorStatuses[code];
37
42
  super.onClose(code, reason);
38
- this.socket.server.emit('socketClose', { socket: this.socket, code, reason: strReason });
43
+ this.socket.server.emit('socketClose', { code, reason: strReason, socket: this.socket });
39
44
  this.onDisconnect(status, code, strReason);
40
45
  }
41
46
  onDisconnect(status, code, reason) {
42
47
  if (status === 'ready') {
43
- this.socket.server.emit('socketDisconnect', { socket: this.socket, code, reason });
48
+ this.socket.server.emit('socketDisconnect', { code, reason, socket: this.socket });
44
49
  }
45
50
  else {
46
- this.socket.server.emit('socketConnectAbort', { socket: this.socket, code, reason });
51
+ this.socket.server.emit('socketConnectAbort', { code, reason, socket: this.socket });
47
52
  }
48
53
  super.onDisconnect(status, code, reason);
49
54
  if (this.socket.state.channelSubscriptions) {
50
55
  const channels = Object.keys(this.socket.state.channelSubscriptions);
51
- channels.map((channel) => this.unsubscribe(channel));
56
+ channels.map(channel => this.unsubscribe(channel));
52
57
  }
53
58
  if (this.streamCleanupMode !== 'none') {
54
59
  (async () => {
@@ -61,7 +66,7 @@ export class ServerTransport extends SocketTransport {
61
66
  }
62
67
  for (let i = 0; i < this.plugins.length; i++) {
63
68
  const plugin = this.plugins[i];
64
- if (plugin.onEnd) {
69
+ if (plugin?.onEnd) {
65
70
  plugin.onEnd({ socket: this.socket, transport: this });
66
71
  }
67
72
  }
@@ -71,7 +76,7 @@ export class ServerTransport extends SocketTransport {
71
76
  }
72
77
  onError(error) {
73
78
  super.onError(error);
74
- this.socket.server.emit('socketError', { socket: this.socket, error });
79
+ this.socket.server.emit('socketError', { error, socket: this.socket });
75
80
  }
76
81
  onInvoke(request) {
77
82
  if (request.method !== '#publish') {
@@ -82,25 +87,25 @@ export class ServerTransport extends SocketTransport {
82
87
  .then(() => {
83
88
  super.onInvoke(request);
84
89
  })
85
- .catch(err => {
90
+ .catch((err) => {
86
91
  abortRequest(request, err);
87
92
  });
88
93
  }
94
+ /*
95
+ protected override onPing(data: Buffer): void {
96
+ if (this.socket.server.strictHandshake && this.status === 'connecting') {
97
+ this.disconnect(4009);
98
+ return;
99
+ }
100
+
101
+ super.onPing(data);
102
+ this.socket.server.emit('socketPing', { socket: this.socket, data });
103
+ }
104
+ */
89
105
  onMessage(data, isBinary) {
90
- this.socket.server.emit('socketMessage', { socket: this.socket, data, isBinary });
106
+ this.socket.server.emit('socketMessage', { data, isBinary, socket: this.socket });
91
107
  super.onMessage(data, isBinary);
92
108
  }
93
- /*
94
- protected override onPing(data: Buffer): void {
95
- if (this.socket.server.strictHandshake && this.status === 'connecting') {
96
- this.disconnect(4009);
97
- return;
98
- }
99
-
100
- super.onPing(data);
101
- this.socket.server.emit('socketPing', { socket: this.socket, data });
102
- }
103
- */
104
109
  onPingPong() {
105
110
  if (this.socket.server.strictHandshake && this.status === 'connecting') {
106
111
  this.disconnect(4009);
@@ -113,8 +118,8 @@ export class ServerTransport extends SocketTransport {
113
118
  async onPublish(options) {
114
119
  let data = options.data;
115
120
  for (const plugin of this.plugins) {
116
- if ('onPublishOut' in plugin) {
117
- data = await plugin.onPublishOut({ socket: this.socket, transport: this, channel: options.channel, data });
121
+ if (plugin.onPublishOut) {
122
+ data = await plugin.onPublishOut({ channel: options.channel, data, socket: this.socket, transport: this });
118
123
  }
119
124
  }
120
125
  options.data = data;
@@ -135,7 +140,7 @@ export class ServerTransport extends SocketTransport {
135
140
  }
136
141
  onResponse(response) {
137
142
  super.onResponse(response);
138
- this.socket.server.emit('socketResponse', { socket: this.socket, response });
143
+ this.socket.server.emit('socketResponse', { response, socket: this.socket });
139
144
  }
140
145
  onTransmit(request) {
141
146
  if (request.method !== '#publish') {
@@ -146,7 +151,7 @@ export class ServerTransport extends SocketTransport {
146
151
  .then(() => {
147
152
  super.onTransmit(request);
148
153
  })
149
- .catch(err => {
154
+ .catch((err) => {
150
155
  abortRequest(request, err);
151
156
  });
152
157
  }
@@ -197,7 +202,7 @@ export class ServerTransport extends SocketTransport {
197
202
  this.onError(error);
198
203
  throw error;
199
204
  }
200
- return;
205
+ return changed;
201
206
  }
202
207
  try {
203
208
  await this.transmit('#setAuthToken', signedAuthToken);
@@ -211,7 +216,7 @@ export class ServerTransport extends SocketTransport {
211
216
  }
212
217
  setReadyStatus(pingTimeoutMs, authError) {
213
218
  super.setReadyStatus(pingTimeoutMs, authError);
214
- this.socket.server.emit('socketConnect', { socket: this.socket, pingTimeoutMs, id: this.socket.id, isAuthenticated: !!this.signedAuthToken, authError });
219
+ this.socket.server.emit('socketConnect', { authError, id: this.socket.id, isAuthenticated: !!this.signedAuthToken, pingTimeoutMs, socket: this.socket });
215
220
  }
216
221
  get socket() {
217
222
  return super.socket;
@@ -220,9 +225,12 @@ export class ServerTransport extends SocketTransport {
220
225
  super.socket = value;
221
226
  }
222
227
  triggerAuthenticationEvents(wasSigned, wasAuthenticated) {
228
+ if (!this.signedAuthToken) {
229
+ throw new AuthError('Signed auth token should be set to trigger authentication events');
230
+ }
223
231
  super.triggerAuthenticationEvents(wasSigned, wasAuthenticated);
224
- this.socket.server.emit('socketAuthStateChange', { socket: this.socket, wasAuthenticated, isAuthenticated: true, authToken: this.authToken, signedAuthToken: this.signedAuthToken });
225
- this.socket.server.emit('socketAuthenticate', { socket: this.socket, wasSigned, signedAuthToken: this.signedAuthToken, authToken: this.authToken });
232
+ this.socket.server.emit('socketAuthStateChange', { authToken: this.authToken, isAuthenticated: true, signedAuthToken: this.signedAuthToken, socket: this.socket, wasAuthenticated });
233
+ this.socket.server.emit('socketAuthenticate', { authToken: this.authToken, signedAuthToken: this.signedAuthToken, socket: this.socket, wasSigned });
226
234
  }
227
235
  async unsubscribe(channel) {
228
236
  if (typeof channel !== 'string') {