@spider-mesh/core 1.0.116 → 1.0.117
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/build/src/Encoder.d.ts +14 -2
- package/build/src/Encoder.js +88 -36
- package/build/src/Encoder.js.map +1 -1
- package/build/src/SpiderMesh.d.ts +59 -25
- package/build/src/SpiderMesh.js +309 -244
- package/build/src/SpiderMesh.js.map +1 -1
- package/build/src/builtin-transporter/BuiltinTransporter.d.ts +3 -2
- package/build/src/builtin-transporter/BuiltinTransporter.js +18 -14
- package/build/src/builtin-transporter/BuiltinTransporter.js.map +1 -1
- package/build/src/builtin-transporter/RxjsTcpServer.d.ts +1 -1
- package/build/src/builtin-transporter/RxjsTcpServer.js.map +1 -1
- package/build/src/builtin-transporter/RxjsTcpSocket.d.ts +6 -6
- package/build/src/builtin-transporter/RxjsTcpSocket.js +1 -1
- package/build/src/builtin-transporter/RxjsTcpSocket.js.map +1 -1
- package/build/src/builtin-transporter/RxjsUdpBroadcaster.d.ts +1 -1
- package/build/src/builtin-transporter/RxjsUdpBroadcaster.js +2 -2
- package/build/src/builtin-transporter/RxjsUdpBroadcaster.js.map +1 -1
- package/build/src/decorators/DeepProxy.js.map +1 -1
- package/build/src/decorators/ListenEvent.d.ts +7 -6
- package/build/src/decorators/ListenEvent.js.map +1 -1
- package/build/src/decorators/Microservice.d.ts +7 -1
- package/build/src/decorators/Microservice.js +1 -1
- package/build/src/decorators/Microservice.js.map +1 -1
- package/build/src/decorators/OnMicroserviceReady.js.map +1 -1
- package/build/src/interfaces/RemoteService.d.ts +1 -0
- package/build/src/interfaces/SpiderMeshTransporter.d.ts +6 -5
- package/package.json +1 -1
- package/tsconfig.json +5 -2
package/build/src/Encoder.d.ts
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
import { Observable } from "rxjs";
|
|
3
|
+
export type PureData = string | number | boolean | null | Buffer | PureData[] | {
|
|
4
|
+
[key: string]: PureData;
|
|
5
|
+
};
|
|
6
|
+
export type EncoablePrimitiveType = Function | PureData | Observable<any> | Buffer;
|
|
7
|
+
export type Encodeable = PureData | Array<EncoablePrimitiveType | Encodeable> | {
|
|
8
|
+
[key: string]: EncoablePrimitiveType | Encodeable;
|
|
9
|
+
} | Observable<PureData>;
|
|
2
10
|
export declare const Encoder: {
|
|
3
|
-
encode: <T
|
|
4
|
-
|
|
11
|
+
encode: <T extends Encodeable>(content: T) => {
|
|
12
|
+
buffer: Buffer;
|
|
13
|
+
functions: Map<string, Function>;
|
|
14
|
+
observables: Map<string, Observable<PureData>>;
|
|
15
|
+
};
|
|
16
|
+
decode: <T_1>(raw: Buffer, function_handler?: (index: string) => Function, oservable_handler?: (id: string) => Observable<any>) => T_1 | null;
|
|
5
17
|
};
|
package/build/src/Encoder.js
CHANGED
|
@@ -1,42 +1,94 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
if (originalObject instanceof Map)
|
|
4
|
-
return {
|
|
5
|
-
__dataType: 'Map',
|
|
6
|
-
value: Array.from(originalObject.entries()),
|
|
7
|
-
};
|
|
8
|
-
if (originalObject instanceof Set)
|
|
9
|
-
return {
|
|
10
|
-
__dataType: 'Set',
|
|
11
|
-
value: Array.from(originalObject.values()),
|
|
12
|
-
};
|
|
13
|
-
if (typeof originalObject == 'function')
|
|
14
|
-
return {
|
|
15
|
-
__dataType: 'Function'
|
|
16
|
-
};
|
|
17
|
-
return value;
|
|
18
|
-
}
|
|
19
|
-
function receiver(key, value) {
|
|
20
|
-
if (typeof value === 'object' && value !== null) {
|
|
21
|
-
if (value.__dataType === 'Map') {
|
|
22
|
-
return new Map(value.value);
|
|
23
|
-
}
|
|
24
|
-
if (value.__dataType === 'Set') {
|
|
25
|
-
return new Set(value.value);
|
|
26
|
-
}
|
|
27
|
-
if (value.__dataType == 'Function')
|
|
28
|
-
return () => { };
|
|
29
|
-
}
|
|
30
|
-
return value;
|
|
31
|
-
}
|
|
1
|
+
import { randomUUID } from "crypto";
|
|
2
|
+
import { Observable } from "rxjs";
|
|
32
3
|
export const Encoder = {
|
|
33
|
-
encode: (
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
4
|
+
encode: (content) => {
|
|
5
|
+
const buffers = [];
|
|
6
|
+
const functions = new Map();
|
|
7
|
+
const observables = new Map();
|
|
8
|
+
function replacer(key, value) {
|
|
9
|
+
const originalObject = this[key];
|
|
10
|
+
if (originalObject instanceof Map)
|
|
11
|
+
return {
|
|
12
|
+
__$$__dataType: 'Map',
|
|
13
|
+
__$$__value: Array.from(originalObject.entries()),
|
|
14
|
+
};
|
|
15
|
+
if (originalObject instanceof Set)
|
|
16
|
+
return {
|
|
17
|
+
__$$__dataType: 'Set',
|
|
18
|
+
__$$__value: Array.from(originalObject.values()),
|
|
19
|
+
};
|
|
20
|
+
if (originalObject instanceof Observable) {
|
|
21
|
+
const id = randomUUID();
|
|
22
|
+
observables.set(id, originalObject);
|
|
23
|
+
return {
|
|
24
|
+
__$$__dataType: 'Observable',
|
|
25
|
+
id
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
if (typeof originalObject == 'function') {
|
|
29
|
+
const id = randomUUID();
|
|
30
|
+
functions.set(id, originalObject);
|
|
31
|
+
return {
|
|
32
|
+
__$$__dataType: 'Function',
|
|
33
|
+
id
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
if (originalObject instanceof Buffer) {
|
|
37
|
+
buffers.push(originalObject);
|
|
38
|
+
return {
|
|
39
|
+
__$$__dataType: 'Buffer',
|
|
40
|
+
__index: buffers.length - 1
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
45
|
+
const metadata = JSON.stringify(content, replacer);
|
|
46
|
+
const buffers_count = Buffer.alloc(4);
|
|
47
|
+
buffers_count.writeUInt32LE(buffers.length, 0);
|
|
48
|
+
const buffers_list = buffers.map(b => {
|
|
49
|
+
const length = Buffer.alloc(4);
|
|
50
|
+
length.writeUInt32LE(b.length);
|
|
51
|
+
return [length, b];
|
|
52
|
+
}).flat(2);
|
|
53
|
+
const data = Buffer.from(metadata, 'utf-8');
|
|
54
|
+
const buffer = Buffer.concat([buffers_count, ...buffers_list, data]);
|
|
55
|
+
return { buffer, functions, observables };
|
|
56
|
+
},
|
|
57
|
+
decode: (raw, function_handler = (() => () => { }), oservable_handler = () => new Observable()) => {
|
|
58
|
+
const buffers = [];
|
|
59
|
+
const length = raw.readUInt32LE(0);
|
|
60
|
+
if (length > raw.length)
|
|
61
|
+
return null;
|
|
62
|
+
let index = 4;
|
|
63
|
+
for (let i = 0; i < length; i++) {
|
|
64
|
+
const blength = raw.readUint32LE(index);
|
|
65
|
+
index += 4;
|
|
66
|
+
const buff = raw.slice(index, index + blength);
|
|
67
|
+
buffers.push(buff);
|
|
68
|
+
index += blength;
|
|
37
69
|
}
|
|
38
|
-
|
|
70
|
+
const metadata = raw.toString('utf-8', index);
|
|
71
|
+
function receiver(key, value) {
|
|
72
|
+
if (typeof value === 'object' && value !== null) {
|
|
73
|
+
if (value.__$$__dataType === 'Map') {
|
|
74
|
+
return new Map(value.__$$__value);
|
|
75
|
+
}
|
|
76
|
+
if (value.__$$__dataType === 'Set') {
|
|
77
|
+
return new Set(value.__$$__value);
|
|
78
|
+
}
|
|
79
|
+
if (value.__$$__dataType == 'Function') {
|
|
80
|
+
return function_handler(value.id);
|
|
81
|
+
}
|
|
82
|
+
if (value.__$$__dataType == 'Buffer') {
|
|
83
|
+
return buffers[value.__index];
|
|
84
|
+
}
|
|
85
|
+
if (value.__$$__dataType == 'Observable') {
|
|
86
|
+
return oservable_handler(value.id) || (() => new Observable());
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return value;
|
|
39
90
|
}
|
|
91
|
+
return JSON.parse(metadata, receiver);
|
|
40
92
|
}
|
|
41
93
|
};
|
|
42
94
|
//# sourceMappingURL=Encoder.js.map
|
package/build/src/Encoder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Encoder.js","sourceRoot":"","sources":["../../src/Encoder.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"Encoder.js","sourceRoot":"","sources":["../../src/Encoder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,47 +1,81 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
1
2
|
import { SpiderMeshNodeMetadata } from './interfaces/SpiderMeshNode.js';
|
|
2
|
-
import { SpiderMeshTransporter
|
|
3
|
+
import { SpiderMeshTransporter } from './interfaces/SpiderMeshTransporter.js';
|
|
3
4
|
import { RPCOptions } from './RPCOptions.js';
|
|
4
5
|
import { RemoteService } from './interfaces/RemoteService.js';
|
|
5
6
|
import { EventHub } from './decorators/ListenEvent.js';
|
|
6
|
-
import { Observable, Subject } from 'rxjs';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
import { Observable, Subject, Subscription } from 'rxjs';
|
|
8
|
+
import { Encodeable } from './Encoder.js';
|
|
9
|
+
export type PureData = string | number | boolean | null | Buffer | PureData[] | {
|
|
10
|
+
[key: string]: PureData;
|
|
11
|
+
};
|
|
12
|
+
export declare enum MessageType {
|
|
13
|
+
RpcRequest = 10,
|
|
14
|
+
RpcSubscribeChannel = 20,
|
|
15
|
+
RpcUnsubscribeChannel = 30,
|
|
16
|
+
RpcStream = 50
|
|
17
|
+
}
|
|
18
|
+
export type RpcRequest = {
|
|
19
|
+
session_id: string;
|
|
20
|
+
type: MessageType.RpcRequest;
|
|
21
|
+
args: Buffer;
|
|
11
22
|
service: string;
|
|
12
23
|
method: string;
|
|
13
|
-
response: any;
|
|
14
|
-
error: any;
|
|
15
|
-
index: number;
|
|
16
|
-
event: string;
|
|
17
|
-
data: any;
|
|
18
|
-
nervermind: boolean;
|
|
19
24
|
};
|
|
20
|
-
export
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
+
export type RpcSubscribeChannel = {
|
|
26
|
+
session_id: string;
|
|
27
|
+
observable_id: string;
|
|
28
|
+
channel_id: string;
|
|
29
|
+
type: MessageType.RpcSubscribeChannel;
|
|
30
|
+
};
|
|
31
|
+
export type RpcUnsubscribeChannel = {
|
|
32
|
+
session_id: string;
|
|
33
|
+
channel_id: string;
|
|
34
|
+
type: MessageType.RpcUnsubscribeChannel;
|
|
35
|
+
};
|
|
36
|
+
export type RpcStream = {
|
|
37
|
+
session_id: string;
|
|
38
|
+
channel_id: string;
|
|
39
|
+
type: MessageType.RpcStream;
|
|
40
|
+
error?: PureData;
|
|
41
|
+
data?: PureData;
|
|
42
|
+
completed?: true;
|
|
43
|
+
};
|
|
44
|
+
export type RpcEvent = RpcRequest | RpcStream | RpcSubscribeChannel | RpcUnsubscribeChannel;
|
|
25
45
|
export type SpiderMeshNamespace = string;
|
|
46
|
+
export type SpiderMeshRequest = {
|
|
47
|
+
target_node_id: string;
|
|
48
|
+
observables: Map<string, Observable<PureData>>;
|
|
49
|
+
channels: Map<string, Subject<PureData>>;
|
|
50
|
+
subscriptions: Map<string, Subscription>;
|
|
51
|
+
};
|
|
26
52
|
export declare class SpiderMesh {
|
|
27
53
|
#private;
|
|
28
54
|
private transporter;
|
|
29
55
|
$nodes_monitor: Subject<SpiderMeshNodeMetadata>;
|
|
30
56
|
constructor(transporter?: SpiderMeshTransporter);
|
|
31
|
-
|
|
57
|
+
rpc<T = any>(service: string, method: string, args: any, options?: Partial<RPCOptions>): Observable<T> & Promise<T>;
|
|
32
58
|
$metadata(): Promise<SpiderMeshNodeMetadata>;
|
|
33
59
|
$update_isolate_mode(active: boolean): Promise<SpiderMeshNodeMetadata>;
|
|
34
|
-
rpc<T = any>(service: string, method: string, args: any, options: RPCOptions): Observable<T> & Promise<T>;
|
|
35
60
|
link_remote_service<T>(factory: {
|
|
36
61
|
new (...args: any[]): T;
|
|
37
62
|
}, wait_service_online?: boolean): Promise<RemoteService<T>>;
|
|
38
|
-
link_event<T>(event_factory: {
|
|
63
|
+
link_event<T extends Encodeable = Encodeable>(event_factory: {
|
|
39
64
|
new (...args: any[]): T;
|
|
40
|
-
}, publish_buffer_ms?: number): Promise<
|
|
41
|
-
|
|
65
|
+
}, publish_buffer_ms?: number): Promise<{
|
|
66
|
+
publish: (data: T) => Promise<void>;
|
|
67
|
+
listen: () => Observable<{
|
|
68
|
+
data: T;
|
|
69
|
+
sender_node_id: string;
|
|
70
|
+
}>;
|
|
71
|
+
}>;
|
|
72
|
+
publish<T extends Encodeable>(topic: string | {
|
|
42
73
|
new (): EventHub<T>;
|
|
43
74
|
}, payload: T, node_id?: string): Promise<void>;
|
|
44
|
-
listen<T =
|
|
45
|
-
new ():
|
|
46
|
-
}): Observable<
|
|
75
|
+
listen<T extends Encodeable = Encodeable>(topic: string | {
|
|
76
|
+
new (...args: any[]): T;
|
|
77
|
+
}): Observable<{
|
|
78
|
+
data: T;
|
|
79
|
+
sender_node_id: string;
|
|
80
|
+
}>;
|
|
47
81
|
}
|