@asenajs/asena 0.7.1 → 0.8.1

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 (148) hide show
  1. package/README.md +2 -2
  2. package/dist/lib/adapter/AsenaAdapter.d.ts +2 -2
  3. package/dist/lib/adapter/AsenaAdapter.js.map +1 -1
  4. package/dist/lib/adapter/types/ServeOptions.d.ts +16 -0
  5. package/dist/lib/adapter/types/ValidationError.d.ts +53 -0
  6. package/dist/lib/adapter/types/ValidationError.js +24 -0
  7. package/dist/lib/adapter/types/ValidationError.js.map +1 -0
  8. package/dist/lib/adapter/types/index.d.ts +1 -0
  9. package/dist/lib/adapter/types/index.js +1 -0
  10. package/dist/lib/adapter/types/index.js.map +1 -1
  11. package/dist/lib/ioc/Container.d.ts +25 -0
  12. package/dist/lib/ioc/Container.js +47 -0
  13. package/dist/lib/ioc/Container.js.map +1 -1
  14. package/dist/lib/ioc/CoreContainer.d.ts +5 -3
  15. package/dist/lib/ioc/CoreContainer.js +9 -3
  16. package/dist/lib/ioc/CoreContainer.js.map +1 -1
  17. package/dist/lib/ioc/IocEngine.d.ts +50 -4
  18. package/dist/lib/ioc/IocEngine.js +138 -12
  19. package/dist/lib/ioc/IocEngine.js.map +1 -1
  20. package/dist/lib/ioc/component/componentRegistry.d.ts +22 -0
  21. package/dist/lib/ioc/component/componentRegistry.js +119 -0
  22. package/dist/lib/ioc/component/componentRegistry.js.map +1 -0
  23. package/dist/lib/ioc/component/componentUtils.js +4 -0
  24. package/dist/lib/ioc/component/componentUtils.js.map +1 -1
  25. package/dist/lib/ioc/component/decorators/Inject.js +16 -0
  26. package/dist/lib/ioc/component/decorators/Inject.js.map +1 -1
  27. package/dist/lib/ioc/component/index.d.ts +1 -0
  28. package/dist/lib/ioc/component/index.js +1 -0
  29. package/dist/lib/ioc/component/index.js.map +1 -1
  30. package/dist/lib/ioc/constants/ComponentConstants.d.ts +4 -0
  31. package/dist/lib/ioc/constants/ComponentConstants.js +5 -0
  32. package/dist/lib/ioc/constants/ComponentConstants.js.map +1 -1
  33. package/dist/lib/ioc/helper/fileHelper.d.ts +9 -0
  34. package/dist/lib/ioc/helper/fileHelper.js +41 -11
  35. package/dist/lib/ioc/helper/fileHelper.js.map +1 -1
  36. package/dist/lib/ioc/types/ICoreServiceNamesType.d.ts +1 -0
  37. package/dist/lib/ioc/types/ICoreServiceNamesType.js +1 -0
  38. package/dist/lib/ioc/types/ICoreServiceNamesType.js.map +1 -1
  39. package/dist/lib/ioc/types/InjectableComponent.d.ts +10 -0
  40. package/dist/lib/ioc/types/IocConfig.d.ts +7 -0
  41. package/dist/lib/ioc/types/decorators/ComponentType.d.ts +2 -1
  42. package/dist/lib/ioc/types/decorators/ComponentType.js +1 -0
  43. package/dist/lib/ioc/types/decorators/ComponentType.js.map +1 -1
  44. package/dist/lib/server/AsenaServer.d.ts +47 -3
  45. package/dist/lib/server/AsenaServer.js +167 -28
  46. package/dist/lib/server/AsenaServer.js.map +1 -1
  47. package/dist/lib/server/AsenaServerFactory.d.ts +38 -3
  48. package/dist/lib/server/AsenaServerFactory.js +21 -2
  49. package/dist/lib/server/AsenaServerFactory.js.map +1 -1
  50. package/dist/lib/server/config/AsenaConfig.d.ts +82 -4
  51. package/dist/lib/server/config/AsenaConfig.js +39 -1
  52. package/dist/lib/server/config/AsenaConfig.js.map +1 -1
  53. package/dist/lib/server/decorators/components/MessageController.d.ts +49 -0
  54. package/dist/lib/server/decorators/components/MessageController.js +62 -0
  55. package/dist/lib/server/decorators/components/MessageController.js.map +1 -0
  56. package/dist/lib/server/decorators/components/index.d.ts +1 -0
  57. package/dist/lib/server/decorators/components/index.js +1 -0
  58. package/dist/lib/server/decorators/components/index.js.map +1 -1
  59. package/dist/lib/server/event/EventDispatchService.d.ts +3 -7
  60. package/dist/lib/server/event/EventDispatchService.js +9 -40
  61. package/dist/lib/server/event/EventDispatchService.js.map +1 -1
  62. package/dist/lib/server/event/PatternHandlerIndex.d.ts +53 -0
  63. package/dist/lib/server/event/PatternHandlerIndex.js +100 -0
  64. package/dist/lib/server/event/PatternHandlerIndex.js.map +1 -0
  65. package/dist/lib/server/event/decorators/On.d.ts +4 -0
  66. package/dist/lib/server/event/decorators/On.js +6 -0
  67. package/dist/lib/server/event/decorators/On.js.map +1 -1
  68. package/dist/lib/server/event/index.d.ts +1 -0
  69. package/dist/lib/server/event/index.js +2 -0
  70. package/dist/lib/server/event/index.js.map +1 -1
  71. package/dist/lib/server/event/types.d.ts +12 -0
  72. package/dist/lib/server/health/HealthServer.d.ts +26 -0
  73. package/dist/lib/server/health/HealthServer.js +63 -0
  74. package/dist/lib/server/health/HealthServer.js.map +1 -0
  75. package/dist/lib/server/health/index.d.ts +1 -0
  76. package/dist/lib/server/health/index.js +2 -0
  77. package/dist/lib/server/health/index.js.map +1 -0
  78. package/dist/lib/server/messaging/Ulak.d.ts +156 -0
  79. package/dist/lib/server/messaging/Ulak.js +174 -0
  80. package/dist/lib/server/messaging/Ulak.js.map +1 -1
  81. package/dist/lib/server/messaging/types.d.ts +5 -1
  82. package/dist/lib/server/messaging/types.js +5 -0
  83. package/dist/lib/server/messaging/types.js.map +1 -1
  84. package/dist/lib/server/microservice/InMemoryTransport.d.ts +45 -0
  85. package/dist/lib/server/microservice/InMemoryTransport.js +124 -0
  86. package/dist/lib/server/microservice/InMemoryTransport.js.map +1 -0
  87. package/dist/lib/server/microservice/MicroserviceTransport.d.ts +132 -0
  88. package/dist/lib/server/microservice/MicroserviceTransport.js +2 -0
  89. package/dist/lib/server/microservice/MicroserviceTransport.js.map +1 -0
  90. package/dist/lib/server/microservice/decorators/EventPattern.d.ts +38 -0
  91. package/dist/lib/server/microservice/decorators/EventPattern.js +59 -0
  92. package/dist/lib/server/microservice/decorators/EventPattern.js.map +1 -0
  93. package/dist/lib/server/microservice/decorators/MessagePattern.d.ts +31 -0
  94. package/dist/lib/server/microservice/decorators/MessagePattern.js +55 -0
  95. package/dist/lib/server/microservice/decorators/MessagePattern.js.map +1 -0
  96. package/dist/lib/server/microservice/decorators/index.d.ts +2 -0
  97. package/dist/lib/server/microservice/decorators/index.js +3 -0
  98. package/dist/lib/server/microservice/decorators/index.js.map +1 -0
  99. package/dist/lib/server/microservice/index.d.ts +5 -0
  100. package/dist/lib/server/microservice/index.js +11 -0
  101. package/dist/lib/server/microservice/index.js.map +1 -0
  102. package/dist/lib/server/microservice/interceptorChain.d.ts +20 -0
  103. package/dist/lib/server/microservice/interceptorChain.js +39 -0
  104. package/dist/lib/server/microservice/interceptorChain.js.map +1 -0
  105. package/dist/lib/server/microservice/types.d.ts +142 -0
  106. package/dist/lib/server/microservice/types.js +5 -0
  107. package/dist/lib/server/microservice/types.js.map +1 -0
  108. package/dist/lib/server/src/services/PrepareEventService.d.ts +4 -1
  109. package/dist/lib/server/src/services/PrepareEventService.js +10 -3
  110. package/dist/lib/server/src/services/PrepareEventService.js.map +1 -1
  111. package/dist/lib/server/src/services/PrepareMicroserviceService.d.ts +66 -0
  112. package/dist/lib/server/src/services/PrepareMicroserviceService.js +193 -0
  113. package/dist/lib/server/src/services/PrepareMicroserviceService.js.map +1 -0
  114. package/dist/lib/test/factory/deepMock.d.ts +25 -0
  115. package/dist/lib/test/factory/deepMock.js +105 -0
  116. package/dist/lib/test/factory/deepMock.js.map +1 -0
  117. package/dist/lib/test/factory/ulakStub.d.ts +44 -0
  118. package/dist/lib/test/factory/ulakStub.js +40 -0
  119. package/dist/lib/test/factory/ulakStub.js.map +1 -0
  120. package/dist/lib/test/harness/createTestApp.d.ts +33 -0
  121. package/dist/lib/test/harness/createTestApp.js +105 -0
  122. package/dist/lib/test/harness/createTestApp.js.map +1 -0
  123. package/dist/lib/test/harness/createWebTest.d.ts +28 -0
  124. package/dist/lib/test/harness/createWebTest.js +127 -0
  125. package/dist/lib/test/harness/createWebTest.js.map +1 -0
  126. package/dist/lib/test/harness/silentLogger.d.ts +27 -0
  127. package/dist/lib/test/harness/silentLogger.js +54 -0
  128. package/dist/lib/test/harness/silentLogger.js.map +1 -0
  129. package/dist/lib/test/harness/types.d.ts +147 -0
  130. package/dist/lib/test/harness/types.js +2 -0
  131. package/dist/lib/test/harness/types.js.map +1 -0
  132. package/dist/lib/test/http/TestHttpCall.d.ts +78 -0
  133. package/dist/lib/test/http/TestHttpCall.js +149 -0
  134. package/dist/lib/test/http/TestHttpCall.js.map +1 -0
  135. package/dist/lib/test/http/TestHttpResponse.d.ts +46 -0
  136. package/dist/lib/test/http/TestHttpResponse.js +70 -0
  137. package/dist/lib/test/http/TestHttpResponse.js.map +1 -0
  138. package/dist/lib/test/index.d.ts +9 -0
  139. package/dist/lib/test/index.js +8 -0
  140. package/dist/lib/test/index.js.map +1 -1
  141. package/dist/lib/test/metadata/discovery.d.ts +21 -0
  142. package/dist/lib/test/metadata/discovery.js +37 -8
  143. package/dist/lib/test/metadata/discovery.js.map +1 -1
  144. package/dist/lib/test/mockComponent.d.ts +25 -0
  145. package/dist/lib/test/mockComponent.js +39 -6
  146. package/dist/lib/test/mockComponent.js.map +1 -1
  147. package/dist/lib/test/types.d.ts +13 -0
  148. package/package.json +11 -7
