@spider-mesh/core 2.0.29 → 2.0.35

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 (79) hide show
  1. package/README.md +573 -0
  2. package/build/src/RemoteService.d.ts +1 -1
  3. package/build/src/RemoteService.js.map +1 -1
  4. package/build/src/SpiderMesh.d.ts +2 -2
  5. package/build/src/SpiderMesh.js +267 -120
  6. package/build/src/SpiderMesh.js.map +1 -1
  7. package/build/src/decorators/Microservice.d.ts +1 -1
  8. package/build/src/decorators/Microservice.js.map +1 -1
  9. package/build/src/helpers/GetIps.js +15 -8
  10. package/build/src/helpers/GetIps.js.map +1 -1
  11. package/build/src/helpers/LimitConcurrency.js +5 -2
  12. package/build/src/helpers/LimitConcurrency.js.map +1 -1
  13. package/build/src/helpers/MicroserviceException.d.ts +4 -15
  14. package/build/src/helpers/MicroserviceException.js +1 -25
  15. package/build/src/helpers/MicroserviceException.js.map +1 -1
  16. package/build/src/index.d.ts +1 -0
  17. package/build/src/types.d.ts +102 -0
  18. package/build/src/types.js +2 -0
  19. package/build/src/types.js.map +1 -0
  20. package/build/tsconfig.tsbuildinfo +1 -1
  21. package/package.json +4 -4
  22. package/tsconfig.json +3 -1
  23. package/build/src/abstract/DiscoveryTransporter.d.ts +0 -5
  24. package/build/src/abstract/DiscoveryTransporter.js +0 -3
  25. package/build/src/abstract/DiscoveryTransporter.js.map +0 -1
  26. package/build/src/abstract/PubsubTransporter.d.ts +0 -11
  27. package/build/src/abstract/PubsubTransporter.js +0 -3
  28. package/build/src/abstract/PubsubTransporter.js.map +0 -1
  29. package/build/src/abstract/RemoteService.d.ts +0 -35
  30. package/build/src/abstract/RemoteService.js +0 -107
  31. package/build/src/abstract/RemoteService.js.map +0 -1
  32. package/build/src/abstract/RpcTransporter.d.ts +0 -30
  33. package/build/src/abstract/RpcTransporter.js +0 -3
  34. package/build/src/abstract/RpcTransporter.js.map +0 -1
  35. package/build/src/abstract/SpiderMeshNode.d.ts +0 -18
  36. package/build/src/abstract/SpiderMeshNode.js +0 -2
  37. package/build/src/abstract/SpiderMeshNode.js.map +0 -1
  38. package/build/src/abstracts/DiscoveryTransporter.d.ts +0 -5
  39. package/build/src/abstracts/DiscoveryTransporter.js +0 -3
  40. package/build/src/abstracts/DiscoveryTransporter.js.map +0 -1
  41. package/build/src/abstracts/PubsubTransporter.d.ts +0 -11
  42. package/build/src/abstracts/PubsubTransporter.js +0 -3
  43. package/build/src/abstracts/PubsubTransporter.js.map +0 -1
  44. package/build/src/abstracts/RemoteService.d.ts +0 -38
  45. package/build/src/abstracts/RemoteService.js +0 -105
  46. package/build/src/abstracts/RemoteService.js.map +0 -1
  47. package/build/src/abstracts/RpcTransporter.d.ts +0 -30
  48. package/build/src/abstracts/RpcTransporter.js +0 -3
  49. package/build/src/abstracts/RpcTransporter.js.map +0 -1
  50. package/build/src/abstracts/SpiderMeshNode.d.ts +0 -18
  51. package/build/src/abstracts/SpiderMeshNode.js +0 -2
  52. package/build/src/abstracts/SpiderMeshNode.js.map +0 -1
  53. package/build/src/helpers/MicroserviceNotFound copy.d.ts +0 -5
  54. package/build/src/helpers/MicroserviceNotFound copy.js +0 -8
  55. package/build/src/helpers/MicroserviceNotFound copy.js.map +0 -1
  56. package/build/src/helpers/MicroserviceNotFound.d.ts +0 -5
  57. package/build/src/helpers/MicroserviceNotFound.js +0 -8
  58. package/build/src/helpers/MicroserviceNotFound.js.map +0 -1
  59. package/build/src/helpers/MicroserviceOfflineException.d.ts +0 -5
  60. package/build/src/helpers/MicroserviceOfflineException.js +0 -8
  61. package/build/src/helpers/MicroserviceOfflineException.js.map +0 -1
  62. package/build/src/helpers/MicroserviceRpcTimeout.d.ts +0 -5
  63. package/build/src/helpers/MicroserviceRpcTimeout.js +0 -8
  64. package/build/src/helpers/MicroserviceRpcTimeout.js.map +0 -1
  65. package/build/src/interfaces/DiscoveryTransporter.d.ts +0 -5
  66. package/build/src/interfaces/DiscoveryTransporter.js +0 -3
  67. package/build/src/interfaces/DiscoveryTransporter.js.map +0 -1
  68. package/build/src/interfaces/PubsubTransporter.d.ts +0 -11
  69. package/build/src/interfaces/PubsubTransporter.js +0 -3
  70. package/build/src/interfaces/PubsubTransporter.js.map +0 -1
  71. package/build/src/interfaces/RemoteService.d.ts +0 -35
  72. package/build/src/interfaces/RemoteService.js +0 -107
  73. package/build/src/interfaces/RemoteService.js.map +0 -1
  74. package/build/src/interfaces/RpcTransporter.d.ts +0 -30
  75. package/build/src/interfaces/RpcTransporter.js +0 -3
  76. package/build/src/interfaces/RpcTransporter.js.map +0 -1
  77. package/build/src/interfaces/SpiderMeshNode.d.ts +0 -18
  78. package/build/src/interfaces/SpiderMeshNode.js +0 -2
  79. package/build/src/interfaces/SpiderMeshNode.js.map +0 -1
