@asenajs/asena 0.7.1 → 0.8.0
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 +2 -2
- package/dist/lib/adapter/AsenaAdapter.d.ts +2 -2
- package/dist/lib/adapter/AsenaAdapter.js.map +1 -1
- package/dist/lib/adapter/types/ServeOptions.d.ts +16 -0
- package/dist/lib/ioc/Container.d.ts +25 -0
- package/dist/lib/ioc/Container.js +47 -0
- package/dist/lib/ioc/Container.js.map +1 -1
- package/dist/lib/ioc/CoreContainer.d.ts +5 -3
- package/dist/lib/ioc/CoreContainer.js +9 -3
- package/dist/lib/ioc/CoreContainer.js.map +1 -1
- package/dist/lib/ioc/IocEngine.js +3 -1
- package/dist/lib/ioc/IocEngine.js.map +1 -1
- package/dist/lib/ioc/component/decorators/Inject.js +16 -0
- package/dist/lib/ioc/component/decorators/Inject.js.map +1 -1
- package/dist/lib/ioc/constants/ComponentConstants.d.ts +4 -0
- package/dist/lib/ioc/constants/ComponentConstants.js +5 -0
- package/dist/lib/ioc/constants/ComponentConstants.js.map +1 -1
- package/dist/lib/ioc/types/ICoreServiceNamesType.d.ts +1 -0
- package/dist/lib/ioc/types/ICoreServiceNamesType.js +1 -0
- package/dist/lib/ioc/types/ICoreServiceNamesType.js.map +1 -1
- package/dist/lib/ioc/types/InjectableComponent.d.ts +10 -0
- package/dist/lib/ioc/types/decorators/ComponentType.d.ts +2 -1
- package/dist/lib/ioc/types/decorators/ComponentType.js +1 -0
- package/dist/lib/ioc/types/decorators/ComponentType.js.map +1 -1
- package/dist/lib/server/AsenaServer.d.ts +46 -3
- package/dist/lib/server/AsenaServer.js +158 -28
- package/dist/lib/server/AsenaServer.js.map +1 -1
- package/dist/lib/server/AsenaServerFactory.d.ts +38 -3
- package/dist/lib/server/AsenaServerFactory.js +21 -2
- package/dist/lib/server/AsenaServerFactory.js.map +1 -1
- package/dist/lib/server/config/AsenaConfig.d.ts +82 -4
- package/dist/lib/server/config/AsenaConfig.js +39 -1
- package/dist/lib/server/config/AsenaConfig.js.map +1 -1
- package/dist/lib/server/decorators/components/MessageController.d.ts +49 -0
- package/dist/lib/server/decorators/components/MessageController.js +62 -0
- package/dist/lib/server/decorators/components/MessageController.js.map +1 -0
- package/dist/lib/server/decorators/components/index.d.ts +1 -0
- package/dist/lib/server/decorators/components/index.js +1 -0
- package/dist/lib/server/decorators/components/index.js.map +1 -1
- package/dist/lib/server/event/EventDispatchService.d.ts +3 -7
- package/dist/lib/server/event/EventDispatchService.js +9 -40
- package/dist/lib/server/event/EventDispatchService.js.map +1 -1
- package/dist/lib/server/event/PatternHandlerIndex.d.ts +53 -0
- package/dist/lib/server/event/PatternHandlerIndex.js +100 -0
- package/dist/lib/server/event/PatternHandlerIndex.js.map +1 -0
- package/dist/lib/server/event/decorators/On.d.ts +4 -0
- package/dist/lib/server/event/decorators/On.js +6 -0
- package/dist/lib/server/event/decorators/On.js.map +1 -1
- package/dist/lib/server/event/index.d.ts +1 -0
- package/dist/lib/server/event/index.js +2 -0
- package/dist/lib/server/event/index.js.map +1 -1
- package/dist/lib/server/event/types.d.ts +12 -0
- package/dist/lib/server/health/HealthServer.d.ts +26 -0
- package/dist/lib/server/health/HealthServer.js +63 -0
- package/dist/lib/server/health/HealthServer.js.map +1 -0
- package/dist/lib/server/health/index.d.ts +1 -0
- package/dist/lib/server/health/index.js +2 -0
- package/dist/lib/server/health/index.js.map +1 -0
- package/dist/lib/server/messaging/Ulak.d.ts +156 -0
- package/dist/lib/server/messaging/Ulak.js +174 -0
- package/dist/lib/server/messaging/Ulak.js.map +1 -1
- package/dist/lib/server/messaging/types.d.ts +5 -1
- package/dist/lib/server/messaging/types.js +5 -0
- package/dist/lib/server/messaging/types.js.map +1 -1
- package/dist/lib/server/microservice/InMemoryTransport.d.ts +45 -0
- package/dist/lib/server/microservice/InMemoryTransport.js +124 -0
- package/dist/lib/server/microservice/InMemoryTransport.js.map +1 -0
- package/dist/lib/server/microservice/MicroserviceTransport.d.ts +132 -0
- package/dist/lib/server/microservice/MicroserviceTransport.js +2 -0
- package/dist/lib/server/microservice/MicroserviceTransport.js.map +1 -0
- package/dist/lib/server/microservice/decorators/EventPattern.d.ts +38 -0
- package/dist/lib/server/microservice/decorators/EventPattern.js +59 -0
- package/dist/lib/server/microservice/decorators/EventPattern.js.map +1 -0
- package/dist/lib/server/microservice/decorators/MessagePattern.d.ts +31 -0
- package/dist/lib/server/microservice/decorators/MessagePattern.js +55 -0
- package/dist/lib/server/microservice/decorators/MessagePattern.js.map +1 -0
- package/dist/lib/server/microservice/decorators/index.d.ts +2 -0
- package/dist/lib/server/microservice/decorators/index.js +3 -0
- package/dist/lib/server/microservice/decorators/index.js.map +1 -0
- package/dist/lib/server/microservice/index.d.ts +5 -0
- package/dist/lib/server/microservice/index.js +11 -0
- package/dist/lib/server/microservice/index.js.map +1 -0
- package/dist/lib/server/microservice/interceptorChain.d.ts +20 -0
- package/dist/lib/server/microservice/interceptorChain.js +39 -0
- package/dist/lib/server/microservice/interceptorChain.js.map +1 -0
- package/dist/lib/server/microservice/types.d.ts +142 -0
- package/dist/lib/server/microservice/types.js +5 -0
- package/dist/lib/server/microservice/types.js.map +1 -0
- package/dist/lib/server/src/services/PrepareEventService.d.ts +4 -1
- package/dist/lib/server/src/services/PrepareEventService.js +10 -3
- package/dist/lib/server/src/services/PrepareEventService.js.map +1 -1
- package/dist/lib/server/src/services/PrepareMicroserviceService.d.ts +66 -0
- package/dist/lib/server/src/services/PrepareMicroserviceService.js +193 -0
- package/dist/lib/server/src/services/PrepareMicroserviceService.js.map +1 -0
- package/dist/lib/test/factory/deepMock.d.ts +25 -0
- package/dist/lib/test/factory/deepMock.js +105 -0
- package/dist/lib/test/factory/deepMock.js.map +1 -0
- package/dist/lib/test/factory/ulakStub.d.ts +44 -0
- package/dist/lib/test/factory/ulakStub.js +40 -0
- package/dist/lib/test/factory/ulakStub.js.map +1 -0
- package/dist/lib/test/harness/createTestApp.d.ts +33 -0
- package/dist/lib/test/harness/createTestApp.js +105 -0
- package/dist/lib/test/harness/createTestApp.js.map +1 -0
- package/dist/lib/test/harness/createWebTest.d.ts +28 -0
- package/dist/lib/test/harness/createWebTest.js +127 -0
- package/dist/lib/test/harness/createWebTest.js.map +1 -0
- package/dist/lib/test/harness/silentLogger.d.ts +27 -0
- package/dist/lib/test/harness/silentLogger.js +54 -0
- package/dist/lib/test/harness/silentLogger.js.map +1 -0
- package/dist/lib/test/harness/types.d.ts +147 -0
- package/dist/lib/test/harness/types.js +2 -0
- package/dist/lib/test/harness/types.js.map +1 -0
- package/dist/lib/test/http/TestHttpCall.d.ts +78 -0
- package/dist/lib/test/http/TestHttpCall.js +149 -0
- package/dist/lib/test/http/TestHttpCall.js.map +1 -0
- package/dist/lib/test/http/TestHttpResponse.d.ts +46 -0
- package/dist/lib/test/http/TestHttpResponse.js +70 -0
- package/dist/lib/test/http/TestHttpResponse.js.map +1 -0
- package/dist/lib/test/index.d.ts +9 -0
- package/dist/lib/test/index.js +8 -0
- package/dist/lib/test/index.js.map +1 -1
- package/dist/lib/test/metadata/discovery.d.ts +21 -0
- package/dist/lib/test/metadata/discovery.js +37 -8
- package/dist/lib/test/metadata/discovery.js.map +1 -1
- package/dist/lib/test/mockComponent.d.ts +25 -0
- package/dist/lib/test/mockComponent.js +39 -6
- package/dist/lib/test/mockComponent.js.map +1 -1
- package/dist/lib/test/types.d.ts +13 -0
- package/package.json +11 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HealthServer.js","sourceRoot":"","sources":["../../../../lib/server/health/HealthServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,IAAI,EAAqB,MAAM,cAAc,CAAC;AAIvD;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,YAAY;IAMJ;IACA;IACA;IAPX,MAAM,CAAmB;IAEzB,SAAS,GAAG,CAAC,CAAC;IAEtB,YACmB,OAAsB,EACtB,IAAU,EACV,MAAoB;QAFpB,YAAO,GAAP,OAAO,CAAe;QACtB,SAAI,GAAJ,IAAI,CAAM;QACV,WAAM,GAAN,MAAM,CAAc;IACpC,CAAC;IAEG,KAAK;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,UAAU,CAAC;QAE7C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE5B,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC;YACtB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;YACvB,KAAK,EAAE,CAAC,OAAgB,EAAE,EAAE;gBAC1B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAEjC,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;oBAC1B,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;gBACpD,CAAC;gBAED,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACpC,CAAC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,8BAA8B,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC;IAChG,CAAC;IAEM,IAAI;QACT,KAAK,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,CAAC;IAEO,mBAAmB;QACzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAEzD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;QAEhE,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,MAAM,GAAiD,EAAE,CAAC;QAChE,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3C,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC;YAExC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC;YAExD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,QAAQ,GAAG,IAAI,CAAC;YAClB,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAClB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,EACpE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CACjC,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './HealthServer';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/server/health/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
|
|
@@ -1,6 +1,28 @@
|
|
|
1
1
|
import type { AsenaWebSocketService } from '../web/websocket';
|
|
2
2
|
import { type ICoreService, ICoreServiceNames } from '../../ioc';
|
|
3
3
|
import { type BulkOperation, type BulkResult } from './types';
|
|
4
|
+
import type { MessagingInterceptor } from '../microservice/types';
|
|
5
|
+
import type { EmitOptions, MicroserviceTransport, SendOptions } from '../microservice/MicroserviceTransport';
|
|
6
|
+
/**
|
|
7
|
+
* @description Options for Ulak microservice sends - adds named transport selection
|
|
8
|
+
*/
|
|
9
|
+
export interface UlakSendOptions extends SendOptions {
|
|
10
|
+
/**
|
|
11
|
+
* Named microservice transport to use (multi-broker projects)
|
|
12
|
+
* @default 'default'
|
|
13
|
+
*/
|
|
14
|
+
transport?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* @description Options for Ulak microservice emits - adds named transport selection
|
|
18
|
+
*/
|
|
19
|
+
export interface UlakEmitOptions extends EmitOptions {
|
|
20
|
+
/**
|
|
21
|
+
* Named microservice transport to use (multi-broker projects)
|
|
22
|
+
* @default 'default'
|
|
23
|
+
*/
|
|
24
|
+
transport?: string;
|
|
25
|
+
}
|
|
4
26
|
/**
|
|
5
27
|
* Central WebSocket message broker for Asena.js
|
|
6
28
|
*
|
|
@@ -32,6 +54,14 @@ export declare class Ulak implements ICoreService {
|
|
|
32
54
|
* Map of namespace path to WebSocket service instance
|
|
33
55
|
*/
|
|
34
56
|
private namespaces;
|
|
57
|
+
/**
|
|
58
|
+
* Named microservice transports (set during bootstrap by PrepareMicroserviceService)
|
|
59
|
+
*/
|
|
60
|
+
private microserviceTransports;
|
|
61
|
+
/**
|
|
62
|
+
* Messaging interceptors applied to all outgoing send/emit calls
|
|
63
|
+
*/
|
|
64
|
+
private microserviceInterceptors;
|
|
35
65
|
/**
|
|
36
66
|
* Initialize Ulak messaging system
|
|
37
67
|
* Called after dependency injection is complete
|
|
@@ -133,6 +163,62 @@ export declare class Ulak implements ICoreService {
|
|
|
133
163
|
* @returns Number of active sockets
|
|
134
164
|
*/
|
|
135
165
|
getSocketCount(namespace: string): number;
|
|
166
|
+
/**
|
|
167
|
+
* Wire the microservice transports into Ulak
|
|
168
|
+
* Called during bootstrap by PrepareMicroserviceService - not intended for user code
|
|
169
|
+
*
|
|
170
|
+
* @param transports - Named transports ('default' for the single-transport form)
|
|
171
|
+
* @param interceptors - Interceptors applied to all outgoing send/emit calls
|
|
172
|
+
*/
|
|
173
|
+
setMicroserviceTransports(transports: Map<string, MicroserviceTransport>, interceptors?: MessagingInterceptor[]): void;
|
|
174
|
+
/**
|
|
175
|
+
* Check if a microservice transport is configured and connected
|
|
176
|
+
*
|
|
177
|
+
* @param transport - Named transport to check
|
|
178
|
+
* @returns True when the transport exists and reports a live connection
|
|
179
|
+
*/
|
|
180
|
+
isMicroserviceConnected(transport?: string): boolean;
|
|
181
|
+
/**
|
|
182
|
+
* Get all configured microservice transports (read-only)
|
|
183
|
+
* Used by the health endpoint to report per-transport status
|
|
184
|
+
*/
|
|
185
|
+
getMicroserviceTransports(): ReadonlyMap<string, MicroserviceTransport>;
|
|
186
|
+
/**
|
|
187
|
+
* Send a request to another service and await its reply (request/response)
|
|
188
|
+
*
|
|
189
|
+
* @param pattern - Full request pattern (e.g. 'order.create')
|
|
190
|
+
* @param data - Request payload
|
|
191
|
+
* @param options - Timeout, headers and named transport selection
|
|
192
|
+
* @returns The reply produced by the remote @MessagePattern handler
|
|
193
|
+
* @throws {UlakError} NO_TRANSPORT / TRANSPORT_NOT_FOUND / TIMEOUT / REMOTE_ERROR
|
|
194
|
+
*/
|
|
195
|
+
send<T = unknown>(pattern: string, data?: unknown, options?: UlakSendOptions): Promise<T>;
|
|
196
|
+
/**
|
|
197
|
+
* Emit a fire-and-forget event to other services
|
|
198
|
+
*
|
|
199
|
+
* @param pattern - Full event pattern (e.g. 'order.created')
|
|
200
|
+
* @param data - Event payload
|
|
201
|
+
* @param options - Headers and named transport selection
|
|
202
|
+
* @throws {UlakError} NO_TRANSPORT / TRANSPORT_NOT_FOUND
|
|
203
|
+
*/
|
|
204
|
+
emit(pattern: string, data?: unknown, options?: UlakEmitOptions): Promise<void>;
|
|
205
|
+
/**
|
|
206
|
+
* Select a pattern-scoped microservice messaging view
|
|
207
|
+
* Patterns passed to the returned view are joined with the prefix ('order' + 'create' → 'order.create')
|
|
208
|
+
*
|
|
209
|
+
* @param prefix - Pattern prefix (empty for absolute patterns)
|
|
210
|
+
* @param options - Named transport selection
|
|
211
|
+
* @returns Scoped messages instance
|
|
212
|
+
*
|
|
213
|
+
* @example
|
|
214
|
+
* ```typescript
|
|
215
|
+
* const orders = ulak.messages('order');
|
|
216
|
+
* const res = await orders.send('create', dto); // sends 'order.create'
|
|
217
|
+
* ```
|
|
218
|
+
*/
|
|
219
|
+
messages<T extends string = ''>(prefix?: T, options?: {
|
|
220
|
+
transport?: string;
|
|
221
|
+
}): Ulak.Messages<T>;
|
|
136
222
|
/**
|
|
137
223
|
* Dispose of all resources and stop background tasks
|
|
138
224
|
* Should be called during application shutdown
|
|
@@ -146,6 +232,13 @@ export declare class Ulak implements ICoreService {
|
|
|
146
232
|
* @throws {UlakError} If namespace not found
|
|
147
233
|
*/
|
|
148
234
|
private getNamespaceService;
|
|
235
|
+
/**
|
|
236
|
+
* Get a named microservice transport or throw
|
|
237
|
+
*
|
|
238
|
+
* @param name - Named transport (defaults to 'default')
|
|
239
|
+
* @throws {UlakError} NO_TRANSPORT when none configured, TRANSPORT_NOT_FOUND for unknown names
|
|
240
|
+
*/
|
|
241
|
+
private getMicroserviceTransport;
|
|
149
242
|
}
|
|
150
243
|
/**
|
|
151
244
|
* Scoped namespace interface
|
|
@@ -191,6 +284,34 @@ export declare namespace Ulak {
|
|
|
191
284
|
*/
|
|
192
285
|
getSocketCount(): number;
|
|
193
286
|
}
|
|
287
|
+
/**
|
|
288
|
+
* Pattern-scoped microservice messaging view
|
|
289
|
+
* Provides ergonomic API without repeating the pattern prefix
|
|
290
|
+
*/
|
|
291
|
+
interface Messages<P extends string = string> {
|
|
292
|
+
/**
|
|
293
|
+
* The pattern prefix ('' for absolute patterns)
|
|
294
|
+
*/
|
|
295
|
+
readonly prefix: P;
|
|
296
|
+
/**
|
|
297
|
+
* Send a request and await its reply (request/response)
|
|
298
|
+
* The pattern is joined with the prefix ('create' → 'order.create')
|
|
299
|
+
*
|
|
300
|
+
* @param pattern - Request pattern relative to the prefix
|
|
301
|
+
* @param data - Request payload
|
|
302
|
+
* @param options - Timeout and headers
|
|
303
|
+
*/
|
|
304
|
+
send<T = unknown>(pattern: string, data?: unknown, options?: SendOptions): Promise<T>;
|
|
305
|
+
/**
|
|
306
|
+
* Emit a fire-and-forget event
|
|
307
|
+
* The pattern is joined with the prefix ('created' → 'order.created')
|
|
308
|
+
*
|
|
309
|
+
* @param pattern - Event pattern relative to the prefix
|
|
310
|
+
* @param data - Event payload
|
|
311
|
+
* @param options - Headers
|
|
312
|
+
*/
|
|
313
|
+
emit(pattern: string, data?: unknown, options?: EmitOptions): Promise<void>;
|
|
314
|
+
}
|
|
194
315
|
}
|
|
195
316
|
/**
|
|
196
317
|
* Helper function for injecting scoped Ulak namespace
|
|
@@ -222,3 +343,38 @@ export declare namespace Ulak {
|
|
|
222
343
|
* ```
|
|
223
344
|
*/
|
|
224
345
|
export declare function ulak<T extends string>(namespace: T): readonly [ICoreServiceNames.__ULAK__, (ulak: Ulak) => Ulak.NameSpace<T>];
|
|
346
|
+
/**
|
|
347
|
+
* Helper functions for injecting microservice messaging views from Ulak
|
|
348
|
+
* Declaration merging keeps the single `ulak` entry point:
|
|
349
|
+
* `ulak('/chat')` → WebSocket namespace, `ulak.messages('order')` → microservice messaging
|
|
350
|
+
*/
|
|
351
|
+
export declare namespace ulak {
|
|
352
|
+
/**
|
|
353
|
+
* Inject a pattern-scoped microservice messaging view
|
|
354
|
+
*
|
|
355
|
+
* @param prefix - Pattern prefix joined to every send/emit ('' for absolute patterns)
|
|
356
|
+
* @param options - Named transport selection (multi-broker projects)
|
|
357
|
+
* @returns A tuple of [serviceName, expression] for @Inject decorator
|
|
358
|
+
*
|
|
359
|
+
* @example
|
|
360
|
+
* ```typescript
|
|
361
|
+
* @Service('CheckoutService')
|
|
362
|
+
* export class CheckoutService {
|
|
363
|
+
* @Inject(ulak.messages('order'))
|
|
364
|
+
* private orders: Ulak.Messages<'order'>;
|
|
365
|
+
*
|
|
366
|
+
* async checkout(dto: CheckoutDto) {
|
|
367
|
+
* const res = await this.orders.send('create', dto); // sends 'order.create'
|
|
368
|
+
* await this.orders.emit('created', { id: res.id }); // emits 'order.created'
|
|
369
|
+
* }
|
|
370
|
+
* }
|
|
371
|
+
*
|
|
372
|
+
* // Named transport (multi-broker projects)
|
|
373
|
+
* @Inject(ulak.messages('metrics', { transport: 'analytics' }))
|
|
374
|
+
* private metrics: Ulak.Messages<'metrics'>;
|
|
375
|
+
* ```
|
|
376
|
+
*/
|
|
377
|
+
function messages<P extends string = ''>(prefix?: P, options?: {
|
|
378
|
+
transport?: string;
|
|
379
|
+
}): readonly [ICoreServiceNames.__ULAK__, (u: Ulak) => Ulak.Messages<P>];
|
|
380
|
+
}
|
|
@@ -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,
|
|
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
|