@@ -11,6 +11,8 @@ import { CoreService, ICoreServiceNames } from '../../ioc';
11
11
  import { UlakError, UlakErrorCode } from './types';
12
12
  import { Inject } from '../../ioc/component';
13
13
  import { blue } from '../../logger';
14
+ import { DEFAULT_TRANSPORT_NAME } from '../microservice/types';
15
+ import { composeOnSend } from '../microservice/interceptorChain';
14
16
  /**
15
17
  * Central WebSocket message broker for Asena.js
16
18
  *
@@ -42,6 +44,14 @@ let Ulak = class Ulak {
42
44
  * Map of namespace path to WebSocket service instance
43
45
  */
44
46
  namespaces = new Map();
47
+ /**
48
+ * Named microservice transports (set during bootstrap by PrepareMicroserviceService)
49
+ */
50
+ microserviceTransports = new Map();
51
+ /**
52
+ * Messaging interceptors applied to all outgoing send/emit calls
53
+ */
54
+ microserviceInterceptors = [];
45
55
  /**
46
56
  * Initialize Ulak messaging system
47
57
  * Called after dependency injection is complete
@@ -258,6 +268,86 @@ let Ulak = class Ulak {
258
268
  const service = this.namespaces.get(namespace);
259
269
  return service ? service.sockets.size : 0;
260
270
  }
271
+ /**
272
+ * Wire the microservice transports into Ulak
273
+ * Called during bootstrap by PrepareMicroserviceService - not intended for user code
274
+ *
275
+ * @param transports - Named transports ('default' for the single-transport form)
276
+ * @param interceptors - Interceptors applied to all outgoing send/emit calls
277
+ */
278
+ setMicroserviceTransports(transports, interceptors = []) {
279
+ this.microserviceTransports = transports;
280
+ this.microserviceInterceptors = interceptors;
281
+ }
282
+ /**
283
+ * Check if a microservice transport is configured and connected
284
+ *
285
+ * @param transport - Named transport to check
286
+ * @returns True when the transport exists and reports a live connection
287
+ */
288
+ isMicroserviceConnected(transport = DEFAULT_TRANSPORT_NAME) {
289
+ const instance = this.microserviceTransports.get(transport);
290
+ return instance ? instance.isConnected : false;
291
+ }
292
+ /**
293
+ * Get all configured microservice transports (read-only)
294
+ * Used by the health endpoint to report per-transport status
295
+ */
296
+ getMicroserviceTransports() {
297
+ return this.microserviceTransports;
298
+ }
299
+ /**
300
+ * Send a request to another service and await its reply (request/response)
301
+ *
302
+ * @param pattern - Full request pattern (e.g. 'order.create')
303
+ * @param data - Request payload
304
+ * @param options - Timeout, headers and named transport selection
305
+ * @returns The reply produced by the remote @MessagePattern handler
306
+ * @throws {UlakError} NO_TRANSPORT / TRANSPORT_NOT_FOUND / TIMEOUT / REMOTE_ERROR
307
+ */
308
+ async send(pattern, data, options) {
309
+ if (!pattern) {
310
+ // Fail fast: an empty pattern would otherwise create a nonsense broker
311
+ // stream and burn the full request timeout before surfacing
312
+ throw new UlakError('Pattern cannot be empty', UlakErrorCode.SEND_FAILED);
313
+ }
314
+ const transport = this.getMicroserviceTransport(options?.transport);
315
+ const ctx = { pattern, kind: 'send', headers: { ...options?.headers }, data };
316
+ return composeOnSend(this.microserviceInterceptors, ctx, () => transport.send(pattern, data, { timeout: options?.timeout, headers: ctx.headers }));
317
+ }
318
+ /**
319
+ * Emit a fire-and-forget event to other services
320
+ *
321
+ * @param pattern - Full event pattern (e.g. 'order.created')
322
+ * @param data - Event payload
323
+ * @param options - Headers and named transport selection
324
+ * @throws {UlakError} NO_TRANSPORT / TRANSPORT_NOT_FOUND
325
+ */
326
+ async emit(pattern, data, options) {
327
+ if (!pattern) {
328
+ throw new UlakError('Pattern cannot be empty', UlakErrorCode.SEND_FAILED);
329
+ }
330
+ const transport = this.getMicroserviceTransport(options?.transport);
331
+ const ctx = { pattern, kind: 'emit', headers: { ...options?.headers }, data };
332
+ await composeOnSend(this.microserviceInterceptors, ctx, () => transport.emit(pattern, data, { headers: ctx.headers }));
333
+ }
334
+ /**
335
+ * Select a pattern-scoped microservice messaging view
336
+ * Patterns passed to the returned view are joined with the prefix ('order' + 'create' → 'order.create')
337
+ *
338
+ * @param prefix - Pattern prefix (empty for absolute patterns)
339
+ * @param options - Named transport selection
340
+ * @returns Scoped messages instance
341
+ *
342
+ * @example
343
+ * ```typescript
344
+ * const orders = ulak.messages('order');
345
+ * const res = await orders.send('create', dto); // sends 'order.create'
346
+ * ```
347
+ */
348
+ messages(prefix, options) {
349
+ return new UlakMessages((prefix || ''), this, options?.transport);
350
+ }
261
351
  /**
262
352
  * Dispose of all resources and stop background tasks
263
353
  * Should be called during application shutdown
@@ -284,6 +374,23 @@ let Ulak = class Ulak {
284
374
  }
285
375
  return service;
286
376
  }
377
+ /**
378
+ * Get a named microservice transport or throw
379
+ *
380
+ * @param name - Named transport (defaults to 'default')
381
+ * @throws {UlakError} NO_TRANSPORT when none configured, TRANSPORT_NOT_FOUND for unknown names
382
+ */
383
+ getMicroserviceTransport(name = DEFAULT_TRANSPORT_NAME) {
384
+ if (this.microserviceTransports.size === 0) {
385
+ throw new UlakError('No microservice transport configured - configure a microservice transport in your @Config transport()', UlakErrorCode.NO_TRANSPORT);
386
+ }
387
+ const transport = this.microserviceTransports.get(name);
388
+ if (!transport) {
389
+ const available = Array.from(this.microserviceTransports.keys()).join(', ');
390
+ throw new UlakError(`Microservice transport "${name}" not found - available transports: ${available}`, UlakErrorCode.TRANSPORT_NOT_FOUND);
391
+ }
392
+ return transport;
393
+ }
287
394
  };
