@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.
Files changed (28) hide show
  1. package/build/src/Encoder.d.ts +14 -2
  2. package/build/src/Encoder.js +88 -36
  3. package/build/src/Encoder.js.map +1 -1
  4. package/build/src/SpiderMesh.d.ts +59 -25
  5. package/build/src/SpiderMesh.js +309 -244
  6. package/build/src/SpiderMesh.js.map +1 -1
  7. package/build/src/builtin-transporter/BuiltinTransporter.d.ts +3 -2
  8. package/build/src/builtin-transporter/BuiltinTransporter.js +18 -14
  9. package/build/src/builtin-transporter/BuiltinTransporter.js.map +1 -1
  10. package/build/src/builtin-transporter/RxjsTcpServer.d.ts +1 -1
  11. package/build/src/builtin-transporter/RxjsTcpServer.js.map +1 -1
  12. package/build/src/builtin-transporter/RxjsTcpSocket.d.ts +6 -6
  13. package/build/src/builtin-transporter/RxjsTcpSocket.js +1 -1
  14. package/build/src/builtin-transporter/RxjsTcpSocket.js.map +1 -1
  15. package/build/src/builtin-transporter/RxjsUdpBroadcaster.d.ts +1 -1
  16. package/build/src/builtin-transporter/RxjsUdpBroadcaster.js +2 -2
  17. package/build/src/builtin-transporter/RxjsUdpBroadcaster.js.map +1 -1
  18. package/build/src/decorators/DeepProxy.js.map +1 -1
  19. package/build/src/decorators/ListenEvent.d.ts +7 -6
  20. package/build/src/decorators/ListenEvent.js.map +1 -1
  21. package/build/src/decorators/Microservice.d.ts +7 -1
  22. package/build/src/decorators/Microservice.js +1 -1
  23. package/build/src/decorators/Microservice.js.map +1 -1
  24. package/build/src/decorators/OnMicroserviceReady.js.map +1 -1
  25. package/build/src/interfaces/RemoteService.d.ts +1 -0
  26. package/build/src/interfaces/SpiderMeshTransporter.d.ts +6 -5
  27. package/package.json +1 -1
  28. package/tsconfig.json +5 -2
@@ -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 = any>(data: T) => Buffer;
4
- decode: <T_1 = any>(data: Buffer | string) => T_1;
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
  };
@@ -1,42 +1,94 @@
1
- function replacer(key, value) {
2
- const originalObject = this[key];
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: (data) => Buffer.from(JSON.stringify(data, replacer)),
34
- decode: (data) => {
35
- try {
36
- return JSON.parse(typeof data == 'string' ? data : data.toString('utf8'), receiver);
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
- catch (e) {
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
@@ -1 +1 @@
1
- {"version":3,"file":"Encoder.js","sourceRoot":"","sources":["../../src/Encoder.ts"],"names":[],"mappings":"AAAA,SAAS,QAAQ,CAAC,GAAG,EAAE,KAAK;IACxB,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;IAEhC,IAAI,cAAc,YAAY,GAAG;QAAE,OAAO;YACtC,UAAU,EAAE,KAAK;YACjB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;SAC9C,CAAA;IAED,IAAI,cAAc,YAAY,GAAG;QAAE,OAAO;YACtC,UAAU,EAAE,KAAK;YACjB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;SAC7C,CAAA;IAED,IAAI,OAAO,cAAc,IAAI,UAAU;QAAE,OAAO;YAC5C,UAAU,EAAE,UAAU;SACzB,CAAA;IAED,OAAO,KAAK,CAAA;AAChB,CAAC;AAGD,SAAS,QAAQ,CAAC,GAAG,EAAE,KAAK;IACxB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;QAC7C,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,EAAE;YAC5B,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SAC/B;QAED,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,EAAE;YAC5B,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SAC/B;QAED,IAAI,KAAK,CAAC,UAAU,IAAI,UAAU;YAAE,OAAO,GAAG,EAAE,GAAG,CAAC,CAAA;KACvD;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG;IACnB,MAAM,EAAE,CAAU,IAAO,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACzE,MAAM,EAAE,CAAU,IAAqB,EAAE,EAAE;QACvC,IAAI;YACA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAM,CAAA;SAC3F;QAAC,OAAO,CAAC,EAAE;SAEX;IACL,CAAC;CACJ,CAAA"}
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, SpiderMeshTransporterEvent } from './interfaces/SpiderMeshTransporter.js';
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
- export type RpcPayload = {
8
- id: string;
9
- type: string;
10
- args: any[];
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 declare class SpiderMeshConfig {
21
- namespace?: string;
22
- node_id?: string;
23
- transporter: SpiderMeshTransporter;
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
- static add_transporter(transporter: SpiderMeshTransporter): void;
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<EventHub<T>>;
41
- publish<T = any>(topic: string | {
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 = any>(topic: string | {
45
- new (): EventHub<T>;
46
- }): Observable<SpiderMeshTransporterEvent<T>>;
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
  }