@zlink-systems/nestjs 0.10.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.
Files changed (41) hide show
  1. package/LICENSE +105 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/auto-discovery-marker.d.ts +3 -0
  4. package/dist/auto-discovery-marker.js +12 -0
  5. package/dist/contracts.d.ts +229 -0
  6. package/dist/contracts.js +4 -0
  7. package/dist/decorators.d.ts +16 -0
  8. package/dist/decorators.js +174 -0
  9. package/dist/dispatch-scope.d.ts +5 -0
  10. package/dist/dispatch-scope.js +19 -0
  11. package/dist/drain-health-indicator.d.ts +9 -0
  12. package/dist/drain-health-indicator.js +32 -0
  13. package/dist/framework-integration-contracts.d.ts +368 -0
  14. package/dist/framework-integration-contracts.js +2 -0
  15. package/dist/framework-loader.d.ts +50 -0
  16. package/dist/framework-loader.js +16 -0
  17. package/dist/handler-adapters.d.ts +13 -0
  18. package/dist/handler-adapters.js +155 -0
  19. package/dist/handler-metadata.d.ts +55 -0
  20. package/dist/handler-metadata.js +84 -0
  21. package/dist/http-client-module.d.ts +28 -0
  22. package/dist/http-client-module.js +96 -0
  23. package/dist/index.d.ts +10 -0
  24. package/dist/index.js +27 -0
  25. package/dist/internal-tokens.d.ts +2 -0
  26. package/dist/internal-tokens.js +5 -0
  27. package/dist/module.d.ts +11 -0
  28. package/dist/module.js +203 -0
  29. package/dist/options-builder.d.ts +2 -0
  30. package/dist/options-builder.js +973 -0
  31. package/dist/provider-discovery.d.ts +36 -0
  32. package/dist/provider-discovery.js +186 -0
  33. package/dist/providers.d.ts +16 -0
  34. package/dist/providers.js +426 -0
  35. package/dist/registration-composer.d.ts +7 -0
  36. package/dist/registration-composer.js +310 -0
  37. package/dist/spot-node-handler-registry.d.ts +24 -0
  38. package/dist/spot-node-handler-registry.js +105 -0
  39. package/dist/tokens.d.ts +19 -0
  40. package/dist/tokens.js +22 -0
  41. package/package.json +26 -0