@@ -9,3 +9,4 @@ export * from './helpers/randomUUID.js';
9
9
  export * from './helpers/MicroserviceException.js';
10
10
  export * from './helpers/LimitConcurrency.js';
11
11
  export * from './RemoteService.js';
12
+ export type { DiscoveryEvent, DiscoveryTransporter, MdnsMessage, NodeMetadata, PubsubTransporter, RpcCancelPacket, RpcEvent, RpcMessage, RpcOptions, RpcPacket, RpcRequestPacket, RpcResponsePacket, RpcRoutingOptions, RpcTransporter, SpiderMeshError, SpiderMeshErrorCode, SpiderMeshNode, } from './types.js';
@@ -0,0 +1,102 @@
1
+ import { Observable } from "rxjs";
2
+ export type SpiderMeshErrorCode = ('MICROSERVICE_OFFLINE' | 'MICROSERVICE_NOT_FOUND' | 'MICROSERVICE_RPC_TIMEOUT');
3
+ export type SpiderMeshError = {
4
+ code: SpiderMeshErrorCode;
5
+ message: string;
6
+ };
7
+ export type SpiderMeshNode = {
8
+ ips: string[];
9
+ host: string;
10
+ namespace: string;
11
+ version: number;
12
+ node_id: string;
13
+ online?: boolean;
14
+ services: {
15
+ [name: string]: any;
16
+ };
17
+ nodes: {
18
+ [node_id: string]: number;
19
+ };
20
+ transporters: {
21
+ [name: string]: any;
22
+ };
23
+ };
24
+ export type NodesMap = {
25
+ nodes: Map<string, SpiderMeshNode>;
26
+ last_updated_node_id: string;
27
+ };
28
+ export type NodeMetadata<T = {}> = T & {
29
+ host: string;
30
+ node_id: string;
31
+ namespace: string;
32
+ };
33
+ export type MdnsMessage<T extends NodeMetadata> = {
34
+ hi: boolean;
35
+ node: T;
36
+ sender_id: string;
37
+ forwarder_id?: string;
38
+ receiver_id?: string;
39
+ };
40
+ export type DiscoveryEvent = {
41
+ discovered: SpiderMeshNode;
42
+ };
43
+ export type DiscoveryTransporter = Observable<DiscoveryEvent> & {
44
+ broadcast(data: MdnsMessage<NodeMetadata>, ips: string[]): Promise<void>;
45
+ };
46
+ export type PubsubTransporter = {
47
+ publish<T>(topic: string, data: T): Promise<void>;
48
+ listen<T>(topic: string): Observable<T>;
49
+ };
50
+ export type RpcRoutingOptions = {
51
+ [key: string]: string | number | boolean;
52
+ };
53
+ export type RpcOptions<T = any> = {
54
+ service: string;
55
+ method: string;
56
+ args: any[];
57
+ fallback?: T;
58
+ timeout?: number;
59
+ retry?: number;
60
+ node_id?: string;
61
+ ip?: string;
62
+ };
63
+ export type RpcRequestPacket = {
64
+ kind: 'request';
65
+ request_id: string;
66
+ source_node_id: string;
67
+ target_node_id: string;
68
+ service: string;
69
+ method: string;
70
+ args: any[];
71
+ };
72
+ export type RpcResponsePacket = {
73
+ kind: 'response';
74
+ request_id: string;
75
+ source_node_id: string;
76
+ target_node_id: string;
77
+ data?: any;
78
+ error?: SpiderMeshError | {
79
+ code?: string;
80
+ message: string;
81
+ };
82
+ completed?: boolean;
83
+ };
84
+ export type RpcCancelPacket = {
85
+ kind: 'cancel';
86
+ request_id: string;
87
+ source_node_id: string;
88
+ target_node_id: string;
89
+ };
90
+ export type RpcPacket = RpcRequestPacket | RpcResponsePacket | RpcCancelPacket;
91
+ export type RpcMessage = {
92
+ node: SpiderMeshNode;
93
+ packet: RpcPacket;
94
+ };
95
+ export type RpcEvent = Partial<{
96
+ rpc: RpcMessage;
97
+ offline: string;
98
+ endpoints: Record<string, string | boolean | number>;
99
+ }>;
100
+ export type RpcTransporter = Observable<RpcEvent> & {
101
+ send(data: RpcPacket, node: SpiderMeshNode): Promise<void>;
102
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"root":["../const.ts","../env.d.ts","../src/remoteservice.ts","../src/spidermesh.ts","../src/index.ts","../src/decorators/beforemicroserviceonline.ts","../src/decorators/limitconcurrentrunning.ts","../src/decorators/microservice.ts","../src/decorators/nestjsexposemicroservice.ts","../src/decorators/nestjslinkevent.ts","../src/decorators/nestjslinkmicroservice.ts","../src/helpers/getips.ts","../src/helpers/limitconcurrency.ts","../src/helpers/microserviceexception.ts","../src/helpers/randomuuid.ts","../src/helpers/sleep.ts"],"version":"5.8.2"}
1
+ {"root":["../const.ts","../env.d.ts","../src/remoteservice.ts","../src/spidermesh.ts","../src/index.ts","../src/types.ts","../src/decorators/beforemicroserviceonline.ts","../src/decorators/limitconcurrentrunning.ts","../src/decorators/microservice.ts","../src/decorators/nestjsexposemicroservice.ts","../src/decorators/nestjslinkevent.ts","../src/decorators/nestjslinkmicroservice.ts","../src/helpers/getips.ts","../src/helpers/limitconcurrency.ts","../src/helpers/microserviceexception.ts","../src/helpers/randomuuid.ts","../src/helpers/sleep.ts"],"version":"6.0.3"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@spider-mesh/core",
3
3
  "type": "module",
4
- "version": "2.0.29",
4
+ "version": "2.0.35",
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",
@@ -14,10 +14,10 @@
14
14
  "yarn.lock"
15
15
  ],
