@spider-mesh/core 1.0.119 → 1.0.121

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 (32) hide show
  1. package/build/src/Encoder.d.ts +4 -9
  2. package/build/src/Encoder.js +3 -35
  3. package/build/src/Encoder.js.map +1 -1
  4. package/build/src/SpiderMesh.d.ts +41 -45
  5. package/build/src/SpiderMesh.js +215 -273
  6. package/build/src/SpiderMesh.js.map +1 -1
  7. package/build/src/builtin-transporter/BuiltinTransporter.d.ts +5 -10
  8. package/build/src/builtin-transporter/BuiltinTransporter.js +85 -94
  9. package/build/src/builtin-transporter/BuiltinTransporter.js.map +1 -1
  10. package/build/src/builtin-transporter/RxjsTcpServer.d.ts +4 -9
  11. package/build/src/builtin-transporter/RxjsTcpServer.js +25 -25
  12. package/build/src/builtin-transporter/RxjsTcpServer.js.map +1 -1
  13. package/build/src/builtin-transporter/RxjsTcpSocket.d.ts +1 -0
  14. package/build/src/builtin-transporter/RxjsTcpSocket.js +3 -0
  15. package/build/src/builtin-transporter/RxjsTcpSocket.js.map +1 -1
  16. package/build/src/builtin-transporter/RxjsUdpServer.d.ts +20 -0
  17. package/build/src/builtin-transporter/RxjsUdpServer.js +83 -0
  18. package/build/src/builtin-transporter/RxjsUdpServer.js.map +1 -0
  19. package/build/src/const.d.ts +1 -0
  20. package/build/src/const.js +1 -0
  21. package/build/src/const.js.map +1 -1
  22. package/build/src/decorators/Microservice.d.ts +2 -0
  23. package/build/src/interfaces/SpiderMeshNode.d.ts +3 -1
  24. package/build/src/interfaces/SpiderMeshTransporter.d.ts +13 -12
  25. package/build/tests/Rpc.d.ts +1 -0
  26. package/build/tests/Rpc.js +102 -0
  27. package/build/tests/Rpc.js.map +1 -0
  28. package/package.json +1 -1
  29. package/tsconfig.json +1 -1
  30. package/build/src/builtin-transporter/RxjsUdpBroadcaster.d.ts +0 -19
  31. package/build/src/builtin-transporter/RxjsUdpBroadcaster.js +0 -56
  32. package/build/src/builtin-transporter/RxjsUdpBroadcaster.js.map +0 -1
@@ -0,0 +1,83 @@
1
+ import { createSocket } from "dgram";
2
+ import { Observable, from, mergeMap } from "rxjs";
3
+ import { networkInterfaces } from 'os';
4
+ import { createHmac } from "crypto";
5
+ import { UDP_SECRET_KEY } from "../const.js";
6
+ import { RxjsTcpSocket } from "./RxjsTcpSocket.js";
7
+ export class RxjsUdpServer extends Observable {
8
+ config;
9
+ constructor(config) {
10
+ super(o => {
11
+ const nodes = new Set();
12
+ const { udp_port } = config;
13
+ const udp = createSocket({
14
+ type: 'udp4',
15
+ reuseAddr: true
16
+ });
17
+ udp.bind({
18
+ address: '0.0.0.0',
19
+ port: udp_port,
20
+ }, () => udp.setBroadcast(true));
21
+ udp.on('message', async (data, rinfo) => {
22
+ try {
23
+ const msg = JSON.parse(data.toString('utf-8'));
24
+ const sig = createHmac('SHA256', UDP_SECRET_KEY).update(`${msg.namespace}|${msg.transporter_id}|${msg.port}`).digest('base64');
25
+ if (msg.sig != sig)
26
+ return;
27
+ if (msg.namespace != config.namespace)
28
+ return;
29
+ if (msg.transporter_id == config.transporter_id)
30
+ return;
31
+ const socket = await RxjsTcpSocket.connect({
32
+ ...msg,
33
+ host: rinfo.address,
34
+ keepAlive: true,
35
+ retry_delay_ms: 5000,
36
+ retry_times: 5
37
+ });
38
+ if (socket) {
39
+ if (nodes.has(msg.transporter_id)) {
40
+ socket.close();
41
+ }
42
+ else {
43
+ nodes.add(msg.transporter_id);
44
+ o.next(socket);
45
+ }
46
+ }
47
+ }
48
+ catch (e) {
49
+ }
50
+ });
51
+ config.$tcp_server_port.subscribe(port => this.#broadcast(udp, port));
52
+ });
53
+ this.config = config;
54
+ }
55
+ #broadcast(udp, port) {
56
+ const { namespace, transporter_id, udp_port, udp_address = '' } = this.config;
57
+ const broadcast_ips = ['255.255.255.255'];
58
+ const network_address = (Object.entries(networkInterfaces())
59
+ .filter(([i]) => !i.startsWith('lo'))
60
+ .map(e => e[1])
61
+ .flat(2)
62
+ .filter(d => d && d.family == 'IPv4' && d.address)
63
+ .map(d => d.address.split('.').slice(0, 3).join('.') + '.255'));
64
+ const env_address = udp_address.split(',').map(a => a.trim()).filter(a => !!a);
65
+ for (const address of [...network_address, ...env_address]) {
66
+ const splited = address.split('.');
67
+ splited.length == 4 && broadcast_ips.push(address);
68
+ splited.length == 3 && new Array(256).fill(0).map((_, i) => broadcast_ips.push(`${address}.${i}`));
69
+ }
70
+ const msg = {
71
+ namespace,
72
+ transporter_id,
73
+ port,
74
+ sig: ''
75
+ };
76
+ const sig = createHmac('SHA256', UDP_SECRET_KEY).update(`${msg.namespace}|${msg.transporter_id}|${msg.port}`).digest('base64');
77
+ const json = JSON.stringify({ ...msg, sig });
78
+ from(broadcast_ips).pipe(mergeMap(async (host) => {
79
+ await udp.send(Buffer.from(json), udp_port, host);
80
+ }, 50)).subscribe();
81
+ }
82
+ }
83
+ //# sourceMappingURL=RxjsUdpServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RxjsUdpServer.js","sourceRoot":"","sources":["../../../src/builtin-transporter/RxjsUdpServer.ts"],"names":[],"mappings":"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"}
@@ -2,3 +2,4 @@ export declare const NAMEPSACE: string;
2
2
  export declare const NODE_ID: string;
