@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.
- package/dist/broker/broker-events.d.ts +4 -4
- package/dist/broker/broker.d.ts +10 -10
- package/dist/broker/broker.js +2 -1
- package/dist/broker/exchange-client.d.ts +1 -1
- package/dist/broker/exchange.d.ts +1 -1
- package/dist/broker/exchange.js +2 -1
- package/dist/broker/index.d.ts +5 -0
- package/dist/broker/index.js +5 -0
- package/dist/broker/simple-broker.d.ts +8 -8
- package/dist/broker/simple-broker.js +26 -23
- package/dist/broker/simple-exchange.d.ts +7 -7
- package/dist/broker/simple-exchange.js +15 -12
- package/dist/{server-event.d.ts → events/index.d.ts} +15 -15
- package/dist/handlers/authenticate.d.ts +11 -11
- package/dist/handlers/authenticate.js +29 -28
- package/dist/handlers/handshake.d.ts +2 -2
- package/dist/handlers/handshake.js +17 -13
- package/dist/handlers/index.d.ts +7 -0
- package/dist/handlers/index.js +7 -0
- package/dist/handlers/publish.d.ts +3 -3
- package/dist/handlers/publish.js +2 -2
- package/dist/handlers/remove-auth-token.d.ts +3 -3
- package/dist/handlers/server-request-handler.d.ts +6 -6
- package/dist/handlers/subscribe.d.ts +3 -3
- package/dist/handlers/subscribe.js +3 -3
- package/dist/handlers/unsubscribe.d.ts +2 -2
- package/dist/handlers/unsubscribe.js +2 -2
- package/dist/index.d.ts +20 -18
- package/dist/index.js +19 -20
- package/dist/plugin/server-plugin.d.ts +15 -15
- package/dist/server-options.d.ts +11 -11
- package/dist/server-socket.d.ts +16 -15
- package/dist/server-socket.js +11 -5
- package/dist/server-transport.d.ts +14 -13
- package/dist/server-transport.js +44 -36
- package/dist/server.d.ts +54 -54
- package/dist/server.js +100 -73
- package/package.json +46 -17
- /package/dist/{server-event.js → events/index.js} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { ServerRequestHandlerArgs } from
|
|
2
|
-
export declare function unsubscribeHandler({
|
|
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
|
|
2
|
-
export async function unsubscribeHandler({
|
|
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
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
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
|
-
*
|
|
13
|
+
* Captures upgrade requests for a http.Server.
|
|
12
14
|
*
|
|
13
|
-
* @param {
|
|
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
|
|
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
|
-
*
|
|
22
|
+
* Creates an http.Server exclusively used for WS upgrades.
|
|
24
23
|
*
|
|
25
|
-
* @param {
|
|
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
|
|
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
|
|
2
|
-
import { Server } from
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
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 {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
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
|
+
}
|
package/dist/server-options.d.ts
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
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
|
|
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;
|
package/dist/server-socket.d.ts
CHANGED
|
@@ -1,29 +1,30 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { ServerSocketState } from
|
|
9
|
-
import {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
}
|
package/dist/server-socket.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import { Socket } from
|
|
2
|
-
import { ServerTransport } from
|
|
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 {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { AnyPacket, AnyResponse,
|
|
6
|
-
import { IncomingMessage } from
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
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?:
|
|
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
|
}
|
package/dist/server-transport.js
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import base64id from
|
|
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
|
|
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
|
|
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() ||
|
|
41
|
+
const strReason = reason?.toString() || SocketProtocolErrorStatuses[code];
|
|
37
42
|
super.onClose(code, reason);
|
|
38
|
-
this.socket.server.emit('socketClose', {
|
|
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
|
|
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
|
|
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(
|
|
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
|
|
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
|
|
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
|
|
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 (
|
|
117
|
-
data = await plugin.onPublishOut({ socket: this.socket, transport: this
|
|
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
|
|
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', {
|
|
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', {
|
|
225
|
-
this.socket.server.emit('socketAuthenticate', {
|
|
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') {
|