@spider-mesh/core 1.0.21 → 1.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/build/index.d.ts +0 -1
  2. package/build/index.js +0 -1
  3. package/build/index.js.map +1 -1
  4. package/build/src/BuiltinTransporter.d.ts +10 -12
  5. package/build/src/BuiltinTransporter.js +104 -249
  6. package/build/src/BuiltinTransporter.js.map +1 -1
  7. package/build/src/RemoteService.d.ts +11 -6
  8. package/build/src/RxjsTcpServer.d.ts +9 -0
  9. package/build/src/RxjsTcpServer.js +31 -0
  10. package/build/src/RxjsTcpServer.js.map +1 -0
  11. package/build/src/RxjsTcpSocket.d.ts +14 -0
  12. package/build/src/RxjsTcpSocket.js +83 -0
  13. package/build/src/RxjsTcpSocket.js.map +1 -0
  14. package/build/src/RxjsUdpBroadcaster.d.ts +20 -0
  15. package/build/src/RxjsUdpBroadcaster.js +60 -0
  16. package/build/src/RxjsUdpBroadcaster.js.map +1 -0
  17. package/build/src/SpiderMesh.d.ts +31 -16
  18. package/build/src/SpiderMesh.js +226 -167
  19. package/build/src/SpiderMesh.js.map +1 -1
  20. package/build/src/SpiderMeshNode.d.ts +4 -5
  21. package/build/src/SpiderMeshTransporter.d.ts +19 -8
  22. package/build/src/decorators/Microservice.d.ts +6 -2
  23. package/build/src/decorators/Microservice.js +12 -12
  24. package/build/src/decorators/Microservice.js.map +1 -1
  25. package/build/src/decorators/SubscribeEvent.d.ts +6 -0
  26. package/build/src/decorators/SubscribeEvent.js +14 -0
  27. package/build/src/decorators/SubscribeEvent.js.map +1 -0
  28. package/build/src/helpers/sleep.d.ts +1 -0
  29. package/build/src/helpers/sleep.js +2 -0
  30. package/build/src/helpers/sleep.js.map +1 -0
  31. package/build/src/helpers/waitFirstEvent.d.ts +3 -0
  32. package/build/src/helpers/waitFirstEvent.js +5 -0
  33. package/build/src/helpers/waitFirstEvent.js.map +1 -0
  34. package/package.json +3 -2
  35. package/yarn.lock +197 -0
  36. package/build/src/decorators/createMicroserviceEvent.d.ts +0 -17
  37. package/build/src/decorators/createMicroserviceEvent.js +0 -56
  38. package/build/src/decorators/createMicroserviceEvent.js.map +0 -1
@@ -1,24 +1,30 @@
1
1
  import { randomUUID } from 'crypto';
2
2
  import { get } from 'http';
3
- import { readFileSync, existsSync } from 'fs';
4
3
  import { networkInterfaces } from 'os';
5
4
  import { DeepProxy } from './DeepProxy';
6
5
  import { RPCOptionsList } from './RPCOptions';
7
6
  import os from 'os';
8
- import { BuiltinTransporter } from './BuiltinTransporter';
9
- import { listEventSubscribers } from './decorators/createMicroserviceEvent';
7
+ import { listEventSubscribers } from './decorators/SubscribeEvent';
10
8
  import { listReadyHookMethods } from './decorators/OnMicroserviceReady';
