@socket-mesh/server 17.3.6 → 18.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/server.d.ts CHANGED
@@ -1,25 +1,25 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node" />
3
- import { AuthEngine } from "@socket-mesh/server-auth";
3
+ import { AuthEngine } from "./auth-engine.js";
4
4
  import { CodecEngine } from "@socket-mesh/formatter";
5
5
  import { Broker, Packet } from "@socket-mesh/simple-broker";
6
6
  import { AsyncStreamEmitter } from "@socket-mesh/async-stream-emitter";
7
- import { MiddlewareType } from "./middleware-type";
8
- import { MiddlewareStream } from "./middleware-stream";
9
- import { ActionAuthenticate, ActionHandshakeSC, ActionHandshakeWS, ActionInvoke, ActionMessage, ActionPublishIn, ActionPublishOut, ActionResult, ActionSubscribe, ActionTransmit, AuthInfo, MiddlewareAction } from "./action";
10
- import { ProtocolVersions, ServerOptions } from "./server-options";
11
- import ws from "ws";
7
+ import { MiddlewareType } from "./middleware-type.js";
8
+ import { MiddlewareStream } from "./middleware-stream.js";
9
+ import { ActionAuthenticate, ActionHandshakeSC, ActionHandshakeWS, ActionMessage, ActionPublishOut, ActionResult, ActionSubscribe, AuthInfo, HandshakeAction, InboundAction, MiddlewareAction } from "./action.js";
10
+ import { ProtocolVersions, ServerOptions } from "./server-options.js";
11
+ import { PerMessageDeflateOptions, WebSocketServer } from 'ws';
12
12
  import jwt from "jsonwebtoken";
13
13
  import { Server as HttpServer } from 'http';
14
- import { ServerSocket } from "./serversocket";
14
+ import { ServerSocket } from "./serversocket.js";
15
15
  import { ChannelOptions, Client } from "@socket-mesh/channel";
16
- import { AuthStateChanged, Authenticated, BadAuthToken, Closed, ConnectAborted, Connected, Deauthenticated, Disconnected, ErrorOccurred, ServerSocketEvents, Subscribed, Unsubscribed, WarningOccurred } from "./events";
16
+ import { AuthStateChanged, Authenticated, BadAuthToken, Closed, ConnectAborted, Connected, Deauthenticated, Disconnected, ErrorOccurred, ServerSocketEvents, Subscribed, Unsubscribed, WarningOccurred } from "./events.js";
17
17
  import { DemuxedConsumableStream } from "@socket-mesh/stream-demux";
