@spider-mesh/core 2.0.42 → 2.0.43

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/README.md CHANGED
@@ -147,14 +147,16 @@ type RpcOptions<T = any> = {
147
147
  Examples:
148
148
 
149
149
  ```ts
150
+ import { firstValueFrom } from 'rxjs'
151
+
150
152
  await users.set({ timeout: 3000, retry: 2 }).getUser('42')
151
153
 
152
- await mesh.callRemoteService({
154
+ await firstValueFrom(mesh.callRemoteService({
153
155
  service: 'UserService',
154
156
  method: 'getUser',
155
157
  args: ['42'],
156
158
  transporter: 'Http2Rpc',
157
- })
159
+ }))
158
160
  ```
159
161
 
160
162
  `transporter` may be:
@@ -202,10 +204,10 @@ Current public methods:
202
204
  - `getPeer(nodeId)`
203
205
  - `upsertPeer(node)`
204
206
  - `removePeer(nodeId)`
205
- - `listPeers({ service? })`
207
+ - `listPeers(service?)`
206
208
  - `watch(service?)`
207
209
  - `pickRpcNode(service, { node_id? })`
208
- - `getRpcTransporterName(service, { node_id? })`
210
+ - `getRpcTransporterName(service)`
209
211
  - `listTopicNodes(topic)`
210
212
 
211
213
  ## Transporter Contracts
@@ -224,7 +226,7 @@ type RpcTransporter = Observable<RpcEvent> & {
224
226
  ### Pubsub transporter
225
227
 
226
228
  ```ts
227
- type PubsubTransporter = {
229
+ type PubsubTransporter = Observable<PubsubEvent> & {
228
230
  publish<T>(topic: string, data: T): Promise<void>
229
231
  listen<T>(topic: string): Observable<T>
230
232
  linkRegistry?(registry: Registry): void
@@ -245,10 +247,10 @@ type DiscoveryTransporter = Observable<DiscoveryEvent> & {
245
247
  The package exports:
246
248
 
247
249
  - `NestJSExposeMicroservice(factory, metadata?)`
248
- - `NestJSLinkMicroservice(factory, transporter)`
250
+ - `NestJSLinkMicroservice(factory, transporter?)`
249
251
  - `NestJSLinkEvent(factory)`
250
252
 
251
- `NestJSLinkMicroservice(factory, transporter)` forwards the transporter selector into `RemoteServiceLinker.link()`.
253
+ `NestJSLinkMicroservice(factory, transporter?)` forwards the optional transporter selector into `RemoteServiceLinker.link()`.
252
254
 
253
255
  ## Companion Packages
254
256
 
@@ -280,37 +282,30 @@ Build with:
280
282
  bun run build
281
283
  ```
282
284
 
283
- ## Notes
284
-
285
- - This package is ESM-only.
286
- - Repository source uses emitted `.js` relative specifiers.
287
- - `LOCAL_SERVICES$` is process-global inside one process.
288
-
289
- await userCreated.publish(new UserCreatedEvent('42', 'ada@example.com'))
290
-
291
- userCreated.listen().subscribe(event => {
292
- console.log(event.id)
293
- })
294
- ```
295
-
296
285
  ## NestJS Integration
297
286
 
298
287
  ### Register `SpiderMesh` as a provider
299
288
 
300
289
  ```ts
301
290
  import { Module } from '@nestjs/common'
302
- import { SpiderMesh } from '@spider-mesh/core'
291
+ import { Registry, SpiderMesh } from '@spider-mesh/core'
303
292
  import { Http2Pubsub, Http2Rpc, UdpDiscovery } from '@spider-mesh/tcp'
304
293
 
305
294
  @Module({
306
295
  providers: [
307
- SpiderMesh.asProvider({
308
- transporters: [
309
- UdpDiscovery,
310
- Http2Rpc,
311
- Http2Pubsub,
312
- ],
313
- }),
296
+ {
297
+ provide: SpiderMesh,
298
+ useFactory: () => {
299
+ const registry = new Registry()
300
+ const mesh = new SpiderMesh(registry)
301
+
302
+ mesh.registerTransporter(new UdpDiscovery())
303
+ mesh.registerTransporter(new Http2Rpc())
304
+ mesh.registerTransporter(new Http2Pubsub())
305
+
306
+ return mesh
307
+ },
308
+ },
314
309
  ],
315
310
  exports: [SpiderMesh],
316
311
  })
@@ -372,6 +367,12 @@ export class CheckoutService {
372
367
  export class CheckoutModule {}
373
368
  ```
374
369
 
370
+ Pass a transporter only when you need to force a specific RPC transporter:
371
+
372
+ ```ts
373
+ NestJSLinkMicroservice(BillingService, 'Http2Rpc')
374
+ ```
375
+
375
376
  ### Inject an event binding in NestJS
376
377
 
377
378
  ```ts
@@ -402,85 +403,6 @@ export class AuditService {
402
403
  export class AuditModule {}
403
404
  ```
404
405
 
405
- ## Transporter Contract
406
-
407
- Concrete transport implementations can live in companion packages such as `@spider-mesh/tcp` and `@spider-mesh/ws`, or in your own application code.
408
-
409
- You can also provide your own classes that implement one or more transporter contracts exported by `@spider-mesh/core`.
410
-
411
- ### Public API map
412
-
413
- - `SpiderMesh`: runtime coordinator for services, events, discovery, and transporters
414
- - `RemoteServiceLinker.link()`: creates a typed remote proxy
415
- - `@Microservice()`: exposes a local class instance as a remote service
416
- - `SpiderMesh.linkEvent()`: creates a topic binding for publish and subscribe
417
- - `RpcTransporter`: RPC transporter contract
418
- - `DiscoveryTransporter`: discovery transporter contract
419
- - `PubsubTransporter`: pubsub transporter contract
420
-
421
- ### RPC transporter
422
-
423
- ```ts
424
- type RpcMessage = {
425
- node_id: string
426
- packet: RpcPacket
427
- }
428
-
429
- type RpcEvent = Partial<{
430
- rpc: RpcMessage
431
- offline: string
432
- endpoints: Record<string, string | boolean | number>
433
- }>
434
-
435
- type RpcTransporter = Observable<RpcEvent> & {
436
- send(data: RpcPacket, node: SpiderMeshNode): Promise<void>
437
- }
438
- ```
439
-
440
- The RPC observable can emit:
441
-
442
- - `rpc`: inbound RPC message shaped as `{ node_id, packet }`
443
- - `offline`: node offline event
444
- - `endpoints`: transporter metadata to attach to the current node
445
-
446
- The internal RPC wire protocol supports:
447
-
448
- - `request`
449
- - `response`
450
- - `cancel`
451
-
452
- `response` packets can carry:
453
-
454
- - `data`
455
- - `error`
456
- - `completed`
457
-
458
- ### Discovery transporter
459
-
460
- ```ts
461
- type DiscoveryEvent = {
462
- discovered: SpiderMeshNode
463
- }
464
-
465
- type DiscoveryTransporter = Observable<DiscoveryEvent> & {
466
- broadcast(
467
- data: MdnsMessage<NodeMetadata>,
468
- ips: string[],
469
- ): Promise<void>
470
- }
471
- ```
472
-
473
- Discovery transporters stream remote node snapshots into the mesh, and `SpiderMesh` itself calls `broadcast()` whenever local node metadata changes.
474
-
475
- ### Pubsub transporter
476
-
477
- ```ts
478
- type PubsubTransporter = {
479
- publish<T>(topic: string, data: T): Promise<void>
480
- listen<T>(topic: string): Observable<T>
481
- }
482
- ```
483
-
484
406
  ## Error Model
485
407
 
486
408
  The core defines these error codes for RPC flows:
@@ -499,21 +421,17 @@ The core defines these error codes for RPC flows:
499
421
  The package also exports:
500
422
 
501
423
  - `LimitConcurrency(limit)` and `LimitConcurrentRunning(limit)` for throttling async method execution
502
- - `randomUUID()` for Node.js, browser, and React Native compatible UUID generation using ESM-safe runtime detection
503
- - `MicroserviceException` types for common RPC error codes
504
-
505
- ## Build
506
-
507
- ```bash
508
- bun run build
509
- ```
424
+ - `MicroserviceError` for common RPC error codes
510
425
 
511
426
  ## Notes
512
427
 
428
+ - This package is ESM-only.
429
+ - Repository source uses emitted `.js` relative specifiers.
430
+ - `LOCAL_SERVICES$` is process-global inside one process.
513
431
  - Local services are registered when their class instances are constructed.
514
432
  - Service identity is based on the class name.
515
433
  - Event topic identity is based on the event class name.
516
- - RPC target selection is round-robin unless you force `node_id` or `ip`.
434
+ - RPC target selection is round-robin unless you force `node_id`.
517
435
  - `SpiderMesh` owns RPC stream lifecycle, timeout, retry, and cancel behavior.
518
436
  - Transporters focus on byte transport, pubsub topic IO, and discovery broadcasts.
519
437
  - The root package entry intentionally focuses on runtime-agnostic APIs and shared contracts.
@@ -9,11 +9,9 @@ export declare class Registry {
9
9
  getPeer(nodeId: string): SpiderMeshNode | undefined;
10
10
  upsertPeer(node: SpiderMeshNode): SpiderMeshNode;
11
11
  removePeer(nodeId: string): boolean;
12
- listPeers(options?: {
13
- service?: string;
14
- }): SpiderMeshNode[];
12
+ listPeers(service?: string): SpiderMeshNode[];
15
13
  watch(service?: string): import("rxjs").Observable<SpiderMeshNode[]>;
16
14
  pickRpcNode(service: string, options?: RegistryPickRpcTargetOptions): string | null;
17
- getRpcTransporterName(service: string, options?: RegistryPickRpcTargetOptions): string | null;
15
+ getRpcTransporterName(service: string): string | undefined;
18
16
  listTopicNodes(topic: string): SpiderMeshNode[];
19
17
  }
@@ -1,11 +1,15 @@
1
1
  import { BehaviorSubject, map } from 'rxjs';
2
2
  export class Registry {
3
3
  nodes$ = new BehaviorSubject(new Map());
4
+ #transporters = new Map();
4
5
  #rrIndexes = new Map();
5
6
  getPeer(nodeId) {
6
7
  return this.nodes$.value.get(nodeId);
7
8
  }
8
9
  upsertPeer(node) {
10
+ node.transporters.rpc && Object.keys(node.services).forEach(service => {
11
+ this.#transporters.set(service, node.transporters.rpc);
12
+ });
9
13
  const nodes = new Map(this.nodes$.value);
10
14
  const current = nodes.get(node.node_id);
11
15
  nodes.set(node.node_id, {
@@ -36,15 +40,15 @@ export class Registry {
36
40
  }
37
41
  return deleted;
38
42
  }
39
- listPeers(options = {}) {
43
+ listPeers(service) {
40
44
  return [...this.nodes$.value.values()].filter(node => {
41
- if (options.service && node.services[options.service] == undefined)
45
+ if (service && node.services[service] == undefined)
42
46
  return false;
43
47
  return true;
44
48
  });
45
49
  }
46
50
  watch(service) {
47
- return this.nodes$.pipe(map(() => this.listPeers({ service })));
51
+ return this.nodes$.pipe(map(() => this.listPeers(service)));
48
52
  }
49
53
  pickRpcNode(service, options = {}) {
50
54
  if (options.node_id) {
@@ -55,20 +59,15 @@ export class Registry {
55
59
  return null;
56
60
  return node.node_id;
57
61
  }
58
- const targets = this.listPeers({ service });
62
+ const targets = this.listPeers(service);
59
63
  if (targets.length === 0)
60
64
  return null;
61
- const index = this.#rrIndexes.get(service) || 0;
62
- this.#rrIndexes.set(service, (index + 1) % targets.length);
63
- return targets[index % targets.length]?.node_id || null;
65
+ const index = ((this.#rrIndexes.get(service) || 0) + 1) % targets.length;
66
+ this.#rrIndexes.set(service, index);
67
+ return targets[index]?.node_id;
64
68
  }
65
- getRpcTransporterName(service, options = {}) {
66
- const nodeId = options.node_id || this.pickRpcNode(service, options);
67
- if (!nodeId)
68
- return null;
69
- const node = this.getPeer(nodeId);
70
- const transporter = node?.transporters?.rpc;
71
- return typeof transporter === 'string' ? transporter : null;
69
+ getRpcTransporterName(service) {
70
+ return this.#transporters.get(service);
72
71
  }
73
72
  listTopicNodes(topic) {
74
73
  return [...this.nodes$.value.values()].filter(node => node.topics.includes(topic));
@@ -1 +1 @@
1
- {"version":3,"file":"Registry.js","sourceRoot":"","sources":["../../src/Registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Registry.js","sourceRoot":"","sources":["../../src/Registry.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { BehaviorSubject, catchError, EMPTY, filter, finalize, from, lastValueFrom, map, mergeMap, Observable, of, retry, share, Subject, Subscription, take, tap, throwError, timeout, timer } from "rxjs";
1
+ import { BehaviorSubject, catchError, EMPTY, finalize, firstValueFrom, from, lastValueFrom, map, mergeMap, Observable, of, retry, share, Subject, Subscription, switchMap, take, tap, throwError, timeout, timer } from "rxjs";
2
2
  import { listBeforeMicroserviceOnlineMethods } from "./decorators/BeforeMicroserviceOnline.js";
3
3
  import { LOCAL_SERVICES$ } from "./decorators/Microservice.js";
4
4
  import { SPIDERMESH_NAMESPACE, SPIDERMESH_NODE_HOSTNAME } from "../const.js";
@@ -67,9 +67,9 @@ export class SpiderMesh {
67
67
  return subscription;
68
68
  }
69
69
  listRpcNodes(service) {
70
- return (this.registry?.listPeers({ service }) || []).filter(node => {
71
- return typeof node.transporters?.rpc === 'string';
72
- });
70
+ if (!this.registry)
71
+ return [];
72
+ return this.registry.listPeers(service).filter(node => !!node.transporters.rpc);
73
73
  }
74
74
  watchService(service) {
75
75
  if (!this.registry)
@@ -78,38 +78,21 @@ export class SpiderMesh {
78
78
  }
79
79
  #selectRpcTransport(filters = {}) {
80
80
  if (!filters.service)
81
- return null;
82
- const transporterName = typeof filters.transporter === 'string'
83
- ? filters.transporter
84
- : filters.transporter?.name;
81
+ return undefined;
82
+ if (filters.transporter) {
83
+ const name = typeof filters.transporter === 'string' ? filters.transporter : filters.transporter.name;
84
+ if (!name)
85
+ return;
86
+ return this.#transporters.rpcs.get(name);
87
+ }
85
88
  if (!this.registry) {
86
- const transporter = transporterName
87
- ? this.#transporters.rpcs.get(transporterName)
88
- : this.#transporters.rpcs.values().next().value;
89
- if (!transporter)
90
- return null;
91
- return {
92
- node_id: filters.node_id,
93
- transporter
94
- };
89
+ return this.#transporters.rpcs.values().next().value;
95
90
  }
96
- const nodeId = this.registry.pickRpcNode(filters.service, {
97
- node_id: filters.node_id
98
- });
99
- const resolvedTransporterName = filters.node_id || nodeId
100
- ? this.registry.getRpcTransporterName(filters.service, {
101
- node_id: nodeId || filters.node_id
102
- })
103
- : transporterName;
104
- if (!resolvedTransporterName)
105
- return null;
106
- const transporter = this.#transporters.rpcs.get(resolvedTransporterName);
107
- if (!transporter)
108
- return null;
109
- return {
110
- node_id: nodeId || filters.node_id,
111
- transporter
112
- };
91
+ const name = this.registry.getRpcTransporterName(filters.service);
92
+ if (!name)
93
+ return;
94
+ const transporter = this.#transporters.rpcs.get(name);
95
+ return transporter;
113
96
  }
114
97
  #normalizeRpcError(error) {
115
98
  if (error && typeof error === 'object') {
@@ -127,10 +110,10 @@ export class SpiderMesh {
127
110
  this.#rpc.running.delete(request_id);
128
111
  }
129
112
  callRemoteService(options) {
130
- const source$ = this.registry
131
- ? this.registry.watch(options.service)
132
- : of(undefined);
133
- return source$.pipe(map(() => this.#selectRpcTransport(options)), filter((target) => !!target), take(1), mergeMap(target => {
113
+ return of(1).pipe(switchMap(() => this.registry ? firstValueFrom(this.registry.watch(options.service)) : of(1)), take(1), mergeMap(() => {
114
+ const transporter = this.#selectRpcTransport(options);
115
+ if (!transporter)
116
+ throw { code: 'MICROSERVICE_OFFLINE', message: `No transporter available for service ${options.service}` };
134
117
  return new Observable(subscriber => {
135
118
  const request_id = `${this.node_id}:${Date.now().toString(36)}:${Math.random().toString(36).slice(2)}`;
136
119
  const pending = {
@@ -149,29 +132,20 @@ export class SpiderMesh {
149
132
  subscriber.complete();
150
133
  }
151
134
  });
152
- target.transporter.send({
135
+ transporter.send({
153
136
  kind: 'request',
154
137
  request_id,
155
- source_node_id: this.node_id,
156
- target_node_id: target.node_id || '',
138
+ sender_node_id: this.node_id,
157
139
  service: options.service,
158
140
  method: options.method,
159
141
  args: options.args
160
- }, target.node_id).catch((error) => {
142
+ }, options.node_id).catch((error) => {
161
143
  pending.finished = true;
162
144
  pending.stream.error(this.#normalizeRpcError(error));
163
145
  this.#completePendingRpc(request_id);
164
146
  });
165
147
  return () => {
166
148
  subscription.unsubscribe();
167
- if (!pending.finished && this.#rpc.pending.has(request_id) && target.node_id) {
168
- void target.transporter.send({
169
- kind: 'cancel',
170
- request_id,
171
- source_node_id: this.node_id,
172
- target_node_id: target.node_id,
173
- }, target.node_id).catch(() => undefined);
174
- }
175
149
  this.#completePendingRpc(request_id);
176
150
  };
177
151
  });
@@ -205,16 +179,14 @@ export class SpiderMesh {
205
179
  }
206
180
  return transporter.pipe(map(({ rpc, offline, endpoints }) => {
207
181
  if (rpc) {
208
- const packet = rpc.packet;
209
- if (packet?.kind === 'request' && packet.target_node_id === this.node_id) {
182
+ const packet = rpc;
183
+ if (packet.kind == 'request') {
210
184
  const reply = async (response) => {
211
185
  await transporter.send({
212
186
  kind: 'response',
213
187
  request_id: packet.request_id,
214
- source_node_id: this.node_id,
215
- target_node_id: rpc.node_id,
216
188
  ...response
217
- }, rpc.node_id);
189
+ }, packet.sender_node_id);
218
190
  };
219
191
  const handleResponse = (response) => {
220
192
  if (isSubscribable(response)) {
@@ -284,7 +256,7 @@ export class SpiderMesh {
284
256
  }
285
257
  }
286
258
  }
287
- if (packet?.kind === 'cancel' && packet.target_node_id === this.node_id) {
259
+ if (packet?.kind === 'cancel') {
288
260
  const stream = this.#rpc.running.get(packet.request_id);
289
261
  if (stream) {
290
262
  stream.unsubscribe();
@@ -1 +1 @@
1
- {"version":3,"file":"SpiderMesh.js","sourceRoot":"","sources":["../../src/SpiderMesh.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SpiderMesh.js","sourceRoot":"","sources":["../../src/SpiderMesh.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,7 @@
1
1
  import { SpiderMesh } from "../SpiderMesh.js";
2
- export declare const NestJSLinkMicroservice: (factory: any, transporter: string | {
3
- name?: string | undefined;
4
- }) => {
2
+ import type { TransporterSelector } from '../types.js';
3
+ export declare const NestJSLinkMicroservice: (factory: any, transporter?: TransporterSelector) => {
5
4
  provide: any;
6
5
  inject: (typeof SpiderMesh)[];
7
- useFactory: (sm: SpiderMesh) => Promise<import("../RemoteService.js").Mapper<unknown, never>>;
6
+ useFactory: (sm: SpiderMesh) => import("../RemoteService.js").Mapper<unknown, never>;
8
7
  };
@@ -3,9 +3,6 @@ import { SpiderMesh } from "../SpiderMesh.js";
3
3
  export const NestJSLinkMicroservice = (factory, transporter) => ({
4
4
  provide: factory,
5
5
  inject: [SpiderMesh],
6
- useFactory: async (sm) => {
7
- const service = RemoteServiceLinker.link(sm, { service: factory.name, transporter });
8
- return service;
9
- }
6
+ useFactory: (sm) => RemoteServiceLinker.link(sm, { service: factory.name, transporter })
10
7
  });
11
8
  //# sourceMappingURL=NestJSLinkMicroservice.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NestJSLinkMicroservice.js","sourceRoot":"","sources":["../../../src/decorators/NestJSLinkMicroservice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAAY,EAAE,WAAoD,EAAE,EAAE,CAAC,CAAC;IAC3G,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,CAAC,UAAU,CAAC;IACpB,UAAU,EAAE,KAAK,EAAE,EAAc,EAAE,EAAE;QACjC,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAA;QACpF,OAAO,OAAO,CAAA;IAClB,CAAC;CACJ,CAAC,CAAA"}
1
+ {"version":3,"file":"NestJSLinkMicroservice.js","sourceRoot":"","sources":["../../../src/decorators/NestJSLinkMicroservice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAAY,EAAE,WAAiC,EAAE,EAAE,CAAC,CAAC;IACxF,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,CAAC,UAAU,CAAC;IACpB,UAAU,EAAE,CAAC,EAAc,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC;CACvG,CAAC,CAAA"}
@@ -9,4 +9,4 @@ export * from './decorators/LimitConcurrentRunning.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, MeshTransporter, NodeMetadata, PubsubEvent, PubsubTransporter, RpcCancelPacket, RpcEvent, RpcMessage, RpcOptions, RpcPacket, RpcRequestPacket, RpcResponsePacket, RpcRoutingOptions, RpcTransporter, SpiderMeshError, SpiderMeshErrorCode, SpiderMeshNode, } from './types.js';
12
+ export type { DiscoveryEvent, DiscoveryTransporter, MdnsMessage, MeshTransporter, NodeMetadata, PubsubEvent, PubsubTransporter, RpcCancelPacket, RpcEvent, RpcOptions, RpcRequestPacket, RpcResponsePacket, RpcRoutingOptions, TransporterSelector, RpcTransporter, SpiderMeshError, SpiderMeshErrorCode, SpiderMeshNode, } from './types.js';
@@ -55,6 +55,9 @@ export type PubsubTransporter = Observable<PubsubEvent> & {
55
55
  export type RpcRoutingOptions = {
56
56
  [key: string]: string | number | boolean;
57
57
  };
58
+ export type TransporterSelector = string | {
59
+ name?: string;
60
+ } | Function;
58
61
  export type RpcOptions<T = any> = {
59
62
  service: string;
60
63
  method: string;
@@ -63,24 +66,19 @@ export type RpcOptions<T = any> = {
63
66
  timeout?: number;
64
67
  retry?: number;
65
68
  node_id?: string;
66
- transporter?: string | {
67
- name?: string;
68
- };
69
+ transporter?: TransporterSelector;
69
70
  };
70
71
  export type RpcRequestPacket = {
71
72
  kind: 'request';
72
73
  request_id: string;
73
- source_node_id: string;
74
- target_node_id: string;
75
74
  service: string;
76
75
  method: string;
77
76
  args: any[];
77
+ sender_node_id: string;
78
78
  };
79
79
  export type RpcResponsePacket = {
80
80
  kind: 'response';
81
81
  request_id: string;
82
- source_node_id: string;
83
- target_node_id: string;
84
82
  data?: any;
85
83
  error?: SpiderMeshError | {
86
84
  code?: string;
@@ -91,21 +89,14 @@ export type RpcResponsePacket = {
91
89
  export type RpcCancelPacket = {
92
90
  kind: 'cancel';
93
91
  request_id: string;
94
- source_node_id: string;
95
- target_node_id: string;
96
- };
97
- export type RpcPacket = RpcRequestPacket | RpcResponsePacket | RpcCancelPacket;
98
- export type RpcMessage = {
99
- node_id: string;
100
- packet: RpcPacket;
101
92
  };
102
93
  export type RpcEvent = Partial<{
103
- rpc: RpcMessage;
94
+ rpc: RpcRequestPacket | RpcResponsePacket | RpcCancelPacket;
104
95
  offline: string;
105
96
  endpoints: Record<string, string | boolean | number>;
106
97
  }>;
107
98
  export type RpcTransporter = Observable<RpcEvent> & {
108
99
  linkRegistry?(registry: Registry): void;
109
- send(data: RpcPacket, node_id?: string): Promise<void>;
100
+ send(data: RpcRequestPacket | RpcCancelPacket | RpcResponsePacket, node_id?: string): Promise<void>;
110
101
  };
111
102
  export type MeshTransporter = RpcTransporter | PubsubTransporter | DiscoveryTransporter;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,91 @@
1
+ import { createInterface } from 'node:readline';
2
+ import { firstValueFrom, Subject } from 'rxjs';
3
+ import { Registry } from '../../src/Registry.js';
4
+ import { SpiderMesh } from '../../src/SpiderMesh.js';
5
+ import { LOCAL_SERVICES$ } from '../../src/decorators/Microservice.js';
6
+ const role = process.argv[2];
7
+ const serviceName = process.argv[3];
8
+ if (!role || !serviceName) {
9
+ throw new Error('Usage: bun run tests/fixtures/process-mesh.ts <role> <serviceName>');
10
+ }
11
+ const sendHostMessage = (message) => {
12
+ process.stdout.write(`${JSON.stringify(message)}\n`);
13
+ };
14
+ class ProcessRpcTransporter extends Subject {
15
+ metadata = { mock: true };
16
+ async send(packet, node_id) {
17
+ sendHostMessage({
18
+ kind: 'rpc-send',
19
+ role,
20
+ packet,
21
+ node_id,
22
+ });
23
+ }
24
+ }
25
+ class ProcessDiscoveryTransporter extends Subject {
26
+ async broadcast(data) {
27
+ sendHostMessage({
28
+ kind: 'discovery-broadcast',
29
+ role,
30
+ node: data.node,
31
+ });
32
+ }
33
+ }
34
+ const registry = role === 'client' ? new Registry() : undefined;
35
+ const mesh = new SpiderMesh(registry);
36
+ const rpcTransporter = new ProcessRpcTransporter();
37
+ const discoveryTransporter = new ProcessDiscoveryTransporter();
38
+ mesh.registerTransporter(rpcTransporter, 'ProcessRpcTransporter');
39
+ mesh.registerTransporter(discoveryTransporter, 'ProcessDiscoveryTransporter');
40
+ if (role === 'provider') {
41
+ LOCAL_SERVICES$.next({
42
+ name: serviceName,
43
+ metadata: {},
44
+ instance: {
45
+ echo(value) {
46
+ return `provider:${value}`;
47
+ },
48
+ },
49
+ });
50
+ }
51
+ sendHostMessage({
52
+ kind: 'ready',
53
+ role,
54
+ node_id: mesh.node_id,
55
+ });
56
+ const rl = createInterface({ input: process.stdin });
57
+ rl.on('line', async (line) => {
58
+ if (!line.trim())
59
+ return;
60
+ const command = JSON.parse(line);
61
+ if (command.kind === 'discovery-deliver') {
62
+ discoveryTransporter.next({ discovered: command.node });
63
+ return;
64
+ }
65
+ if (command.kind === 'rpc-deliver') {
66
+ rpcTransporter.next({
67
+ rpc: command.packet,
68
+ });
69
+ return;
70
+ }
71
+ if (command.kind === 'call') {
72
+ try {
73
+ const value = await firstValueFrom(mesh.callRemoteService({
74
+ service: serviceName,
75
+ method: 'echo',
76
+ args: [command.value],
77
+ timeout: 1500,
78
+ }));
79
+ sendHostMessage({ kind: 'result', role, value });
80
+ }
81
+ catch (error) {
82
+ sendHostMessage({
83
+ kind: 'result',
84
+ role,
85
+ error: error instanceof Error ? error.message : String(error),
86
+ code: typeof error === 'object' && error && 'code' in error ? String(error.code) : undefined,
87
+ });
88
+ }
89
+ }
90
+ });
91
+ //# sourceMappingURL=process-mesh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-mesh.js","sourceRoot":"","sources":["../../../tests/fixtures/process-mesh.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,173 @@
1
+ import { describe, expect, test } from 'bun:test';
2
+ import { firstValueFrom, from, Subject, toArray } from 'rxjs';
3
+ import { Registry } from '../src/Registry.js';
4
+ import { RemoteServiceLinker } from '../src/RemoteService.js';
5
+ import { SpiderMesh } from '../src/SpiderMesh.js';
6
+ import { NestJSLinkMicroservice } from '../src/decorators/NestJSLinkMicroservice.js';
7
+ import { LOCAL_SERVICES$ } from '../src/decorators/Microservice.js';
8
+ let sequence = 0;
9
+ const nextName = (prefix) => `${prefix}${++sequence}`;
10
+ const cloneNode = (node) => ({
11
+ ...node,
12
+ topics: [...node.topics],
13
+ services: { ...node.services },
14
+ nodes: { ...node.nodes },
15
+ transporters: { ...node.transporters },
16
+ });
17
+ class NamedLoopbackRpcTransporter extends Subject {
18
+ localNodeId;
19
+ constructor(localNodeId) {
20
+ super();
21
+ this.localNodeId = localNodeId;
22
+ }
23
+ async send(data, node_id) {
24
+ const targetNodeId = node_id || this.localNodeId;
25
+ this.next({
26
+ rpc: 'sender_node_id' in data ? { ...data, sender_node_id: targetNodeId } : data,
27
+ });
28
+ }
29
+ }
30
+ class SilentRpcTransporter extends Subject {
31
+ async send(_data, _node_id) {
32
+ return;
33
+ }
34
+ }
35
+ class MockPubsubTransporter extends Subject {
36
+ #topics = new Map();
37
+ constructor() {
38
+ super();
39
+ }
40
+ async publish(topic, data) {
41
+ this.#getTopic(topic).next(data);
42
+ }
43
+ listen(topic) {
44
+ return this.#getTopic(topic);
45
+ }
46
+ #getTopic(topic) {
47
+ if (!this.#topics.has(topic)) {
48
+ this.#topics.set(topic, new Subject());
49
+ }
50
+ return this.#topics.get(topic);
51
+ }
52
+ }
53
+ class MockDiscoveryTransporter extends Subject {
54
+ broadcasts = [];
55
+ async broadcast(data) {
56
+ this.broadcasts.push({
57
+ ...data,
58
+ node: cloneNode(data.node),
59
+ });
60
+ }
61
+ }
62
+ describe('mock e2e', () => {
63
+ test('routes rpc through explicit transporter name and class', async () => {
64
+ const mesh = new SpiderMesh();
65
+ const silent = new SilentRpcTransporter();
66
+ const loopback = new NamedLoopbackRpcTransporter(mesh.node_id);
67
+ const serviceName = nextName('EchoService');
68
+ mesh.registerTransporter(silent, 'SilentRpcTransporter');
69
+ mesh.registerTransporter(loopback);
70
+ LOCAL_SERVICES$.next({
71
+ name: serviceName,
72
+ metadata: {},
73
+ instance: {
74
+ echo(value) {
75
+ return value;
76
+ },
77
+ stream() {
78
+ return from([1, 2, 3]);
79
+ },
80
+ },
81
+ });
82
+ const byName = await firstValueFrom(mesh.callRemoteService({
83
+ service: serviceName,
84
+ method: 'echo',
85
+ args: ['by-name'],
86
+ transporter: 'NamedLoopbackRpcTransporter',
87
+ }));
88
+ const byClass = await firstValueFrom(mesh.callRemoteService({
89
+ service: serviceName,
90
+ method: 'echo',
91
+ args: ['by-class'],
92
+ transporter: NamedLoopbackRpcTransporter,
93
+ }));
94
+ const streamValues = await firstValueFrom(mesh.callRemoteService({
95
+ service: serviceName,
96
+ method: 'stream',
97
+ args: [],
98
+ transporter: NamedLoopbackRpcTransporter,
99
+ }).pipe(toArray()));
100
+ expect(byName).toBe('by-name');
101
+ expect(byClass).toBe('by-class');
102
+ expect(streamValues).toEqual([1, 2, 3]);
103
+ });
104
+ test('wait supports async checker functions', async () => {
105
+ const registry = new Registry();
106
+ const mesh = new SpiderMesh(registry);
107
+ const serviceName = nextName('AsyncWaitService');
108
+ const remote = RemoteServiceLinker.link(mesh, { service: serviceName });
109
+ const waitPromise = remote.wait(async (nodes) => {
110
+ await Promise.resolve();
111
+ return nodes.length > 0;
112
+ });
113
+ await Promise.resolve();
114
+ registry.upsertPeer({
115
+ host: '127.0.0.1',
116
+ namespace: mesh.namespace,
117
+ node_id: nextName('peer'),
118
+ topics: [],
119
+ services: {
120
+ [serviceName]: {},
121
+ },
122
+ nodes: {},
123
+ transporters: {
124
+ rpc: 'NamedLoopbackRpcTransporter',
125
+ },
126
+ version: 1,
127
+ });
128
+ const nodes = await waitPromise;
129
+ expect(nodes).not.toBeNull();
130
+ expect(nodes).toHaveLength(1);
131
+ expect(nodes?.[0]?.services?.[serviceName]).toEqual({});
132
+ });
133
+ test('keeps topic metadata when discovery registers after listen and clears it on unsubscribe', async () => {
134
+ class TopicEvent {
135
+ }
136
+ const mesh = new SpiderMesh();
137
+ const pubsub = new MockPubsubTransporter();
138
+ const discovery = new MockDiscoveryTransporter();
139
+ const event = mesh.linkEvent(TopicEvent);
140
+ mesh.registerTransporter(pubsub, 'MockPubsubTransporter');
141
+ const subscription = event.listen().subscribe(() => undefined);
142
+ mesh.registerTransporter(discovery, 'MockDiscoveryTransporter');
143
+ expect(discovery.broadcasts.at(-1)?.node.topics).toContain('TopicEvent');
144
+ subscription.unsubscribe();
145
+ expect(discovery.broadcasts.at(-1)?.node.topics).not.toContain('TopicEvent');
146
+ });
147
+ test('NestJSLinkMicroservice links a remote service without requiring transporter', async () => {
148
+ class BillingService {
149
+ charge(orderId) {
150
+ throw new Error('typing only');
151
+ }
152
+ }
153
+ const mesh = new SpiderMesh();
154
+ const loopback = new NamedLoopbackRpcTransporter(mesh.node_id);
155
+ mesh.registerTransporter(loopback);
156
+ LOCAL_SERVICES$.next({
157
+ name: BillingService.name,
158
+ metadata: {},
159
+ instance: {
160
+ charge(orderId) {
161
+ return { orderId };
162
+ },
163
+ },
164
+ });
165
+ const provider = NestJSLinkMicroservice(BillingService);
166
+ const remote = provider.useFactory(mesh);
167
+ const result = await remote.charge('order-1');
168
+ expect(provider.provide).toBe(BillingService);
169
+ expect(provider.inject).toEqual([SpiderMesh]);
170
+ expect(result).toEqual({ orderId: 'order-1' });
171
+ });
172
+ });
173
+ //# sourceMappingURL=mock-e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-e2e.test.js","sourceRoot":"","sources":["../../tests/mock-e2e.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,93 @@
1
+ import { afterEach, describe, expect, test } from 'bun:test';
2
+ import { spawn } from 'node:child_process';
3
+ import { EventEmitter, once } from 'node:events';
4
+ import { createInterface } from 'node:readline';
5
+ class MeshProcess {
6
+ process;
7
+ events = new EventEmitter();
8
+ messages = [];
9
+ stderr = '';
10
+ constructor(role, serviceName) {
11
+ this.process = spawn('bun', ['run', 'tests/fixtures/process-mesh.ts', role, serviceName], {
12
+ cwd: process.cwd(),
13
+ stdio: ['pipe', 'pipe', 'pipe'],
14
+ });
15
+ createInterface({ input: this.process.stdout }).on('line', line => {
16
+ if (!line.trim())
17
+ return;
18
+ const message = JSON.parse(line);
19
+ this.messages.push(message);
20
+ this.events.emit(message.kind, message);
21
+ this.events.emit('message', message);
22
+ });
23
+ createInterface({ input: this.process.stderr }).on('line', line => {
24
+ this.stderr += `${line}\n`;
25
+ });
26
+ }
27
+ send(message) {
28
+ this.process.stdin.write(`${JSON.stringify(message)}\n`);
29
+ }
30
+ async waitFor(kind, timeoutMs = 4000) {
31
+ const existing = this.messages.find(message => message.kind === kind);
32
+ if (existing)
33
+ return existing;
34
+ const timer = setTimeout(() => {
35
+ this.events.emit(`timeout:${kind}`);
36
+ }, timeoutMs);
37
+ try {
38
+ const result = await Promise.race([
39
+ once(this.events, kind).then(([message]) => message),
40
+ once(this.events, `timeout:${kind}`).then(() => {
41
+ throw new Error(`Timed out waiting for ${kind}. stderr:\n${this.stderr}`);
42
+ }),
43
+ ]);
44
+ return result;
45
+ }
46
+ finally {
47
+ clearTimeout(timer);
48
+ }
49
+ }
50
+ latest(kind) {
51
+ return [...this.messages].reverse().find(message => message.kind === kind);
52
+ }
53
+ kill() {
54
+ this.process.kill();
55
+ }
56
+ }
57
+ const children = [];
58
+ afterEach(() => {
59
+ for (const child of children.splice(0)) {
60
+ child.kill();
61
+ }
62
+ });
63
+ describe('process e2e', () => {
64
+ test('routes rpc between isolated processes through mock discovery and rpc transporters', async () => {
65
+ const serviceName = `ProcessEcho${Date.now().toString(36)}`;
66
+ const client = new MeshProcess('client', serviceName);
67
+ const provider = new MeshProcess('provider', serviceName);
68
+ children.push(client, provider);
69
+ const routeDiscovery = (message) => {
70
+ const target = message.role === 'provider' ? client : provider;
71
+ target.send({ kind: 'discovery-deliver', node: message.node });
72
+ };
73
+ const routeRpc = (message) => {
74
+ const target = message.role === 'provider' ? client : provider;
75
+ target.send({ kind: 'rpc-deliver', packet: message.packet });
76
+ };
77
+ client.events.on('discovery-broadcast', routeDiscovery);
78
+ provider.events.on('discovery-broadcast', routeDiscovery);
79
+ client.events.on('rpc-send', routeRpc);
80
+ provider.events.on('rpc-send', routeRpc);
81
+ await client.waitFor('ready');
82
+ await provider.waitFor('ready');
83
+ const providerDiscovery = provider.latest('discovery-broadcast');
84
+ if (providerDiscovery) {
85
+ client.send({ kind: 'discovery-deliver', node: providerDiscovery.node });
86
+ }
87
+ client.send({ kind: 'call', value: 'cross-process' });
88
+ const result = await client.waitFor('result');
89
+ expect(result.error).toBeUndefined();
90
+ expect(result.value).toBe('provider:cross-process');
91
+ });
92
+ });
93
+ //# sourceMappingURL=process-e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-e2e.test.js","sourceRoot":"","sources":["../../tests/process-e2e.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAC5D,OAAO,EAAE,KAAK,EAAuC,MAAM,oBAAoB,CAAA;AAC/E,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAQ/C,MAAM,WAAW;IACb,OAAO,CAAgC;IACvC,MAAM,GAAG,IAAI,YAAY,EAAE,CAAA;IAC3B,QAAQ,GAAmB,EAAE,CAAA;IAC7B,MAAM,GAAG,EAAE,CAAA;IAEX,YAAY,IAA2B,EAAE,WAAmB;QACxD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,gCAAgC,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE;YACtF,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAClC,CAAC,CAAA;QAEF,eAAe,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;YAC9D,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,OAAM;YACxB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAiB,CAAA;YAChD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YACvC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;QAEF,eAAe,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;YAC9D,IAAI,CAAC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAA;QAC9B,CAAC,CAAC,CAAA;IACN,CAAC;IAED,IAAI,CAAC,OAAgB;QACjB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5D,CAAC;IAED,KAAK,CAAC,OAAO,CAAiC,IAAO,EAAE,SAAS,GAAG,IAAI;QACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;QACrE,IAAI,QAAQ;YAAE,OAAO,QAA8C,CAAA;QAEnE,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAA;QACvC,CAAC,EAAE,SAAS,CAAC,CAAA;QAEb,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;gBAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,OAA6C,CAAC;gBAC1F,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;oBAC3C,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,cAAc,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;gBAC7E,CAAC,CAAC;aACL,CAAC,CAAA;YACF,OAAO,MAAM,CAAA;QACjB,CAAC;gBAAS,CAAC;YACP,YAAY,CAAC,KAAK,CAAC,CAAA;QACvB,CAAC;IACL,CAAC;IAED,MAAM,CAAiC,IAAO;QAC1C,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAmD,CAAA;IAChI,CAAC;IAED,IAAI;QACA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;IACvB,CAAC;CACJ;AAED,MAAM,QAAQ,GAAkB,EAAE,CAAA;AAElC,SAAS,CAAC,GAAG,EAAE;IACX,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,EAAE,CAAA;IAChB,CAAC;AACL,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IACzB,IAAI,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;QACjG,MAAM,WAAW,GAAG,cAAc,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAA;QAC3D,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;QACrD,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;QACzD,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAE/B,MAAM,cAAc,GAAG,CAAC,OAA8B,EAAE,EAAE;YACtD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAA;YAC9D,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;QAClE,CAAC,CAAA;QAED,MAAM,QAAQ,GAAG,CAAC,OAAwB,EAAE,EAAE;YAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAA;YAC9D,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;QAChE,CAAC,CAAA;QAED,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,qBAAqB,EAAE,cAAc,CAAC,CAAA;QACvD,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,qBAAqB,EAAE,cAAc,CAAC,CAAA;QACzD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QAExC,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC7B,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAE/B,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAA;QAChE,IAAI,iBAAiB,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAA;QAC5E,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAA;QAErD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAE7C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,CAAA;QACpC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;IACvD,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"root":["../const.ts","../env.d.ts","../src/registry.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/limitconcurrency.ts","../src/helpers/microserviceexception.ts","../src/helpers/sleep.ts"],"version":"6.0.3"}
1
+ {"root":["../const.ts","../env.d.ts","../src/registry.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/limitconcurrency.ts","../src/helpers/microserviceexception.ts","../src/helpers/sleep.ts","../tests/mock-e2e.test.ts","../tests/process-e2e.test.ts","../tests/fixtures/process-mesh.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.42",
4
+ "version": "2.0.43",
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
@@ -31,9 +31,7 @@
31
31
  "exclude": [
32
32
  "node_modules",
33
33
  "out",
34
- "src/schema.ts",
35
34
  "bin",
36
- "./build/**/*",
37
- "tests/**/*"
35
+ "./build/**/*"
38
36
  ]
39
37
  }