288
395
  __decorate([
289
396
  Inject(ICoreServiceNames.SERVER_LOGGER),
@@ -319,6 +426,36 @@ class UlakNameSpace {
319
426
  return this.ulak.getSocketCount(this.path);
320
427
  }
321
428
  }
429
+ /**
430
+ * Internal implementation of pattern-scoped microservice messaging
431
+ */
432
+ class UlakMessages {
433
+ prefix;
434
+ ulak;
435
+ transport;
436
+ constructor(prefix, ulak, transport) {
437
+ this.prefix = prefix;
438
+ this.ulak = ulak;
439
+ this.transport = transport;
440
+ }
441
+ async send(pattern, data, options) {
442
+ return this.ulak.send(this.buildPattern(pattern), data, { ...options, transport: this.transport });
443
+ }
444
+ async emit(pattern, data, options) {
445
+ await this.ulak.emit(this.buildPattern(pattern), data, { ...options, transport: this.transport });
446
+ }
447
+ /**
448
+ * Join prefix and pattern (same rule as message handler prefixes):
449
+ * no prefix → pattern, no pattern → prefix, both → prefix.pattern
450
+ */
451
+ buildPattern(pattern) {
452
+ if (!this.prefix)
453
+ return pattern;
454
+ if (!pattern)
455
+ return this.prefix;
456
+ return `${this.prefix}.${pattern}`;
457
+ }
458
+ }
322
459
  /**
323
460
  * Helper function for injecting scoped Ulak namespace
324
461
  *
@@ -351,4 +488,41 @@ class UlakNameSpace {
351
488
  export function ulak(namespace) {
352
489
  return [ICoreServiceNames.__ULAK__, (ulak) => ulak.namespace(namespace)];
353
490
  }
491
+ /**
492
+ * Helper functions for injecting microservice messaging views from Ulak
493
+ * Declaration merging keeps the single `ulak` entry point:
494
+ * `ulak('/chat')` → WebSocket namespace, `ulak.messages('order')` → microservice messaging
495
+ */
496
+ // eslint-disable-next-line @typescript-eslint/no-namespace
497
+ (function (ulak) {
498
+ /**
499
+ * Inject a pattern-scoped microservice messaging view
500
+ *
501
+ * @param prefix - Pattern prefix joined to every send/emit ('' for absolute patterns)
502
+ * @param options - Named transport selection (multi-broker projects)
503
+ * @returns A tuple of [serviceName, expression] for @Inject decorator
504
+ *
505
+ * @example
506
+ * ```typescript
507
+ * @Service('CheckoutService')
508
+ * export class CheckoutService {
509
+ * @Inject(ulak.messages('order'))
510
+ * private orders: Ulak.Messages<'order'>;
511
+ *
512
+ * async checkout(dto: CheckoutDto) {
513
+ * const res = await this.orders.send('create', dto); // sends 'order.create'
514
+ * await this.orders.emit('created', { id: res.id }); // emits 'order.created'
515
+ * }
516
+ * }
517
+ *
518
+ * // Named transport (multi-broker projects)
519
+ * @Inject(ulak.messages('metrics', { transport: 'analytics' }))
520
+ * private metrics: Ulak.Messages<'metrics'>;
521
+ * ```
522
+ */
523
+ function messages(prefix, options) {
524
+ return [ICoreServiceNames.__ULAK__, (u) => u.messages(prefix, options)];
525
+ }
526
+ ulak.messages = messages;
527
+ })(ulak || (ulak = {}));
354
528
  //# sourceMappingURL=Ulak.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Ulak.js","sourceRoot":"","sources":["../../../../lib/server/messaging/Ulak.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Ulak.js","sourceRoot":"","sources":["../../../../lib/server/messaging/Ulak.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,11 @@ export declare enum UlakErrorCode {
9
9
  SEND_FAILED = "SEND_FAILED",
10
10
  BROADCAST_FAILED = "BROADCAST_FAILED",
11
11
  SOCKET_NOT_FOUND = "SOCKET_NOT_FOUND",
12
- SERVICE_NOT_INITIALIZED = "SERVICE_NOT_INITIALIZED"
12
+ SERVICE_NOT_INITIALIZED = "SERVICE_NOT_INITIALIZED",
13
+ NO_TRANSPORT = "NO_TRANSPORT",
14
+ TRANSPORT_NOT_FOUND = "TRANSPORT_NOT_FOUND",
15
+ TIMEOUT = "TIMEOUT",
16
+ REMOTE_ERROR = "REMOTE_ERROR"
13
17
  }
