@spider-mesh/core 2.0.7 → 2.0.9

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 (46) hide show
  1. package/build/src/SpiderMesh.d.ts +20 -11
  2. package/build/src/SpiderMesh.js +32 -147
  3. package/build/src/SpiderMesh.js.map +1 -1
  4. package/build/src/abstract/DiscoveryTransporter.d.ts +5 -0
  5. package/build/src/abstract/DiscoveryTransporter.js +3 -0
  6. package/build/src/abstract/DiscoveryTransporter.js.map +1 -0
  7. package/build/src/abstract/PubsubTransporter.d.ts +11 -0
  8. package/build/src/abstract/PubsubTransporter.js +3 -0
  9. package/build/src/abstract/PubsubTransporter.js.map +1 -0
  10. package/build/src/abstract/RemoteService.d.ts +35 -0
  11. package/build/src/abstract/RemoteService.js +107 -0
  12. package/build/src/abstract/RemoteService.js.map +1 -0
  13. package/build/src/abstract/RpcTransporter.d.ts +30 -0
  14. package/build/src/abstract/RpcTransporter.js +3 -0
  15. package/build/src/abstract/RpcTransporter.js.map +1 -0
  16. package/build/src/abstract/SpiderMeshNode.d.ts +18 -0
  17. package/build/src/abstract/SpiderMeshNode.js +2 -0
  18. package/build/src/abstract/SpiderMeshNode.js.map +1 -0
  19. package/build/src/abstracts/DiscoveryTransporter.d.ts +5 -0
  20. package/build/src/abstracts/DiscoveryTransporter.js +3 -0
  21. package/build/src/abstracts/DiscoveryTransporter.js.map +1 -0
  22. package/build/src/abstracts/PubsubTransporter.d.ts +11 -0
  23. package/build/src/abstracts/PubsubTransporter.js +3 -0
  24. package/build/src/abstracts/PubsubTransporter.js.map +1 -0
  25. package/build/src/abstracts/RemoteService.d.ts +38 -0
  26. package/build/src/abstracts/RemoteService.js +102 -0
  27. package/build/src/abstracts/RemoteService.js.map +1 -0
  28. package/build/src/abstracts/RpcTransporter.d.ts +30 -0
  29. package/build/src/abstracts/RpcTransporter.js +3 -0
  30. package/build/src/abstracts/RpcTransporter.js.map +1 -0
  31. package/build/src/abstracts/SpiderMeshNode.d.ts +18 -0
  32. package/build/src/abstracts/SpiderMeshNode.js +2 -0
  33. package/build/src/abstracts/SpiderMeshNode.js.map +1 -0
  34. package/build/src/decorators/Microservice.d.ts +1 -1
  35. package/build/src/decorators/NestJSLinkMicroservice.d.ts +2 -1
  36. package/build/src/decorators/NestJSLinkMicroservice.js +2 -1
  37. package/build/src/decorators/NestJSLinkMicroservice.js.map +1 -1
  38. package/build/src/index.d.ts +5 -5
  39. package/build/src/index.js +5 -5
  40. package/build/src/index.js.map +1 -1
  41. package/build/src/interfaces/RemoteService.d.ts +29 -15
  42. package/build/src/interfaces/RemoteService.js +106 -1
  43. package/build/src/interfaces/RemoteService.js.map +1 -1
  44. package/build/src/interfaces/RpcTransporter.d.ts +1 -1
  45. package/build/tsconfig.tsbuildinfo +1 -1
  46. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RpcTransporter.js","sourceRoot":"","sources":["../../../src/abstract/RpcTransporter.ts"],"names":[],"mappings":"AA0BA,MAAM,OAAgB,cAAc;CASnC"}