3
3
  export declare const UDP_BROADCAST_ADDRESS: string;
4
4
  export declare const UDP_BROADCAST_PORT: number;
5
+ export declare const UDP_SECRET_KEY: string;
@@ -3,4 +3,5 @@ export const NAMEPSACE = process.env.SPIDERMESH_NAMESPACE || 'default';
3
3
  export const NODE_ID = process.env.SPIDERMESH_NODE_ID || randomUUID();
4
4
  export const UDP_BROADCAST_ADDRESS = process.env.SPIDERMESH_UDP_BROADCAST_ADDRESS || '';
5
5
  export const UDP_BROADCAST_PORT = Number(process.env.SPIDERMESH_UDP_BROADCAST_PORT || 10000);
6
+ export const UDP_SECRET_KEY = process.env.SPIDERMESH_UDP_BROADCAST_PORT || 'default-spider-mesh-secret-key';
6
7
  //# sourceMappingURL=const.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"const.js","sourceRoot":"","sources":["../../src/const.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAEnC,MAAM,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,SAAS,CAAA;AACtE,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,UAAU,EAAE,CAAA;AACrE,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,gCAAgC,IAAI,EAAE,CAAA;AACvF,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,KAAK,CAAC,CAAA"}
1
+ {"version":3,"file":"const.js","sourceRoot":"","sources":["../../src/const.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAEnC,MAAM,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,SAAS,CAAA;AACtE,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,UAAU,EAAE,CAAA;AACrE,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,gCAAgC,IAAI,EAAE,CAAA;AACvF,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,KAAK,CAAC,CAAA;AAC5F,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,gCAAgC,CAAA"}
@@ -23,6 +23,8 @@ export declare const NestJSLinkEvent: (factory: any, publish_buffer_ms?: number)
23
23
  publish: (data: import("../Encoder.js").Encodeable) => Promise<void>;
24
24
  listen: () => import("rxjs").Observable<{
25
25
  data: import("../Encoder.js").Encodeable;
26
+ received_transporter_id: string;
27
+ sender_transporter_id: string;
26
28
  sender_node_id: string;
27
29
  }>;
28
30
  }>;
@@ -2,7 +2,9 @@ export type ServiceMetadata = {
2
2
  [key: string]: string | number | boolean;
3
3
  };