16
16
  "devDependencies": {
17
- "@types/node": "^22.10.3",
17
+ "@types/node": "^25.6.0",
18
18
  "@types/reflect-metadata": "^0.1.0",
19
19
  "@types/uuid": "^10.0.0",
20
- "typescript": "^5.7.2"
20
+ "typescript": "^6.0.3"
21
21
  },
22
22
  "exports": {
23
23
  ".": {
@@ -33,7 +33,7 @@
33
33
  "author": "Duong Van Ba",
34
34
  "license": "ISC",
35
35
  "dependencies": {
36
- "@spider-mesh/types": "^2.0.28",
36
+ "@types/bun": "^1.3.13",
37
37
  "buffer": "^6.0.3",
38
38
  "react-native-uuid": "^2.0.2",
39
39
  "rxjs": "^7.8.2",
package/tsconfig.json CHANGED
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "compilerOptions": {
3
+ "types": ["node","bun"],
3
4
  "strict": true,
4
5
  "module": "NodeNext",
5
6
  "declaration": true,
@@ -32,6 +33,7 @@
32
33
  "out",
33
34
  "src/schema.ts",
34
35
  "bin",
35
- "./build/**/*"
36
+ "./build/**/*",
37
+ "tests/**/*"
36
38
  ]
37
39
  }
@@ -1,5 +0,0 @@
1
- import { BehaviorSubject, Observable } from "rxjs";
2
- import { SpiderMeshNode } from "./SpiderMeshNode.js";
3
- export declare abstract class DiscoveryTransporter {
4
- abstract link(metadata$: BehaviorSubject<SpiderMeshNode>): Observable<SpiderMeshNode>;
5
- }
@@ -1,3 +0,0 @@
1
- export class DiscoveryTransporter {
2
- }
3
- //# sourceMappingURL=DiscoveryTransporter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DiscoveryTransporter.js","sourceRoot":"","sources":["../../../src/abstract/DiscoveryTransporter.ts"],"names":[],"mappings":"AAIA,MAAM,OAAgB,oBAAoB;CAEzC"}
@@ -1,11 +0,0 @@
1
- import { Observable } from "rxjs";
2
- import { NodesMap } from "src/SpiderMesh.js";
3
- import { SpiderMeshNode } from "./SpiderMeshNode.js";
4
- export type PubsubTransporterEvent = {
5
- metadata: Record<string, string | boolean | number>;
6
- };
7
- export declare abstract class PubsubTransporter {
8
- abstract link(metadata: Observable<SpiderMeshNode>, nodes$: Observable<NodesMap>): Observable<PubsubTransporterEvent>;
9
- abstract publish<T>(topic: string, data: T): Promise<void>;
10
- abstract listen<T>(topic: string): Observable<T>;
11
- }
@@ -1,3 +0,0 @@
1
- export class PubsubTransporter {
2
- }
3
- //# sourceMappingURL=PubsubTransporter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PubsubTransporter.js","sourceRoot":"","sources":["../../../src/abstract/PubsubTransporter.ts"],"names":[],"mappings":"AAUA,MAAM,OAAgB,iBAAiB;CAItC"}
@@ -1,35 +0,0 @@
1
- import { Observable } from "rxjs";
2
- import { SpiderMeshNode } from "./SpiderMeshNode.js";
3
- import { RpcOptions } from "./RpcTransporter.js";
4
- import { SpiderMesh } from "src/SpiderMesh.js";
5
- export type ServiceChecker = (nodes: SpiderMeshNode[]) => Promise<boolean> | boolean;
6
- export type RemoteServiceOptions = Partial<RpcOptions<any>> & {
7
- service: string;
8
- };
9
- export declare class RemoteService<Response, Fallback> {
10
- #private;
11
- private sm;
12
- private options;
13
- constructor(sm: SpiderMesh, options: RemoteServiceOptions);
14
- watch$(): Observable<(SpiderMeshNode & {
15
- rpc?: string;
16
- })[]>;
17
- get nodes(): (SpiderMeshNode & {
18
- rpc?: string;
19
- })[];
20
- set(options: Omit<Partial<RpcOptions<Fallback>>, 'service' | 'method' | 'args'>): RemoteService<Response, Fallback> & { [K in keyof Response as Response[K] extends (...args: any) => any ? K : ""]: Response[K] extends (...args: any) => any ? (...args: Parameters<Response[K]>) => ReturnType<Response[K]> extends Observable<any> | Promise<Observable<any>> ? Awaited<Fallback> | Awaited<Observable<any> & ReturnType<Response[K]>> | Awaited<Promise<Observable<any>> & ReturnType<Response[K]>> : Promise<Awaited<Fallback> | Awaited<ReturnType<Response[K]>>> : null; } & { [key in keyof Response as key extends string ? `__batch__${key}` : string]: Response[key] extends (...args: any) => any ? (...args: Parameters<Response[key]>) => Observable<{
21
- node: SpiderMeshNode;
22
- data: Awaited<ReturnType<Response[key]>>;
23
- } | {
24
- node: SpiderMeshNode;
25
- error: Error;
26
- }> : Response[key]; };
27
- wait(check?: ServiceChecker): Promise<true>;
28
- static link<Service, Fallback>(sm: SpiderMesh, options: RemoteServiceOptions): (RemoteService<Service, Fallback> & { [K in keyof Service as (Service[K] extends (...args: any) => any ? K : "")]: Service[K] extends (...args: any) => any ? ((...args: Parameters<Service[K]>) => ReturnType<Service[K]> extends (Observable<any> | Promise<Observable<any>>) ? Awaited<ReturnType<Service[K]> | Fallback> : Promise<Awaited<ReturnType<Service[K]> | Fallback>>) : null; } & { [key in keyof Service as (key extends string ? `__batch__${key}` : string)]: Service[key] extends ((...args: any) => any) ? ((...args: Parameters<Service[key]>) => Observable<{
29
- node: SpiderMeshNode;
30
- data: Awaited<ReturnType<Service[key]>>;
31
- } | {
32
- node: SpiderMeshNode;
33
- error: Error;
34
- }>) : Service[key]; });
35
- }
@@ -1,107 +0,0 @@
1
- import { catchError, filter, firstValueFrom, from, map, mergeMap, of } from "rxjs";
2
- const InvaildMethodList = new Set([
3
- 'caller',
4
- 'callee',
5
- 'arguments',
6
- 'constructor',
7
- '__defineGetter__',
8
- '__defineSetter__',
9
- 'hasOwnProperty',
10
- '__lookupGetter__',
11
- '__lookupSetter__',
12
- 'isPrototypeOf',
13
- 'propertyIsEnumerable',
14
- 'toString',
15
- 'valueOf',
16
- 'toLocaleString',
17
- '__proto__',
18
- 'onModuleInit',
19
- 'onApplicationBootstrap',
20
- 'onModuleDestroy',
21
- 'beforeApplicationShutdown',
22
- 'onApplicationShutdown'
23
- ]);
24
- export class RemoteService {
25
- sm;
26
- options;
27
- constructor(sm, options) {
28
- this.sm = sm;
29
- this.options = options;
30
- }
31
- #listRpcNodes() {
32
- const targets = this.sm.services$.value.services.get(this.options.service);
33
- if (!targets || targets.nodes.length == 0)
34
- return [];
35
- return targets.nodes.map(id => {
36
- const node = this.sm.nodes$.value.nodes.get(id);
37
- if (node && node.rpc)
38
- return node;
39
- }).filter(Boolean).map(node => node);
40
- }
41
- watch$() {
42
- return this.sm.services$.pipe(filter((e, index) => {
43
- if (index == 0)
44
- return true;
45
- if (e.last_updated_services.has(this.options.service))
46
- return true;
47
- return false;
48
- }), map(e => e.services.get(this.options.service)?.nodes || []), map(targets => targets.map(id => this.sm.nodes$.value.nodes.get(id)).filter(Boolean)));
49
- }
50
- get nodes() {
51
- return this.#listRpcNodes();
52
- }
53
- set(options) {
54
- return RemoteService.link(this.sm, {
55
- ...this.options,
56
- ...options
57
- });
58
- }
59
- wait(check = (nodes => nodes.length > 0)) {
60
- const name = this.options.service;
61
- return firstValueFrom(this.sm.services$.pipe(map(() => {
62
- const targets = this.sm.services$.value.services.get(name)?.nodes || [];
63
- const nodes = targets.map(id => this.sm.nodes$.value.nodes.get(id)).filter(Boolean);
64
- return nodes;
65
- }), mergeMap(async (targets) => check(targets)), filter(Boolean)));
66
- }
67
- static link(sm, options) {
68
- const target = new this(sm, options);
69
- const handler = {
70
- get(_, prop, receiver) {
71
- const method = prop.toString();
72
- const fn = target[prop];
73
- if (fn)
74
- return fn;
75
- if (InvaildMethodList.has(method))
76
- return () => null;
77
- if (method.startsWith('__batch__')) {
78
- const real_metod = method.split('__batch__')?.[1];
79
- return (...args) => from(target.#listRpcNodes()).pipe(mergeMap(node => (target.sm.callRemoteService({
80
- ...options,
81
- method: real_metod,
82
- args
83
- }).pipe(map(data => ({ node, data })), catchError(error => of({ node, error }))))));
84
- }
85
- return (...args) => {
86
- const response = target.sm.callRemoteService({
87
- ...options,
88
- method,
89
- args
90
- });
91
- return Object.assign(response, {
92
- then: async (s, r) => {
93
- try {
94
- s(await firstValueFrom(response));
95
- }
96
- catch (e) {
97
- r(e);
98
- }
99
- }
100
- });
101
- };
102
- }
103
- };
104
- return new Proxy(target, handler);
105
- }
106
- }
107
- //# sourceMappingURL=RemoteService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RemoteService.js","sourceRoot":"","sources":["../../../src/abstract/RemoteService.ts"],"names":[],"mappings":"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"}
@@ -1,30 +0,0 @@
1
- import { Observable } from "rxjs";
2
- import { SpiderMeshNode } from "./SpiderMeshNode.js";
3
- export type RpcRoutingOptions = {
4
- [key: string]: string | number | boolean;
5
- };
6
- export type RpcOptions<T = any> = {
7
- service: string;
8
- method: string;
9
- args: any[];
10
- fallback?: T;
11
- timeout?: number;
12
- retry?: number;
13
- node_id?: string;
14
- ip?: string;
15
- };
16
- export type RpcEvent = Partial<{
17
- rpc: RpcOptions<any> & {
18
- callback: (o: any | Promise<any> | Observable<any>) => void;
19
- };
20
- online: string;
21
- offline: string;
22
- metadata: Record<string, string | boolean | number>;
23
- }>;
24
- export declare abstract class RpcTransporter {
25
- abstract link(metadata: Observable<SpiderMeshNode>, nodes$: Observable<{
26
- nodes: Map<string, SpiderMeshNode>;
27
- last_updated_node_id: string;
28
- }>): Observable<RpcEvent>;
29
- abstract rpc<R, T>(r: RpcOptions<T>, node: SpiderMeshNode, force: boolean): Observable<R>;
30
- }
@@ -1,3 +0,0 @@
1
- export class RpcTransporter {
2
- }
3
- //# sourceMappingURL=RpcTransporter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RpcTransporter.js","sourceRoot":"","sources":["../../../src/abstract/RpcTransporter.ts"],"names":[],"mappings":"AA0BA,MAAM,OAAgB,cAAc;CASnC"}
@@ -1,18 +0,0 @@
1
- export type SpiderMeshNode = {
2
- ips: string[];
3
- host: string;
4
- namespace: string;
5
- version: number;
6
- node_id: string;
7
- online?: boolean;
8
- topics: string[];
9
- services: {
10
- [name: string]: any;
11
- };
12
- nodes: {
13
- [node_id: string]: number;
14
- };
15
- transporters: {
16
- [name: string]: any;
17
- };
18
- };
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=SpiderMeshNode.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SpiderMeshNode.js","sourceRoot":"","sources":["../../../src/abstract/SpiderMeshNode.ts"],"names":[],"mappings":""}
@@ -1,5 +0,0 @@
1
- import { BehaviorSubject, Observable } from "rxjs";
2
- import { SpiderMeshNode } from "./SpiderMeshNode.js";
3
- export declare abstract class DiscoveryTransporter {
4
- abstract link(metadata$: BehaviorSubject<SpiderMeshNode>): Observable<SpiderMeshNode>;
5
- }
@@ -1,3 +0,0 @@
1
- export class DiscoveryTransporter {
2
- }
3
- //# sourceMappingURL=DiscoveryTransporter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DiscoveryTransporter.js","sourceRoot":"","sources":["../../../src/abstracts/DiscoveryTransporter.ts"],"names":[],"mappings":"AAIA,MAAM,OAAgB,oBAAoB;CAEzC"}
@@ -1,11 +0,0 @@
1
- import { Observable } from "rxjs";
2
- import { NodesMap } from "../../src/SpiderMesh.js";
3
- import { SpiderMeshNode } from "./SpiderMeshNode.js";
4
- export type PubsubTransporterEvent = {
5
- metadata: Record<string, string | boolean | number>;
6
- };
7
- export declare abstract class PubsubTransporter {
8
- abstract link(metadata: Observable<SpiderMeshNode>, nodes$: Observable<NodesMap>): Observable<PubsubTransporterEvent>;
9
- abstract publish<T>(topic: string, data: T): Promise<void>;
10
- abstract listen<T>(topic: string): Observable<T>;
11
- }
@@ -1,3 +0,0 @@
1
- export class PubsubTransporter {
2
- }
3
- //# sourceMappingURL=PubsubTransporter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PubsubTransporter.js","sourceRoot":"","sources":["../../../src/abstracts/PubsubTransporter.ts"],"names":[],"mappings":"AAUA,MAAM,OAAgB,iBAAiB;CAItC"}
@@ -1,38 +0,0 @@
1
- import { Observable } from "rxjs";
2
- import { SpiderMeshNode } from "./SpiderMeshNode.js";
3
- import { RpcOptions } from "./RpcTransporter.js";
4
- import { ServiceChecker, SpiderMesh } from "../../src/SpiderMesh.js";
5
- export type IsUnknown<T, A, B> = unknown extends T ? ([T] extends [unknown] ? A : B) : B;
6
- export type RemoteServiceOptions = Partial<RpcOptions<any>> & {
7
- service: string;
8
- };
9
- export type Unwrap<T> = Awaited<T> extends Observable<infer U> ? Observable<U> : (T extends Promise<infer V> ? Promise<V> : Promise<T>);
10
- export type Fallbackable<Fn, FallbackValue = unknown> = Fn extends (...args: infer A) => infer R ? ((...args: A) => IsUnknown<FallbackValue, Unwrap<R>, FallbackValue | Unwrap<R>>) : undefined;
11
- export type FunctionOnly<T, Fallback> = T extends (...args: any[]) => any ? Fallback : never;
12
- export declare class RemoteServiceLinker<Service> {
13
- #private;
14
- private sm;
15
- private options;
16
- constructor(sm: SpiderMesh, options: RemoteServiceOptions);
17
- watch(): Observable<(SpiderMeshNode & {
18
- rpc?: string;
19
- })[]>;
20
- get nodes(): (SpiderMeshNode & {
21
- rpc?: string;
22
- })[];
23
- set<Fallback>(options: Omit<Partial<RpcOptions<Fallback>>, 'service' | 'method' | 'args'>): Mapper<Service, Fallback>;
24
- wait(check?: ServiceChecker, stop$?: Observable<any>): Promise<boolean>;
25
- static link<Service, Fallback = never>(sm: SpiderMesh, options: RemoteServiceOptions): Mapper<Service, Fallback>;
26
- }
27
- export type Mapper<Service, Fallback = unknown> = RemoteServiceLinker<Service> & ({
28
- [K in keyof Service as FunctionOnly<Service[K], K>]: Fallbackable<Service[K], Fallback>;
29
- } & {
30
- [key in keyof Service as FunctionOnly<Service[key], key extends string ? `__batch__${key}` : never>]: Service[key] extends ((...args: any) => any) ? ((...args: Parameters<Service[key]>) => Observable<{
31
- node: SpiderMeshNode;
32
- data: Awaited<ReturnType<Service[key]>>;
33
- } | {
34
- node: SpiderMeshNode;
35
- error: Error;
36
- }>) : never;
37
- });
38
- export type RemoteService<Service> = Mapper<Service>;
@@ -1,105 +0,0 @@
1
- import { catchError, EMPTY, filter, firstValueFrom, from, map, mergeMap, of } from "rxjs";
2
- const InvaildMethodList = new Set([
3
- 'caller',
4
- 'callee',
5
- 'arguments',
6
- 'constructor',
7
- '__defineGetter__',
8
- '__defineSetter__',
9
- 'hasOwnProperty',
10
- '__lookupGetter__',
11
- '__lookupSetter__',
12
- 'isPrototypeOf',
13
- 'propertyIsEnumerable',
14
- 'toString',
15
- 'valueOf',
16
- 'toLocaleString',
17
- '__proto__',
18
- 'onModuleInit',
19
- 'onApplicationBootstrap',
20
- 'onModuleDestroy',
21
- 'beforeApplicationShutdown',
22
- 'onApplicationShutdown'
23
- ]);
24
- export class RemoteServiceLinker {
25
- sm;
26
- options;
27
- constructor(sm, options) {
28
- this.sm = sm;
29
- this.options = options;
30
- }
31
- #listRpcNodes() {
32
- const targets = this.sm.services$.value.services.get(this.options.service);
33
- if (!targets || targets.nodes.length == 0)
34
- return [];
35
- return targets.nodes.map(id => {
36
- const node = this.sm.nodes$.value.nodes.get(id);
37
- if (node && node.rpc)
38
- return node;
39
- }).filter(Boolean).map(node => node);
40
- }
41
- watch() {
42
- return this.sm.services$.pipe(filter((e, index) => {
43
- if (index == 0)
44
- return true;
45
- if (e.last_updated_services.has(this.options.service))
46
- return true;
47
- return false;
48
- }), map(e => e.services.get(this.options.service)?.nodes || []), map(targets => targets.map(id => this.sm.nodes$.value.nodes.get(id)).filter(Boolean)));
49
- }
50
- get nodes() {
51
- return this.#listRpcNodes();
52
- }
53
- set(options) {
54
- return RemoteServiceLinker.link(this.sm, {
55
- ...this.options,
56
- ...options
57
- });
58
- }
59
- wait(check = (nodes => nodes.length > 0), stop$ = EMPTY) {
60
- return this.sm.waitServiceOnline(this.options.service, check, stop$);
61
- }
62
- static link(sm, options) {
63
- const target = new this(sm, options);
64
- const handler = {
65
- get(_, prop) {
66
- const method = prop.toString();
67
- if (method == 'then')
68
- return null;
69
- if (InvaildMethodList.has(method))
70
- return () => null;
71
- const fn = target[prop];
72
- if (fn)
73
- return (typeof fn === 'function') ? fn.bind(target) : fn;
74
- if (method.startsWith('__batch__')) {
75
- const real_metod = method.split('__batch__')?.[1];
76
- return (...args) => from(target.#listRpcNodes()).pipe(mergeMap(node => (target.sm.callRemoteService({
77
- ...options,
78
- method: real_metod,
79
- args
80
- }).pipe(map(data => ({ node, data })), catchError(error => of({ node, error }))))));
81
- }
82
- return (...args) => {
83
- const Service = target.sm.callRemoteService({
84
- ...options,
85
- method,
86
- args
87
- });
88
- return Object.assign(Service, {
89
- then: async (s, r) => {
90
- try {
91
- s(await firstValueFrom(Service));
92
- }
93
- catch (e) {
94
- r(e);
95
- }
96
- }
97
- });
98
- };
99
- }
100
- };
101
- return new Proxy(target, handler);
102
- }
103
- }
104
- const a = {};
105
- //# sourceMappingURL=RemoteService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RemoteService.js","sourceRoot":"","sources":["../../../src/abstracts/RemoteService.ts"],"names":[],"mappings":"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"}
@@ -1,30 +0,0 @@
1
- import { Observable } from "rxjs";
2
- import { SpiderMeshNode } from "./SpiderMeshNode.js";
3
- export type RpcRoutingOptions = {
4
- [key: string]: string | number | boolean;
5
- };
6
- export type RpcOptions<T = any> = {
7
- service: string;
8
- method: string;
9
- args: any[];
10
- fallback?: T;
11
- timeout?: number;
12
- retry?: number;
13
- node_id?: string;
14
- ip?: string;
15
- };
16
- export type RpcEvent = Partial<{
17
- rpc: RpcOptions<any> & {
18
- callback: (o: any | Promise<any> | Observable<any>) => void;
19
- };
20
- online: string;
21
- offline: string;
22
- metadata: Record<string, string | boolean | number>;
23
- }>;
24
- export declare abstract class RpcTransporter {
25
- abstract link(metadata: Observable<SpiderMeshNode>, nodes$: Observable<{
26
- nodes: Map<string, SpiderMeshNode>;
27
- last_updated_node_id: string;
28
- }>): Observable<RpcEvent>;
29
- abstract rpc<R, T>(r: RpcOptions<T>, node: SpiderMeshNode, force: boolean): Observable<R>;
30
- }