@spider-mesh/ws 1.0.133 → 1.0.136
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.
|
@@ -4,7 +4,10 @@ export declare class SpiderMeshWebsocketTransporter implements SpiderMeshTranspo
|
|
|
4
4
|
#private;
|
|
5
5
|
readonly transporter_id: string;
|
|
6
6
|
$nodes_status: Subject<TcpNodeStatus>;
|
|
7
|
-
constructor(
|
|
7
|
+
constructor(options?: Partial<{
|
|
8
|
+
urls: string;
|
|
9
|
+
port: number;
|
|
10
|
+
}>);
|
|
8
11
|
destroy(): void;
|
|
9
12
|
listen<T extends Encodable, Metadata extends SpiderMeshTransporterEventMetadata>(topic: string): import("rxjs").Observable<SpiderMeshTransporterEvent<T, Metadata>>;
|
|
10
13
|
publish<T extends Encodable, Metadata extends SpiderMeshTransporterEventMetadata>(payload: PublishMetadata<T, Metadata>): Promise<void>;
|
|
@@ -1,32 +1,28 @@
|
|
|
1
|
-
import { SpiderMesh, Encoder } from '@spider-mesh/core';
|
|
1
|
+
import { SpiderMesh, Encoder, randomUUID } from '@spider-mesh/core';
|
|
2
2
|
import { timer, fromEvent, firstValueFrom, BehaviorSubject, Subject, from, lastValueFrom, of, merge } from 'rxjs';
|
|
3
3
|
import { finalize, map, filter, tap, retry, mergeMap, mergeAll, takeUntil, throttleTime, } from 'rxjs/operators';
|
|
4
|
-
import { v4 } from 'uuid';
|
|
5
4
|
import { WebSocket, WebSocketServer } from 'ws';
|
|
6
5
|
const SPIDER_MESH_WEBSOCKET_SERVERS = process.env.SPIDER_MESH_WEBSOCKET_SERVERS;
|
|
7
6
|
const SPIDER_MESH_WEBSOCKET_SERVER_PORT = process.env.SPIDER_MESH_WEBSOCKET_SERVER_PORT;
|
|
8
7
|
export class SpiderMeshWebsocketTransporter {
|
|
9
|
-
transporter_id =
|
|
8
|
+
transporter_id = randomUUID();
|
|
10
9
|
$nodes_status = new Subject;
|
|
11
10
|
#listening_topics = new Map();
|
|
12
11
|
#remote_topics = new Map();
|
|
13
12
|
#$is_stoped = new BehaviorSubject(false);
|
|
14
13
|
#nodes = new Map;
|
|
15
14
|
#$version = new BehaviorSubject(1);
|
|
16
|
-
constructor() {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
this.#start_client();
|
|
21
|
-
this.#start_server();
|
|
15
|
+
constructor(options = {}) {
|
|
16
|
+
this.#start_client(options.urls || SPIDER_MESH_WEBSOCKET_SERVERS);
|
|
17
|
+
this.#start_server(options.port || SPIDER_MESH_WEBSOCKET_SERVER_PORT);
|
|
22
18
|
this.#sync_peers();
|
|
23
19
|
SpiderMesh.$transporters.next(this);
|
|
24
20
|
}
|
|
25
21
|
destroy() {
|
|
26
22
|
this.#$is_stoped.next(true);
|
|
27
23
|
}
|
|
28
|
-
async #start_client() {
|
|
29
|
-
|
|
24
|
+
async #start_client(urls) {
|
|
25
|
+
urls && of(urls).pipe(takeUntil(this.#$is_stoped.pipe(filter(stop => stop))), map(urls => urls.split(',')), mergeAll(), map(url => url.trim()), mergeMap(url => of(1).pipe(mergeMap(async () => {
|
|
30
26
|
const ws = new WebSocket(url);
|
|
31
27
|
const error = await firstValueFrom(merge(fromEvent(ws, 'error').pipe(map(e => e)), fromEvent(ws, 'open').pipe(map(() => null))));
|
|
32
28
|
if (error) {
|
|
@@ -42,11 +38,10 @@ export class SpiderMeshWebsocketTransporter {
|
|
|
42
38
|
throw error2;
|
|
43
39
|
}), retry()))).subscribe();
|
|
44
40
|
}
|
|
45
|
-
async #start_server() {
|
|
46
|
-
if (!
|
|
41
|
+
async #start_server(port) {
|
|
42
|
+
if (!port)
|
|
47
43
|
return;
|
|
48
|
-
const
|
|
49
|
-
const wss = new WebSocketServer({ port });
|
|
44
|
+
const wss = new WebSocketServer({ port: Number(SPIDER_MESH_WEBSOCKET_SERVER_PORT) });
|
|
50
45
|
wss.on('connection', (connetion) => {
|
|
51
46
|
connetion.addEventListener('message', e => this.#on_message(connetion, e));
|
|
52
47
|
});
|
|
@@ -90,7 +85,7 @@ export class SpiderMeshWebsocketTransporter {
|
|
|
90
85
|
#say_hello(ws) {
|
|
91
86
|
const hello = {
|
|
92
87
|
created_at: Date.now(),
|
|
93
|
-
id:
|
|
88
|
+
id: randomUUID(),
|
|
94
89
|
metadata: {},
|
|
95
90
|
payload: {
|
|
96
91
|
listening: ['#hello', ...this.#listening_topics.keys()],
|
|
@@ -105,7 +100,7 @@ export class SpiderMeshWebsocketTransporter {
|
|
|
105
100
|
ws.send(Encoder.encode(hello));
|
|
106
101
|
}
|
|
107
102
|
listen(topic) {
|
|
108
|
-
const id =
|
|
103
|
+
const id = randomUUID();
|
|
109
104
|
const subject = new Subject();
|
|
110
105
|
const map = this.#listening_topics.get(topic) || new Map();
|
|
111
106
|
map.set(id, subject);
|
|
@@ -116,7 +111,7 @@ export class SpiderMeshWebsocketTransporter {
|
|
|
116
111
|
async publish(payload) {
|
|
117
112
|
const p = {
|
|
118
113
|
created_at: Date.now(),
|
|
119
|
-
id:
|
|
114
|
+
id: randomUUID(),
|
|
120
115
|
metadata: payload.metadata,
|
|
121
116
|
payload: payload.payload,
|
|
122
117
|
received_at: Date.now(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpiderMeshWebsocketTransporter.js","sourceRoot":"","sources":["../../src/SpiderMeshWebsocketTransporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoI,UAAU,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"SpiderMeshWebsocketTransporter.js","sourceRoot":"","sources":["../../src/SpiderMeshWebsocketTransporter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spider-mesh/ws",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.136",
|
|
5
5
|
"description": "Lightweight microservice framework for typescript, auto discovery, load-balancing, fault-torrent, multiple transporters",
|
|
6
6
|
"main": "./build/src/index.js",
|
|
7
7
|
"types": "./build/src/index.d.ts",
|
|
@@ -35,10 +35,13 @@
|
|
|
35
35
|
"author": "Duong Van Ba",
|
|
36
36
|
"license": "ISC",
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@spider-mesh/core": "^1.0.
|
|
38
|
+
"@spider-mesh/core": "^1.0.136",
|
|
39
39
|
"frame-stream": "^4.0.0",
|
|
40
40
|
"rxjs": "^7.8.1",
|
|
41
41
|
"uuid": "^10.0.0",
|
|
42
42
|
"ws": "^8.18.0"
|
|
43
|
+
},
|
|
44
|
+
"browser": {
|
|
45
|
+
"crypto": false
|
|
43
46
|
}
|
|
44
47
|
}
|