14
18
  /**
15
19
  * Custom error class for Ulak messaging system
@@ -11,6 +11,11 @@ export var UlakErrorCode;
11
11
  UlakErrorCode["BROADCAST_FAILED"] = "BROADCAST_FAILED";
12
12
  UlakErrorCode["SOCKET_NOT_FOUND"] = "SOCKET_NOT_FOUND";
13
13
  UlakErrorCode["SERVICE_NOT_INITIALIZED"] = "SERVICE_NOT_INITIALIZED";
14
+ // Microservice messaging
15
+ UlakErrorCode["NO_TRANSPORT"] = "NO_TRANSPORT";
16
+ UlakErrorCode["TRANSPORT_NOT_FOUND"] = "TRANSPORT_NOT_FOUND";
17
+ UlakErrorCode["TIMEOUT"] = "TIMEOUT";
18
+ UlakErrorCode["REMOTE_ERROR"] = "REMOTE_ERROR";
14
19
  })(UlakErrorCode || (UlakErrorCode = {}));
15
20
  /**
16
21
  * Custom error class for Ulak messaging system
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../lib/server/messaging/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAN,IAAY,aASX;AATD,WAAY,aAAa;IACvB,4DAA2C,CAAA;IAC3C,sEAAqD,CAAA;IACrD,wDAAuC,CAAA;IACvC,oDAAmC,CAAA;IACnC,4CAA2B,CAAA;IAC3B,sDAAqC,CAAA;IACrC,sDAAqC,CAAA;IACrC,oEAAmD,CAAA;AACrD,CAAC,EATW,aAAa,KAAb,aAAa,QASxB;AAED;;;GAGG;AACH,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClB,IAAI,CAAgB;IAEpB,SAAS,CAAU;IAEnB,KAAK,CAAS;IAE9B,YAAY,OAAe,EAAE,IAAmB,EAAE,SAAkB,EAAE,KAAa;QACjF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,4CAA4C;QAC5C,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../lib/server/messaging/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAN,IAAY,aAeX;AAfD,WAAY,aAAa;IACvB,4DAA2C,CAAA;IAC3C,sEAAqD,CAAA;IACrD,wDAAuC,CAAA;IACvC,oDAAmC,CAAA;IACnC,4CAA2B,CAAA;IAC3B,sDAAqC,CAAA;IACrC,sDAAqC,CAAA;IACrC,oEAAmD,CAAA;IAEnD,yBAAyB;IACzB,8CAA6B,CAAA;IAC7B,4DAA2C,CAAA;IAC3C,oCAAmB,CAAA;IACnB,8CAA6B,CAAA;AAC/B,CAAC,EAfW,aAAa,KAAb,aAAa,QAexB;AAED;;;GAGG;AACH,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClB,IAAI,CAAgB;IAEpB,SAAS,CAAU;IAEnB,KAAK,CAAS;IAE9B,YAAY,OAAe,EAAE,IAAmB,EAAE,SAAkB,EAAE,KAAa;QACjF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,4CAA4C;QAC5C,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,45 @@
1
+ import type { EmitOptions, EventPatternHandler, MessageHandler, MicroserviceTransport, SendOptions } from './MicroserviceTransport';
2
+ /**
3
+ * @description Zero-dependency in-process microservice transport.
4
+ *
5
+ * Messages never leave the process — send/emit dispatch directly to handlers
6
+ * registered in the same application. Useful as:
7
+ * - a development mode before a broker is available
8
+ * - a test double for @MessageController integration tests
9
+ * - the reference implementation of the MicroserviceTransport SPI
10
+ *
11
+ * Delivery semantics: synchronous at-most-once, attempt is always 1.
12
+ *
13
+ * @example
14
+ * @Config()
15
+ * export class AppConfig extends ConfigService {
16
+ * transport() {
17
+ * return { microservice: new InMemoryTransport() };
18
+ * }
19
+ * }
20
+ */
21
+ export declare class InMemoryTransport implements MicroserviceTransport {
22
+ readonly name = "in-memory";
23
+ /**
24
+ * Exact request pattern -> handler (request/response requires exact routing)
25
+ */
26
+ private messageHandlers;
27
+ /**
28
+ * Event handler index (shared hybrid exact/wildcard implementation)
29
+ */
30
+ private eventHandlers;
31
+ /**
32
+ * Monotonic counter used to build message ids
33
+ */
34
+ private sequence;
35
+ readonly isConnected = true;
36
+ init(): Promise<void>;
37
+ registerMessageHandler(pattern: string, handler: MessageHandler): void;
38
+ registerEventHandler(pattern: string, handler: EventPatternHandler): void;
39
+ listen(): Promise<void>;
40
+ send<T = unknown>(pattern: string, data?: unknown, options?: SendOptions): Promise<T>;
41
+ emit(pattern: string, data?: unknown, options?: EmitOptions): Promise<void>;
42
+ destroy(): Promise<void>;
43
+ private createContext;
44
+ private withTimeout;
45
+ }
@@ -0,0 +1,124 @@
1
+ import { UlakError, UlakErrorCode } from '../messaging/types';
2
+ import { PatternHandlerIndex } from '../event/PatternHandlerIndex';
3
+ /**
4
+ * @description Zero-dependency in-process microservice transport.
5
+ *
6
+ * Messages never leave the process — send/emit dispatch directly to handlers
7
+ * registered in the same application. Useful as:
8
+ * - a development mode before a broker is available
9
+ * - a test double for @MessageController integration tests
10
+ * - the reference implementation of the MicroserviceTransport SPI
11
+ *
12
+ * Delivery semantics: synchronous at-most-once, attempt is always 1.
13
+ *
14
+ * @example
15
+ * @Config()
16
+ * export class AppConfig extends ConfigService {
17
+ * transport() {
18
+ * return { microservice: new InMemoryTransport() };
19
+ * }
20
+ * }
21
+ */
22
+ export class InMemoryTransport {
23
+ name = 'in-memory';
24
+ /**
25
+ * Exact request pattern -> handler (request/response requires exact routing)
26
+ */
27
+ messageHandlers = new Map();
28
+ /**
29
+ * Event handler index (shared hybrid exact/wildcard implementation)
30
+ */
31
+ eventHandlers = new PatternHandlerIndex();
32
+ /**
33
+ * Monotonic counter used to build message ids
34
+ */
35
+ sequence = 0;
36
+ isConnected = true;
37
+ async init() {
38
+ // Nothing to connect - in-process only
39
+ }
40
+ registerMessageHandler(pattern, handler) {
41
+ // Validate the FINAL pattern: the decorator only sees the raw method
42
+ // pattern, so a wildcard or emptiness introduced by the @MessageController
43
+ // prefix would otherwise slip through
44
+ if (!pattern) {
45
+ throw new Error('Message pattern cannot be empty - check @MessagePattern and the @MessageController prefix');
46
+ }
47
+ if (pattern.includes('*')) {
48
+ throw new Error(`Message pattern "${pattern}" cannot contain wildcards - request/response requires exact routing ` +
49
+ '(a wildcard likely leaked in via the @MessageController prefix - remove it, or set ' +
50
+ 'prefix: false on the @MessagePattern)');
51
+ }
52
+ if (this.messageHandlers.has(pattern)) {
53
+ throw new Error(`Duplicate @MessagePattern('${pattern}') - a message pattern can only have one handler`);
54
+ }
55
+ this.messageHandlers.set(pattern, handler);
56
+ }
57
+ registerEventHandler(pattern, handler) {
58
+ if (!pattern) {
59
+ throw new Error('Event pattern cannot be empty - check @EventPattern and the @MessageController prefix');
60
+ }
61
+ this.eventHandlers.add(pattern, handler);
62
+ }
63
+ async listen() {
64
+ // Nothing to consume - handlers are invoked directly by send/emit
65
+ }
66
+ async send(pattern, data, options) {
67
+ const handler = this.messageHandlers.get(pattern);
68
+ if (!handler) {
69
+ throw new UlakError(`No message handler registered for pattern "${pattern}"`, UlakErrorCode.SEND_FAILED);
70
+ }
71
+ const context = this.createContext(pattern, crypto.randomUUID(), options?.headers);
72
+ const invocation = Promise.resolve().then(() => handler(data, context));
73
+ try {
74
+ const result = options?.timeout ? await this.withTimeout(invocation, options.timeout, pattern) : await invocation;
75
+ return result;
76
+ }
77
+ catch (error) {
78
+ if (error instanceof UlakError) {
79
+ throw error;
80
+ }
81
+ throw new UlakError(`Handler for pattern "${pattern}" failed: ${error.message}`, UlakErrorCode.REMOTE_ERROR, undefined, error);
82
+ }
83
+ }
84
+ async emit(pattern, data, options) {
85
+ const handlers = this.eventHandlers.collect(pattern);
86
+ // One context per emit: every handler of the same event must observe the
87
+ // SAME messageId (as in Redis, where all handlers see the entry id) - the
88
+ // documented messageId-dedup recipe relies on this
89
+ const context = this.createContext(pattern, undefined, options?.headers);
90
+ // Fire-and-forget: handler failures must not reach the emitter
91
+ await Promise.allSettled(handlers.map((handler) => Promise.resolve().then(() => handler(data, context))));
92
+ }
93
+ async destroy() {
94
+ this.messageHandlers.clear();
95
+ this.eventHandlers.clear();
96
+ }
97
+ createContext(pattern, correlationId, headers) {
98
+ return {
99
+ pattern,
100
+ messageId: `mem-${++this.sequence}`,
101
+ correlationId,
102
+ headers: { ...headers },
103
+ timestamp: Date.now(),
104
+ attempt: 1,
105
+ };
106
+ }
107
+ withTimeout(promise, timeout, pattern) {
108
+ return new Promise((resolve, reject) => {
109
+ const timer = setTimeout(() => {
110
+ reject(new UlakError(`Request "${pattern}" timed out after ${timeout}ms`, UlakErrorCode.TIMEOUT));
111
+ }, timeout);
112
+ promise
113
+ .then((value) => {
114
+ clearTimeout(timer);
115
+ resolve(value);
116
+ })
117
+ .catch((error) => {
118
+ clearTimeout(timer);
119
+ reject(error);
120
+ });
121
+ });
122
+ }
123
+ }
124
+ //# sourceMappingURL=InMemoryTransport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InMemoryTransport.js","sourceRoot":"","sources":["../../../../lib/server/microservice/InMemoryTransport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * @description Context passed to every microservice message/event handler.
3
+ * Carries transport-level metadata about the incoming message.
4
+ */
5
+ export interface MessageContext {
6
+ /**
7
+ * Concrete pattern of the incoming message (e.g. 'order.create')
8
+ */
9
+ pattern: string;
10
+ /**
11
+ * Transport-assigned unique id of the message (e.g. Redis stream entry id).
12
+ * Useful for idempotency/deduplication in at-least-once transports.
13
+ */
14
+ messageId: string;
15
+ /**
16
+ * Correlation id, present only for request/response messages
17
+ */
18
+ correlationId?: string;
19
+ /**
20
+ * Message headers (trace context, user metadata, ...)
21
+ */
22
+ headers: Record<string, string>;
23
+ /**
24
+ * Producer-side timestamp (epoch millis)
25
+ */
26
+ timestamp: number;
27
+ /**
28
+ * Delivery attempt number, starting at 1.
29
+ * Greater than 1 means the message was redelivered (at-least-once transports).
30
+ */
31
+ attempt: number;
32
+ }
33
+ /**
34
+ * @description Handler for request/response messages (@MessagePattern).
35
+ * The return value is serialized and sent back to the caller as the reply.
36
+ */
37
+ export type MessageHandler = (data: any, context: MessageContext) => any | Promise<any>;
38
+ /**
39
+ * @description Handler for fire-and-forget events (@EventPattern)
40
+ */
41
+ export type EventPatternHandler = (data: any, context: MessageContext) => void | Promise<void>;
42
+ /**
43
+ * @description Options for request/response sends
44
+ */
45
+ export interface SendOptions {
46
+ /**
47
+ * Reply timeout in milliseconds (transport default applies when omitted)
48
+ */
49
+ timeout?: number;
50
+ /**
51
+ * Extra headers attached to the outgoing message
52
+ */
53
+ headers?: Record<string, string>;
54
+ }
55
+ /**
56
+ * @description Options for fire-and-forget emits
57
+ */
58
+ export interface EmitOptions {
59
+ /**
60
+ * Extra headers attached to the outgoing event
61
+ */
62
+ headers?: Record<string, string>;
63
+ }
64
+ /**
65
+ * @description Options for transport shutdown
66
+ */
67
+ export interface DestroyOptions {
68
+ /**
69
+ * Max time in milliseconds to wait for in-flight handlers to finish
70
+ * before closing connections (graceful drain)
71
+ */
72
+ drainTimeout?: number;
73
+ }
74
+ /**
75
+ * @description Broker-agnostic microservice transport SPI.
76
+ *
77
+ * A transport carries two message semantics between Asena services:
78
+ * - request/response (@MessagePattern) — exact patterns, a reply is produced
79
+ * - fire-and-forget events (@EventPattern) — wildcard patterns allowed
80
+ *
81
+ * Lifecycle contract (driven by PrepareMicroserviceService):
82
+ * 1. registerMessageHandler / registerEventHandler — push all handler registrations
83
+ * 2. init() — connect broker resources; after init, send/emit must work (client-only mode)
84
+ * 3. listen() — start consuming. MUST only consume sources that have at least one
85
+ * registered handler; with zero handlers no consumer may be started (client-only mode)
86
+ * 4. destroy() — graceful drain, then release all resources
87
+ */
88
+ export interface MicroserviceTransport {
89
+ /**
90
+ * Human-readable transport name (used in logs and health reporting)
91
+ */
92
+ readonly name: string;
93
+ /**
94
+ * Whether the transport currently holds a live broker connection.
95
+ * Read by the health endpoint.
96
+ */
97
+ readonly isConnected: boolean;
98
+ /**
99
+ * Connect broker resources. Called once before listen().
100
+ * After init() resolves, send()/emit() must be usable (client-only mode).
101
+ */
102
+ init(): Promise<void>;
103
+ /**
104
+ * Register a request/response handler. Patterns must be exact (no wildcards).
105
+ */
106
+ registerMessageHandler(pattern: string, handler: MessageHandler): void;
107
+ /**
108
+ * Register a fire-and-forget event handler. Patterns arrive with the
109
+ * @MessageController prefix already resolved and may contain wildcards
110
+ * (e.g. 'payment.*').
111
+ */
112
+ registerEventHandler(pattern: string, handler: EventPatternHandler): void;
113
+ /**
114
+ * Start consuming registered patterns.
115
+ * Contract: only sources with at least one registered handler are consumed;
116
+ * with zero handlers no consumer loop is started.
117
+ */
118
+ listen(): Promise<void>;
119
+ /**
120
+ * Send a request and await its reply (request/response semantics)
121
+ */
122
+ send<T = unknown>(pattern: string, data?: unknown, options?: SendOptions): Promise<T>;
123
+ /**
124
+ * Emit a fire-and-forget event
125
+ */
126
+ emit(pattern: string, data?: unknown, options?: EmitOptions): Promise<void>;
127
+ /**
128
+ * Gracefully shut down: stop consuming, drain in-flight handlers,
129
+ * reject pending sends, release connections.
130
+ */
131
+ destroy(options?: DestroyOptions): Promise<void>;
132
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=MicroserviceTransport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MicroserviceTransport.js","sourceRoot":"","sources":["../../../../lib/server/microservice/MicroserviceTransport.ts"],"names":[],"mappings":""}
@@ -0,0 +1,38 @@
1
+ import type { EventPatternParams } from '../types';
2
+ /**
3
+ * @description EventPattern decorator - Marks a method as a fire-and-forget event handler
4
+ *
5
+ * Methods decorated with @EventPattern will be automatically registered into the
6
+ * configured microservice transport when the server boots (via PrepareMicroserviceService).
7
+ * No reply is produced; delivery is at-least-once on durable transports, so handlers
8
+ * should be idempotent (use context.messageId for deduplication).
9
+ *
10
+ * The controller prefix is joined onto the pattern ('order' + 'created' →
11
+ * 'order.created'), matching what ulak.messages('order').emit('created') publishes.
12
+ * Pass `prefix: false` when the pattern is absolute — another service's event
13
+ * vocabulary, a Kafka external topic name, or a global catch-all.
14
+ * Wildcards are supported: 'payment.*', '*.completed', 'user.*.created'.
15
+ * Note that under a prefix, '*' becomes 'order.*' and is no longer a global catch-all.
16
+ *
17
+ * @param params - Event pattern or configuration object
18
+ *
19
+ * @example
20
+ * @MessageController('order')
21
+ * export class OrderHandler {
22
+ * @EventPattern('created') // Handles 'order.created'
23
+ * async onCreated(event: OrderEvent, context: MessageContext) { }
24
+ *
25
+ * // Absolute - another service's event vocabulary
26
+ * @EventPattern({ pattern: 'payment.completed', prefix: false })
27
+ * async onPaymentCompleted(event: PaymentEvent, context: MessageContext) {
28
+ * await this.orderService.markPaid(event.orderId);
29
+ * }
30
+ *
31
+ * @EventPattern('*') // Wildcards allowed - handles 'order.*'
32
+ * async onAnyOrderEvent(event: any, context: MessageContext) { }
33
+ *
34
+ * @EventPattern({ pattern: 'stock.depleted', skip: true }) // Temporarily disabled
35
+ * async onStockDepleted(event: any, context: MessageContext) { }
36
+ * }
37
+ */
38
+ export declare function EventPattern(params: EventPatternParams | string): MethodDecorator;