18
- export type ServerEvent<T, U extends ServerSocketEvents | {}> = {
19
- socket: ServerSocket<T>;
20
- } & U;
21
- type ServerEvents<T> = ServerEvent<T, Connected> | ServerEvent<T, ConnectAborted> | ServerEvent<T, Disconnected> | ServerEvent<T, Closed> | {} | ServerEvent<T, BadAuthToken> | ServerEvent<T, Authenticated> | ServerEvent<T, AuthStateChanged> | ServerEvent<T, Deauthenticated> | ServerEvent<T, {}> | ErrorOccurred | WarningOccurred | ServerEvent<T, Subscribed> | ServerEvent<T, Unsubscribed>;
22
- export declare class Server<T> extends AsyncStreamEmitter<ServerEvents<T>> {
18
+ export type ServerEvent<T extends ServerSocketEvents | {}> = {
19
+ socket: ServerSocket;
20
+ } & T;
21
+ type ServerEvents = ServerEvent<Connected> | ServerEvent<ConnectAborted> | ServerEvent<Disconnected> | ServerEvent<Closed> | {} | ServerEvent<BadAuthToken> | ServerEvent<Authenticated> | ServerEvent<AuthStateChanged> | ServerEvent<Deauthenticated> | ServerEvent<{}> | ErrorOccurred | WarningOccurred | ServerEvent<Subscribed> | ServerEvent<Unsubscribed>;
22
+ export declare class Server extends AsyncStreamEmitter<ServerEvents> {
23
23
  allowClientPublish: boolean;
24
24
  auth: AuthEngine;
25
25
  clientsCount: number;
@@ -34,7 +34,7 @@ export declare class Server<T> extends AsyncStreamEmitter<ServerEvents<T>> {
34
34
  handshakeTimeout: number;
35
35
  options: ServerOptions;
36
36
  path: string;
37
- perMessageDeflate?: boolean | ws.PerMessageDeflateOptions;
37
+ perMessageDeflate?: boolean | PerMessageDeflateOptions;
38
38
  pingInterval: number;
39
39
  pingTimeout: number;
40
40
  pingTimeoutDisabled: boolean;
@@ -45,14 +45,14 @@ export declare class Server<T> extends AsyncStreamEmitter<ServerEvents<T>> {
45
45
  socketChannelLimit?: number;
46
46
  verificationKey: jwt.Secret;
47
47
  readonly clients: {
48
- [id: string]: ServerSocket<T>;
48
+ [id: string]: ServerSocket;
49
49
  };
50
50
  readonly pendingClients: {
51
- [id: string]: ServerSocket<T>;
51
+ [id: string]: ServerSocket;
52
52
  };
53
- readonly brokerEngine: Broker<T>;
54
- readonly exchange: Client<Packet<T>>;
55
- readonly wsServer: ws.Server;
53
+ readonly brokerEngine: Broker<any>;
54
+ readonly exchange: Client<Packet<any>>;
55
+ readonly wsServer: WebSocketServer;
56
56
  private readonly _allowAllOrigins;
57
57
  private readonly _path;
58
58
  private readonly _middleware;
@@ -63,51 +63,51 @@ export declare class Server<T> extends AsyncStreamEmitter<ServerEvents<T>> {
63
63
  emitWarning(warning: Error): void;
64
64
  private _handleServerError;
65
65
  private _handleSocketConnection;
66
- emit(eventName: 'connection', data: ServerEvent<T, Connected>): void;
67
- emit(eventName: 'connectionAbort', data: ServerEvent<T, ConnectAborted>): void;
68
- emit(eventName: 'disconnection', data: ServerEvent<T, Disconnected>): void;
69
- emit(eventName: 'closure', data: ServerEvent<T, Closed>): void;
66
+ emit(eventName: 'connection', data: ServerEvent<Connected>): void;
67
+ emit(eventName: 'connectionAbort', data: ServerEvent<ConnectAborted>): void;
68
+ emit(eventName: 'disconnection', data: ServerEvent<Disconnected>): void;
69
+ emit(eventName: 'closure', data: ServerEvent<Closed>): void;
70
70
  emit(eventName: 'ready', data: {}): void;
71
- emit(eventName: 'authentication', data: ServerEvent<T, Authenticated>): void;
72
- emit(eventName: 'badSocketAuthToken', data: ServerEvent<T, BadAuthToken>): void;
71
+ emit(eventName: 'authentication', data: ServerEvent<Authenticated>): void;
72
+ emit(eventName: 'badSocketAuthToken', data: ServerEvent<BadAuthToken>): void;
73
73
  emit(eventName: 'error', data: ErrorOccurred): void;
74
- emit(eventName: 'handshake', data: ServerEvent<T, {}>): void;
74
+ emit(eventName: 'handshake', data: ServerEvent<{}>): void;
75
75
  emit(eventName: 'warning', data: WarningOccurred): void;
76
- emit(eventName: 'subscription', data: ServerEvent<T, Subscribed>): void;
77
- emit(eventName: 'unsubscription', data: ServerEvent<T, Unsubscribed>): void;
78
- emit(eventName: 'authenticationStateChange', data: ServerEvent<T, AuthStateChanged>): void;
79
- emit(eventName: 'deauthentication', data: ServerEvent<T, Deauthenticated>): void;
80
- listen(eventName: 'connection'): DemuxedConsumableStream<ServerEvent<T, Connected>>;
81
- listen(eventName: 'connectionAbort'): DemuxedConsumableStream<ServerEvent<T, ConnectAborted>>;
82
- listen(eventName: 'disconnection'): DemuxedConsumableStream<ServerEvent<T, Disconnected>>;
83
- listen(eventName: 'closure'): DemuxedConsumableStream<ServerEvent<T, Closed>>;
76
+ emit(eventName: 'subscription', data: ServerEvent<Subscribed>): void;
77
+ emit(eventName: 'unsubscription', data: ServerEvent<Unsubscribed>): void;
78
+ emit(eventName: 'authenticationStateChange', data: ServerEvent<AuthStateChanged>): void;
79
+ emit(eventName: 'deauthentication', data: ServerEvent<Deauthenticated>): void;
80
+ listen(eventName: 'connection'): DemuxedConsumableStream<ServerEvent<Connected>>;
81
+ listen(eventName: 'connectionAbort'): DemuxedConsumableStream<ServerEvent<ConnectAborted>>;
82
+ listen(eventName: 'disconnection'): DemuxedConsumableStream<ServerEvent<Disconnected>>;
83
+ listen(eventName: 'closure'): DemuxedConsumableStream<ServerEvent<Closed>>;
84
84
  listen(eventName: 'ready'): DemuxedConsumableStream<{}>;
85
- listen(eventName: 'authentication'): DemuxedConsumableStream<ServerEvent<T, Authenticated>>;
86
- listen(eventName: 'badSocketAuthToken'): DemuxedConsumableStream<ServerEvent<T, BadAuthToken>>;
85
+ listen(eventName: 'authentication'): DemuxedConsumableStream<ServerEvent<Authenticated>>;
86
+ listen(eventName: 'badSocketAuthToken'): DemuxedConsumableStream<ServerEvent<BadAuthToken>>;
87
87
  listen(eventName: 'error'): DemuxedConsumableStream<ErrorOccurred>;
88
- listen(eventName: 'handshake'): DemuxedConsumableStream<ServerEvent<T, {}>>;
88
+ listen(eventName: 'handshake'): DemuxedConsumableStream<ServerEvent<{}>>;
89
89
  listen(eventName: 'warning'): DemuxedConsumableStream<WarningOccurred>;
90
- listen(eventName: 'subscription'): DemuxedConsumableStream<ServerEvent<T, Subscribed>>;
91
- listen(eventName: 'unsubscription'): DemuxedConsumableStream<ServerEvent<T, Unsubscribed>>;
92
- listen(eventName: 'authenticationStateChange'): DemuxedConsumableStream<ServerEvent<T, AuthStateChanged>>;
93
- listen(eventName: 'deauthentication'): DemuxedConsumableStream<ServerEvent<T, Deauthenticated>>;
90
+ listen(eventName: 'subscription'): DemuxedConsumableStream<ServerEvent<Subscribed>>;
91
+ listen(eventName: 'unsubscription'): DemuxedConsumableStream<ServerEvent<Unsubscribed>>;
92
+ listen(eventName: 'authenticationStateChange'): DemuxedConsumableStream<ServerEvent<AuthStateChanged>>;
93
+ listen(eventName: 'deauthentication'): DemuxedConsumableStream<ServerEvent<Deauthenticated>>;
94
94
  close(keepSocketsOpen?: boolean): Promise<void>;
95
95
  getPath(): string;
96
96
  generateId(): string;
97
- setMiddleware(type: MiddlewareType.MIDDLEWARE_HANDSHAKE, middleware: (stream: MiddlewareStream<void>) => void): void;
98
- setMiddleware(type: MiddlewareType.MIDDLEWARE_INBOUND_RAW, middleware: (stream: MiddlewareStream<string | ArrayBuffer | Buffer[]>) => void): void;
99
- setMiddleware(type: MiddlewareType.MIDDLEWARE_INBOUND, middleware: (stream: MiddlewareStream<ChannelOptions | T | void>) => void): void;
100
- setMiddleware(type: MiddlewareType.MIDDLEWARE_OUTBOUND, middleware: (stream: MiddlewareStream<T>) => void): void;
97
+ setMiddleware(type: MiddlewareType.MIDDLEWARE_HANDSHAKE, middleware: (stream: MiddlewareStream<HandshakeAction>) => void): void;
98
+ setMiddleware(type: MiddlewareType.MIDDLEWARE_INBOUND_RAW, middleware: (stream: MiddlewareStream<ActionMessage>) => void): void;
99
+ setMiddleware(type: MiddlewareType.MIDDLEWARE_INBOUND, middleware: (stream: MiddlewareStream<InboundAction>) => void): void;
100
+ setMiddleware(type: MiddlewareType.MIDDLEWARE_OUTBOUND, middleware: (stream: MiddlewareStream<ActionPublishOut>) => void): void;
101
101
  removeMiddleware(type: MiddlewareType): void;
102
102
  hasMiddleware(type: MiddlewareType): boolean;
103
- _processMiddlewareAction(middlewareStream: MiddlewareStream<void | T | ChannelOptions>, action: ActionSubscribe<T> | ActionTransmit<T> | ActionInvoke<T> | ActionPublishIn<T>, socket?: ServerSocket<T>): Promise<ActionResult<T>>;
104
- _processMiddlewareAction(middlewareStream: MiddlewareStream<void | T | ChannelOptions>, action: ActionAuthenticate<T>, socket?: ServerSocket<T>): Promise<ActionResult<void>>;
105
- _processMiddlewareAction(middlewareStream: MiddlewareStream<T>, action: ActionPublishOut<T>, socket?: ServerSocket<T>): Promise<ActionResult<T>>;
106
- _processMiddlewareAction(middlewareStream: MiddlewareStream<ChannelOptions>, action: ActionSubscribe<T>, socket?: ServerSocket<T>): Promise<ActionResult<ChannelOptions>>;
107
- _processMiddlewareAction(middlewareStream: MiddlewareStream<void>, action: ActionHandshakeWS, socket?: ServerSocket<T>): Promise<ActionResult<void>>;
108
- _processMiddlewareAction(middlewareStream: MiddlewareStream<void>, action: ActionHandshakeSC<T>, socket?: ServerSocket<T>): Promise<ActionResult<void>>;
109
- _processMiddlewareAction(middlewareStream: MiddlewareStream<string | ArrayBuffer | Buffer[]>, action: ActionMessage<T>, socket?: ServerSocket<T>): Promise<ActionResult<string | ArrayBuffer | Buffer[]>>;
110
- _processMiddlewareAction(middlewareStream: MiddlewareStream<T | ChannelOptions | AuthInfo | string | ArrayBuffer | Buffer[] | void>, action: MiddlewareAction<T>, socket?: ServerSocket<T>): Promise<ActionResult<T | ChannelOptions | AuthInfo | string | ArrayBuffer | Buffer[] | void>>;
103
+ _processMiddlewareAction(middlewareStream: MiddlewareStream<InboundAction>, action: InboundAction, socket?: ServerSocket): Promise<ActionResult<any>>;
104
+ _processMiddlewareAction(middlewareStream: MiddlewareStream<ActionAuthenticate>, action: ActionAuthenticate, socket?: ServerSocket): Promise<ActionResult<void>>;
105
+ _processMiddlewareAction(middlewareStream: MiddlewareStream<ActionPublishOut>, action: ActionPublishOut, socket?: ServerSocket): Promise<ActionResult<any>>;
106
+ _processMiddlewareAction(middlewareStream: MiddlewareStream<ActionSubscribe>, action: ActionSubscribe, socket?: ServerSocket): Promise<ActionResult<ChannelOptions>>;
107
+ _processMiddlewareAction(middlewareStream: MiddlewareStream<ActionHandshakeWS>, action: ActionHandshakeWS, socket?: ServerSocket): Promise<ActionResult<void>>;
108
+ _processMiddlewareAction(middlewareStream: MiddlewareStream<ActionHandshakeSC>, action: ActionHandshakeSC, socket?: ServerSocket): Promise<ActionResult<void>>;
109
+ _processMiddlewareAction(middlewareStream: MiddlewareStream<ActionMessage>, action: ActionMessage, socket?: ServerSocket): Promise<ActionResult<string | ArrayBuffer | Buffer[]>>;
110
+ _processMiddlewareAction(middlewareStream: MiddlewareStream<MiddlewareAction>, action: MiddlewareAction, socket?: ServerSocket): Promise<ActionResult<any | ChannelOptions | AuthInfo | string | ArrayBuffer | Buffer[] | void>>;
111
111
  private _verifyHandshake;
112
112
  }
113
113
  export {};
package/server.js CHANGED
@@ -1,80 +1,62 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- var __asyncValues = (this && this.__asyncValues) || function (o) {
11
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
12
- var m = o[Symbol.asyncIterator], i;
13
- return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
14
- function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
15
- function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
16
- };
17
- import { AuthEngine } from "@socket-mesh/server-auth";
1
+ import { AuthEngine } from "./auth-engine.js";
18
2
  import formatter from "@socket-mesh/formatter";
19
3
  import { SimpleBroker } from "@socket-mesh/simple-broker";
20
4
  import { AsyncStreamEmitter } from "@socket-mesh/async-stream-emitter";
21
5
  import { InvalidArgumentsError, InvalidOptionsError, InvalidActionError, ServerProtocolError, SilentMiddlewareBlockedError } from "@socket-mesh/errors";
22
- import { MiddlewareType } from "./middleware-type";
23
- import { MiddlewareStream } from "./middleware-stream";
24
- import { ActionHandshakeWS } from "./action";
25
- import ws from "ws";
6
+ import { MiddlewareType } from "./middleware-type.js";
7
+ import { MiddlewareStream } from "./middleware-stream.js";
8
+ import { ActionHandshakeWS } from "./action.js";
9
+ import { WebSocketServer } from 'ws';
26
10
  import base64id from 'base64id';
27
- import { ServerSocket } from "./serversocket";
11
+ import { ServerSocket } from "./serversocket.js";
28
12
  import url from "url";
29
13
  import crypto from "crypto";
30
14
  export class Server extends AsyncStreamEmitter {
31
15
  constructor(options) {
32
16
  super();
33
- this._verifyHandshake = function (info, callback) {
34
- return __awaiter(this, void 0, void 0, function* () {
35
- let req = info.req;
36
- let origin = info.origin;
37
- if (origin === 'null' || origin == null) {
38
- origin = '*';
39
- }
40
- let ok = false;
41
- if (this._allowAllOrigins) {
42
- ok = true;
43
- }
44
- else {
45
- try {
46
- let parts = url.parse(origin);
47
- parts.port = parts.port || (parts.protocol === 'https:' ? '443' : '80');
48
- ok = !!(~this.origins.indexOf(parts.hostname + ':' + parts.port) ||
49
- ~this.origins.indexOf(parts.hostname + ':*') ||
50
- ~this.origins.indexOf('*:' + parts.port));
51
- }
52
- catch (e) { }
53
- }
54
- const middlewareHandshakeStream = new MiddlewareStream(MiddlewareType.MIDDLEWARE_HANDSHAKE);
55
- req['handshakeStream'] = middlewareHandshakeStream;
56
- const handshakeMiddleware = this._middleware[MiddlewareType.MIDDLEWARE_HANDSHAKE];
57
- if (handshakeMiddleware) {
58
- handshakeMiddleware(middlewareHandshakeStream);
59
- }
60
- const action = new ActionHandshakeWS(req);
17
+ this._verifyHandshake = async function (info, callback) {
18
+ let req = info.req;
19
+ let origin = info.origin;
20
+ if (typeof origin !== 'string' || origin === 'null') {
21
+ origin = '*';
22
+ }
23
+ let ok = false;
24
+ if (this._allowAllOrigins) {
25
+ ok = true;
26
+ }
27
+ else {
61
28
  try {
62
- yield this._processMiddlewareAction(middlewareHandshakeStream, action);
63
- }
64
- catch (error) {
65
- middlewareHandshakeStream.close();
66
- callback(false, 401, typeof error === 'string' ? error : error.message);
67
- return;
68
- }
69
- if (ok) {
70
- callback(true);
71
- return;
29
+ let parts = url.parse(origin);
30
+ parts.port = parts.port || (parts.protocol === 'https:' ? '443' : '80');
31
+ ok = !!(~this.origins.indexOf(parts.hostname + ':' + parts.port) ||
32
+ ~this.origins.indexOf(parts.hostname + ':*') ||
33
+ ~this.origins.indexOf('*:' + parts.port));
72
34
  }
73
- const error = new ServerProtocolError(`Failed to authorize socket handshake - Invalid origin: ${origin}`);
74
- this.emitWarning(error);
35
+ catch (e) { }
36
+ }
37
+ const middlewareHandshakeStream = new MiddlewareStream(MiddlewareType.MIDDLEWARE_HANDSHAKE);
38
+ req['handshakeStream'] = middlewareHandshakeStream;
39
+ const handshakeMiddleware = this._middleware[MiddlewareType.MIDDLEWARE_HANDSHAKE];
40
+ if (handshakeMiddleware) {
41
+ handshakeMiddleware(middlewareHandshakeStream);
42
+ }
43
+ const action = new ActionHandshakeWS(req);
44
+ try {
45
+ await this._processMiddlewareAction(middlewareHandshakeStream, action);
46
+ }
47
+ catch (error) {
75
48
  middlewareHandshakeStream.close();
76
- callback(false, 403, error.message);
77
- });
49
+ callback(false, 401, typeof error === 'string' ? error : error.message);
50
+ return;
51
+ }
52
+ if (ok) {
53
+ callback(true);
54
+ return;
55
+ }
56
+ const error = new ServerProtocolError(`Failed to authorize socket handshake - Invalid origin: ${origin}`);
57
+ this.emitWarning(error);
58
+ middlewareHandshakeStream.close();
59
+ callback(false, 403, error.message);
78
60
  };
79
61
  let opts = {
80
62
  brokerEngine: new SimpleBroker(),
@@ -117,40 +99,22 @@ export class Server extends AsyncStreamEmitter {
117
99
  this.brokerEngine = opts.brokerEngine;
118
100
  this.middlewareEmitFailures = opts.middlewareEmitFailures;
119
101
  this._path = opts.path;
120
- (() => __awaiter(this, void 0, void 0, function* () {
121
- var _a, e_1, _b, _c;
122
- try {
123
- for (var _d = true, _e = __asyncValues(this.brokerEngine.listen('error')), _f; _f = yield _e.next(), _a = _f.done, !_a;) {
124
- _c = _f.value;
125
- _d = false;
126
- try {
127
- let { error } = _c;
128
- this.emitWarning(error);
129
- }
130
- finally {
131
- _d = true;
132
- }
133
- }
134
- }
135
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
136
- finally {
137
- try {
138
- if (!_d && !_a && (_b = _e.return)) yield _b.call(_e);
139
- }
140
- finally { if (e_1) throw e_1.error; }
102
+ (async () => {
103
+ for await (let { error } of this.brokerEngine.listen('error')) {
104
+ this.emitWarning(error);
141
105
  }
142
- }))();
106
+ })();
143
107
  if (this.brokerEngine.isReady) {
144
108
  this.isReady = true;
145
109
  this.emit('ready', {});
146
110
  }
147
111
  else {
148
112
  this.isReady = false;
149
- (() => __awaiter(this, void 0, void 0, function* () {
150
- yield this.brokerEngine.listen('ready').once();
113
+ (async () => {
114
+ await this.brokerEngine.listen('ready').once();
151
115
  this.isReady = true;
152
116
  this.emit('ready', {});
153
- }))();
117
+ })();
154
118
  }
155
119
  // let wsEngine = typeof opts.wsEngine === 'string' ? require(opts.wsEngine) : opts.wsEngine;
156
120
  // if (!wsEngine || !wsEngine.Server) {
@@ -228,7 +192,7 @@ export class Server extends AsyncStreamEmitter {
228
192
  if (wsServerOptions.clientTracking == null) {
229
193
  wsServerOptions.clientTracking = false;
230
194
  }
231
- this.wsServer = new ws.Server(wsServerOptions);
195
+ this.wsServer = new WebSocketServer(wsServerOptions);
232
196
  this.wsServer.on('error', this._handleServerError.bind(this));
233
197
  this.wsServer.on('connection', this._handleSocketConnection.bind(this));
234
198
  }
@@ -308,10 +272,10 @@ export class Server extends AsyncStreamEmitter {
308
272
  type !== MiddlewareType.MIDDLEWARE_INBOUND_RAW &&
309
273
  type !== MiddlewareType.MIDDLEWARE_INBOUND &&
310
274
  type !== MiddlewareType.MIDDLEWARE_OUTBOUND) {
311
- throw new InvalidArgumentsError(`Middleware type "${type}" is not supported`);
275
+ throw new InvalidArgumentsError(`Middleware ${type} type is not supported`);
312
276
  }
313
277
  if (this._middleware[type]) {
314
- throw new InvalidActionError(`Middleware type "${type}" has already been set`);
278
+ throw new InvalidActionError(`Middleware ${type} type has already been set`);
315
279
  }
316
280
  this._middleware[type] = middleware;
317
281
  }
@@ -321,47 +285,45 @@ export class Server extends AsyncStreamEmitter {
321
285
  hasMiddleware(type) {
322
286
  return !!this._middleware[type];
323
287
  }
324
- _processMiddlewareAction(middlewareStream, action, socket) {
325
- return __awaiter(this, void 0, void 0, function* () {
326
- if (!this.hasMiddleware(middlewareStream.type)) {
327
- return { data: 'data' in action ? action.data : undefined };
288
+ async _processMiddlewareAction(middlewareStream, action, socket) {
289
+ if (!this.hasMiddleware(middlewareStream.type)) {
290
+ return { data: 'data' in action ? action.data : undefined };
291
+ }
292
+ middlewareStream.write(action);
293
+ let newData;
294
+ let options;
295
+ try {
296
+ const result = await action.promise;
297
+ if (result) {
298
+ newData = result.data;
299
+ options = result.options;
328
300
  }
329
- middlewareStream.write(action);
330
- let newData;
331
- let options;
332
- try {
333
- const result = yield action.promise;
334
- if (result) {
335
- newData = result.data;
336
- options = result.options;
337
- }
301
+ }
302
+ catch (error) {
303
+ let clientError;
304
+ if (!error) {
305
+ error = new SilentMiddlewareBlockedError(`The ${action.type} Action was blocked by ${middlewareStream.type} middleware`, middlewareStream.type);
306
+ clientError = error;
338
307
  }
339
- catch (error) {
340
- let clientError;
341
- if (!error) {
342
- error = new SilentMiddlewareBlockedError(`The ${action.type} Action was blocked by ${middlewareStream.type} middleware`, middlewareStream.type);
343
- clientError = error;
344
- }
345
- else if (error.silent) {
346
- clientError = new SilentMiddlewareBlockedError(`The ${action.type} Action was blocked by ${middlewareStream.type} middleware`, middlewareStream.type);
308
+ else if (error.silent) {
309
+ clientError = new SilentMiddlewareBlockedError(`The ${action.type} Action was blocked by ${middlewareStream.type} middleware`, middlewareStream.type);
310
+ }
311
+ else {
312
+ clientError = error;
313
+ }
314
+ if (this.middlewareEmitFailures) {
315
+ if (socket) {
316
+ socket.emitError(error);
347
317
  }
348
318
  else {
349
- clientError = error;
350
- }
351
- if (this.middlewareEmitFailures) {
352
- if (socket) {
353
- socket.emitError(error);
354
- }
355
- else {
356
- this.emitWarning(error);
357
- }
319
+ this.emitWarning(error);
358
320
  }
359
- throw clientError;
360
321
  }
361
- if (newData === undefined && 'data' in action) {
362
- newData = action.data;
363
- }
364
- return { data: newData, options };
365
- });
322
+ throw clientError;
323
+ }
324
+ if (newData === undefined && 'data' in action) {
325
+ newData = action.data;
326
+ }
327
+ return { data: newData, options };
366
328
  }
367
329
  }
@@ -0,0 +1,13 @@
1
+ import { DemuxedConsumableStream, StreamDemux, StreamDemuxWrapper } from "@socket-mesh/stream-demux";
2
+ import { AuthenticateRequest, HandshakeRequest, InboundRequest, InvokeRequest, PublishRequest, SubscribeRequest, UnsubscribeRequest } from "./request.js";
3
+ import { Request } from "@socket-mesh/request";
4
+ export declare class ServerSocketProcedure extends StreamDemuxWrapper<InboundRequest> {
5
+ constructor(stream: StreamDemux<InboundRequest>);
6
+ listen(name: '#handshake'): DemuxedConsumableStream<HandshakeRequest>;
7
+ listen(name: '#authenticate'): DemuxedConsumableStream<AuthenticateRequest>;
8
+ listen(name: '#subscribe'): DemuxedConsumableStream<SubscribeRequest>;
9
+ listen(name: '#unsubscribe'): DemuxedConsumableStream<UnsubscribeRequest>;
10
+ listen(name: '#publish'): DemuxedConsumableStream<PublishRequest>;
11
+ listen<U>(name: string): DemuxedConsumableStream<Request<U>>;
12
+ listen<U, V>(name: string): DemuxedConsumableStream<InvokeRequest<U, V>>;
13
+ }
@@ -0,0 +1,9 @@
1
+ import { StreamDemuxWrapper } from "@socket-mesh/stream-demux";
2
+ export class ServerSocketProcedure extends StreamDemuxWrapper {
3
+ constructor(stream) {
4
+ super(stream);
5
+ }
6
+ listen(name) {
7
+ return super.listen(name);
8
+ }
9
+ }
package/serversocket.d.ts CHANGED
@@ -1,21 +1,21 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node" />
3
- import { ChannelOptions } from "@socket-mesh/channel";
4
3
  import { AuthState, AuthToken, SignedAuthToken } from "@socket-mesh/auth";
5
- import { AuthTokenOptions } from "@socket-mesh/server-auth";
4
+ import { AuthTokenOptions } from "./auth-engine.js";
6
5
  import { WritableConsumableStream } from "@socket-mesh/writable-consumable-stream";
7
6
  import { AsyncStreamEmitter } from "@socket-mesh/async-stream-emitter";
8
7
  import { DemuxedConsumableStream, StreamDemuxWrapper } from "@socket-mesh/stream-demux";
8
+ import { ResponsePacketError } from "@socket-mesh/request";
9
9
  import { IncomingMessage } from 'http';
10
- import { SocketState } from "./socket-state";
11
- import { AuthInfo } from "./action";
12
- import { AuthStateChanged, AuthTokenSigned, Authenticated, BadAuthToken, Closed, ConnectAborted, Connected, Deauthenticated, Disconnected, ErrorOccurred, RawMessage, ServerSocketEvents, Subscribed, Unsubscribed } from './events';
13
- import { MiddlewareStream } from './middleware-stream';
14
- import { ProtocolVersions } from './server-options';
10
+ import { SocketState } from "./socket-state.js";
11
+ import { ActionMessage, ActionPublishOut, HandshakeAction, InboundAction } from "./action.js";
12
+ import { AuthStateChanged, AuthTokenSigned, Authenticated, BadAuthToken, Closed, ConnectAborted, Connected, Deauthenticated, Disconnected, ErrorOccurred, RawMessage, ServerSocketEvents, Subscribed, Unsubscribed } from './events.js';
13
+ import { MiddlewareStream } from './middleware-stream.js';
14
+ import { ProtocolVersions } from './server-options.js';
15
15
  import ws from "ws";
16
- import { Server } from "./server";
17
- import { OutboundPacket, OutboundPacketOptions } from './outbound-packet';
18
- import { InboundRequest } from './request';
16
+ import { Server } from "./server.js";
17
+ import { OutboundPacket, OutboundPacketOptions } from './outbound-packet.js';
18
+ import { ServerSocketProcedure } from './serversocket-procedure.js';
19
19
  export type WebSocket = ws.WebSocket & {
20
20
  bytesReceived: number;
21
21
  upgradeReq: IncomingMessage;
@@ -31,7 +31,7 @@ interface EventObject {
31
31
  data?: any;
32
32
  cid?: number;
33
33
  }
34
- export declare class ServerSocket<T> extends AsyncStreamEmitter<ServerSocketEvents> {
34
+ export declare class ServerSocket extends AsyncStreamEmitter<ServerSocketEvents> {
35
35
  authState: AuthState;
36
36
  authToken: AuthToken | null;
37
37
  batchInterval: number;
@@ -51,12 +51,12 @@ export declare class ServerSocket<T> extends AsyncStreamEmitter<ServerSocketEven
51
51
  [channel: string]: boolean;
52
52
  };
53
53
  readonly inboundMessageStream: WritableConsumableStream<string | ArrayBuffer | Buffer[]>;
54
- readonly outboundPacketStream: WritableConsumableStream<OutboundPacket<T>>;
55
- readonly server: Server<T>;
56
- readonly middlewareHandshakeStream: MiddlewareStream<void>;
57
- readonly middlewareInboundRawStream: MiddlewareStream<string | ArrayBuffer | Buffer[]>;
58
- readonly middlewareInboundStream: MiddlewareStream<ChannelOptions | T | void>;
59
- readonly middlewareOutboundStream: MiddlewareStream<T>;
54
+ readonly outboundPacketStream: WritableConsumableStream<OutboundPacket>;
55
+ readonly server: Server;
56
+ readonly middlewareHandshakeStream: MiddlewareStream<HandshakeAction>;
57
+ readonly middlewareInboundRawStream: MiddlewareStream<ActionMessage>;
58
+ readonly middlewareInboundStream: MiddlewareStream<InboundAction>;
59
+ readonly middlewareOutboundStream: MiddlewareStream<ActionPublishOut>;
60
60
  readonly remoteAddress?: string;
61
61
  readonly remoteFamily?: string;
62
62
  readonly remotePort?: number;
@@ -64,8 +64,8 @@ export declare class ServerSocket<T> extends AsyncStreamEmitter<ServerSocketEven
64
64
  outboundSentMessageCount: number;
65
65
  signedAuthToken: SignedAuthToken | null;
66
66
  state: SocketState;
67
- readonly receiver: StreamDemuxWrapper<string | void | T | ArrayBuffer | Buffer[] | AuthInfo | ChannelOptions>;
68
- readonly procedure: StreamDemuxWrapper<InboundRequest<T>>;
67
+ readonly receiver: StreamDemuxWrapper<any>;
68
+ readonly procedure: ServerSocketProcedure;
69
69
  private _cid;
70
70
  private _handshakeTimeoutRef;
71
71
  private _pingIntervalTicker;
@@ -76,8 +76,9 @@ export declare class ServerSocket<T> extends AsyncStreamEmitter<ServerSocketEven
76
76
  private readonly _receiverDemux;
77
77
  private readonly _procedureDemux;
78
78
  private readonly _sendPing;
79
- constructor(id: string, server: Server<T>, socket: WebSocket, protocolVersion: ProtocolVersions);
79
+ constructor(id: string, server: Server, socket: WebSocket, protocolVersion: ProtocolVersions);
80
80
  getBackpressure(): number;
81
+ get exchange(): import("@socket-mesh/channel").Client<import("@socket-mesh/simple-broker/packet").Packet<any>>;
81
82
  getInboundBackpressure(): number;
82
83
  getOutboundBackpressure(): number;
83
84
  private _startBatchOnHandshake;
@@ -111,7 +112,7 @@ export declare class ServerSocket<T> extends AsyncStreamEmitter<ServerSocketEven
111
112
  killIO(): void;
112
113
  killAllStreams(): void;
113
114
  private _destroy;
114
- disconnect(code: number, reason?: string): void;
115
+ disconnect(code?: number, reason?: string): void;
115
116
  terminate(): void;
116
117
  send(data: string, options?: SendOptions): void;
117
118
  decode(message: string): any;
@@ -126,7 +127,7 @@ export declare class ServerSocket<T> extends AsyncStreamEmitter<ServerSocketEven
126
127
  private _cancelBatching;
127
128
  cancelBatching(): void;
128
129
  serializeObject(object: any): string | null;
129
- sendObject(object: EventObject): void;
130
+ sendObject(object: EventObject | ResponsePacketError): void;
130
131
  private _handleOutboundPacketStream;
131
132
  private _transmit;
132
133
  transmit(event: string, data: any, options?: OutboundPacketOptions): void;