4
4
  export type SpiderMeshNodeMetadata = {
5
- id: string;
5
+ node_id: string;
6
+ local_transporter_id: string;
7
+ remote_transporter_id: string;
6
8
  name: string;
7
9
  version: string;
8
10
  path: string;
@@ -1,24 +1,25 @@
1
1
  import { Observable } from "rxjs";
2
2
  import { Encodeable } from "src/Encoder.js";
3
- export type PublishMetadata = {
3
+ export type PublishMetadata<T extends Encodeable = Encodeable> = {
4
4
  event: string;
5
- node_id?: string;
6
- data: Encodeable;
5
+ remote_transporter_id?: string;
6
+ data: T;
7
7
  };
8
8
  export type SpiderMeshTransporterEvent<T extends Encodeable = Encodeable> = {
9
9
  data: T;
10
- sender_node_id: string;
10
+ received_transporter_id: string;
11
+ sender_transporter_id: string;
12
+ };
13
+ export type TcpNodeStatus = {
14
+ local_transporter_id: string;
15
+ remote_transporter_id: string;
16
+ online: boolean;
11
17
  };
12
18
  export type SpiderMeshTransporter = {
13
- readonly node_id: string;
14
- readonly namespace: string;
15
- $nodes_status: Observable<{
16
- node_id: string;
17
- online: boolean;
18
- }>;
19
- start: () => Promise<void>;
19
+ readonly transporter_id: string;
20
+ $nodes_status: Observable<TcpNodeStatus>;
20
21
  listen: <T extends Encodeable>(topic: string) => Observable<SpiderMeshTransporterEvent<T>>;
21
- publish(config: PublishMetadata): Promise<void>;
22
+ publish<T extends Encodeable>(config: PublishMetadata<T>): Promise<void>;
22
23
  };
23
24
  export type SpiderMeshTransporterFactory = {
24
25
  new (...args: any[]): SpiderMeshTransporter;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,102 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { firstValueFrom, from, lastValueFrom, map, mergeMap, timer, toArray } from 'rxjs';
3
+ import { Microservice } from '../src/decorators/Microservice.js';
4
+ import { SpiderMesh } from '../src/SpiderMesh.js';
5
+ let ExampleService = class ExampleService {
6
+ constructor() {
7
+ console.log(`Example service running`);
8
+ }
9
+ sum(a, b) {
10
+ return a + b;
11
+ }
12
+ async asyncSum(a, b) {
13
+ await firstValueFrom(timer(1000));
14
+ return a + b;
15
+ }
16
+ interator() {
17
+ return from([1, 2, 3, 4, 5]);
18
+ }
19
+ async asyncInterator() {
20
+ return from([1, 2, 3, 4, 5]).pipe(mergeMap(async (d) => {
21
+ await firstValueFrom(timer(1000));
22
+ return d;
23
+ }, 1));
24
+ }
25
+ async buffer() {
26
+ return Buffer.from('ahihihi', 'utf-8');
27
+ }
28
+ async nulla() {
29
+ }
30
+ async interatorBufferMix() {
31
+ return from([
32
+ { a: 1, b: "s", c: Buffer.from('abc') },
33
+ null,
34
+ undefined,
35
+ { v: new Set([1, 2,]) }
36
+ ]).pipe(mergeMap(async (d) => {
37
+ await firstValueFrom(timer(1000));
38
+ return { d };
39
+ }, 1));
40
+ }
41
+ errror_test() {
42
+ throw { a: { b: "c" } };
43
+ }
44
+ obj_errror_test() {
45
+ throw new Error('AHIHI');
46
+ }
47
+ get_time() {
48
+ return { time: Date.now() };
49
+ }
50
+ };
51
+ ExampleService = __decorate([
52
+ Microservice(),
53
+ __metadata("design:paramtypes", [])
54
+ ], ExampleService);
55
+ if (process.argv[2] == 'a') {
56
+ new ExampleService();
57
+ const sm = new SpiderMesh();
58
+ }
59
+ if (process.argv[2] == 'b') {
60
+ console.log('Testing');
61
+ const sm = new SpiderMesh();
62
+ const service = await sm.link_remote_service(ExampleService, true);
63
+ console.log(`Service online`);
64
+ console.log(`Not found`);
65
+ console.log(await service.xxxx());
66
+ console.log(`Batch`);
67
+ console.log(await firstValueFrom(service.$batch_get_time().pipe(toArray())));
68
+ console.log(`Timeout`);
69
+ const data = await service.$timeout(500).$fallback(7).asyncSum(1, 2);
70
+ console.log({ data });
71
+ console.log('sync sum');
72
+ console.log({
73
+ 'sum: 1+2': await service.sum(1, 2)
74
+ });
75
+ console.log({
76
+ 'asyncSum: 1+2': await service.asyncSum(1, 2)
77
+ });
78
+ console.log('Interator');
79
+ await lastValueFrom(service.interator().pipe(map(n => console.log({ n }))));
80
+ console.log('ERROR');
81
+ try {
82
+ await service.errror_test();
83
+ }
84
+ catch (e) {
85
+ console.log(JSON.stringify(e));
86
+ }
87
+ console.log('ERROR OBJ');
88
+ try {
89
+ await service.obj_errror_test();
90
+ }
91
+ catch (e) {
92
+ console.log(e);
93
+ }
94
+ console.log('Async interator');
95
+ await lastValueFrom(service.asyncInterator().pipe(map(n => console.log({ n }))));
96
+ console.log('Buffer');
97
+ const buffer = await service.buffer();
98
+ console.log({ buffer, v: buffer.toString('utf8') });
99
+ console.log('interatorBufferMix');
100
+ await lastValueFrom(service.interatorBufferMix().pipe(map(n => console.log({ n }))));
101
+ }
102
+ //# sourceMappingURL=Rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rpc.js","sourceRoot":"","sources":["../../tests/Rpc.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@spider-mesh/core",
3
3
  "type": "module",
4
- "version": "1.0.119",
4
+ "version": "1.0.121",
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",
package/tsconfig.json CHANGED
@@ -32,6 +32,6 @@
32
32
  "out",
33
33
  "src/schema.ts",
34
34
  "bin",
35
- "./build/**/*"
35
+ "./build/**/*"
36
36
  ]
37
37
  }
@@ -1,19 +0,0 @@
1
- import { Observable } from "rxjs";
2
- export type RxjsUdpBroadcasterConfig = {
3
- node_id: string;
4
- namespace: string;
5
- udp_address?: string;
6
- udp_port: number;
7
- };
8
- export declare class RxjsUdpBroadcaster {
9
- static start({ namespace, node_id, udp_port, udp_address }: RxjsUdpBroadcasterConfig): Promise<{
10
- broadcast: (port: number) => Promise<void>;
11
- $new_node_discovered: Observable<{
12
- port: number;
13
- node_id: string;
14
- namespace: string;
15
- } & {
16
- host: string;
17
- }>;
18
- }>;
19
- }
@@ -1,56 +0,0 @@
1
- import { createSocket } from "dgram";
2
- import { Observable } from "rxjs";
3
- import { networkInterfaces } from 'os';
4
- export class RxjsUdpBroadcaster {
5
- static async start({ namespace, node_id, udp_port, udp_address = '' }) {
6
- const udp = createSocket({
7
- type: 'udp4',
8
- reuseAddr: true
9
- });
10
- udp.bind({
11
- address: '0.0.0.0',
12
- port: udp_port,
13
- }, () => udp.setBroadcast(true));
14
- const $new_node_discovered = new Observable(o => {
15
- udp.on('message', async (raw, rinfo) => {
16
- try {
17
- const info = JSON.parse(raw.toString('utf-8'));
18
- if (info.namespace == namespace && info.node_id != node_id) {
19
- o.next({ ...info, host: rinfo.address });
20
- }
21
- }
22
- catch (e) {
23
- }
24
- });
25
- });
26
- const broadcast_ips = ['255.255.255.255'];
27
- const network_address = (Object.entries(networkInterfaces())
28
- .filter(([i]) => !i.startsWith('lo'))
29
- .map(e => e[1])
30
- .flat(2)
31
- .filter(d => d && d.family == 'IPv4' && d.address)
32
- .map(d => d.address.split('.').slice(0, 3).join('.') + '.255'));
33
- const env_address = udp_address.split(',').map(a => a.trim()).filter(a => !!a);
34
- for (const address of [...network_address, ...env_address]) {
35
- const splited = address.split('.');
36
- splited.length == 4 && broadcast_ips.push(address);
37
- splited.length == 3 && new Array(256).fill(0).map((_, i) => broadcast_ips.push(`${address}.${i}`));
38
- }
39
- const broadcast = async (port) => {
40
- const msg = {
41
- namespace,
42
- node_id,
43
- port
44
- };
45
- const json = JSON.stringify(msg);
46
- for (const host of broadcast_ips) {
47
- await udp.send(Buffer.from(json), udp_port, host);
48
- }
49
- };
50
- return {
51
- broadcast,
52
- $new_node_discovered
53
- };
54
- }
55
- }
56
- //# sourceMappingURL=RxjsUdpBroadcaster.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RxjsUdpBroadcaster.js","sourceRoot":"","sources":["../../../src/builtin-transporter/RxjsUdpBroadcaster.ts"],"names":[],"mappings":"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"}