11
- class SpiderMesh {
12
- #package_json = existsSync(`package.json`) ? JSON.parse(readFileSync(`package.json`, 'utf8')) || {} : {};
13
- node_id = randomUUID();
14
- namespace = process.env.NAMESPACE || this.#package_json.name || 'default';
15
- #local_services = new Map();
16
- #remote_services = new Map;
17
- #nodes = new Map;
18
- #transporters = new Map;
9
+ import { BehaviorSubject, Subject, filter, from, mergeMap } from 'rxjs';
10
+ import { readFileSync } from 'fs';
11
+ import { serviceInstanceList } from './decorators/Microservice';
12
+ import { sleep } from './helpers/sleep';
13
+ export class SpiderMeshConfig {
14
+ namespace;
15
+ node_id;
16
+ transporter;
17
+ }
18
+ const PACKAGE_JSON = JSON.parse(readFileSync(`package.json`, 'utf8')) || {};
19
+ export class SpiderMesh {
20
+ transporter;
21
+ #$isolated = new BehaviorSubject(false);
22
+ #local_rpc_services = new Map();
23
+ #remote_nodes = new Map;
24
+ #remote_rpc_services = new Map;
19
25
  #rpc_queue = new Map;
20
26
  #public_ip = new Promise(async (s) => {
21
- while (true) {
27
+ for (let i = 1; i <= 5; i++) {
22
28
  const ip = await new Promise(s => {
23
29
  get('http://api.ipify.org', (res) => {
24
30
  res.setEncoding('utf8');
@@ -29,29 +35,20 @@ class SpiderMesh {
29
35
  });
30
36
  if (ip && ip != 'Bad Gateway')
31
37
  return s(ip);
32
- await new Promise(s => setTimeout(s, 1000));
38
+ await new Promise(s => setTimeout(s, 100));
33
39
  }
40
+ return s(null);
34
41
  });
35
- static #LinkingServices = new Map();
36
- #services_status_monitor = new Map();
37
- static spider_mesh_instances = [];
38
- constructor() { }
39
- static async init(...transporters) {
40
- const ms = new this();
41
- transporters.length == 0 && transporters.push(BuiltinTransporter);
42
- for (const transporter of transporters) {
43
- await ms.add_transporter(transporter);
44
- }
45
- this.spider_mesh_instances.push(ms);
46
- return ms;
42
+ $nodes_monitor = new Subject();
43
+ constructor(transporter) {
44
+ this.transporter = transporter;
47
45
  }
48
- async $metadata() {
46
+ async $metadata(revalidate_on_join) {
49
47
  const ips = Object.values(networkInterfaces()).map(itf => itf?.map(ip => ip.address) || []).flat(2);
50
- const { name, version } = this.#package_json;
51
48
  const metadata = {
52
- id: this.node_id,
53
- name,
54
- version,
49
+ id: this.transporter.node_id,
50
+ name: PACKAGE_JSON?.name || 'UNKNOWN',
51
+ version: PACKAGE_JSON?.version || '1.0.0',
55
52
  path: process.cwd(),
56
53
  uptime: process.uptime(),
57
54
  hostname: os.hostname(),
@@ -62,99 +59,147 @@ class SpiderMesh {
62
59
  last_online: Date.now(),
63
60
  active: true,
64
61
  offline: false,
65
- services: [...this.#local_services.keys()],
66
- namespace: this.namespace,
67
- linked: [...this.#nodes.keys()],
62
+ services: [...this.#local_rpc_services.keys()],
63
+ namespace: this.transporter.namespace,
64
+ linked: [...this.#remote_nodes.keys()],
65
+ isolated_nodes: [...this.#remote_nodes.values()].filter(node => node.isolate).map(node => node.id),
66
+ isolate: this.#$isolated.value,
67
+ revalidate_on_join
68
68
  };
69
- process.env.SPIDERMESH_DEBUG && console.log({ me: metadata });
70
69
  return metadata;
71
70
  }
72
- async add_transporter(factory) {
73
- const transporter = new factory(this.node_id, this.namespace);
74
- this.#transporters.set(factory.name, transporter);
75
- transporter.on_node_offline(id => {
76
- const node = this.#nodes.get(id);
77
- if (!node)
78
- return;
79
- process.env.SPIDERMESH_DEBUG && console.log(`[${new Date().toLocaleString()}] Node ${id} offline`);
80
- node.transporters?.delete(factory.name);
81
- node.transporters?.size == 0 && this.#nodes.delete(id);
82
- node.services.map(service => {
83
- this.#services_status_monitor.get(service)?.forEach(fn => fn(false, node));
84
- });
85
- this.#remote_services.forEach(service => {
86
- service.nodes = service.nodes?.filter(node => node.id != id);
87
- });
88
- [...this.#rpc_queue.entries()].forEach(([rid, { reject }]) => {
89
- reject(new Error('SERVICE_OFFLINE'));
90
- this.#rpc_queue.delete(rid);
91
- });
71
+ async $update_isolate_mode(active) {
72
+ this.#$isolated.next(active);
73
+ const me = await this.$metadata();
74
+ await this.transporter.publish({
75
+ event: '#join',
76
+ data: me
92
77
  });
93
- transporter.listen(this.node_id, async (sender_node_id, msg) => {
94
- if (msg.type == 'rpc') {
95
- const instance = this.#local_services.get(msg.service);
96
- const args = msg.args.map(arg => arg != '__FUNCTION__' ? arg : (...args) => {
97
- sender_node_id && transporter.publish(sender_node_id, sender_node_id, { id: msg.id, type: 'callback', args });
78
+ return me;
79
+ }
80
+ async #node_event_handler({ data: msg, sender_node_id }) {
81
+ if (msg.type == 'rpc') {
82
+ if (msg.service == 'SpiderMesh' && !msg.method.startsWith('$')) {
83
+ sender_node_id && this.transporter.publish({
84
+ data: {
85
+ id: msg.id,
86
+ type: 'error',
87
+ error: 'NOT_ALLOW'
88
+ },
89
+ event: sender_node_id,
90
+ node_id: sender_node_id
98
91
  });
99
- try {
100
- const response = await instance?.[msg.method]?.(...args);
101
- sender_node_id && transporter.publish(sender_node_id, sender_node_id, { id: msg.id, type: 'response', response });
102
- }
103
- catch (error) {
104
- const { code, message } = error;
105
- sender_node_id && transporter.publish(sender_node_id, sender_node_id, { id: msg.id, type: 'error', error: code || message || error });
106
- }
107
- return;
108
- }
109
- const request = this.#rpc_queue.get(msg.id);
110
- if (!request)
111
- return;
112
- if (msg.type == 'callback') {
113
- request.args?.[msg.index]?.();
114
92
  return;
115
93
  }
116
- if (msg.type == 'ack') {
117
- request.last_ping = Date.now();
118
- return;
119
- }
120
- if (msg.type == 'error') {
121
- request.reject(msg.error);
122
- this.#rpc_queue.delete(msg.id);
123
- return;
94
+ const instance = msg.service == 'SpiderMesh' ? this : this.#local_rpc_services.get(msg.service);
95
+ if (!instance)
96
+ return this.transporter.publish({
97
+ data: {
98
+ id: msg.id,
99
+ type: 'error',
100
+ error: 'SERVICE_NOT_FOUND'
101
+ },
102
+ event: sender_node_id,
103
+ node_id: sender_node_id
104
+ });
105
+ const args = msg.args.map(arg => arg != '__FUNCTION__' ? arg : (...args) => {
106
+ sender_node_id && this.transporter.publish({
107
+ event: sender_node_id,
108
+ node_id: sender_node_id,
109
+ data: { id: msg.id, type: 'callback', args }
110
+ });
111
+ });
112
+ try {
113
+ const response = await instance?.[msg.method]?.(...args);
114
+ sender_node_id && this.transporter.publish({
115
+ event: sender_node_id,
116
+ node_id: sender_node_id,
117
+ data: { id: msg.id, type: 'response', response }
118
+ });
124
119
  }
125
- if (msg.type == 'response') {
126
- request.success(msg.response);
127
- this.#rpc_queue.delete(msg.id);
128
- return;
120
+ catch (error) {
121
+ const { code, message } = error;
122
+ sender_node_id && this.transporter.publish({
123
+ event: sender_node_id,
124
+ node_id: sender_node_id,
125
+ data: { id: msg.id, type: 'error', error: code || message || error }
126
+ });
129
127
  }
128
+ return;
129
+ }
130
+ const request = this.#rpc_queue.get(msg.id);
131
+ if (!request)
132
+ return;
133
+ if (msg.type == 'callback') {
134
+ request.args?.[msg.index]?.();
135
+ return;
136
+ }
137
+ if (msg.type == 'ack') {
138
+ request.last_ping = Date.now();
139
+ return;
140
+ }
141
+ if (msg.type == 'error') {
142
+ request.reject(msg.error);
143
+ this.#rpc_queue.delete(msg.id);
144
+ return;
145
+ }
146
+ if (msg.type == 'response') {
147
+ request.success(msg.response);
148
+ this.#rpc_queue.delete(msg.id);
149
+ return;
150
+ }
151
+ }
152
+ #started = false;
153
+ async start() {
154
+ if (this.#started)
155
+ return;
156
+ this.#started = true;
157
+ // Init transporter
158
+ await this.transporter.start();
159
+ // Listen RPC
160
+ this.listen(this.transporter.node_id).subscribe(evt => this.#node_event_handler(evt));
161
+ // Listen new node
162
+ this.listen('#join').subscribe(({ data }) => {
163
+ this.#on_node_discovered(data);
130
164
  });
131
- transporter.listen('#join', (sender_node_id, node) => this.#on_node_discovered(node, transporter));
132
- transporter.on_node_online(async (node_id) => {
133
- if (!this.#nodes.has(node_id)) {
134
- transporter.publish('#join', node_id, await this.$metadata());
135
- }
165
+ // Manage nodes
166
+ this.transporter.$nodes_status.subscribe(async ({ node_id, online }) => {
167
+ !online && this.#on_node_offline(node_id);
168
+ online && this.transporter.publish({
169
+ event: '#join',
170
+ data: await this.$metadata(),
171
+ node_id
172
+ });
136
173
  });
174
+ serviceInstanceList.pipe(filter(service => service.namespaces.includes(this.transporter.namespace || 'default')), mergeMap(async ({ instance }) => {
175
+ await this.#active_local_service(instance);
176
+ await this.#active_ready_hooks(instance);
177
+ })).subscribe();
137
178
  }
138
- async #on_node_discovered(node, transporter) {
139
- if (node.id == this.node_id)
179
+ async #on_node_discovered(node) {
180
+ if (node.id == this.transporter.node_id)
181
+ return;
182
+ if (this.#$isolated.value)
140
183
  return;
141
- process.env.SPIDERMESH_DEBUG && console.log(`[${new Date().toLocaleString()}] New node `, node);
142
- const discovered = this.#nodes.get(node.id);
184
+ const peer_updated = node.linked.includes(this.transporter.node_id);
185
+ process.env.SPIDERMESH_DEBUG && console.log(`[${new Date().toLocaleString()}] New node `, node, { peer_updated });
186
+ const discovered = this.#remote_nodes.get(node.id);
143
187
  const new_node = {
144
- ...discovered,
188
+ ...discovered || {},
145
189
  ...node,
146
- transporters: discovered?.transporters || new Map(),
147
190
  offline: false
148
191
  };
149
- this.#nodes.set(node.id, new_node);
150
- const transporter_name = Object.getPrototypeOf(transporter).constructor.name;
151
- this.#nodes.get(node.id)?.transporters?.set(transporter_name, transporter);
152
- node.services.forEach(service => {
153
- SpiderMesh.#LinkingServices.set(service, { online: true });
154
- this.#services_status_monitor.get(service)?.forEach(fn => fn(true, new_node));
155
- const $service = this.#remote_services.get(service);
192
+ this.#remote_nodes.set(node.id, new_node);
193
+ this.$nodes_monitor.next({ node, online: true });
194
+ (!peer_updated || node.revalidate_on_join) && await this.transporter.publish({
195
+ event: '#join',
196
+ data: await this.$metadata(!peer_updated),
197
+ node_id: node.id
198
+ });
199
+ peer_updated && node.services.forEach(service => {
200
+ const $service = this.#remote_rpc_services.get(service);
156
201
  if (!$service) {
157
- this.#remote_services.set(service, {
202
+ this.#remote_rpc_services.set(service, {
158
203
  last_call_index: -1,
159
204
  nodes: [node]
160
205
  });
@@ -168,28 +213,36 @@ class SpiderMesh {
168
213
  $service.nodes = [new_node];
169
214
  }
170
215
  });
171
- !node.linked.includes(this.node_id) && await transporter.publish('#join', null, await this.$metadata());
172
216
  }
173
- async #caculate_request_node_id(service, options) {
174
- const $ = this.#remote_services.get(service);
175
- if (!$ || $.nodes.length == 0)
176
- return null;
177
- if (options.ip)
178
- return [...this.#nodes.values()].find(node => node.public_ip == options.ip || node.ip_addresses.includes(options.ip))?.id;
179
- $.last_call_index = ($.last_call_index + 1) % $.nodes.length;
180
- return $.nodes[$.last_call_index].id;
217
+ async #on_node_offline(id) {
218
+ const node = this.#remote_nodes.get(id);
219
+ if (!node)
220
+ return;
221
+ process.env.SPIDERMESH_DEBUG && console.log(`[${new Date().toLocaleString()}] Node ${id} offline`);
222
+ this.$nodes_monitor.next({ node, online: false });
223
+ this.#remote_rpc_services.forEach(service => {
224
+ service.nodes = service.nodes?.filter(node => node.id != id);
225
+ });
226
+ [...this.#rpc_queue.entries()].forEach(([rid, { reject }]) => {
227
+ reject(new Error('SERVICE_OFFLINE'));
228
+ this.#rpc_queue.delete(rid);
229
+ });
230
+ }
231
+ #caculate_rpc_node_id(service_name) {
232
+ const current = this.#remote_rpc_services.get(service_name);
233
+ if (!current)
234
+ return;
235
+ const index = ++current.last_call_index % current.nodes.length;
236
+ return current.nodes[index].id;
181
237
  }
182
238
  async rpc(service, method, args, options) {
183
239
  return await new Promise(async (success, r) => {
184
240
  const reject = (err) => (options.fallback !== undefined) ? success(options.fallback) : r(err);
185
- const node_id = options.node_id || await this.#caculate_request_node_id(service, options);
186
- if (!node_id)
187
- return reject(new Error('SERVICE_OFFLINE'));
188
241
  const rid = randomUUID();
189
- (!options.timeout || options.timeout > 0) && setTimeout(() => {
242
+ options.timeout && setTimeout(() => {
190
243
  reject(new Error('TIMEOUT'));
191
244
  this.#rpc_queue.delete(rid);
192
- }, options.timeout || 10000);
245
+ }, options.timeout);
193
246
  !options.nevermind && this.#rpc_queue.set(rid, {
194
247
  args,
195
248
  last_ping: 0,
@@ -197,18 +250,22 @@ class SpiderMesh {
197
250
  request_time: Date.now(),
198
251
  success,
199
252
  timeout: options.timeout,
200
- target_node_id: node_id
253
+ target_node_id: options.node_id
201
254
  });
202
255
  const retry_count = options.retry || 1;
203
256
  for (let i = retry_count; i > 0; i--) {
204
- for (const [__, transporter] of this.#nodes.get(node_id)?.transporters || []) {
205
- try {
206
- await transporter.publish(node_id, node_id, { type: 'rpc', id: rid, args, method, service });
207
- return;
208
- }
209
- catch (e) {
210
- }
257
+ try {
258
+ const node_id = this.#caculate_rpc_node_id(service);
259
+ if (!node_id)
260
+ throw new Error(`CAN_NOT_SELECT_SERVICE_NODE`);
261
+ await this.transporter.publish({
262
+ event: service,
263
+ node_id,
264
+ data: { type: 'rpc', id: rid, args, method, service }
265
+ });
266
+ return;
211
267
  }
268
+ catch (e) { }
212
269
  i > 1 && await new Promise(s => setTimeout(s, options.retry_delay || 1000));
213
270
  }
214
271
  if (options.fallback)
@@ -240,69 +297,71 @@ class SpiderMesh {
240
297
  typeof f[method] == 'function' && actions.add(method);
241
298
  }
242
299
  }
243
- SpiderMesh.#LinkingServices.set(service_name, { online: false });
300
+ if (!this.#remote_rpc_services.has(service_name)) {
301
+ this.#remote_rpc_services.set(service_name, { last_call_index: -1, nodes: [] });
302
+ }
244
303
  return new Proxy({}, {
245
304
  get: (_, method) => {
246
- if (method == '$wait')
247
- return (async (cb, delay = 1000) => {
248
- for (let i = 0; true; i++) {
249
- const nodes = [...this.#nodes.values()].filter(node => node.services.includes(service_name));
250
- const result = await cb(nodes, i);
251
- if (result)
252
- return result;
253
- await new Promise(s => setTimeout(s, delay));
254
- }
255
- });
256
- if (method == '$list_nodes')
257
- return (() => [...this.#nodes.values()].filter(node => node.services.includes(service_name)));
258
- if (method == '$monitor')
259
- return (cb => {
260
- const hid = randomUUID();
261
- const map = this.#services_status_monitor.get(service_name) || new Map();
262
- map.set(hid, cb);
263
- this.#services_status_monitor.set(service_name, map);
264
- return {
265
- unsubscribe: () => map.delete(hid)
266
- };
267
- });
305
+ if (method == '$wait_service_online') {
306
+ return () => this.#wait_service_online(service_name);
307
+ }
308
+ if (method == '$list_nodes') {
309
+ return (() => [...this.#remote_nodes.values()].filter(node => node.services.includes(service_name) && !node.isolate));
310
+ }
311
+ if (method.startsWith('$batch_')) {
312
+ const real_method = method.split('$batch_')?.[1];
313
+ if (!real_method || !actions.has(real_method))
314
+ return null;
315
+ const nodes = [...this.#remote_nodes.values()].filter(node => node.services.includes(service_name) && !node.isolate);
316
+ return (...args) => from(nodes).pipe(mergeMap(async (node) => {
317
+ const data = await this.rpc(service_name, real_method, args, { node_id: node.id });
318
+ return { data, node };
319
+ }));
320
+ }
268
321
  if (actions.has(method) || method.startsWith('$set_')) {
269
- return new DeepProxy(RPCOptionsList, (method, options) => (...args) => this.rpc(service_name, method, args, options)).nest()[method];
322
+ return new DeepProxy(RPCOptionsList, (method, options) => ((...args) => this.rpc(service_name, method, args, options))).nest()[method];
270
323
  }
271
324
  return null;
272
325
  }
273
326
  });
274
327
  }
275
- async active_local_service(instance) {
328
+ async #active_local_service(instance) {
276
329
  const prototype = Object.getPrototypeOf(instance);
277
330
  const name = prototype.constructor.name;
278
- this.#local_services.set(name, instance);
331
+ this.#local_rpc_services.set(name, instance);
332
+ this.listen(name).subscribe(evt => this.#node_event_handler(evt));
279
333
  // Active event subscribers
280
334
  const event_subscribers = listEventSubscribers(prototype);
281
335
  for (const { event, method } of event_subscribers) {
282
- this.subscribe(event, (_, data) => instance[method]?.(data));
336
+ this
337
+ .listen(event)
338
+ .pipe(filter(event => !this.#$isolated.value))
339
+ .subscribe(evt => instance[method]?.(evt.data, evt.sender_node_id));
283
340
  }
284
- // Broadcast running services
285
- const me = await this.$metadata();
286
- this.#transporters.forEach(t => t.publish('#join', null, me));
287
- // Wait remote service ready
341
+ }
342
+ async #wait_service_online(service_name = 'all') {
343
+ if (this.#remote_rpc_services.size == 0)
344
+ return;
288
345
  while (true) {
289
- await new Promise(s => setTimeout(s, 1000));
290
- if ([...SpiderMesh.#LinkingServices.values()].every(service => service.online)) {
346
+ await sleep(500);
347
+ const nodes = service_name == 'all' ? ([...this.#remote_rpc_services.values()].map(s => s.nodes).flat(2)) : (this.#remote_rpc_services.get(service_name)?.nodes || []);
348
+ if (nodes.length > 0)
291
349
  break;
292
- }
293
350
  }
351
+ }
352
+ async #active_ready_hooks(instance) {
353
+ // Wait remote service ready
354
+ await this.#wait_service_online();
294
355
  // Active ready hook
295
356
  for (const method of listReadyHookMethods(Object.getPrototypeOf(instance))) {
296
357
  instance[method]?.();
297
358
  }
298
359
  }
299
- async publish(topic, data) {
300
- this.#transporters.forEach(t => t.publish(topic, null, data));
360
+ async publish(event, data) {
361
+ this.transporter.publish({ event, data });
301
362
  }
302
- async subscribe(topic, cb) {
303
- const subscriptions = [...this.#transporters.values()].map(t => t.listen(topic, cb));
304
- return { unsubscribe: () => subscriptions.forEach(s => s.unsubscribe()) };
363
+ listen(topic) {
364
+ return this.transporter.listen(topic);
305
365
  }
306
366
  }
307
- export { SpiderMesh };
308
367
  //# sourceMappingURL=SpiderMesh.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SpiderMesh.js","sourceRoot":"","sources":["../../src/SpiderMesh.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SpiderMesh.js","sourceRoot":"","sources":["../../src/SpiderMesh.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,14 @@
1
- import { SpiderMeshTransporter } from "./SpiderMeshTransporter";
2
1
  export type SpiderMeshNodeMetadata = {
3
2
  id: string;
4
3
  namespace: string;
5
- public_ip: string;
4
+ public_ip: string | null;
6
5
  ip_addresses: string[];
7
6
  last_online: number;
8
7
  active: boolean;
9
8
  offline: boolean;
10
9
  services: string[];
11
10
  linked: string[];
11
+ isolate: boolean;
12
+ revalidate_on_join?: boolean;
12
13
  };
13
- export type SpiderMeshNode = SpiderMeshNodeMetadata & {
14
- transporters?: Map<string, SpiderMeshTransporter>;
15
- };
14
+ export type SpiderMeshNode = SpiderMeshNodeMetadata;
@@ -1,12 +1,23 @@
1
+ import { Observable } from "rxjs";
2
+ export type PublishMetadata<T> = {
3
+ event: string;
4
+ node_id?: string;
5
+ data: T;
6
+ };
7
+ export type SpiderMeshTransporterEvent<T> = {
8
+ data: T;
9
+ sender_node_id: string;
10
+ };
1
11
  export type SpiderMeshTransporter = {
2
- node_id: string;
3
- namespace: string;
4
- on_node_offline: (cb: (node_id: string) => any) => void;
5
- on_node_online: (cb: (node_id: string) => any) => void;
6
- listen: <T = any>(topic: string, cb: (node_id: string, data: T) => any) => {
7
- unsubscribe: Function;
8
- };
9
- publish<T = any>(event: string, node_id: string | null, data: T, queue?: boolean): Promise<void>;
12
+ readonly node_id: string;
13
+ readonly namespace: string;
14
+ $nodes_status: Observable<{
15
+ node_id: string;
16
+ online: boolean;
17
+ }>;
18
+ start: () => Promise<void>;
19
+ listen: <T = any>(topic: string) => Observable<SpiderMeshTransporterEvent<T>>;
20
+ publish<T = any>(config: PublishMetadata<T>): Promise<void>;
10
21
  };
11
22
  export type SpiderMeshTransporterFactory = {
12
23
  new (...args: any[]): SpiderMeshTransporter;
@@ -1,2 +1,6 @@
1
- export declare const Microservice: () => (target: new (...args: any[]) => {}) => any;
2
- export declare const listMicroserviceFactories: () => any[];
1
+ import { ReplaySubject } from "rxjs";
2
+ export declare const serviceInstanceList: ReplaySubject<{
3
+ instance: any;
4
+ namespaces: string[];
5
+ }>;
6
+ export declare const Microservice: (namespaces?: string[]) => any;