@@ -0,0 +1,368 @@
1
+ import type { RoutingId, Type, ZLinkActor, ZLinkActorFactory, ZLinkApplicationJobQueueOptions, ZLinkCoreHwmOptions, ZLinkDispatchOptions, ZLinkEntrySpot, ZLinkHandlerFilter, ZLinkLocationOptions, ZLinkLocationOptionValues, ZLinkLocationStore, ZLinkRelocationStore, ZLinkSpotRelocationCoordinationMode, ZLinkUserSpotExecutionMode, ZLinkInstanceSpot, ZLinkMessageSerializer, ZLinkMetricsOptions, ZLinkNetworkOptions, ZLinkMessageContext, ZLinkPublishMessageContext, ZLinkRouteMessageContext, ZLinkSpot, ZLinkStreamCompressionOptions, ZLinkTimerOptions } from '@zlink-systems/framework';
2
+ /** Private composition bridge used only by the Nest companion package. */
3
+ export interface ZLinkProviderResolver {
4
+ get?<T>(type: Type<T>): T | undefined;
5
+ create?<T>(type: Type<T>): T | Promise<T>;
6
+ }
7
+ export interface ZLinkWorkerOptions {
8
+ readonly minThreads: number;
9
+ readonly maxThreads: number;
10
+ readonly idleTimeoutMs: number;
11
+ readonly maxQueueLength: number;
12
+ }
13
+ export interface ZLinkNestIntegrationRuntimeHost extends Pick<import('@zlink-systems/framework').ZLinkFrameworkRuntime, 'shutdown'> {
14
+ readonly channelRuntimeOptions: unknown;
15
+ readonly routeMeshRuntimeOptions: import('@zlink-systems/framework').ZLinkRouteMeshRuntimeOptions;
16
+ readonly boundSessionFactory: unknown;
17
+ readonly locationRuntimeQuery?: unknown;
18
+ readonly routeMeshRuntime: import('@zlink-systems/framework').ZLinkRouteMeshRuntime;
19
+ readonly clientServerRuntime: import('@zlink-systems/framework').ZLinkClientServerRuntime;
20
+ readonly fanoutRuntime: import('@zlink-systems/framework').ZLinkFanoutRuntime;
21
+ createLocationHandleResolver(): unknown;
22
+ start(): Promise<void>;
23
+ onApplicationBootstrap?(): Promise<void> | void;
24
+ onApplicationShutdown?(): Promise<void> | void;
25
+ }
26
+ export interface ZLinkRouteChannelSendHandler {
27
+ handle(payload: unknown, context: ZLinkRouteMessageContext): Promise<void>;
28
+ }
29
+ export interface ZLinkRouteChannelRequestHandler {
30
+ handle(payload: unknown, context: ZLinkRouteMessageContext): Promise<unknown>;
31
+ }
32
+ export interface ZLinkFrameworkRegistration {
33
+ readonly network: ZLinkNetworkOptions;
34
+ readonly messageSerializers: ReadonlyMap<string, ZLinkMessageSerializer>;
35
+ readonly codecs: ZLinkCodecRegistration;
36
+ readonly requestTimeoutMs?: number;
37
+ readonly actorFactories: ReadonlyMap<string, Type>;
38
+ readonly actorTransferTimeoutMs?: number;
39
+ readonly messageFollowDurationMs: number;
40
+ readonly sessionReplacementCallbackTimeoutMs: number;
41
+ readonly spotFactories: ReadonlySet<Type<ZLinkSpot>>;
42
+ readonly channels: ReadonlyMap<string, ZLinkChannelOptions>;
43
+ readonly channelClients: ReadonlySet<string>;
44
+ readonly fanoutPublishers: ReadonlySet<string>;
45
+ readonly routeChannels: ReadonlySet<string>;
46
+ readonly routeChannelOptions: ReadonlyMap<string, ZLinkRouteChannelOptions>;
47
+ readonly streamNodes: ReadonlyMap<string, ZLinkStreamNodeOptions>;
48
+ readonly streamCompression?: ZLinkStreamCompressionOptions;
49
+ readonly spotNodes: ReadonlyMap<string, ZLinkSpotNodeOptions>;
50
+ readonly spotPublisherClients: ReadonlySet<string>;
51
+ readonly filterTypes: readonly Type<ZLinkHandlerFilter>[];
52
+ readonly worker?: ZLinkWorkerOptions;
53
+ readonly coreHwm?: ZLinkCoreHwmOptions;
54
+ readonly applicationJobQueue?: ZLinkApplicationJobQueueOptions;
55
+ readonly dispatch?: ZLinkDispatchOptions;
56
+ readonly metrics?: ZLinkMetricsOptions;
57
+ readonly locations: ZLinkLocationRegistration;
58
+ }
59
+ export interface ZLinkLocationRegistration {
60
+ readonly useInMemoryStores: boolean;
61
+ readonly storeInstance?: ZLinkLocationStore;
62
+ readonly relocationStoreInstance?: ZLinkRelocationStore;
63
+ readonly options: ZLinkLocationOptions;
64
+ }
65
+ export interface ZLinkCodecSerializerRegistration {
66
+ readonly contentType: string;
67
+ readonly serializer: ZLinkMessageSerializer;
68
+ }
69
+ export interface ZLinkStreamCodecRegistration {
70
+ readonly contentType: string;
71
+ readonly codec: unknown;
72
+ }
73
+ export interface ZLinkCodecRegistration {
74
+ readonly serializers: ReadonlyMap<string, ZLinkMessageSerializer>;
75
+ readonly streamCodecs: ReadonlyMap<string, unknown>;
76
+ }
77
+ export interface ZLinkCodecRegistryOptions {
78
+ readonly serializers?: readonly ZLinkCodecSerializerRegistration[];
79
+ readonly streamCodecs?: readonly ZLinkStreamCodecRegistration[];
80
+ }
81
+ export interface ZLinkFrameworkRegistrationOptions {
82
+ readonly network?: Partial<ZLinkNetworkOptions>;
83
+ readonly codecs?: ZLinkCodecRegistryOptions;
84
+ readonly applicationVersion?: bigint;
85
+ readonly maintenanceWave?: string;
86
+ readonly requestTimeoutMs?: number;
87
+ readonly spotFactories?: readonly Type<ZLinkSpot>[];
88
+ readonly actorTransferTimeoutMs?: number;
89
+ readonly messageFollowDurationMs?: number;
90
+ readonly sessionReplacementCallbackTimeoutMs?: number;
91
+ readonly channels?: Readonly<Record<string, ZLinkChannelOptions>>;
92
+ readonly routeChannels?: readonly (string | ZLinkRouteChannelOptions)[];
93
+ readonly streamNodes?: Readonly<Record<string, ZLinkStreamNodeOptions>>;
94
+ readonly streamCompression?: ZLinkStreamCompressionOptions;
95
+ readonly spotNodes?: readonly (string | ZLinkSpotNodeRegistrationOptions)[] | Readonly<Record<string, ZLinkSpotNodeOptions>>;
96
+ readonly spotPublisherClients?: readonly string[];
97
+ readonly filters?: readonly Type<ZLinkHandlerFilter>[];
98
+ readonly worker?: ZLinkWorkerOptions;
99
+ readonly coreHwm?: ZLinkCoreHwmOptions;
100
+ readonly applicationJobQueue?: ZLinkApplicationJobQueueOptions;
101
+ readonly dispatch?: ZLinkDispatchOptions;
102
+ readonly metrics?: ZLinkMetricsOptions;
103
+ readonly locations?: {
104
+ readonly useInMemoryStores?: boolean;
105
+ readonly storeInstance?: ZLinkLocationStore;
106
+ readonly relocationStoreInstance?: ZLinkRelocationStore;
107
+ readonly options?: Partial<ZLinkLocationOptionValues>;
108
+ };
109
+ }
110
+ export interface ZLinkChannelOptions {
111
+ readonly routingId?: string;
112
+ readonly routingIdPrefix?: string;
113
+ readonly requestTimeoutMs?: number;
114
+ readonly client?: ZLinkClientCapabilityOptions;
115
+ readonly publisher?: ZLinkPublisherCapabilityOptions;
116
+ readonly routeMesh?: ZLinkRouteMeshChannelOptions;
117
+ readonly publishHandlers?: readonly ZLinkChannelPublishHandlerRegistration[];
118
+ readonly requestHandlers?: readonly ZLinkChannelRequestHandlerRegistration[];
119
+ readonly sendHandlers?: readonly ZLinkChannelSendHandlerRegistration[];
120
+ readonly server?: {
121
+ readonly bind?: string;
122
+ readonly bindHost?: string;
123
+ readonly advertiseHost?: string;
124
+ readonly port?: number;
125
+ readonly routingId?: string;
126
+ readonly weight?: number;
127
+ readonly sendHighWaterMark?: number;
128
+ readonly receiveHighWaterMark?: number;
129
+ readonly sendTimeoutMs?: number;
130
+ readonly maxMessageSize?: number;
131
+ };
132
+ readonly subscriber?: ZLinkClientCapabilityOptions;
133
+ }
134
+ export interface ZLinkClientCapabilityOptions {
135
+ readonly manualConnections?: readonly string[];
136
+ readonly sendHighWaterMark?: number;
137
+ readonly receiveHighWaterMark?: number;
138
+ readonly sendTimeoutMs?: number;
139
+ readonly maxMessageSize?: number;
140
+ }
141
+ export interface ZLinkPublisherCapabilityOptions {
142
+ readonly bind?: string;
143
+ readonly bindHost?: string;
144
+ readonly advertiseHost?: string;
145
+ readonly port?: number;
146
+ }
147
+ export interface ZLinkRouteMeshChannelOptions {
148
+ readonly requestTimeoutMs?: number;
149
+ readonly bind?: string;
150
+ readonly manualConnections?: readonly string[];
151
+ readonly routingId?: string;
152
+ readonly routingIdPrefix?: string;
153
+ readonly weight?: number;
154
+ readonly sendHighWaterMark?: number;
155
+ readonly receiveHighWaterMark?: number;
156
+ readonly sendTimeoutMs?: number;
157
+ readonly sendHandlers?: readonly ZLinkRouteChannelSendHandlerRegistration[];
158
+ readonly requestHandlers?: readonly ZLinkRouteChannelRequestHandlerRegistration[];
159
+ readonly handlers?: readonly ZLinkRouteChannelHandlerOptions[];
160
+ }
161
+ export interface ZLinkRouteChannelOptions extends ZLinkRouteMeshChannelOptions {
162
+ readonly routerChannelId: string;
163
+ }
164
+ export interface ZLinkStreamNodeOptions {
165
+ readonly bind?: string;
166
+ readonly bindHost?: string;
167
+ readonly advertiseHost?: string;
168
+ readonly port?: number;
169
+ readonly actorDispatchEnabled?: boolean;
170
+ readonly tlsServer?: {
171
+ readonly certificatePath: string;
172
+ readonly keyPath: string;
173
+ readonly requireClientCertificate?: boolean;
174
+ };
175
+ readonly session?: Type;
176
+ }
177
+ export interface ZLinkSpotNodeRegistrationOptions extends ZLinkSpotNodeOptions {
178
+ readonly name: string;
179
+ }
180
+ export interface ZLinkSpotNodeOptions {
181
+ readonly objectRole?: 'client' | 'server';
182
+ readonly placementWeight?: number;
183
+ readonly actorLimit?: number;
184
+ readonly spotLimit?: number;
185
+ readonly activationConcurrencyLimit?: number;
186
+ readonly instanceSpotIdleTimeoutMs?: number;
187
+ readonly routingId?: string;
188
+ readonly routingIdPrefix?: string;
189
+ readonly router?: ZLinkSpotRouterCapabilityOptions;
190
+ readonly pubSub?: ZLinkSpotPubSubCapabilityOptions;
191
+ readonly entrySpotType?: Type<ZLinkEntrySpot>;
192
+ readonly spotFactories?: readonly Type<ZLinkSpot>[];
193
+ readonly spotFactoryRegistrations?: Readonly<Record<string, ZLinkObjectFactoryRegistration<ZLinkSpot, ZLinkSpot, ZLinkUserSpotFactoryConfiguration>>>;
194
+ readonly instanceSpotFactories?: Readonly<Record<string, Type<ZLinkInstanceSpot>>>;
195
+ readonly instanceSpotFactoryRegistrations?: Readonly<Record<string, ZLinkObjectFactoryRegistration<ZLinkInstanceSpot, ZLinkInstanceSpot, ZLinkInstanceSpotFactoryConfiguration>>>;
196
+ readonly actorFactories?: Readonly<Record<string, Type> | Map<string, Type>>;
197
+ readonly actorFactoryRegistrations?: Readonly<Record<string, ZLinkObjectFactoryRegistration<ZLinkActor, ZLinkActorFactory, ZLinkActorFactoryConfiguration>>>;
198
+ readonly meshChannels?: Readonly<Record<string, ZLinkMeshChannelOptions>>;
199
+ readonly routeSendHandlers?: readonly ZLinkRouteMeshSendHandlerRegistration[];
200
+ readonly routeRequestHandlers?: readonly ZLinkRouteMeshRequestHandlerRegistration[];
201
+ readonly requestTimeoutMs?: number;
202
+ readonly publisherConfig?: {
203
+ readonly sendHighWaterMark?: number;
204
+ readonly sendTimeoutMs?: number;
205
+ readonly lingerMs?: number;
206
+ };
207
+ readonly entrySpotTimerHandlers?: readonly ZLinkEntrySpotTimerHandlerRegistration[];
208
+ readonly entrySpotPacketHandlers?: readonly ZLinkEntrySpotPacketHandlerRegistration[];
209
+ readonly entrySpotSubscriptionHandlers?: readonly ZLinkEntrySpotSubscriptionHandlerRegistration[];
210
+ readonly entrySpotActorSendHandlers?: readonly ZLinkEntrySpotActorSendHandlerRegistration[];
211
+ readonly entrySpotActorRequestHandlers?: readonly ZLinkEntrySpotActorRequestHandlerRegistration[];
212
+ readonly spotTimerHandlers?: readonly ZLinkSpotTimerHandlerRegistration[];
213
+ readonly spotPacketHandlers?: readonly ZLinkSpotPacketHandlerRegistration[];
214
+ readonly spotSubscriptionHandlers?: readonly ZLinkSpotSubscriptionHandlerRegistration[];
215
+ readonly spotActorSendHandlers?: readonly ZLinkSpotActorSendHandlerRegistration[];
216
+ readonly spotActorRequestHandlers?: readonly ZLinkSpotActorRequestHandlerRegistration[];
217
+ }
218
+ interface ZLinkObjectFactoryRegistration<T, TImplementation = T, TOptions = unknown> {
219
+ readonly implementation: Type<TImplementation>;
220
+ readonly options?: TOptions;
221
+ readonly relocation: ZLinkRelocationConfiguration<T>;
222
+ }
223
+ declare const zlinkRelocationConfigurationBrand: unique symbol;
224
+ export type ZLinkRelocationConfiguration<T> = ({
225
+ readonly kind: 'disabled';
226
+ } | {
227
+ readonly kind: 'recreate';
228
+ } | {
229
+ readonly kind: 'snapshot';
230
+ readonly adapterType: Type;
231
+ }) & {
232
+ readonly [zlinkRelocationConfigurationBrand]?: T;
233
+ };
234
+ export interface ZLinkActorFactoryConfiguration {
235
+ }
236
+ export interface ZLinkUserSpotFactoryConfiguration {
237
+ readonly stableTypeLimit?: number;
238
+ readonly executionMode: ZLinkUserSpotExecutionMode;
239
+ readonly relocationCoordinationMode: ZLinkSpotRelocationCoordinationMode;
240
+ }
241
+ export interface ZLinkInstanceSpotFactoryConfiguration {
242
+ readonly stableTypeLimit?: number;
243
+ }
244
+ export interface ZLinkMeshChannelOptions {
245
+ readonly client?: boolean;
246
+ readonly server?: boolean;
247
+ readonly weight?: number;
248
+ readonly handlerGroups?: readonly string[];
249
+ readonly sendHandlers?: readonly ZLinkMeshSendHandlerRegistration[];
250
+ readonly requestHandlers?: readonly ZLinkMeshRequestHandlerRegistration[];
251
+ }
252
+ export interface ZLinkMeshSendHandlerRegistration {
253
+ readonly packetName: string;
254
+ readonly handlerType: Type;
255
+ }
256
+ export interface ZLinkMeshRequestHandlerRegistration {
257
+ readonly packetName: string;
258
+ readonly handlerType: Type;
259
+ }
260
+ export interface ZLinkRouteMeshSendHandlerRegistration {
261
+ readonly packetName: string;
262
+ readonly handlerType: Type;
263
+ }
264
+ export interface ZLinkRouteMeshRequestHandlerRegistration {
265
+ readonly packetName: string;
266
+ readonly handlerType: Type;
267
+ }
268
+ export interface ZLinkSpotRouterCapabilityOptions {
269
+ readonly bind?: string;
270
+ readonly bindHost?: string;
271
+ readonly advertiseHost?: string;
272
+ readonly port?: number;
273
+ readonly manualConnections?: readonly string[];
274
+ readonly manualPeerConnections?: readonly {
275
+ readonly peerRid: RoutingId;
276
+ readonly endpoint: string;
277
+ }[];
278
+ readonly routingId?: string;
279
+ }
280
+ export interface ZLinkSpotPubSubCapabilityOptions {
281
+ readonly bind?: string;
282
+ readonly manualConnections?: readonly string[];
283
+ readonly routingId?: string;
284
+ }
285
+ export interface ZLinkRouteChannelHandlerOptions {
286
+ readonly kind: 'send' | 'request';
287
+ readonly packetName: string;
288
+ readonly handler: ZLinkRouteChannelSendHandler | ZLinkRouteChannelRequestHandler;
289
+ }
290
+ export interface ZLinkRouteChannelSendHandlerRegistration {
291
+ readonly packetName: string;
292
+ readonly handler: ZLinkRouteChannelSendHandler;
293
+ }
294
+ export interface ZLinkRouteChannelRequestHandlerRegistration {
295
+ readonly packetName: string;
296
+ readonly handler: ZLinkRouteChannelRequestHandler;
297
+ }
298
+ export interface ZLinkChannelPublishHandlerRegistration {
299
+ readonly packetName: string;
300
+ readonly handler: {
301
+ handle(payload: unknown, context: ZLinkPublishMessageContext): Promise<void>;
302
+ };
303
+ }
304
+ export interface ZLinkChannelRequestHandlerRegistration {
305
+ readonly packetName: string;
306
+ readonly handler: {
307
+ handle(payload: unknown, context: ZLinkMessageContext): Promise<unknown>;
308
+ };
309
+ }
310
+ export interface ZLinkChannelSendHandlerRegistration {
311
+ readonly packetName: string;
312
+ readonly handler: {
313
+ handle(payload: unknown, context: ZLinkMessageContext): Promise<void>;
314
+ };
315
+ }
316
+ export interface ZLinkEntrySpotTimerHandlerRegistration {
317
+ readonly entrySpotType: Type<ZLinkEntrySpot>;
318
+ readonly handlerType: Type;
319
+ readonly name: string;
320
+ readonly periodMs: number;
321
+ readonly options?: ZLinkTimerOptions;
322
+ }
323
+ export interface ZLinkEntrySpotPacketHandlerRegistration {
324
+ readonly entrySpotType: Type<ZLinkEntrySpot>;
325
+ readonly handlerType: Type;
326
+ readonly packetName?: string;
327
+ }
328
+ export interface ZLinkEntrySpotSubscriptionHandlerRegistration {
329
+ readonly entrySpotType: Type<ZLinkEntrySpot>;
330
+ readonly handlerType: Type;
331
+ readonly channelName: string;
332
+ readonly topic: string;
333
+ }
334
+ export interface ZLinkEntrySpotActorSendHandlerRegistration {
335
+ readonly entrySpotType: Type<ZLinkEntrySpot>;
336
+ readonly actorType: Type<ZLinkActor>;
337
+ readonly handlerType: Type;
338
+ readonly packetName: string;
339
+ }
340
+ export interface ZLinkEntrySpotActorRequestHandlerRegistration extends ZLinkEntrySpotActorSendHandlerRegistration {
341
+ }
342
+ export interface ZLinkSpotTimerHandlerRegistration {
343
+ readonly spotType: Type<ZLinkSpot>;
344
+ readonly handlerType: Type;
345
+ readonly name: string;
346
+ readonly periodMs: number;
347
+ readonly options?: ZLinkTimerOptions;
348
+ }
349
+ export interface ZLinkSpotPacketHandlerRegistration {
350
+ readonly spotType: Type<ZLinkSpot>;
351
+ readonly handlerType: Type;
352
+ readonly packetName?: string;
353
+ }
354
+ export interface ZLinkSpotSubscriptionHandlerRegistration {
355
+ readonly spotType: Type<ZLinkSpot>;
356
+ readonly handlerType: Type;
357
+ readonly channelName: string;
358
+ readonly topic: string;
359
+ }
360
+ export interface ZLinkSpotActorSendHandlerRegistration {
361
+ readonly spotType: Type<ZLinkSpot>;
362
+ readonly actorType: Type<ZLinkActor>;
363
+ readonly handlerType: Type;
364
+ readonly packetName: string;
365
+ }
366
+ export interface ZLinkSpotActorRequestHandlerRegistration extends ZLinkSpotActorSendHandlerRegistration {
367
+ }
368
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,50 @@
1
+ import type { Type, ZLinkActorClient, ZLinkActorManager, ZLinkChannelClient, ZLinkCodecRegistrar, ZLinkCodecRegistryBuilder, ZLinkDispatchOptions, ZLinkDispatchOptionsBuilder, ZLinkInboundDispatchOptions, ZLinkLocationOptionValues, ZLinkLocationOptions, ZLinkEntrySpot, ZLinkFanoutClient, ZLinkHandlerFilterContext, ZLinkRouteClient, ZLinkSpot, ZLinkSpotManager, ZLinkSpotOutbound, ZLinkSpotPublisherClient, ZLinkStreamCompressionBuilder, ZLinkStreamCompressionCodec } from '@zlink-systems/framework';
2
+ import type { ZLinkHttpExecutionScheduler } from '@zlink-systems/http-client';
3
+ import type { ZLinkCodecSerializerRegistration, ZLinkFrameworkRegistration, ZLinkFrameworkRegistrationOptions, ZLinkNestIntegrationRuntimeHost, ZLinkProviderResolver, ZLinkStreamCodecRegistration } from './framework-integration-contracts';
4
+ export type FrameworkRuntimeHost = ZLinkNestIntegrationRuntimeHost;
5
+ interface FrameworkIntegrationModule {
6
+ readonly ZLinkConfigurationException: new (message: string) => Error;
7
+ createFrameworkRegistration(options: ZLinkFrameworkRegistrationOptions): ZLinkFrameworkRegistration;
8
+ hasActorManager(registration: ZLinkFrameworkRegistration): boolean;
9
+ hasSpotNode(registration: ZLinkFrameworkRegistration): boolean;
10
+ hasSpotPublisherClient(registration: ZLinkFrameworkRegistration): boolean;
11
+ createIntegrationDispatchOptionsBuilder(dispatch: ZLinkDispatchOptions): ZLinkDispatchOptionsBuilder;
12
+ createIntegrationInboundDispatchOptionsBuilder(options: Pick<ZLinkFrameworkRegistrationOptions, 'coreHwm' | 'applicationJobQueue'>): ZLinkInboundDispatchOptions;
13
+ createIntegrationLocationOptionsBuilder(options: Partial<ZLinkLocationOptionValues>): ZLinkLocationOptions;
14
+ createIntegrationStreamCompressionBuilder(options: {
15
+ disabled?: boolean;
16
+ codec?: ZLinkStreamCompressionCodec;
17
+ }): ZLinkStreamCompressionBuilder;
18
+ createIntegrationCodecRegistryBuilder(options: {
19
+ serializers: ZLinkCodecSerializerRegistration[];
20
+ streamCodecs: ZLinkStreamCodecRegistration[];
21
+ }): ZLinkCodecRegistryBuilder & ZLinkCodecRegistrar;
22
+ createIntegrationRuntimeHost(registration: ZLinkFrameworkRegistration, providerResolver?: ZLinkProviderResolver): ZLinkNestIntegrationRuntimeHost;
23
+ createIntegrationChannelClient(registration: ZLinkFrameworkRegistration, runtime: ZLinkNestIntegrationRuntimeHost): ZLinkChannelClient;
24
+ createIntegrationFanoutClient(registration: ZLinkFrameworkRegistration, runtime: ZLinkNestIntegrationRuntimeHost): ZLinkFanoutClient;
25
+ createIntegrationRouteClient(registration: ZLinkFrameworkRegistration, runtime: ZLinkNestIntegrationRuntimeHost): ZLinkRouteClient;
26
+ createIntegrationSpotPublisherClient(registration: ZLinkFrameworkRegistration, runtime: ZLinkNestIntegrationRuntimeHost): ZLinkSpotPublisherClient;
27
+ createIntegrationActorClient(runtime: ZLinkNestIntegrationRuntimeHost): ZLinkActorClient;
28
+ createIntegrationActorManager(registration: ZLinkFrameworkRegistration, runtime: ZLinkNestIntegrationRuntimeHost, providerResolver?: ZLinkProviderResolver): ZLinkActorManager;
29
+ createIntegrationSpotManager(registration: ZLinkFrameworkRegistration, runtime: ZLinkNestIntegrationRuntimeHost, providerResolver?: ZLinkProviderResolver): ZLinkSpotManager;
30
+ createIntegrationSpotOutbound(runtime: ZLinkNestIntegrationRuntimeHost): ZLinkSpotOutbound;
31
+ createIntegrationHttpExecutionScheduler(runtime: ZLinkNestIntegrationRuntimeHost): ZLinkHttpExecutionScheduler;
32
+ validateActorTransferTimeout(timeoutMs: number): number;
33
+ validateMessageFollowDuration(timeoutMs: number): number;
34
+ validateSessionReplacementCallbackTimeout(timeoutMs: number): number;
35
+ validateRoutingIdPrefix(prefix: string): string;
36
+ registerEntrySpot(options: {
37
+ entrySpotType?: Type<ZLinkEntrySpot>;
38
+ }, entrySpotType: Type<ZLinkEntrySpot>): void;
39
+ registerSpotFactory(options: {
40
+ spotFactories?: Type<ZLinkSpot>[];
41
+ }, spotType: Type<ZLinkSpot>): void;
42
+ registerActorFactory(options: {
43
+ actorFactories?: Record<string, Type>;
44
+ }, actorType: string, factoryType: Type): void;
45
+ registerIntegrationHandlerFilterScope(resolver: ZLinkProviderResolver, runner: (context: ZLinkHandlerFilterContext, callback: (scope: {
46
+ resolve<T>(type: Type<T>): Promise<T>;
47
+ }) => Promise<unknown>) => Promise<unknown>): void;
48
+ }
49
+ export declare const framework: FrameworkIntegrationModule;
50
+ export {};
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.framework = void 0;
7
+ const node_module_1 = require("node:module");
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ function loadFramework() {
10
+ const requireFramework = (0, node_module_1.createRequire)(__filename);
11
+ const frameworkEntry = requireFramework.resolve('@zlink-systems/framework');
12
+ return requireFramework(node_path_1.default.join(node_path_1.default.dirname(frameworkEntry), 'nest-integration'));
13
+ }
14
+ // The Nest package is a workspace adapter. It loads the framework's private
15
+ // composition bridge without turning that bridge into a package subpath.
16
+ exports.framework = loadFramework();
@@ -0,0 +1,13 @@
1
+ import { ModuleRef } from '@nestjs/core';
2
+ import type { ZLinkChannelOptions } from './framework-integration-contracts';
3
+ import type { ZLinkNestManualHandlerOptions } from './contracts';
4
+ import type { DiscoveredNestProvider } from './provider-discovery';
5
+ export declare function createDiscoveredRequestHandlers(providerRefs: readonly DiscoveredNestProvider[], handlerGroups: readonly string[] | undefined, moduleRef: ModuleRef): NonNullable<ZLinkChannelOptions['requestHandlers']>;
6
+ export declare function createDiscoveredSendHandlers(providerRefs: readonly DiscoveredNestProvider[], handlerGroups: readonly string[] | undefined, moduleRef: ModuleRef): NonNullable<NonNullable<ZLinkChannelOptions['routeMesh']>['sendHandlers']>;
7
+ export declare function createDiscoveredChannelSendHandlers(providerRefs: readonly DiscoveredNestProvider[], handlerGroups: readonly string[] | undefined, moduleRef: ModuleRef): NonNullable<ZLinkChannelOptions['sendHandlers']>;
8
+ export declare function createDiscoveredPublishHandlers(providerRefs: readonly DiscoveredNestProvider[], handlerGroups: readonly string[] | undefined, moduleRef: ModuleRef): NonNullable<ZLinkChannelOptions['publishHandlers']>;
9
+ export declare function createManualRequestHandlers(handlerTypes: readonly ZLinkNestManualHandlerOptions[] | undefined, moduleRef: ModuleRef): NonNullable<ZLinkChannelOptions['requestHandlers']>;
10
+ export declare function createManualPublishHandlers(handlerTypes: readonly ZLinkNestManualHandlerOptions[] | undefined, moduleRef: ModuleRef): NonNullable<ZLinkChannelOptions['publishHandlers']>;
11
+ export declare function createManualSendHandlers(handlerTypes: readonly ZLinkNestManualHandlerOptions[] | undefined, moduleRef: ModuleRef): NonNullable<ZLinkChannelOptions['sendHandlers']>;
12
+ export declare function createManualRouteSendHandlers(handlerTypes: readonly ZLinkNestManualHandlerOptions[] | undefined, moduleRef: ModuleRef): NonNullable<NonNullable<ZLinkChannelOptions['routeMesh']>['sendHandlers']>;
13
+ export declare function createManualRouteRequestHandlers(handlerTypes: readonly ZLinkNestManualHandlerOptions[] | undefined, moduleRef: ModuleRef): NonNullable<NonNullable<ZLinkChannelOptions['routeMesh']>['requestHandlers']>;
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createDiscoveredRequestHandlers = createDiscoveredRequestHandlers;
4
+ exports.createDiscoveredSendHandlers = createDiscoveredSendHandlers;
5
+ exports.createDiscoveredChannelSendHandlers = createDiscoveredChannelSendHandlers;
6
+ exports.createDiscoveredPublishHandlers = createDiscoveredPublishHandlers;
7
+ exports.createManualRequestHandlers = createManualRequestHandlers;
8
+ exports.createManualPublishHandlers = createManualPublishHandlers;
9
+ exports.createManualSendHandlers = createManualSendHandlers;
10
+ exports.createManualRouteSendHandlers = createManualRouteSendHandlers;
11
+ exports.createManualRouteRequestHandlers = createManualRouteRequestHandlers;
12
+ const core_1 = require("@nestjs/core");
13
+ const framework_loader_1 = require("./framework-loader");
14
+ const dispatch_scope_1 = require("./dispatch-scope");
15
+ const providers_1 = require("./providers");
16
+ function createDiscoveredRequestHandlers(providerRefs, handlerGroups, moduleRef) {
17
+ return createDiscoveredHandlerRegistrations(providerRefs, handlerGroups, 'request', (ref, metadata) => ({
18
+ async handle(payload, context) {
19
+ const result = await invokeDiscoveredHandler(moduleRef, ref, metadata, payload, context);
20
+ return metadata.encodeResult === undefined ? result : metadata.encodeResult(result, context);
21
+ }
22
+ }));
23
+ }
24
+ function createDiscoveredSendHandlers(providerRefs, handlerGroups, moduleRef) {
25
+ return createDiscoveredHandlerRegistrations(providerRefs, handlerGroups, 'send', (ref, metadata) => ({
26
+ async handle(payload, context) {
27
+ await invokeDiscoveredHandler(moduleRef, ref, metadata, payload, context);
28
+ }
29
+ }));
30
+ }
31
+ function createDiscoveredChannelSendHandlers(providerRefs, handlerGroups, moduleRef) {
32
+ return createDiscoveredHandlerRegistrations(providerRefs, handlerGroups, 'send', (ref, metadata) => ({
33
+ async handle(payload, context) {
34
+ await invokeDiscoveredHandler(moduleRef, ref, metadata, payload, context);
35
+ }
36
+ }));
37
+ }
38
+ function createDiscoveredPublishHandlers(providerRefs, handlerGroups, moduleRef) {
39
+ return createDiscoveredHandlerRegistrations(providerRefs, handlerGroups, 'publish', (ref, metadata) => ({
40
+ async handle(payload, context) {
41
+ await invokeDiscoveredHandler(moduleRef, ref, metadata, payload, context);
42
+ }
43
+ }));
44
+ }
45
+ function createManualRequestHandlers(handlerTypes, moduleRef) {
46
+ return createManualHandlerRegistrations(handlerTypes, moduleRef, (result) => result);
47
+ }
48
+ function createManualPublishHandlers(handlerTypes, moduleRef) {
49
+ return createManualHandlerRegistrations(handlerTypes, moduleRef, () => undefined);
50
+ }
51
+ function createManualSendHandlers(handlerTypes, moduleRef) {
52
+ return createManualHandlerRegistrations(handlerTypes, moduleRef, () => undefined);
53
+ }
54
+ function createManualRouteSendHandlers(handlerTypes, moduleRef) {
55
+ return createManualHandlerRegistrations(handlerTypes, moduleRef, () => undefined);
56
+ }
57
+ function createManualRouteRequestHandlers(handlerTypes, moduleRef) {
58
+ return createManualHandlerRegistrations(handlerTypes, moduleRef, (result) => result);
59
+ }
60
+ function createManualHandlerRegistrations(handlerTypes, moduleRef, result) {
61
+ return (handlerTypes ?? []).map((registration) => ({
62
+ packetName: registration.packetName,
63
+ handler: {
64
+ async handle(payload, context) {
65
+ return result(await invokeManualHandler(moduleRef, registration.handlerType, payload, context));
66
+ }
67
+ }
68
+ }));
69
+ }
70
+ function createDiscoveredHandlerRegistrations(providerRefs, handlerGroups, kind, createHandler) {
71
+ const descriptors = createDiscoveredHandlerDescriptors(providerRefs, handlerGroups, kind);
72
+ return descriptors.map(({ ref, metadata }) => ({
73
+ packetName: metadata.packetName,
74
+ handler: createHandler(ref, metadata)
75
+ }));
76
+ }
77
+ function createDiscoveredHandlerDescriptors(providerRefs, handlerGroups, kind) {
78
+ if ((handlerGroups ?? []).length === 0) {
79
+ return [];
80
+ }
81
+ const groups = new Set(handlerGroups);
82
+ const seen = new Map();
83
+ const selected = [];
84
+ for (const ref of providerRefs) {
85
+ const metadata = ref.metadata;
86
+ if (metadata.kind !== kind || !groups.has(metadata.groupName)) {
87
+ continue;
88
+ }
89
+ const key = `${metadata.kind}:${metadata.packetName}`;
90
+ const previousType = seen.get(key);
91
+ if (previousType === ref.handlerKey) {
92
+ continue;
93
+ }
94
+ if (previousType !== undefined) {
95
+ throw new framework_loader_1.framework.ZLinkConfigurationException(`Duplicate handler '${metadata.groupName}:${metadata.kind}:${metadata.packetName}'.`);
96
+ }
97
+ seen.set(key, ref.handlerKey);
98
+ selected.push({ ref, metadata });
99
+ }
100
+ return selected;
101
+ }
102
+ async function invokeDiscoveredHandler(moduleRef, ref, metadata, payload, context) {
103
+ const instance = await resolveHandlerInstance(moduleRef, ref.handlerKey, context);
104
+ try {
105
+ const method = instance[metadata.methodName];
106
+ if (typeof method !== 'function') {
107
+ throw new framework_loader_1.framework.ZLinkConfigurationException(`Discovered handler ${ref.handlerName}.${metadata.methodName} is not callable.`);
108
+ }
109
+ return await method.call(instance, decodePayload(metadata, payload, context), context);
110
+ }
111
+ finally {
112
+ await (0, providers_1.disposeNestOwnedHandler)(instance);
113
+ }
114
+ }
115
+ async function invokeManualHandler(moduleRef, handlerType, payload, context) {
116
+ const instance = await resolveHandlerInstance(moduleRef, handlerType, context);
117
+ try {
118
+ const method = instance.handle;
119
+ if (typeof method !== 'function') {
120
+ throw new framework_loader_1.framework.ZLinkConfigurationException(`Manual handler ${handlerType.name}.handle is not callable.`);
121
+ }
122
+ return await method.call(instance, decodePayload(undefined, payload, context), context);
123
+ }
124
+ finally {
125
+ await (0, providers_1.disposeNestOwnedHandler)(instance);
126
+ }
127
+ }
128
+ async function resolveHandlerInstance(moduleRef, handlerType, context) {
129
+ const currentContextId = (0, dispatch_scope_1.currentNestDispatchContext)();
130
+ const contextId = currentContextId ?? core_1.ContextIdFactory.create();
131
+ if (currentContextId === undefined) {
132
+ moduleRef.registerRequestByContextId({ zlinkContext: context }, contextId);
133
+ }
134
+ return await (0, providers_1.createNestHandlerInstance)(moduleRef, contextId, new Map(), handlerType);
135
+ }
136
+ function decodePayload(metadata, payload, context) {
137
+ if (Buffer.isBuffer(payload) || payload instanceof Uint8Array) {
138
+ if (metadata?.decodePayload !== undefined) {
139
+ return metadata.decodePayload(Buffer.from(payload), context);
140
+ }
141
+ if (context.contentType !== undefined && context.contentType !== 'application/json') {
142
+ return Buffer.from(payload);
143
+ }
144
+ return parseWireJson(Buffer.from(payload).toString());
145
+ }
146
+ return typeof payload === 'string' ? parseWireJson(payload) : payload;
147
+ }
148
+ function parseWireJson(payload) {
149
+ return JSON.parse(payload, (key, value) => {
150
+ if (key === '__proto__' || key === 'constructor' || key === 'prototype') {
151
+ throw new framework_loader_1.framework.ZLinkConfigurationException(`NestJS handler JSON key '${key}' is not allowed.`);
152
+ }
153
+ return value;
154
+ });
155
+ }
@@ -0,0 +1,55 @@
1
+ import type { InjectionToken } from '@nestjs/common';
2
+ import type { Type, ZLinkActor, ZLinkEntrySpot, ZLinkInstanceSpot, ZLinkMessageContext, ZLinkPublishMessageContext, ZLinkRouteMessageContext, ZLinkSpot, ZLinkTimerOptions } from '@zlink-systems/framework';
3
+ export type ZLinkNestHandlerKind = 'request' | 'send' | 'publish';
4
+ type ZLinkNestTypeResolver<T> = Type<T> | (() => Type<T>);
5
+ export interface ZLinkNestHandlerMetadata {
6
+ readonly groupName: string;
7
+ readonly kind: ZLinkNestHandlerKind;
8
+ readonly packetName: string;
9
+ readonly methodName: string;
10
+ readonly decodePayload?: (payload: Buffer, context: ZLinkMessageContext | ZLinkRouteMessageContext | ZLinkPublishMessageContext) => unknown;
11
+ readonly encodeResult?: (result: unknown, context: ZLinkMessageContext | ZLinkRouteMessageContext) => unknown;
12
+ }
13
+ export type ZLinkNestSpotActorHandlerKind = 'spotActorSend' | 'spotActorRequest' | 'entrySpotActorSend' | 'entrySpotActorRequest';
14
+ export interface ZLinkNestSpotActorHandlerMetadata {
15
+ readonly kind: ZLinkNestSpotActorHandlerKind;
16
+ readonly packetName: string;
17
+ readonly methodName: string;
18
+ readonly handlerType: Type;
19
+ readonly actor: ZLinkNestTypeResolver<ZLinkActor>;
20
+ readonly spot?: ZLinkNestTypeResolver<ZLinkSpot>;
21
+ readonly entrySpot?: ZLinkNestTypeResolver<ZLinkEntrySpot>;
22
+ }
23
+ export type ZLinkNestSpotHandlerKind = 'spotPacket' | 'spotSubscription' | 'entrySpotPacket' | 'entrySpotSubscription';
24
+ export interface ZLinkNestSpotHandlerMetadata {
25
+ readonly kind: ZLinkNestSpotHandlerKind;
26
+ readonly handlerType: Type;
27
+ readonly packetName?: string;
28
+ readonly channelName?: string;
29
+ readonly topic?: string;
30
+ readonly spot?: ZLinkNestTypeResolver<ZLinkSpot | ZLinkInstanceSpot>;
31
+ readonly entrySpot?: ZLinkNestTypeResolver<ZLinkEntrySpot>;
32
+ }
33
+ export interface ZLinkNestSpotTimerHandlerMetadata {
34
+ readonly handlerType: Type;
35
+ readonly name: string;
36
+ readonly periodMs: number;
37
+ readonly options?: ZLinkTimerOptions;
38
+ readonly spot?: ZLinkNestTypeResolver<ZLinkSpot>;
39
+ readonly entrySpot?: ZLinkNestTypeResolver<ZLinkEntrySpot>;
40
+ }
41
+ export declare function appendNestHandlerMetadata(handlerToken: InjectionToken, metadata: ZLinkNestHandlerMetadata): void;
42
+ export declare function readNestHandlerMetadata(handlerToken: InjectionToken | undefined): readonly ZLinkNestHandlerMetadata[];
43
+ export declare function appendNestSpotActorHandlerMetadata(handlerToken: InjectionToken, metadata: ZLinkNestSpotActorHandlerMetadata): void;
44
+ export declare function readNestSpotActorHandlerMetadata(handlerToken: InjectionToken | undefined): readonly ZLinkNestSpotActorHandlerMetadata[];
45
+ export declare function appendNestSpotHandlerMetadata(handlerToken: InjectionToken, metadata: ZLinkNestSpotHandlerMetadata): void;
46
+ export declare function readNestSpotHandlerMetadata(handlerToken: InjectionToken | undefined): readonly ZLinkNestSpotHandlerMetadata[];
47
+ export declare function markNestSpotTimerHandler(handlerToken: InjectionToken): void;
48
+ export declare function appendNestSpotTimerHandlerMetadata(handlerToken: InjectionToken, metadata: ZLinkNestSpotTimerHandlerMetadata): void;
49
+ export declare function readNestSpotTimerHandlerMetadata(handlerToken: InjectionToken | undefined): readonly ZLinkNestSpotTimerHandlerMetadata[];
50
+ export declare function hasNestSpotTimerHandlerMetadata(handlerToken: InjectionToken | undefined): boolean;
51
+ export declare function nestHandlerMetadataEntries(): [InjectionToken, readonly ZLinkNestHandlerMetadata[]][];
52
+ export declare function nestSpotActorHandlerMetadataEntries(): [InjectionToken, readonly ZLinkNestSpotActorHandlerMetadata[]][];
53
+ export declare function nestSpotHandlerMetadataEntries(): [InjectionToken, readonly ZLinkNestSpotHandlerMetadata[]][];
54
+ export declare function nestSpotTimerHandlerMetadataEntries(): [InjectionToken, readonly ZLinkNestSpotTimerHandlerMetadata[]][];
55
+ export {};