@source-repo/rpc 3.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/LICENSE +21 -0
- package/README.md +1208 -0
- package/dist/Logging/ILogger.d.ts +7 -0
- package/dist/Logging/ILogger.d.ts.map +1 -0
- package/dist/Logging/ILogger.js +2 -0
- package/dist/Logging/ILogger.js.map +1 -0
- package/dist/NodeRpcServer.d.ts +55 -0
- package/dist/NodeRpcServer.d.ts.map +1 -0
- package/dist/NodeRpcServer.js +46 -0
- package/dist/NodeRpcServer.js.map +1 -0
- package/dist/RPC/Auth.d.ts +98 -0
- package/dist/RPC/Auth.d.ts.map +1 -0
- package/dist/RPC/Auth.js +14 -0
- package/dist/RPC/Auth.js.map +1 -0
- package/dist/RPC/Codec.d.ts +24 -0
- package/dist/RPC/Codec.d.ts.map +1 -0
- package/dist/RPC/Codec.js +21 -0
- package/dist/RPC/Codec.js.map +1 -0
- package/dist/RPC/Compatibility.d.ts +39 -0
- package/dist/RPC/Compatibility.d.ts.map +1 -0
- package/dist/RPC/Compatibility.js +195 -0
- package/dist/RPC/Compatibility.js.map +1 -0
- package/dist/RPC/Core.d.ts +188 -0
- package/dist/RPC/Core.d.ts.map +1 -0
- package/dist/RPC/Core.js +354 -0
- package/dist/RPC/Core.js.map +1 -0
- package/dist/RPC/Expose.d.ts +90 -0
- package/dist/RPC/Expose.d.ts.map +1 -0
- package/dist/RPC/Expose.js +110 -0
- package/dist/RPC/Expose.js.map +1 -0
- package/dist/RPC/Idempotency.d.ts +90 -0
- package/dist/RPC/Idempotency.d.ts.map +1 -0
- package/dist/RPC/Idempotency.js +46 -0
- package/dist/RPC/Idempotency.js.map +1 -0
- package/dist/RPC/Introspection.d.ts +92 -0
- package/dist/RPC/Introspection.d.ts.map +1 -0
- package/dist/RPC/Introspection.js +188 -0
- package/dist/RPC/Introspection.js.map +1 -0
- package/dist/RPC/Introspection.types.json +1093 -0
- package/dist/RPC/Messages.d.ts +108 -0
- package/dist/RPC/Messages.d.ts.map +1 -0
- package/dist/RPC/Messages.js +30 -0
- package/dist/RPC/Messages.js.map +1 -0
- package/dist/RPC/Rpc.d.ts +51 -0
- package/dist/RPC/Rpc.d.ts.map +1 -0
- package/dist/RPC/Rpc.js +54 -0
- package/dist/RPC/Rpc.js.map +1 -0
- package/dist/RPC/RpcClientHandler.d.ts +129 -0
- package/dist/RPC/RpcClientHandler.d.ts.map +1 -0
- package/dist/RPC/RpcClientHandler.js +267 -0
- package/dist/RPC/RpcClientHandler.js.map +1 -0
- package/dist/RPC/RpcServerHandler.d.ts +226 -0
- package/dist/RPC/RpcServerHandler.d.ts.map +1 -0
- package/dist/RPC/RpcServerHandler.js +676 -0
- package/dist/RPC/RpcServerHandler.js.map +1 -0
- package/dist/RPC/Schema.d.ts +150 -0
- package/dist/RPC/Schema.d.ts.map +1 -0
- package/dist/RPC/Schema.js +198 -0
- package/dist/RPC/Schema.js.map +1 -0
- package/dist/RPC/Signing.d.ts +118 -0
- package/dist/RPC/Signing.d.ts.map +1 -0
- package/dist/RPC/Signing.js +171 -0
- package/dist/RPC/Signing.js.map +1 -0
- package/dist/RPC/Tokens.d.ts +49 -0
- package/dist/RPC/Tokens.d.ts.map +1 -0
- package/dist/RPC/Tokens.js +45 -0
- package/dist/RPC/Tokens.js.map +1 -0
- package/dist/RpcClient.d.ts +91 -0
- package/dist/RpcClient.d.ts.map +1 -0
- package/dist/RpcClient.js +145 -0
- package/dist/RpcClient.js.map +1 -0
- package/dist/RpcServer.d.ts +191 -0
- package/dist/RpcServer.d.ts.map +1 -0
- package/dist/RpcServer.js +293 -0
- package/dist/RpcServer.js.map +1 -0
- package/dist/Transports/Mqtt5Frame.d.ts +107 -0
- package/dist/Transports/Mqtt5Frame.d.ts.map +1 -0
- package/dist/Transports/Mqtt5Frame.js +162 -0
- package/dist/Transports/Mqtt5Frame.js.map +1 -0
- package/dist/Transports/MqttTransport.d.ts +279 -0
- package/dist/Transports/MqttTransport.d.ts.map +1 -0
- package/dist/Transports/MqttTransport.js +843 -0
- package/dist/Transports/MqttTransport.js.map +1 -0
- package/dist/Transports/Presence.d.ts +68 -0
- package/dist/Transports/Presence.d.ts.map +1 -0
- package/dist/Transports/Presence.js +21 -0
- package/dist/Transports/Presence.js.map +1 -0
- package/dist/Transports/SocketIoClientTransport.d.ts +89 -0
- package/dist/Transports/SocketIoClientTransport.d.ts.map +1 -0
- package/dist/Transports/SocketIoClientTransport.js +280 -0
- package/dist/Transports/SocketIoClientTransport.js.map +1 -0
- package/dist/Transports/SocketIoServerTransport.d.ts +135 -0
- package/dist/Transports/SocketIoServerTransport.d.ts.map +1 -0
- package/dist/Transports/SocketIoServerTransport.js +505 -0
- package/dist/Transports/SocketIoServerTransport.js.map +1 -0
- package/dist/Utilities/Converters.d.ts +22 -0
- package/dist/Utilities/Converters.d.ts.map +1 -0
- package/dist/Utilities/Converters.js +58 -0
- package/dist/Utilities/Converters.js.map +1 -0
- package/dist/Utilities/Filter.d.ts +7 -0
- package/dist/Utilities/Filter.d.ts.map +1 -0
- package/dist/Utilities/Filter.js +14 -0
- package/dist/Utilities/Filter.js.map +1 -0
- package/dist/Utilities/ReadableName.d.ts +38 -0
- package/dist/Utilities/ReadableName.d.ts.map +1 -0
- package/dist/Utilities/ReadableName.js +58 -0
- package/dist/Utilities/ReadableName.js.map +1 -0
- package/dist/Utilities/Switch.d.ts +21 -0
- package/dist/Utilities/Switch.d.ts.map +1 -0
- package/dist/Utilities/Switch.js +70 -0
- package/dist/Utilities/Switch.js.map +1 -0
- package/dist/Utilities/TryCatch.d.ts +11 -0
- package/dist/Utilities/TryCatch.d.ts.map +1 -0
- package/dist/Utilities/TryCatch.js +13 -0
- package/dist/Utilities/TryCatch.js.map +1 -0
- package/dist/index-web.d.ts +25 -0
- package/dist/index-web.d.ts.map +1 -0
- package/dist/index-web.js +28 -0
- package/dist/index-web.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MqttTransport.js","sourceRoot":"","sources":["../../src/Transports/MqttTransport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { RpcIdentity } from '../RPC/Auth.js';
|
|
2
|
+
/**
|
|
3
|
+
* Presence over socket.io.
|
|
4
|
+
*
|
|
5
|
+
* MQTT gets discovery for free: every peer publishes retained presence, so a newcomer subscribing
|
|
6
|
+
* to <prefix>/presence/+ is handed everyone already online. socket.io has no equivalent - a server
|
|
7
|
+
* learned a peer's name only from the header of a frame it sent, so a peer that only listens was
|
|
8
|
+
* never known to exist and could not be addressed at all.
|
|
9
|
+
*
|
|
10
|
+
* These are the two messages that close that gap, carried on their own socket.io event rather than
|
|
11
|
+
* inside the RPC framing, so nothing about the frame format changes and a peer that ignores them
|
|
12
|
+
* still works as before.
|
|
13
|
+
*/
|
|
14
|
+
/** Sent by a connecting peer to say who it is, and repeated whenever either field changes. */
|
|
15
|
+
export interface PresenceAnnouncement {
|
|
16
|
+
name: string;
|
|
17
|
+
/**
|
|
18
|
+
* Peers reachable *through* the announcer. This is what makes a network deeper than a star
|
|
19
|
+
* work: a cell controller serving its own panels and joining a plant bus advertises the panels,
|
|
20
|
+
* and the bus can then route to them without knowing they are one hop further away.
|
|
21
|
+
*
|
|
22
|
+
* Never includes anything learned from the link it is sent on - advertising a peer back the way
|
|
23
|
+
* it came is how two hubs end up each believing the other is the way to it.
|
|
24
|
+
*/
|
|
25
|
+
carrying?: string[];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Sent by the server: the full list when a peer announces itself, and a single change afterwards.
|
|
29
|
+
* The snapshot is what stands in for MQTT's retained state.
|
|
30
|
+
*/
|
|
31
|
+
export interface PresenceUpdate {
|
|
32
|
+
peers?: string[];
|
|
33
|
+
peer?: string;
|
|
34
|
+
state?: 'online' | 'offline';
|
|
35
|
+
}
|
|
36
|
+
export declare const PRESENCE_EVENT = "presence";
|
|
37
|
+
/**
|
|
38
|
+
* A peer name arrives from the network, so it is checked before anything is keyed by it. Length,
|
|
39
|
+
* because it ends up in a map, in logs and in the console's peer list. Control characters because
|
|
40
|
+
* NUL separates the parts of a subscription key - a name carrying one could forge a key belonging
|
|
41
|
+
* to another peer. Spaces because a name that cannot be read back out of a log is not a name.
|
|
42
|
+
*/
|
|
43
|
+
export declare const MAX_PEER_NAME_LENGTH = 128;
|
|
44
|
+
/**
|
|
45
|
+
* How many times a frame may be forwarded before it is dropped. Split horizon keeps the tables
|
|
46
|
+
* loop-free in a tree, but a mesh with a failed link can still form a cycle for as long as it takes
|
|
47
|
+
* the tables to settle, and a frame going round it forever is the one failure that takes a bus down.
|
|
48
|
+
*/
|
|
49
|
+
export declare const MAX_RELAY_HOPS = 8;
|
|
50
|
+
/** Peers one link says it can reach, bounded so a neighbour cannot flood this one's tables. */
|
|
51
|
+
export declare const MAX_CARRIED_PEERS = 1000;
|
|
52
|
+
export declare const isUsablePeerName: (name: unknown) => name is string;
|
|
53
|
+
/** What a relay decision gets to look at. One frame, about to be forwarded to another peer. */
|
|
54
|
+
export interface RelayContext {
|
|
55
|
+
/** The peer the frame came from, as its connection is known to this server. */
|
|
56
|
+
source: string;
|
|
57
|
+
/** The peer it is addressed to. */
|
|
58
|
+
target: string;
|
|
59
|
+
/** What the sending connection authenticated as, when the server authenticates. */
|
|
60
|
+
identity?: RpcIdentity;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Whether to forward. `true` relays for every peer, `false` for none, and a predicate decides per
|
|
64
|
+
* connection - which is usually what a hub wants, since "may this peer reach that one" is rarely
|
|
65
|
+
* the same answer for everybody.
|
|
66
|
+
*/
|
|
67
|
+
export type RelayRule = boolean | ((context: RelayContext) => boolean);
|
|
68
|
+
//# sourceMappingURL=Presence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Presence.d.ts","sourceRoot":"","sources":["../../src/Transports/Presence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C;;;;;;;;;;;GAWG;AAEH,8FAA8F;AAC9F,MAAM,WAAW,oBAAoB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC3B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;CAC/B;AAED,eAAO,MAAM,cAAc,aAAa,CAAA;AAExC;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,MAAM,CAAA;AAEvC;;;;GAIG;AACH,eAAO,MAAM,cAAc,IAAI,CAAA;AAE/B,+FAA+F;AAC/F,eAAO,MAAM,iBAAiB,OAAO,CAAA;AAErC,eAAO,MAAM,gBAAgB,SAAU,OAAO,KAAG,IAAI,IAAI,MAIkE,CAAA;AAE3H,+FAA+F;AAC/F,MAAM,WAAW,YAAY;IACzB,+EAA+E;IAC/E,MAAM,EAAE,MAAM,CAAA;IACd,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,mFAAmF;IACnF,QAAQ,CAAC,EAAE,WAAW,CAAA;CACzB;AAED;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export const PRESENCE_EVENT = 'presence';
|
|
2
|
+
/**
|
|
3
|
+
* A peer name arrives from the network, so it is checked before anything is keyed by it. Length,
|
|
4
|
+
* because it ends up in a map, in logs and in the console's peer list. Control characters because
|
|
5
|
+
* NUL separates the parts of a subscription key - a name carrying one could forge a key belonging
|
|
6
|
+
* to another peer. Spaces because a name that cannot be read back out of a log is not a name.
|
|
7
|
+
*/
|
|
8
|
+
export const MAX_PEER_NAME_LENGTH = 128;
|
|
9
|
+
/**
|
|
10
|
+
* How many times a frame may be forwarded before it is dropped. Split horizon keeps the tables
|
|
11
|
+
* loop-free in a tree, but a mesh with a failed link can still form a cycle for as long as it takes
|
|
12
|
+
* the tables to settle, and a frame going round it forever is the one failure that takes a bus down.
|
|
13
|
+
*/
|
|
14
|
+
export const MAX_RELAY_HOPS = 8;
|
|
15
|
+
/** Peers one link says it can reach, bounded so a neighbour cannot flood this one's tables. */
|
|
16
|
+
export const MAX_CARRIED_PEERS = 1000;
|
|
17
|
+
export const isUsablePeerName = (name) => typeof name === 'string' &&
|
|
18
|
+
name.length > 0 &&
|
|
19
|
+
name.length <= MAX_PEER_NAME_LENGTH &&
|
|
20
|
+
![...name].some((character) => character === ' ' || character.charCodeAt(0) < 0x20 || character.charCodeAt(0) === 0x7f);
|
|
21
|
+
//# sourceMappingURL=Presence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Presence.js","sourceRoot":"","sources":["../../src/Transports/Presence.ts"],"names":[],"mappings":"AAuCA,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAA;AAExC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAA;AAEvC;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAA;AAE/B,+FAA+F;AAC/F,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAA;AAErC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAa,EAAkB,EAAE,CAC9D,OAAO,IAAI,KAAK,QAAQ;IACxB,IAAI,CAAC,MAAM,GAAG,CAAC;IACf,IAAI,CAAC,MAAM,IAAI,oBAAoB;IACnC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAA"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { ManagerOptions, Socket, SocketOptions } from 'socket.io-client';
|
|
2
|
+
import { GenericModule, IGenericModule, Message } from '../RPC/Core.js';
|
|
3
|
+
import { FrameCodec } from '../RPC/Codec.js';
|
|
4
|
+
export declare class SocketIoClientTransport extends GenericModule<Message, unknown, Message, unknown> {
|
|
5
|
+
url?: string | undefined;
|
|
6
|
+
options: Partial<ManagerOptions & SocketOptions>;
|
|
7
|
+
/** Announce on connect. Off leaves this peer unlisted and unaddressable, as before. */
|
|
8
|
+
announcePresence: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Connect to an `https://` or `wss://` server without checking its certificate.
|
|
11
|
+
*
|
|
12
|
+
* This used to be the default, and it should never have been: it accepts any certificate at
|
|
13
|
+
* all, so anything able to answer on the server's address can read and rewrite everything
|
|
14
|
+
* sent over the link - which on this library's traffic means industrial commands. Left as a
|
|
15
|
+
* deliberate, named choice for a development server with a self-signed certificate. A plant
|
|
16
|
+
* with its own certificate authority should pass `ca` in the socket options instead, which
|
|
17
|
+
* keeps verification on.
|
|
18
|
+
*/
|
|
19
|
+
allowInsecureTls: boolean;
|
|
20
|
+
socket?: Socket;
|
|
21
|
+
connected: boolean;
|
|
22
|
+
/** Owned here rather than by a converter above, so the transport decides its own wire form. */
|
|
23
|
+
codec: FrameCodec;
|
|
24
|
+
/** Peers this transport has been told are online, so a reconnect can report only what changed. */
|
|
25
|
+
readonly knownPeers: Set<string>;
|
|
26
|
+
/** Peers reachable through whatever owns this transport, advertised to the far end. */
|
|
27
|
+
private carrying;
|
|
28
|
+
constructor(
|
|
29
|
+
/**
|
|
30
|
+
* The peer name this transport announces itself under, which is what makes it findable and
|
|
31
|
+
* addressable. Taking it here mirrors MqttTransport, where the name has always been needed
|
|
32
|
+
* to subscribe to the peer's own topic.
|
|
33
|
+
*/
|
|
34
|
+
name: string, url?: string | undefined, sources?: IGenericModule[], options?: Partial<ManagerOptions & SocketOptions>,
|
|
35
|
+
/** Announce on connect. Off leaves this peer unlisted and unaddressable, as before. */
|
|
36
|
+
announcePresence?: boolean,
|
|
37
|
+
/**
|
|
38
|
+
* Connect to an `https://` or `wss://` server without checking its certificate.
|
|
39
|
+
*
|
|
40
|
+
* This used to be the default, and it should never have been: it accepts any certificate at
|
|
41
|
+
* all, so anything able to answer on the server's address can read and rewrite everything
|
|
42
|
+
* sent over the link - which on this library's traffic means industrial commands. Left as a
|
|
43
|
+
* deliberate, named choice for a development server with a self-signed certificate. A plant
|
|
44
|
+
* with its own certificate authority should pass `ca` in the socket options instead, which
|
|
45
|
+
* keeps verification on.
|
|
46
|
+
*/
|
|
47
|
+
allowInsecureTls?: boolean);
|
|
48
|
+
close(): Promise<void>;
|
|
49
|
+
open(): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Said once per transport, and only where it means anything: the flag has no effect on a plain
|
|
52
|
+
* `http://` link, and warning about one would teach people to ignore the warning.
|
|
53
|
+
*/
|
|
54
|
+
private warnAboutInsecureTls;
|
|
55
|
+
/**
|
|
56
|
+
* A peer heard about through this link is routable through it - but only if nothing already
|
|
57
|
+
* reaches it. A server that serves a peer locally must not start sending its traffic up to the
|
|
58
|
+
* hub and back, and it would, since the hub lists that peer like any other.
|
|
59
|
+
*/
|
|
60
|
+
private registerIfUnrouted;
|
|
61
|
+
private announce;
|
|
62
|
+
/**
|
|
63
|
+
* Say which peers can be reached through this connection. Sent again whenever the set changes,
|
|
64
|
+
* which is how a peer appearing three hops away eventually becomes addressable from here.
|
|
65
|
+
*/
|
|
66
|
+
advertise(peers: string[]): void;
|
|
67
|
+
/** The server's view of who else is connected, turned into the same events MQTT emits. */
|
|
68
|
+
private onPresence;
|
|
69
|
+
/**
|
|
70
|
+
* Hand a frame to this peer's own handlers, or on to whichever transport reaches its addressee.
|
|
71
|
+
* The second case is what makes a server that is both a hub for its own peers and a member of a
|
|
72
|
+
* bus work: a call for one of its peers arrives down this link and has to be passed inwards,
|
|
73
|
+
* not answered here. Without it the frame reached the right process and was refused by it.
|
|
74
|
+
*/
|
|
75
|
+
private deliver;
|
|
76
|
+
/** Send over this link with a hop count, for a frame being passed along rather than originated. */
|
|
77
|
+
forward(message: Message, source: string, target: string, hops: number): void;
|
|
78
|
+
/**
|
|
79
|
+
* The link, or an error saying there is none.
|
|
80
|
+
*
|
|
81
|
+
* Sending went through `this.socket?.emit(...)`, which is a no-op once the transport is closed -
|
|
82
|
+
* so an outgoing call was discarded without a word and its caller waited out the full timeout
|
|
83
|
+
* for a frame that was never going to be sent.
|
|
84
|
+
*/
|
|
85
|
+
private requireSocket;
|
|
86
|
+
receive(message: Message, source: string, target: string): Promise<void>;
|
|
87
|
+
isTransport(): boolean;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=SocketIoClientTransport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SocketIoClientTransport.d.ts","sourceRoot":"","sources":["../../src/Transports/SocketIoClientTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,OAAO,EAAkB,MAAM,gBAAgB,CAAA;AACvF,OAAO,EAAE,UAAU,EAAgB,MAAM,iBAAiB,CAAA;AAG1D,qBAAa,uBAAwB,SAAQ,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAiB/E,GAAG,CAAC,EAAE,MAAM;IAGZ,OAAO,EAAE,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC;IACvD,uFAAuF;IAChF,gBAAgB;IACvB;;;;;;;;;OASG;IACI,gBAAgB;IAhC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,UAAQ;IACjB,+FAA+F;IAC/F,KAAK,EAAE,UAAU,CAAe;IAChC,kGAAkG;IAClG,QAAQ,CAAC,UAAU,cAAoB;IACvC,uFAAuF;IACvF,OAAO,CAAC,QAAQ,CAAe;IAE/B;IACI;;;;OAIG;IACH,IAAI,EAAE,MAAM,EACL,GAAG,CAAC,EAAE,MAAM,YAAA,EACnB,OAAO,CAAC,EAAE,cAAc,EAAE,EAEnB,OAAO,GAAE,OAAO,CAAC,cAAc,GAAG,aAAa,CAAM;IAC5D,uFAAuF;IAChF,gBAAgB,UAAO;IAC9B;;;;;;;;;OASG;IACI,gBAAgB,UAAQ,EASlC;IAEc,KAAK,kBAmCnB;IAEc,IAAI,kBA8DlB;IAED;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAQ5B;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,QAAQ;IAMhB;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAKxB;IAED,0FAA0F;IAC1F,OAAO,CAAC,UAAU;IAsBlB;;;;;OAKG;YACW,OAAO;IAqBrB,mGAAmG;IACnG,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAOrE;IAED;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;IAKN,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,iBAKtE;IAEQ,WAAW,YAEnB;CACJ"}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
import { io } from 'socket.io-client';
|
|
2
|
+
import { GenericModule, TransportEvent } from '../RPC/Core.js';
|
|
3
|
+
import { msgPackCodec } from '../RPC/Codec.js';
|
|
4
|
+
import { isUsablePeerName, MAX_RELAY_HOPS, PRESENCE_EVENT } from './Presence.js';
|
|
5
|
+
export class SocketIoClientTransport extends GenericModule {
|
|
6
|
+
url;
|
|
7
|
+
options;
|
|
8
|
+
announcePresence;
|
|
9
|
+
allowInsecureTls;
|
|
10
|
+
socket;
|
|
11
|
+
connected = false;
|
|
12
|
+
/** Owned here rather than by a converter above, so the transport decides its own wire form. */
|
|
13
|
+
codec = msgPackCodec;
|
|
14
|
+
/** Peers this transport has been told are online, so a reconnect can report only what changed. */
|
|
15
|
+
knownPeers = new Set();
|
|
16
|
+
/** Peers reachable through whatever owns this transport, advertised to the far end. */
|
|
17
|
+
carrying = [];
|
|
18
|
+
constructor(
|
|
19
|
+
/**
|
|
20
|
+
* The peer name this transport announces itself under, which is what makes it findable and
|
|
21
|
+
* addressable. Taking it here mirrors MqttTransport, where the name has always been needed
|
|
22
|
+
* to subscribe to the peer's own topic.
|
|
23
|
+
*/
|
|
24
|
+
name, url, sources,
|
|
25
|
+
// SocketOptions carries `auth`, which is how credentials reach an authenticating server.
|
|
26
|
+
options = {},
|
|
27
|
+
/** Announce on connect. Off leaves this peer unlisted and unaddressable, as before. */
|
|
28
|
+
announcePresence = true,
|
|
29
|
+
/**
|
|
30
|
+
* Connect to an `https://` or `wss://` server without checking its certificate.
|
|
31
|
+
*
|
|
32
|
+
* This used to be the default, and it should never have been: it accepts any certificate at
|
|
33
|
+
* all, so anything able to answer on the server's address can read and rewrite everything
|
|
34
|
+
* sent over the link - which on this library's traffic means industrial commands. Left as a
|
|
35
|
+
* deliberate, named choice for a development server with a self-signed certificate. A plant
|
|
36
|
+
* with its own certificate authority should pass `ca` in the socket options instead, which
|
|
37
|
+
* keeps verification on.
|
|
38
|
+
*/
|
|
39
|
+
allowInsecureTls = false) {
|
|
40
|
+
super(name, sources);
|
|
41
|
+
this.url = url;
|
|
42
|
+
this.options = options;
|
|
43
|
+
this.announcePresence = announcePresence;
|
|
44
|
+
this.allowInsecureTls = allowInsecureTls;
|
|
45
|
+
// Deferred by a microtask so whatever constructs this transport can finish wiring it
|
|
46
|
+
// before the link comes up. A resumed MQTT session is delivered its queued messages the
|
|
47
|
+
// instant it connects, and a frame arriving before the RPC handler is piped in would find
|
|
48
|
+
// no target and be dropped. A fresh session never exposes this, because nothing arrives
|
|
49
|
+
// that early.
|
|
50
|
+
queueMicrotask(() => void this.open().catch((e) => this.emit(TransportEvent.transportError, e)));
|
|
51
|
+
}
|
|
52
|
+
async close() {
|
|
53
|
+
const socket = this.socket;
|
|
54
|
+
this.socket = undefined;
|
|
55
|
+
this.connected = false;
|
|
56
|
+
this.readyFlag = false;
|
|
57
|
+
if (!socket)
|
|
58
|
+
return;
|
|
59
|
+
// Disarm reconnection before disconnecting. An explicit close is not a link failure, and
|
|
60
|
+
// a manager left free to reconnect keeps a timer armed that outlives the transport.
|
|
61
|
+
// reconnection(false) is the setter; assigning to opts.reconnection does not reach the
|
|
62
|
+
// manager's own flag and left the timer armed anyway.
|
|
63
|
+
socket.io.reconnection(false);
|
|
64
|
+
// Only disconnect() - close() is an alias for it, and calling both corrupted the manager's
|
|
65
|
+
// socket bookkeeping.
|
|
66
|
+
//
|
|
67
|
+
// Awaited, because disconnect() only *starts* the close: it sends a close packet and
|
|
68
|
+
// returns, leaving the engine's ping timer armed until the transport is actually torn down.
|
|
69
|
+
// Returning before that makes close() a promise that resolves while the connection it was
|
|
70
|
+
// supposed to close is still running.
|
|
71
|
+
const engine = socket.io.engine;
|
|
72
|
+
const closed = socket.connected && engine
|
|
73
|
+
? new Promise((resolve) => {
|
|
74
|
+
// Bounded: a close that never completes must not hang the caller forever.
|
|
75
|
+
const settle = setTimeout(resolve, 2000);
|
|
76
|
+
settle.unref?.();
|
|
77
|
+
engine.once('close', () => {
|
|
78
|
+
clearTimeout(settle);
|
|
79
|
+
resolve();
|
|
80
|
+
});
|
|
81
|
+
})
|
|
82
|
+
: Promise.resolve();
|
|
83
|
+
socket.disconnect();
|
|
84
|
+
await closed;
|
|
85
|
+
socket.removeAllListeners();
|
|
86
|
+
this.knownPeers.clear();
|
|
87
|
+
}
|
|
88
|
+
async open() {
|
|
89
|
+
// Idempotent: the constructor opens, and RpcClient.init() opens again. Without this guard
|
|
90
|
+
// every client ends up with a second, orphaned socket that stays connected forever.
|
|
91
|
+
if (this.socket)
|
|
92
|
+
return;
|
|
93
|
+
// Deliberately not awaited. The base hook is a no-op, and awaiting it yields before the
|
|
94
|
+
// socket below is assigned - which lets a second open() past the guard above and leaves the
|
|
95
|
+
// first socket orphaned and reconnecting forever, exactly what the guard is here to prevent.
|
|
96
|
+
void super.open();
|
|
97
|
+
const urlSocketIo = this.url;
|
|
98
|
+
// Certificate verification is Node's default and stays on. It was turned off here for
|
|
99
|
+
// every client, before the caller's own options were applied, so a Node peer accepted an
|
|
100
|
+
// impersonated TLS server unless whoever wrote it knew to turn verification back on.
|
|
101
|
+
if (this.allowInsecureTls) {
|
|
102
|
+
// Spread after, so a caller that asks for both gets the safer of the two.
|
|
103
|
+
this.options = { rejectUnauthorized: false, ...this.options };
|
|
104
|
+
this.warnAboutInsecureTls();
|
|
105
|
+
}
|
|
106
|
+
this.socket = urlSocketIo ? io(urlSocketIo, this.options) : io(this.options);
|
|
107
|
+
this.socket.on('message', async (messageArray) => {
|
|
108
|
+
try {
|
|
109
|
+
const [header, payload, reason] = this.extractHeader(new Uint8Array(messageArray));
|
|
110
|
+
if (!header) {
|
|
111
|
+
// Reported rather than dropped in silence, which showed up only as a timeout.
|
|
112
|
+
this.emit(TransportEvent.rejected, { source: 'unknown', reason: reason ?? 'no msgrpc header' });
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const message = this.codec.decode(payload);
|
|
116
|
+
await this.deliver(message, header.source, header.target, header.hops ?? 0);
|
|
117
|
+
}
|
|
118
|
+
catch (e) {
|
|
119
|
+
// A peer that sends a frame this codec cannot read must not take the client down.
|
|
120
|
+
this.emit(TransportEvent.rejected, { source: 'unknown', reason: `undecodable frame: ${String(e)}`, error: e });
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
this.socket.on(PRESENCE_EVENT, (update) => {
|
|
124
|
+
// socket.io emits synchronously from its parser, so a listener that throws unwinds into
|
|
125
|
+
// the engine rather than anywhere that could report it.
|
|
126
|
+
try {
|
|
127
|
+
this.onPresence(update);
|
|
128
|
+
}
|
|
129
|
+
catch (e) {
|
|
130
|
+
this.emit(TransportEvent.rejected, { source: 'unknown', reason: `bad presence update: ${String(e)}`, error: e });
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
// socket.io emits 'connect' on reconnects too, so this fires on every transition.
|
|
134
|
+
this.socket.on('connect', () => {
|
|
135
|
+
this.connected = true;
|
|
136
|
+
this.readyFlag = true;
|
|
137
|
+
// Announced on every connect, not only the first: the server forgets a peer when its
|
|
138
|
+
// socket drops, so a reconnected peer that stayed silent would be unaddressable.
|
|
139
|
+
if (this.announcePresence)
|
|
140
|
+
this.announce();
|
|
141
|
+
this.emit(TransportEvent.connected);
|
|
142
|
+
});
|
|
143
|
+
this.socket.on('disconnect', (reason) => {
|
|
144
|
+
this.connected = false;
|
|
145
|
+
this.readyFlag = false;
|
|
146
|
+
// Nothing is reachable through a link that is down, and the server will send a fresh
|
|
147
|
+
// snapshot when it comes back. Reported so a console can grey the whole list out.
|
|
148
|
+
for (const peer of [...this.knownPeers]) {
|
|
149
|
+
this.knownPeers.delete(peer);
|
|
150
|
+
this.emit(TransportEvent.peerGone, peer);
|
|
151
|
+
}
|
|
152
|
+
this.emit(TransportEvent.disconnected, reason);
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Said once per transport, and only where it means anything: the flag has no effect on a plain
|
|
157
|
+
* `http://` link, and warning about one would teach people to ignore the warning.
|
|
158
|
+
*/
|
|
159
|
+
warnAboutInsecureTls() {
|
|
160
|
+
if (!this.url || !/^(https|wss):/i.test(this.url))
|
|
161
|
+
return;
|
|
162
|
+
console.warn(`source-rpc: '${this.name}' is connecting to ${this.url} with allowInsecureTls, so the server's certificate is not checked. ` +
|
|
163
|
+
'Anything able to answer on that address can read and rewrite this link. Use it for a development server, not a plant.');
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* A peer heard about through this link is routable through it - but only if nothing already
|
|
167
|
+
* reaches it. A server that serves a peer locally must not start sending its traffic up to the
|
|
168
|
+
* hub and back, and it would, since the hub lists that peer like any other.
|
|
169
|
+
*/
|
|
170
|
+
registerIfUnrouted(peer) {
|
|
171
|
+
if (this.peerRegistry.get(peer))
|
|
172
|
+
return;
|
|
173
|
+
this.setKnownSource(peer);
|
|
174
|
+
}
|
|
175
|
+
announce() {
|
|
176
|
+
const announcement = { name: this.name };
|
|
177
|
+
if (this.carrying.length)
|
|
178
|
+
announcement.carrying = this.carrying;
|
|
179
|
+
this.socket?.emit(PRESENCE_EVENT, announcement);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Say which peers can be reached through this connection. Sent again whenever the set changes,
|
|
183
|
+
* which is how a peer appearing three hops away eventually becomes addressable from here.
|
|
184
|
+
*/
|
|
185
|
+
advertise(peers) {
|
|
186
|
+
const next = [...peers].sort();
|
|
187
|
+
if (next.length === this.carrying.length && next.every((peer, index) => peer === this.carrying[index]))
|
|
188
|
+
return;
|
|
189
|
+
this.carrying = next;
|
|
190
|
+
if (this.connected && this.announcePresence)
|
|
191
|
+
this.announce();
|
|
192
|
+
}
|
|
193
|
+
/** The server's view of who else is connected, turned into the same events MQTT emits. */
|
|
194
|
+
onPresence(update) {
|
|
195
|
+
if (Array.isArray(update.peers)) {
|
|
196
|
+
for (const peer of update.peers) {
|
|
197
|
+
if (!isUsablePeerName(peer) || peer === this.name || this.knownPeers.has(peer))
|
|
198
|
+
continue;
|
|
199
|
+
this.knownPeers.add(peer);
|
|
200
|
+
this.registerIfUnrouted(peer);
|
|
201
|
+
this.emit(TransportEvent.peerOnline, peer);
|
|
202
|
+
}
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
if (!isUsablePeerName(update.peer) || update.peer === this.name)
|
|
206
|
+
return;
|
|
207
|
+
if (update.state === 'offline') {
|
|
208
|
+
if (!this.knownPeers.delete(update.peer))
|
|
209
|
+
return;
|
|
210
|
+
this.emit(TransportEvent.peerGone, update.peer);
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
if (this.knownPeers.has(update.peer))
|
|
214
|
+
return;
|
|
215
|
+
this.knownPeers.add(update.peer);
|
|
216
|
+
this.registerIfUnrouted(update.peer);
|
|
217
|
+
this.emit(TransportEvent.peerOnline, update.peer);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Hand a frame to this peer's own handlers, or on to whichever transport reaches its addressee.
|
|
222
|
+
* The second case is what makes a server that is both a hub for its own peers and a member of a
|
|
223
|
+
* bus work: a call for one of its peers arrives down this link and has to be passed inwards,
|
|
224
|
+
* not answered here. Without it the frame reached the right process and was refused by it.
|
|
225
|
+
*/
|
|
226
|
+
async deliver(message, source, target, hops) {
|
|
227
|
+
if (target !== this.name) {
|
|
228
|
+
const carrier = this.peerRegistry.get(target);
|
|
229
|
+
if (carrier && carrier !== this && carrier.isTransport()) {
|
|
230
|
+
if (hops + 1 > MAX_RELAY_HOPS) {
|
|
231
|
+
this.emit(TransportEvent.unroutable, { source, target, reason: `over ${MAX_RELAY_HOPS} relays` });
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
const relay = carrier;
|
|
235
|
+
if (relay.forward)
|
|
236
|
+
relay.forward(message, source, target, hops + 1);
|
|
237
|
+
else
|
|
238
|
+
await carrier.receive(message, source, target);
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
if (this.targetExists(target)) {
|
|
243
|
+
await this.send(message, source, target);
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
this.emit(TransportEvent.unroutable, { source, target });
|
|
247
|
+
}
|
|
248
|
+
/** Send over this link with a hop count, for a frame being passed along rather than originated. */
|
|
249
|
+
forward(message, source, target, hops) {
|
|
250
|
+
try {
|
|
251
|
+
this.requireSocket().emit('message', this.frameMessage(this.buildHeader(source, target, { hops }), this.codec.encode(message)));
|
|
252
|
+
}
|
|
253
|
+
catch (e) {
|
|
254
|
+
// Relaying is done for someone else, so there is no caller here to reject.
|
|
255
|
+
this.emit(TransportEvent.unroutable, { source, target, reason: `cannot forward: ${String(e)}`, error: e });
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* The link, or an error saying there is none.
|
|
260
|
+
*
|
|
261
|
+
* Sending went through `this.socket?.emit(...)`, which is a no-op once the transport is closed -
|
|
262
|
+
* so an outgoing call was discarded without a word and its caller waited out the full timeout
|
|
263
|
+
* for a frame that was never going to be sent.
|
|
264
|
+
*/
|
|
265
|
+
requireSocket() {
|
|
266
|
+
if (!this.socket)
|
|
267
|
+
throw new Error(`SocketIoClientTransport '${this.name}': not connected to ${this.url ?? 'the default url'}`);
|
|
268
|
+
return this.socket;
|
|
269
|
+
}
|
|
270
|
+
async receive(message, source, target) {
|
|
271
|
+
// No blind sleep while disconnected: socket.io already buffers outgoing frames and flushes
|
|
272
|
+
// them on reconnect, so sleeping only delayed every send during a blip without helping.
|
|
273
|
+
// If the link never comes back the call fails on its own timeout.
|
|
274
|
+
this.requireSocket().emit('message', this.frameMessage(this.buildHeader(source, target), this.codec.encode(message)));
|
|
275
|
+
}
|
|
276
|
+
isTransport() {
|
|
277
|
+
return true;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=SocketIoClientTransport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SocketIoClientTransport.js","sourceRoot":"","sources":["../../src/Transports/SocketIoClientTransport.ts"],"names":[],"mappings":"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"}
|