@@ -0,0 +1,18 @@
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
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=SpiderMeshNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpiderMeshNode.js","sourceRoot":"","sources":["../../../src/abstract/SpiderMeshNode.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
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
+ }
@@ -0,0 +1,3 @@
1
+ export class DiscoveryTransporter {
2
+ }
3
+ //# sourceMappingURL=DiscoveryTransporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DiscoveryTransporter.js","sourceRoot":"","sources":["../../../src/abstracts/DiscoveryTransporter.ts"],"names":[],"mappings":"AAIA,MAAM,OAAgB,oBAAoB;CAEzC"}
@@ -0,0 +1,11 @@
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
+ }
@@ -0,0 +1,3 @@
1
+ export class PubsubTransporter {
2
+ }
3
+ //# sourceMappingURL=PubsubTransporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PubsubTransporter.js","sourceRoot":"","sources":["../../../src/abstracts/PubsubTransporter.ts"],"names":[],"mappings":"AAUA,MAAM,OAAgB,iBAAiB;CAItC"}
@@ -0,0 +1,38 @@
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) => Observable<infer R> | Promise<infer R> | (infer R) ? ((...args: A) => IsUnknown<FallbackValue, Unwrap<R>, (FallbackValue extends Observable<any> ? FallbackValue : Promise<FallbackValue> | Unwrap<R>)>) : undefined;
11
+ export type FunctionOnly<T, Fallback> = T extends (...args: any[]) => any ? Fallback : never;
12
+ export declare class RemoteService<Response> {
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'>): RemoteService<Response> & { [K in keyof Response as FunctionOnly<Response[K], K>]: Fallbackable<Response[K], Fallback>; } & { [key in keyof Response as FunctionOnly<Response[key], key extends string ? `__batch__${key}` : never>]: Response[key] extends (...args: any) => any ? (...args: Parameters<Response[key]>) => Observable<{
24
+ node: SpiderMeshNode;
25
+ data: Awaited<ReturnType<Response[key]>>;
26
+ } | {
27
+ node: SpiderMeshNode;
28
+ error: Error;
29
+ }> : never; };
30
+ wait(check?: ServiceChecker): Promise<true>;
31
+ static link<Service, Fallback = never>(sm: SpiderMesh, options: RemoteServiceOptions): RemoteService<Service> & ({ [K in keyof Service as FunctionOnly<Service[K], K>]: Fallbackable<Service[K], Fallback>; } & { [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<{
32
+ node: SpiderMeshNode;
33
+ data: Awaited<ReturnType<Service[key]>>;
34
+ } | {
35
+ node: SpiderMeshNode;
36
+ error: Error;
37
+ }>) : never; });
38
+ }
@@ -0,0 +1,102 @@
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
+ return this.sm.waitServiceOnline(this.options.service, check);
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
+ const fn = target[prop];
68
+ if (fn)
69
+ return fn;
70
+ if (InvaildMethodList.has(method))
71
+ return () => null;
72
+ if (method.startsWith('__batch__')) {
73
+ const real_metod = method.split('__batch__')?.[1];
74
+ return (...args) => from(target.#listRpcNodes()).pipe(mergeMap(node => (target.sm.callRemoteService({
75
+ ...options,
76
+ method: real_metod,
77
+ args
78
+ }).pipe(map(data => ({ node, data })), catchError(error => of({ node, error }))))));
79
+ }
80
+ return (...args) => {
81
+ const response = target.sm.callRemoteService({
82
+ ...options,
83
+ method,
84
+ args
85
+ });
86
+ return Object.assign(response, {
87
+ then: async (s, r) => {
88
+ try {
89
+ s(await firstValueFrom(response));
90
+ }
91
+ catch (e) {
92
+ r(e);
93
+ }
94
+ }
95
+ });
96
+ };
97
+ }
98
+ };
99
+ return new Proxy(target, handler);
100
+ }
101
+ }
102
+ //# sourceMappingURL=RemoteService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoteService.js","sourceRoot":"","sources":["../../../src/abstracts/RemoteService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
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
+ }
@@ -0,0 +1,3 @@
1
+ export class RpcTransporter {
2
+ }
3
+ //# sourceMappingURL=RpcTransporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RpcTransporter.js","sourceRoot":"","sources":["../../../src/abstracts/RpcTransporter.ts"],"names":[],"mappings":"AA0BA,MAAM,OAAgB,cAAc;CASnC"}
@@ -0,0 +1,18 @@
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
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=SpiderMeshNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpiderMeshNode.js","sourceRoot":"","sources":["../../../src/abstracts/SpiderMeshNode.ts"],"names":[],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  import { BehaviorSubject } from "rxjs";
2
- import { SpiderMeshNode } from "../interfaces/SpiderMeshNode.js";
2
+ import { SpiderMeshNode } from "../abstracts/SpiderMeshNode.js";
3
3
  export declare const services$: BehaviorSubject<{
4
4
  [name: string]: {
5
5
  name: string;
@@ -1,6 +1,7 @@
1
+ import { RemoteService } from "src/abstracts/RemoteService.js";
1
2
  import { SpiderMesh } from "../SpiderMesh.js";
2
3
  export declare const NestJSLinkMicroservice: (factory: any) => {
3
4
  provide: any;
4
5
  inject: (typeof SpiderMesh)[];
5
- useFactory: (sm: SpiderMesh) => import("../index.js").RemoteService<unknown>;
6
+ useFactory: (sm: SpiderMesh) => RemoteService<unknown> & {} & {};
6
7
  };
@@ -1,7 +1,8 @@
1
+ import { RemoteService } from "src/abstracts/RemoteService.js";
1
2
  import { SpiderMesh } from "../SpiderMesh.js";
2
3
  export const NestJSLinkMicroservice = (factory) => ({
3
4
  provide: factory,
4
5
  inject: [SpiderMesh],
5
- useFactory: (sm) => sm.linkRemoteService(factory)
6
+ useFactory: (sm) => RemoteService.link(sm, { service: factory.name })
6
7
  });
7
8
  //# sourceMappingURL=NestJSLinkMicroservice.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NestJSLinkMicroservice.js","sourceRoot":"","sources":["../../../src/decorators/NestJSLinkMicroservice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAAY,EAAE,EAAE,CAAC,CAAC;IACrD,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,CAAC,UAAU,CAAC;IACpB,UAAU,EAAE,CAAC,EAAc,EAAE,EAAE,CAAC,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC;CAChE,CAAC,CAAA"}
1
+ {"version":3,"file":"NestJSLinkMicroservice.js","sourceRoot":"","sources":["../../../src/decorators/NestJSLinkMicroservice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAAY,EAAE,EAAE,CAAC,CAAC;IACrD,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,CAAC,UAAU,CAAC;IACpB,UAAU,EAAE,CAAC,EAAc,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;CACpF,CAAC,CAAA"}
@@ -1,10 +1,9 @@
1
1
  export { BeforeMicroserviceOnline } from './decorators/BeforeMicroserviceOnline.js';
2
2
  export { Microservice } from './decorators/Microservice.js';
3
3
  export * from './SpiderMesh.js';
4
- export * from './interfaces/RpcTransporter.js';
5
- export * from './interfaces/PubsubTransporter.js';
6
- export * from './interfaces/RemoteService.js';
7
- export * from './interfaces/SpiderMeshNode.js';
4
+ export * from './abstracts/RpcTransporter.js';
5
+ export * from './abstracts/PubsubTransporter.js';
6
+ export * from './abstracts/SpiderMeshNode.js';
8
7
  export * from './decorators/NestJSExposeMicroservice.js';
9
8
  export * from './decorators/NestJSLinkMicroservice.js';
10
9
  export * from './decorators/NestJSLinkEvent.js';
@@ -13,4 +12,5 @@ export * from './helpers/randomUUID.js';
13
12
  export * from './helpers/MicroserviceException.js';
14
13
  export * from './helpers/MicroserviceOfflineException.js';
15
14
  export * from './helpers/LimitConcurrency.js';
16
- export * from './interfaces/DiscoveryTransporter.js';
15
+ export * from './abstracts/DiscoveryTransporter.js';
16
+ export * from './abstracts/RemoteService.js';
@@ -1,10 +1,9 @@
1
1
  export { BeforeMicroserviceOnline } from './decorators/BeforeMicroserviceOnline.js';
2
2
  export { Microservice } from './decorators/Microservice.js';
3
3
  export * from './SpiderMesh.js';
4
- export * from './interfaces/RpcTransporter.js';
5
- export * from './interfaces/PubsubTransporter.js';
6
- export * from './interfaces/RemoteService.js';
7
- export * from './interfaces/SpiderMeshNode.js';
4
+ export * from './abstracts/RpcTransporter.js';
5
+ export * from './abstracts/PubsubTransporter.js';
6
+ export * from './abstracts/SpiderMeshNode.js';
8
7
  export * from './decorators/NestJSExposeMicroservice.js';
9
8
  export * from './decorators/NestJSLinkMicroservice.js';
10
9
  export * from './decorators/NestJSLinkEvent.js';
@@ -13,5 +12,6 @@ export * from './helpers/randomUUID.js';
13
12
  export * from './helpers/MicroserviceException.js';
14
13
  export * from './helpers/MicroserviceOfflineException.js';
15
14
  export * from './helpers/LimitConcurrency.js';
16
- export * from './interfaces/DiscoveryTransporter.js';
15
+ export * from './abstracts/DiscoveryTransporter.js';
16
+ export * from './abstracts/RemoteService.js';
17
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAA;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gCAAgC,CAAA;AAC9C,cAAc,mCAAmC,CAAA;AACjD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,0CAA0C,CAAA;AACxD,cAAc,wCAAwC,CAAA;AACtD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,wCAAwC,CAAA;AACtD,cAAc,yBAAyB,CAAA;AACvC,cAAc,oCAAoC,CAAA;AAClD,cAAc,2CAA2C,CAAA;AACzD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,sCAAsC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAA;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,cAAc,iBAAiB,CAAA;AAC/B,cAAc,+BAA+B,CAAA;AAC7C,cAAc,kCAAkC,CAAA;AAChD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,0CAA0C,CAAA;AACxD,cAAc,wCAAwC,CAAA;AACtD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,wCAAwC,CAAA;AACtD,cAAc,yBAAyB,CAAA;AACvC,cAAc,oCAAoC,CAAA;AAClD,cAAc,2CAA2C,CAAA;AACzD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,qCAAqC,CAAA;AACnD,cAAc,8BAA8B,CAAA"}
@@ -1,21 +1,35 @@
1
- import { Observable, Subject } from "rxjs";
1
+ import { Observable } from "rxjs";
2
2
  import { SpiderMeshNode } from "./SpiderMeshNode.js";
3
3
  import { RpcOptions } from "./RpcTransporter.js";
4
- export type RemoteService<T = {
5
- [key: string]: any;
6
- }, Fallback = null> = ({
7
- wait$: (fn?: (nodes: SpiderMeshNode[]) => boolean | Promise<boolean>) => Promise<void>;
8
- set: <F>(options: Partial<RpcOptions<F>>) => RemoteService<T, F>;
9
- nodes: SpiderMeshNode[];
10
- watch$: () => Subject<void>;
11
- } & {
12
- [K in keyof T as (T[K] extends (...args: any) => any ? K : '')]: T[K] extends (...args: any) => any ? ((...args: Parameters<T[K]>) => ReturnType<T[K]> extends (Observable<any> | Promise<Observable<any>>) ? Awaited<ReturnType<T[K]> | Fallback> : Promise<Awaited<ReturnType<T[K]> | Fallback>>) : null;
13
- } & {
14
- [key in keyof T as (key extends string ? `__batch__${key}` : string)]: T[key] extends ((...args: any) => any) ? ((...args: Parameters<T[key]>) => Observable<{
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<{
15
21
  node: SpiderMeshNode;
16
- data: Awaited<ReturnType<T[key]>>;
22
+ data: Awaited<ReturnType<Response[key]>>;
17
23
  } | {
18
24
  node: SpiderMeshNode;
19
25
  error: Error;
20
- }>) : T[key];
21
- });
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,2 +1,107 @@
1
- export {};
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
+ }
2
107
  //# sourceMappingURL=RemoteService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RemoteService.js","sourceRoot":"","sources":["../../../src/interfaces/RemoteService.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"RemoteService.js","sourceRoot":"","sources":["../../../src/interfaces/RemoteService.ts"],"names":[],"mappings":"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"}
@@ -26,5 +26,5 @@ export declare abstract class RpcTransporter {
26
26
  nodes: Map<string, SpiderMeshNode>;
27
27
  last_updated_node_id: string;
28
28
  }>): Observable<RpcEvent>;
29
- abstract rpc<T>(r: RpcOptions<T>, node: SpiderMeshNode, force: boolean): Observable<T>;
29
+ abstract rpc<R, T>(r: RpcOptions<T>, node: SpiderMeshNode, force: boolean): Observable<R>;
30
30
  }
@@ -1 +1 @@
1
- {"root":["../const.ts","../env.d.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/limitconcurrency.ts","../src/helpers/microserviceexception.ts","../src/helpers/microservicenotfound.ts","../src/helpers/microserviceofflineexception.ts","../src/helpers/microservicerpctimeout.ts","../src/helpers/randomuuid.ts","../src/helpers/sleep.ts","../src/interfaces/discoverytransporter.ts","../src/interfaces/pubsubtransporter.ts","../src/interfaces/remoteservice.ts","../src/interfaces/rpctransporter.ts","../src/interfaces/spidermeshnode.ts"],"version":"5.8.2"}
1
+ {"root":["../const.ts","../env.d.ts","../src/spidermesh.ts","../src/index.ts","../src/abstracts/discoverytransporter.ts","../src/abstracts/pubsubtransporter.ts","../src/abstracts/remoteservice.ts","../src/abstracts/rpctransporter.ts","../src/abstracts/spidermeshnode.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/limitconcurrency.ts","../src/helpers/microserviceexception.ts","../src/helpers/microservicenotfound.ts","../src/helpers/microserviceofflineexception.ts","../src/helpers/microservicerpctimeout.ts","../src/helpers/randomuuid.ts","../src/helpers/sleep.ts"],"version":"5.8.2"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@spider-mesh/core",
3
3
  "type": "module",
4
- "version": "2.0.7",
4
+ "version": "2.0.9",
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",