@kronos-ts/messaging 0.1.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/dist/command-bus.d.ts +30 -0
- package/dist/command-bus.d.ts.map +1 -0
- package/dist/command-bus.js +2 -0
- package/dist/command-bus.js.map +1 -0
- package/dist/command-handler.d.ts +58 -0
- package/dist/command-handler.d.ts.map +1 -0
- package/dist/command-handler.js +12 -0
- package/dist/command-handler.js.map +1 -0
- package/dist/command-handling-module.d.ts +53 -0
- package/dist/command-handling-module.d.ts.map +1 -0
- package/dist/command-handling-module.js +130 -0
- package/dist/command-handling-module.js.map +1 -0
- package/dist/correlation-data.d.ts +79 -0
- package/dist/correlation-data.d.ts.map +1 -0
- package/dist/correlation-data.js +133 -0
- package/dist/correlation-data.js.map +1 -0
- package/dist/dead-letter-queue.d.ts +134 -0
- package/dist/dead-letter-queue.d.ts.map +1 -0
- package/dist/dead-letter-queue.js +176 -0
- package/dist/dead-letter-queue.js.map +1 -0
- package/dist/dead-lettering-handler.d.ts +42 -0
- package/dist/dead-lettering-handler.d.ts.map +1 -0
- package/dist/dead-lettering-handler.js +67 -0
- package/dist/dead-lettering-handler.js.map +1 -0
- package/dist/descriptor.d.ts +135 -0
- package/dist/descriptor.d.ts.map +1 -0
- package/dist/descriptor.js +36 -0
- package/dist/descriptor.js.map +1 -0
- package/dist/emit-update.d.ts +22 -0
- package/dist/emit-update.d.ts.map +1 -0
- package/dist/emit-update.js +23 -0
- package/dist/emit-update.js.map +1 -0
- package/dist/event-bus.d.ts +29 -0
- package/dist/event-bus.d.ts.map +1 -0
- package/dist/event-bus.js +22 -0
- package/dist/event-bus.js.map +1 -0
- package/dist/event-criteria.d.ts +87 -0
- package/dist/event-criteria.d.ts.map +1 -0
- package/dist/event-criteria.js +90 -0
- package/dist/event-criteria.js.map +1 -0
- package/dist/event-gateway.d.ts +19 -0
- package/dist/event-gateway.d.ts.map +1 -0
- package/dist/event-gateway.js +22 -0
- package/dist/event-gateway.js.map +1 -0
- package/dist/event-handler.d.ts +30 -0
- package/dist/event-handler.d.ts.map +1 -0
- package/dist/event-handler.js +18 -0
- package/dist/event-handler.js.map +1 -0
- package/dist/event-processor-builder.d.ts +148 -0
- package/dist/event-processor-builder.d.ts.map +1 -0
- package/dist/event-processor-builder.js +175 -0
- package/dist/event-processor-builder.js.map +1 -0
- package/dist/event-processor.d.ts +10 -0
- package/dist/event-processor.d.ts.map +1 -0
- package/dist/event-processor.js +2 -0
- package/dist/event-processor.js.map +1 -0
- package/dist/event-sink.d.ts +23 -0
- package/dist/event-sink.d.ts.map +1 -0
- package/dist/event-sink.js +2 -0
- package/dist/event-sink.js.map +1 -0
- package/dist/event-source.d.ts +98 -0
- package/dist/event-source.d.ts.map +1 -0
- package/dist/event-source.js +191 -0
- package/dist/event-source.js.map +1 -0
- package/dist/gateway.d.ts +68 -0
- package/dist/gateway.d.ts.map +1 -0
- package/dist/gateway.js +62 -0
- package/dist/gateway.js.map +1 -0
- package/dist/handler-enhancer.d.ts +53 -0
- package/dist/handler-enhancer.d.ts.map +1 -0
- package/dist/handler-enhancer.js +17 -0
- package/dist/handler-enhancer.js.map +1 -0
- package/dist/handler.d.ts +51 -0
- package/dist/handler.d.ts.map +1 -0
- package/dist/handler.js +26 -0
- package/dist/handler.js.map +1 -0
- package/dist/index.d.ts +53 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +103 -0
- package/dist/index.js.map +1 -0
- package/dist/intercepting-command-bus.d.ts +17 -0
- package/dist/intercepting-command-bus.d.ts.map +1 -0
- package/dist/intercepting-command-bus.js +54 -0
- package/dist/intercepting-command-bus.js.map +1 -0
- package/dist/intercepting-event-bus.d.ts +8 -0
- package/dist/intercepting-event-bus.d.ts.map +1 -0
- package/dist/intercepting-event-bus.js +22 -0
- package/dist/intercepting-event-bus.js.map +1 -0
- package/dist/intercepting-query-bus.d.ts +17 -0
- package/dist/intercepting-query-bus.d.ts.map +1 -0
- package/dist/intercepting-query-bus.js +68 -0
- package/dist/intercepting-query-bus.js.map +1 -0
- package/dist/interceptor.d.ts +46 -0
- package/dist/interceptor.d.ts.map +1 -0
- package/dist/interceptor.js +2 -0
- package/dist/interceptor.js.map +1 -0
- package/dist/message-monitor-registry.d.ts +28 -0
- package/dist/message-monitor-registry.d.ts.map +1 -0
- package/dist/message-monitor-registry.js +37 -0
- package/dist/message-monitor-registry.js.map +1 -0
- package/dist/message-monitor.d.ts +36 -0
- package/dist/message-monitor.d.ts.map +1 -0
- package/dist/message-monitor.js +39 -0
- package/dist/message-monitor.js.map +1 -0
- package/dist/message.d.ts +42 -0
- package/dist/message.d.ts.map +1 -0
- package/dist/message.js +2 -0
- package/dist/message.js.map +1 -0
- package/dist/processing-state.d.ts +115 -0
- package/dist/processing-state.d.ts.map +1 -0
- package/dist/processing-state.js +205 -0
- package/dist/processing-state.js.map +1 -0
- package/dist/processor-configuration.d.ts +51 -0
- package/dist/processor-configuration.d.ts.map +1 -0
- package/dist/processor-configuration.js +2 -0
- package/dist/processor-configuration.js.map +1 -0
- package/dist/query-bus.d.ts +51 -0
- package/dist/query-bus.d.ts.map +1 -0
- package/dist/query-bus.js +2 -0
- package/dist/query-bus.js.map +1 -0
- package/dist/query-handler.d.ts +35 -0
- package/dist/query-handler.d.ts.map +1 -0
- package/dist/query-handler.js +19 -0
- package/dist/query-handler.js.map +1 -0
- package/dist/query-handling-module.d.ts +24 -0
- package/dist/query-handling-module.d.ts.map +1 -0
- package/dist/query-handling-module.js +32 -0
- package/dist/query-handling-module.js.map +1 -0
- package/dist/replay-token.d.ts +31 -0
- package/dist/replay-token.d.ts.map +1 -0
- package/dist/replay-token.js +37 -0
- package/dist/replay-token.js.map +1 -0
- package/dist/retrying-command-bus.d.ts +32 -0
- package/dist/retrying-command-bus.d.ts.map +1 -0
- package/dist/retrying-command-bus.js +58 -0
- package/dist/retrying-command-bus.js.map +1 -0
- package/dist/routing-strategy.d.ts +30 -0
- package/dist/routing-strategy.d.ts.map +1 -0
- package/dist/routing-strategy.js +37 -0
- package/dist/routing-strategy.js.map +1 -0
- package/dist/segment.d.ts +72 -0
- package/dist/segment.d.ts.map +1 -0
- package/dist/segment.js +103 -0
- package/dist/segment.js.map +1 -0
- package/dist/send.d.ts +28 -0
- package/dist/send.d.ts.map +1 -0
- package/dist/send.js +36 -0
- package/dist/send.js.map +1 -0
- package/dist/serializer.d.ts +40 -0
- package/dist/serializer.d.ts.map +1 -0
- package/dist/serializer.js +90 -0
- package/dist/serializer.js.map +1 -0
- package/dist/simple-command-bus.d.ts +23 -0
- package/dist/simple-command-bus.d.ts.map +1 -0
- package/dist/simple-command-bus.js +49 -0
- package/dist/simple-command-bus.js.map +1 -0
- package/dist/simple-query-bus.d.ts +16 -0
- package/dist/simple-query-bus.d.ts.map +1 -0
- package/dist/simple-query-bus.js +122 -0
- package/dist/simple-query-bus.js.map +1 -0
- package/dist/span-factory.d.ts +58 -0
- package/dist/span-factory.d.ts.map +1 -0
- package/dist/span-factory.js +19 -0
- package/dist/span-factory.js.map +1 -0
- package/dist/streaming-event-processor.d.ts +65 -0
- package/dist/streaming-event-processor.d.ts.map +1 -0
- package/dist/streaming-event-processor.js +239 -0
- package/dist/streaming-event-processor.js.map +1 -0
- package/dist/subscribing-event-processor.d.ts +57 -0
- package/dist/subscribing-event-processor.d.ts.map +1 -0
- package/dist/subscribing-event-processor.js +100 -0
- package/dist/subscribing-event-processor.js.map +1 -0
- package/dist/subscription-query.d.ts +63 -0
- package/dist/subscription-query.d.ts.map +1 -0
- package/dist/subscription-query.js +119 -0
- package/dist/subscription-query.js.map +1 -0
- package/dist/token-store.d.ts +83 -0
- package/dist/token-store.d.ts.map +1 -0
- package/dist/token-store.js +112 -0
- package/dist/token-store.js.map +1 -0
- package/dist/tracing-command-bus.d.ts +16 -0
- package/dist/tracing-command-bus.d.ts.map +1 -0
- package/dist/tracing-command-bus.js +44 -0
- package/dist/tracing-command-bus.js.map +1 -0
- package/dist/tracing-handler-enhancer.d.ts +11 -0
- package/dist/tracing-handler-enhancer.d.ts.map +1 -0
- package/dist/tracing-handler-enhancer.js +27 -0
- package/dist/tracing-handler-enhancer.js.map +1 -0
- package/dist/tracking-event-processor.d.ts +72 -0
- package/dist/tracking-event-processor.d.ts.map +1 -0
- package/dist/tracking-event-processor.js +223 -0
- package/dist/tracking-event-processor.js.map +1 -0
- package/dist/tracking-token.d.ts +120 -0
- package/dist/tracking-token.d.ts.map +1 -0
- package/dist/tracking-token.js +132 -0
- package/dist/tracking-token.js.map +1 -0
- package/dist/transaction.d.ts +60 -0
- package/dist/transaction.d.ts.map +1 -0
- package/dist/transaction.js +74 -0
- package/dist/transaction.js.map +1 -0
- package/dist/unit-of-work.d.ts +41 -0
- package/dist/unit-of-work.d.ts.map +1 -0
- package/dist/unit-of-work.js +96 -0
- package/dist/unit-of-work.js.map +1 -0
- package/dist/upcaster.d.ts +91 -0
- package/dist/upcaster.d.ts.map +1 -0
- package/dist/upcaster.js +114 -0
- package/dist/upcaster.js.map +1 -0
- package/dist/with-namespace.d.ts +59 -0
- package/dist/with-namespace.d.ts.map +1 -0
- package/dist/with-namespace.js +42 -0
- package/dist/with-namespace.js.map +1 -0
- package/package.json +65 -0
- package/src/command-bus.ts +34 -0
- package/src/command-handler.ts +116 -0
- package/src/command-handling-module.ts +183 -0
- package/src/correlation-data.ts +169 -0
- package/src/dead-letter-queue.ts +330 -0
- package/src/dead-lettering-handler.ts +109 -0
- package/src/descriptor.ts +176 -0
- package/src/emit-update.ts +35 -0
- package/src/event-bus.ts +45 -0
- package/src/event-criteria.ts +141 -0
- package/src/event-gateway.ts +42 -0
- package/src/event-handler.ts +44 -0
- package/src/event-processor-builder.ts +246 -0
- package/src/event-processor.ts +9 -0
- package/src/event-sink.ts +23 -0
- package/src/event-source.ts +301 -0
- package/src/gateway.ts +144 -0
- package/src/handler-enhancer.ts +70 -0
- package/src/handler.ts +133 -0
- package/src/index.ts +356 -0
- package/src/intercepting-command-bus.ts +73 -0
- package/src/intercepting-event-bus.ts +29 -0
- package/src/intercepting-query-bus.ts +104 -0
- package/src/interceptor.ts +48 -0
- package/src/message-monitor-registry.ts +64 -0
- package/src/message-monitor.ts +68 -0
- package/src/message.ts +41 -0
- package/src/processing-state.ts +258 -0
- package/src/processor-configuration.ts +59 -0
- package/src/query-bus.ts +69 -0
- package/src/query-handler.ts +49 -0
- package/src/query-handling-module.ts +44 -0
- package/src/replay-token.ts +53 -0
- package/src/retrying-command-bus.ts +80 -0
- package/src/routing-strategy.ts +59 -0
- package/src/segment.ts +136 -0
- package/src/send.ts +44 -0
- package/src/serializer.ts +122 -0
- package/src/simple-command-bus.ts +59 -0
- package/src/simple-query-bus.ts +158 -0
- package/src/span-factory.ts +81 -0
- package/src/streaming-event-processor.ts +351 -0
- package/src/subscribing-event-processor.ts +169 -0
- package/src/subscription-query.ts +173 -0
- package/src/token-store.ts +211 -0
- package/src/tracing-command-bus.ts +52 -0
- package/src/tracing-handler-enhancer.ts +34 -0
- package/src/tracking-event-processor.ts +336 -0
- package/src/tracking-token.ts +231 -0
- package/src/transaction.ts +98 -0
- package/src/unit-of-work.ts +138 -0
- package/src/upcaster.ts +174 -0
- package/src/with-namespace.ts +75 -0
package/src/index.ts
ADDED
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
// Messages
|
|
2
|
+
export {
|
|
3
|
+
type Message,
|
|
4
|
+
type CommandMessage,
|
|
5
|
+
type CommandResultMessage,
|
|
6
|
+
type EventMessage,
|
|
7
|
+
type QueryMessage,
|
|
8
|
+
} from "./message.js"
|
|
9
|
+
|
|
10
|
+
// Descriptors
|
|
11
|
+
export {
|
|
12
|
+
type CommandDescriptor,
|
|
13
|
+
type EventDescriptor,
|
|
14
|
+
type QueryDescriptor,
|
|
15
|
+
type MessageDescriptor,
|
|
16
|
+
command,
|
|
17
|
+
event,
|
|
18
|
+
query,
|
|
19
|
+
} from "./descriptor.js"
|
|
20
|
+
|
|
21
|
+
// Event criteria
|
|
22
|
+
export {
|
|
23
|
+
type TagCriteria,
|
|
24
|
+
type TypeRestrictedCriteria,
|
|
25
|
+
type EitherCriteria,
|
|
26
|
+
type AnyTagCriteria,
|
|
27
|
+
type RestrictableEventCriteria,
|
|
28
|
+
EventCriteria,
|
|
29
|
+
tags,
|
|
30
|
+
anyTag,
|
|
31
|
+
either,
|
|
32
|
+
} from "./event-criteria.js"
|
|
33
|
+
|
|
34
|
+
// Lifecycle phases (Plan 03-04: relocated from processing-context.ts)
|
|
35
|
+
export {
|
|
36
|
+
Phase,
|
|
37
|
+
type PhaseValue,
|
|
38
|
+
// Module-level lifecycle accessors (CTX-03 / D-30)
|
|
39
|
+
on as onPhase,
|
|
40
|
+
onPrepareCommit,
|
|
41
|
+
onCommit,
|
|
42
|
+
onAfterCommit,
|
|
43
|
+
onError,
|
|
44
|
+
whenComplete,
|
|
45
|
+
NoActiveUnitOfWork,
|
|
46
|
+
WrongUoWPhase,
|
|
47
|
+
} from "./processing-state.js"
|
|
48
|
+
|
|
49
|
+
// Unit of Work runners (Plan 03-04: replaces UnitOfWorkFactory shape)
|
|
50
|
+
export {
|
|
51
|
+
type UoWRunner,
|
|
52
|
+
runInUoW,
|
|
53
|
+
runInNewUoW,
|
|
54
|
+
} from "./unit-of-work.js"
|
|
55
|
+
|
|
56
|
+
// Handler registration
|
|
57
|
+
// Note: Handler context wrapper types deleted (Plan 04-02 / D-41).
|
|
58
|
+
// Helper function types deleted.
|
|
59
|
+
// Consumers import load/append from @kronos-ts/eventsourcing and send/dispatch/emitUpdate from here directly.
|
|
60
|
+
export {
|
|
61
|
+
type EventHandlerRegistration,
|
|
62
|
+
type EvolverRegistration,
|
|
63
|
+
type QueryHandlerRegistration,
|
|
64
|
+
on,
|
|
65
|
+
onEvent,
|
|
66
|
+
} from "./handler.js"
|
|
67
|
+
|
|
68
|
+
// Command handlers
|
|
69
|
+
export {
|
|
70
|
+
type CommandHandlerDefinition,
|
|
71
|
+
commandHandler,
|
|
72
|
+
} from "./command-handler.js"
|
|
73
|
+
|
|
74
|
+
// Event handlers
|
|
75
|
+
export {
|
|
76
|
+
type EventHandlerDefinition,
|
|
77
|
+
eventHandler,
|
|
78
|
+
} from "./event-handler.js"
|
|
79
|
+
|
|
80
|
+
// Query handlers
|
|
81
|
+
export {
|
|
82
|
+
type QueryHandlerDefinition,
|
|
83
|
+
queryHandler,
|
|
84
|
+
} from "./query-handler.js"
|
|
85
|
+
|
|
86
|
+
// Interceptors
|
|
87
|
+
export {
|
|
88
|
+
type DispatchInterceptor,
|
|
89
|
+
type HandlerInterceptor,
|
|
90
|
+
} from "./interceptor.js"
|
|
91
|
+
|
|
92
|
+
// Routing strategies
|
|
93
|
+
export {
|
|
94
|
+
type RoutingStrategy,
|
|
95
|
+
metadataRoutingStrategy,
|
|
96
|
+
payloadFieldRoutingStrategy,
|
|
97
|
+
} from "./routing-strategy.js"
|
|
98
|
+
|
|
99
|
+
// Handler enhancers
|
|
100
|
+
export {
|
|
101
|
+
type HandlerEnhancerDefinition,
|
|
102
|
+
type HandlerMetadata,
|
|
103
|
+
multiHandlerEnhancerDefinition,
|
|
104
|
+
} from "./handler-enhancer.js"
|
|
105
|
+
|
|
106
|
+
// Correlation data
|
|
107
|
+
export {
|
|
108
|
+
type CorrelationDataProvider,
|
|
109
|
+
CORRELATION_DATA_KEY,
|
|
110
|
+
getActiveCorrelationData,
|
|
111
|
+
messageOriginProvider,
|
|
112
|
+
simpleCorrelationDataProvider,
|
|
113
|
+
correlationDataHandlerInterceptor,
|
|
114
|
+
correlationDataDispatchInterceptor,
|
|
115
|
+
} from "./correlation-data.js"
|
|
116
|
+
|
|
117
|
+
// Bus interfaces
|
|
118
|
+
export { type CommandBus } from "./command-bus.js"
|
|
119
|
+
export { type QueryBus } from "./query-bus.js"
|
|
120
|
+
|
|
121
|
+
// Bus implementations
|
|
122
|
+
export { createSimpleCommandBus } from "./simple-command-bus.js"
|
|
123
|
+
export { createSimpleQueryBus } from "./simple-query-bus.js"
|
|
124
|
+
|
|
125
|
+
// Intercepting bus decorators
|
|
126
|
+
export { createInterceptingCommandBus } from "./intercepting-command-bus.js"
|
|
127
|
+
export { createInterceptingQueryBus } from "./intercepting-query-bus.js"
|
|
128
|
+
|
|
129
|
+
// Tracing bus decorators
|
|
130
|
+
export { createTracingCommandBus } from "./tracing-command-bus.js"
|
|
131
|
+
|
|
132
|
+
// Gateways
|
|
133
|
+
export {
|
|
134
|
+
type CommandGateway,
|
|
135
|
+
type QueryGateway,
|
|
136
|
+
createCommandGateway,
|
|
137
|
+
createQueryGateway,
|
|
138
|
+
} from "./gateway.js"
|
|
139
|
+
|
|
140
|
+
// Subscription queries
|
|
141
|
+
export {
|
|
142
|
+
type SubscriptionQueryResult,
|
|
143
|
+
type UpdateHandler,
|
|
144
|
+
createUpdateHandler,
|
|
145
|
+
runAfterCommitOrImmediately,
|
|
146
|
+
} from "./subscription-query.js"
|
|
147
|
+
|
|
148
|
+
// Event sink (publish-only)
|
|
149
|
+
export { type EventSink } from "./event-sink.js"
|
|
150
|
+
|
|
151
|
+
// Event bus (publish + subscribe)
|
|
152
|
+
export {
|
|
153
|
+
type SubscribableEventSource,
|
|
154
|
+
type EventBus,
|
|
155
|
+
createSimpleEventBus,
|
|
156
|
+
} from "./event-bus.js"
|
|
157
|
+
|
|
158
|
+
// Intercepting event bus decorator
|
|
159
|
+
export { createInterceptingEventBus } from "./intercepting-event-bus.js"
|
|
160
|
+
|
|
161
|
+
// Event gateway
|
|
162
|
+
export {
|
|
163
|
+
type EventGateway,
|
|
164
|
+
createEventGateway,
|
|
165
|
+
} from "./event-gateway.js"
|
|
166
|
+
|
|
167
|
+
// Event processor common interface
|
|
168
|
+
export { type EventProcessor } from "./event-processor.js"
|
|
169
|
+
|
|
170
|
+
// Event source (for processors)
|
|
171
|
+
export {
|
|
172
|
+
type SequencedEvent,
|
|
173
|
+
type StreamableEventSource,
|
|
174
|
+
type StreamingCondition,
|
|
175
|
+
type MessageStream,
|
|
176
|
+
createMessageStream,
|
|
177
|
+
emptyMessageStream,
|
|
178
|
+
failedMessageStream,
|
|
179
|
+
} from "./event-source.js"
|
|
180
|
+
|
|
181
|
+
// Event processor
|
|
182
|
+
export {
|
|
183
|
+
type TrackingEventProcessor,
|
|
184
|
+
type TrackingEventProcessorOptions,
|
|
185
|
+
type EventProcessingErrorHandler,
|
|
186
|
+
loggingErrorHandler,
|
|
187
|
+
propagatingErrorHandler,
|
|
188
|
+
createTrackingEventProcessor,
|
|
189
|
+
} from "./tracking-event-processor.js"
|
|
190
|
+
|
|
191
|
+
// Segments
|
|
192
|
+
export {
|
|
193
|
+
type Segment,
|
|
194
|
+
ROOT_SEGMENT,
|
|
195
|
+
segment,
|
|
196
|
+
segmentMatches,
|
|
197
|
+
splitSegment,
|
|
198
|
+
mergeSegments,
|
|
199
|
+
isMergeable,
|
|
200
|
+
segmentCount,
|
|
201
|
+
hashOf,
|
|
202
|
+
createSegments,
|
|
203
|
+
} from "./segment.js"
|
|
204
|
+
|
|
205
|
+
// Token store
|
|
206
|
+
export {
|
|
207
|
+
type TokenStore,
|
|
208
|
+
UnableToClaimTokenError,
|
|
209
|
+
createInMemoryTokenStore,
|
|
210
|
+
} from "./token-store.js"
|
|
211
|
+
|
|
212
|
+
// Tracking tokens
|
|
213
|
+
export {
|
|
214
|
+
type TrackingToken,
|
|
215
|
+
type GlobalSequenceToken,
|
|
216
|
+
type ReplayToken,
|
|
217
|
+
globalSequenceToken,
|
|
218
|
+
FIRST_TOKEN,
|
|
219
|
+
LATEST_TOKEN,
|
|
220
|
+
replayToken,
|
|
221
|
+
isReplayToken,
|
|
222
|
+
isGlobalSequenceToken,
|
|
223
|
+
advanceToken,
|
|
224
|
+
isReplaying,
|
|
225
|
+
unwrapToken,
|
|
226
|
+
wasProcessedBeforeReset,
|
|
227
|
+
} from "./tracking-token.js"
|
|
228
|
+
|
|
229
|
+
// Replay detection (ProcessingContext helper)
|
|
230
|
+
export {
|
|
231
|
+
isReplay,
|
|
232
|
+
REPLAY_STATE_KEY,
|
|
233
|
+
} from "./replay-token.js"
|
|
234
|
+
|
|
235
|
+
// Transaction management
|
|
236
|
+
export {
|
|
237
|
+
type TransactionManager,
|
|
238
|
+
noTransactionManager,
|
|
239
|
+
getActiveTransaction,
|
|
240
|
+
transactionalUnitOfWorkFactory,
|
|
241
|
+
TRANSACTION_KEY,
|
|
242
|
+
} from "./transaction.js"
|
|
243
|
+
|
|
244
|
+
// Retrying command bus
|
|
245
|
+
export {
|
|
246
|
+
type RetryPolicy,
|
|
247
|
+
exponentialBackoffRetryPolicy,
|
|
248
|
+
createRetryingCommandBus,
|
|
249
|
+
} from "./retrying-command-bus.js"
|
|
250
|
+
|
|
251
|
+
// Module-level handler helpers (Plan 04-01 / HDL-02 / D-42)
|
|
252
|
+
export { send, COMMAND_BUS_KEY } from "./send.js"
|
|
253
|
+
export { emitUpdate, QUERY_BUS_KEY } from "./emit-update.js"
|
|
254
|
+
|
|
255
|
+
// Modules — Plan 08-03a (D-82): function-style helpers replace Module-shape factories
|
|
256
|
+
export {
|
|
257
|
+
registerCommandHandlersNatively,
|
|
258
|
+
createCommandInvocation,
|
|
259
|
+
type MinimalConfiguration,
|
|
260
|
+
} from "./command-handling-module.js"
|
|
261
|
+
export { registerQueryHandlersNatively } from "./query-handling-module.js"
|
|
262
|
+
|
|
263
|
+
// Subscribing event processor
|
|
264
|
+
export {
|
|
265
|
+
type SubscribingEventProcessor,
|
|
266
|
+
type SubscribingEventProcessorOptions,
|
|
267
|
+
createSubscribingEventProcessor,
|
|
268
|
+
} from "./subscribing-event-processor.js"
|
|
269
|
+
|
|
270
|
+
// Streaming event processor
|
|
271
|
+
export {
|
|
272
|
+
type StreamingEventProcessor,
|
|
273
|
+
type StreamingEventProcessorOptions,
|
|
274
|
+
type EventProcessorStatus,
|
|
275
|
+
createStreamingEventProcessor,
|
|
276
|
+
} from "./streaming-event-processor.js"
|
|
277
|
+
|
|
278
|
+
// Dead letter queue
|
|
279
|
+
export {
|
|
280
|
+
type DeadLetter,
|
|
281
|
+
type EnqueueDecision,
|
|
282
|
+
type EnqueuePolicy,
|
|
283
|
+
type SequencedDeadLetterQueue,
|
|
284
|
+
alwaysEnqueuePolicy,
|
|
285
|
+
createDeadLetter,
|
|
286
|
+
createInMemoryDeadLetterQueue,
|
|
287
|
+
DeadLetterQueueOverflowError,
|
|
288
|
+
} from "./dead-letter-queue.js"
|
|
289
|
+
|
|
290
|
+
// Dead-lettering event delivery
|
|
291
|
+
export {
|
|
292
|
+
type DeadLetteringOptions,
|
|
293
|
+
createDeadLetteringDelivery,
|
|
294
|
+
} from "./dead-lettering-handler.js"
|
|
295
|
+
|
|
296
|
+
// Upcasting
|
|
297
|
+
export {
|
|
298
|
+
type IntermediateEventRepresentation,
|
|
299
|
+
type EventUpcaster,
|
|
300
|
+
singleEventUpcaster,
|
|
301
|
+
upcasterChain,
|
|
302
|
+
upcastingSerializer,
|
|
303
|
+
} from "./upcaster.js"
|
|
304
|
+
|
|
305
|
+
// Serialization
|
|
306
|
+
export {
|
|
307
|
+
type SchemaRegistry,
|
|
308
|
+
jsonSerializer,
|
|
309
|
+
zodValidatingSerializer,
|
|
310
|
+
createEventSchemaRegistry,
|
|
311
|
+
createCommandSchemaRegistry,
|
|
312
|
+
createQuerySchemaRegistry,
|
|
313
|
+
} from "./serializer.js"
|
|
314
|
+
|
|
315
|
+
// Message monitors
|
|
316
|
+
export {
|
|
317
|
+
type MessageMonitor,
|
|
318
|
+
type MonitorCallback,
|
|
319
|
+
noOpMessageMonitor,
|
|
320
|
+
multiMessageMonitor,
|
|
321
|
+
} from "./message-monitor.js"
|
|
322
|
+
|
|
323
|
+
export {
|
|
324
|
+
type MessageMonitorRegistry,
|
|
325
|
+
createMessageMonitorRegistry,
|
|
326
|
+
} from "./message-monitor-registry.js"
|
|
327
|
+
|
|
328
|
+
// Tracing (core abstractions)
|
|
329
|
+
export {
|
|
330
|
+
type Span,
|
|
331
|
+
type SpanFactory,
|
|
332
|
+
type SpanAttributesProvider,
|
|
333
|
+
noOpSpanFactory,
|
|
334
|
+
} from "./span-factory.js"
|
|
335
|
+
|
|
336
|
+
export {
|
|
337
|
+
tracingHandlerEnhancerDefinition,
|
|
338
|
+
} from "./tracing-handler-enhancer.js"
|
|
339
|
+
|
|
340
|
+
// Processor configuration (legacy)
|
|
341
|
+
export { type ProcessorConfiguration } from "./processor-configuration.js"
|
|
342
|
+
|
|
343
|
+
// Event processor builders
|
|
344
|
+
export {
|
|
345
|
+
type EventProcessorModule,
|
|
346
|
+
type TrackingProcessorModule,
|
|
347
|
+
type SubscribingProcessorModule,
|
|
348
|
+
TrackingProcessorBuilder,
|
|
349
|
+
SubscribingProcessorBuilder,
|
|
350
|
+
trackingProcessor,
|
|
351
|
+
subscribingProcessor,
|
|
352
|
+
} from "./event-processor-builder.js"
|
|
353
|
+
|
|
354
|
+
// Namespace factory
|
|
355
|
+
export { withNamespace } from "./with-namespace.js"
|
|
356
|
+
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { CommandBus } from "./command-bus.js"
|
|
2
|
+
import type { CommandMessage } from "./message.js"
|
|
3
|
+
import type { DispatchInterceptor, HandlerInterceptor } from "./interceptor.js"
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* A command bus decorator that adds dispatch and handler interceptor chains
|
|
7
|
+
* to any {@link CommandBus} implementation.
|
|
8
|
+
*
|
|
9
|
+
* {@link createSimpleCommandBus} handles dispatch + subscribe only;
|
|
10
|
+
* this decorator layers interceptor support on top.
|
|
11
|
+
*/
|
|
12
|
+
export function createInterceptingCommandBus(
|
|
13
|
+
delegate: CommandBus,
|
|
14
|
+
): CommandBus & {
|
|
15
|
+
/** Register a dispatch interceptor. Returns an unsubscribe function. */
|
|
16
|
+
registerDispatchInterceptor(interceptor: DispatchInterceptor<CommandMessage>): () => void
|
|
17
|
+
/** Register a handler interceptor. Returns an unsubscribe function. */
|
|
18
|
+
registerHandlerInterceptor(interceptor: HandlerInterceptor): () => void
|
|
19
|
+
} {
|
|
20
|
+
const dispatchInterceptors: Array<DispatchInterceptor<CommandMessage>> = []
|
|
21
|
+
const handlerInterceptors: Array<HandlerInterceptor> = []
|
|
22
|
+
|
|
23
|
+
return {
|
|
24
|
+
async dispatch(message: CommandMessage): Promise<unknown> {
|
|
25
|
+
// Run dispatch interceptors (can transform or reject)
|
|
26
|
+
let interceptedMessage = message
|
|
27
|
+
for (const interceptor of dispatchInterceptors) {
|
|
28
|
+
interceptedMessage = await interceptor(interceptedMessage)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return delegate.dispatch(interceptedMessage)
|
|
32
|
+
},
|
|
33
|
+
|
|
34
|
+
subscribe(
|
|
35
|
+
commandName: string,
|
|
36
|
+
handler: (message: CommandMessage) => Promise<unknown>,
|
|
37
|
+
) {
|
|
38
|
+
// Wrap the handler with handler interceptors
|
|
39
|
+
const wrappedHandler = (message: CommandMessage) => {
|
|
40
|
+
if (handlerInterceptors.length === 0) {
|
|
41
|
+
return handler(message)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
let chain = () => handler(message)
|
|
45
|
+
for (let i = handlerInterceptors.length - 1; i >= 0; i--) {
|
|
46
|
+
const interceptor = handlerInterceptors[i]!
|
|
47
|
+
const next = chain
|
|
48
|
+
chain = () => interceptor(message, next)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return chain()
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
delegate.subscribe(commandName, wrappedHandler)
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
registerDispatchInterceptor(interceptor) {
|
|
58
|
+
dispatchInterceptors.push(interceptor)
|
|
59
|
+
return () => {
|
|
60
|
+
const idx = dispatchInterceptors.indexOf(interceptor)
|
|
61
|
+
if (idx >= 0) dispatchInterceptors.splice(idx, 1)
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
|
|
65
|
+
registerHandlerInterceptor(interceptor) {
|
|
66
|
+
handlerInterceptors.push(interceptor)
|
|
67
|
+
return () => {
|
|
68
|
+
const idx = handlerInterceptors.indexOf(interceptor)
|
|
69
|
+
if (idx >= 0) handlerInterceptors.splice(idx, 1)
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { EventBus } from "./event-bus.js"
|
|
2
|
+
import type { EventMessage } from "./message.js"
|
|
3
|
+
import type { DispatchInterceptor } from "./interceptor.js"
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Wraps an EventBus with dispatch interceptors for event publishing.
|
|
7
|
+
*/
|
|
8
|
+
export function createInterceptingEventBus(
|
|
9
|
+
delegate: EventBus,
|
|
10
|
+
dispatchInterceptors: ReadonlyArray<DispatchInterceptor<EventMessage>>,
|
|
11
|
+
): EventBus {
|
|
12
|
+
return {
|
|
13
|
+
async publish(events) {
|
|
14
|
+
const intercepted: EventMessage[] = []
|
|
15
|
+
for (const event of events) {
|
|
16
|
+
let msg = event
|
|
17
|
+
for (const interceptor of dispatchInterceptors) {
|
|
18
|
+
msg = await interceptor(msg) as EventMessage
|
|
19
|
+
}
|
|
20
|
+
intercepted.push(msg)
|
|
21
|
+
}
|
|
22
|
+
await delegate.publish(intercepted)
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
subscribe(handler) {
|
|
26
|
+
return delegate.subscribe(handler)
|
|
27
|
+
},
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import type { QueryBus } from "./query-bus.js"
|
|
2
|
+
import type { QueryMessage } from "./message.js"
|
|
3
|
+
import type { SubscriptionQueryResult } from "./subscription-query.js"
|
|
4
|
+
import type { DispatchInterceptor, HandlerInterceptor } from "./interceptor.js"
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* A query bus decorator that adds dispatch and handler interceptor chains
|
|
8
|
+
* to any {@link QueryBus} implementation.
|
|
9
|
+
*
|
|
10
|
+
* {@link createSimpleQueryBus} handles dispatch + subscribe only;
|
|
11
|
+
* this decorator layers interceptor support on top.
|
|
12
|
+
*/
|
|
13
|
+
export function createInterceptingQueryBus(
|
|
14
|
+
delegate: QueryBus,
|
|
15
|
+
): QueryBus & {
|
|
16
|
+
/** Register a dispatch interceptor. Returns an unsubscribe function. */
|
|
17
|
+
registerDispatchInterceptor(interceptor: DispatchInterceptor<QueryMessage>): () => void
|
|
18
|
+
/** Register a handler interceptor. Returns an unsubscribe function. */
|
|
19
|
+
registerHandlerInterceptor(interceptor: HandlerInterceptor): () => void
|
|
20
|
+
} {
|
|
21
|
+
const dispatchInterceptors: Array<DispatchInterceptor<QueryMessage>> = []
|
|
22
|
+
const handlerInterceptors: Array<HandlerInterceptor> = []
|
|
23
|
+
|
|
24
|
+
return {
|
|
25
|
+
async query(message: QueryMessage): Promise<unknown> {
|
|
26
|
+
let interceptedMessage = message
|
|
27
|
+
for (const interceptor of dispatchInterceptors) {
|
|
28
|
+
interceptedMessage = await interceptor(interceptedMessage)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return delegate.query(interceptedMessage)
|
|
32
|
+
},
|
|
33
|
+
|
|
34
|
+
subscribe(
|
|
35
|
+
queryName: string,
|
|
36
|
+
handler: (message: QueryMessage) => Promise<unknown>,
|
|
37
|
+
) {
|
|
38
|
+
// Wrap the handler with handler interceptors
|
|
39
|
+
const wrappedHandler = (message: QueryMessage) => {
|
|
40
|
+
if (handlerInterceptors.length === 0) {
|
|
41
|
+
return handler(message)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
let chain = () => handler(message)
|
|
45
|
+
for (let i = handlerInterceptors.length - 1; i >= 0; i--) {
|
|
46
|
+
const interceptor = handlerInterceptors[i]!
|
|
47
|
+
const next = chain
|
|
48
|
+
chain = () => interceptor(message, next)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return chain()
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
delegate.subscribe(queryName, wrappedHandler)
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
subscriptionQuery(message: QueryMessage, bufferSize?: number): SubscriptionQueryResult {
|
|
58
|
+
return delegate.subscriptionQuery(message, bufferSize)
|
|
59
|
+
},
|
|
60
|
+
|
|
61
|
+
subscribeToUpdates(message: QueryMessage, bufferSize?: number): AsyncIterable<unknown> & { close(): void } {
|
|
62
|
+
return delegate.subscribeToUpdates(message, bufferSize)
|
|
63
|
+
},
|
|
64
|
+
|
|
65
|
+
emitUpdate(
|
|
66
|
+
queryName: string,
|
|
67
|
+
filter: (queryPayload: unknown) => boolean,
|
|
68
|
+
update: unknown,
|
|
69
|
+
): Promise<void> {
|
|
70
|
+
return delegate.emitUpdate(queryName, filter, update)
|
|
71
|
+
},
|
|
72
|
+
|
|
73
|
+
completeSubscription(
|
|
74
|
+
queryName: string,
|
|
75
|
+
filter?: (queryPayload: unknown) => boolean,
|
|
76
|
+
): Promise<void> {
|
|
77
|
+
return delegate.completeSubscription(queryName, filter)
|
|
78
|
+
},
|
|
79
|
+
|
|
80
|
+
completeSubscriptionExceptionally(
|
|
81
|
+
queryName: string,
|
|
82
|
+
error: Error,
|
|
83
|
+
filter?: (queryPayload: unknown) => boolean,
|
|
84
|
+
): Promise<void> {
|
|
85
|
+
return delegate.completeSubscriptionExceptionally(queryName, error, filter)
|
|
86
|
+
},
|
|
87
|
+
|
|
88
|
+
registerDispatchInterceptor(interceptor) {
|
|
89
|
+
dispatchInterceptors.push(interceptor)
|
|
90
|
+
return () => {
|
|
91
|
+
const idx = dispatchInterceptors.indexOf(interceptor)
|
|
92
|
+
if (idx >= 0) dispatchInterceptors.splice(idx, 1)
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
|
|
96
|
+
registerHandlerInterceptor(interceptor) {
|
|
97
|
+
handlerInterceptors.push(interceptor)
|
|
98
|
+
return () => {
|
|
99
|
+
const idx = handlerInterceptors.indexOf(interceptor)
|
|
100
|
+
if (idx >= 0) handlerInterceptors.splice(idx, 1)
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
}
|
|
104
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { Metadata } from "@kronos-ts/common"
|
|
2
|
+
import type { Message } from "./message.js"
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Intercepts a message before it reaches any handler.
|
|
6
|
+
* Can transform, enrich, or reject messages.
|
|
7
|
+
*
|
|
8
|
+
* Dispatch interceptors run in order — each receives the (possibly transformed)
|
|
9
|
+
* message from the previous interceptor.
|
|
10
|
+
*
|
|
11
|
+
* To reject a message, throw an error.
|
|
12
|
+
* To transform, return a new message.
|
|
13
|
+
* To pass through, return the message unchanged.
|
|
14
|
+
*
|
|
15
|
+
* UoW-scoped state (correlation data, tracing context, etc.) is read directly
|
|
16
|
+
* from ALS via module-level accessors (`getResource` / `setResource`) — no
|
|
17
|
+
* `ProcessingContext` parameter is threaded.
|
|
18
|
+
*
|
|
19
|
+
* **Known limitation:** Dispatch interceptors use a simple transform-or-throw
|
|
20
|
+
* approach. They do not receive a `proceed()` function that can be skipped to
|
|
21
|
+
* return an alternative result.
|
|
22
|
+
* A dispatch interceptor cannot halt the chain and return an alternative result
|
|
23
|
+
* — it can only transform the message or throw to reject it. This covers ~95%
|
|
24
|
+
* of use cases. Full chain semantics (with `proceed()`) would require the
|
|
25
|
+
* dispatch interceptor to also control the result type, which is a much larger
|
|
26
|
+
* refactor. If you need to conditionally prevent dispatch, throw a typed error
|
|
27
|
+
* and handle it at the call site.
|
|
28
|
+
*/
|
|
29
|
+
export interface DispatchInterceptor<M extends Message = Message> {
|
|
30
|
+
(message: M): M | Promise<M>
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Intercepts a handler invocation. Wraps the actual handler call,
|
|
35
|
+
* enabling before/after logic (transactions, tracing, metrics, etc.)
|
|
36
|
+
*
|
|
37
|
+
* UoW-scoped state is read/written via module-level ALS
|
|
38
|
+
* accessors (`getResource` / `setResource`) — no `ProcessingContext`
|
|
39
|
+
* parameter is threaded.
|
|
40
|
+
*
|
|
41
|
+
* The `next` function calls the next interceptor in the chain, or the
|
|
42
|
+
* actual handler if this is the last interceptor.
|
|
43
|
+
*
|
|
44
|
+
* To skip handling entirely, don't call `next()` and return a result directly.
|
|
45
|
+
*/
|
|
46
|
+
export interface HandlerInterceptor<R = unknown> {
|
|
47
|
+
(message: Message, next: () => Promise<R>): Promise<R>
|
|
48
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { Message, CommandMessage, EventMessage, QueryMessage } from "./message.js"
|
|
2
|
+
import type { MessageMonitor } from "./message-monitor.js"
|
|
3
|
+
import { multiMessageMonitor, noOpMessageMonitor } from "./message-monitor.js"
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Registry for message monitors. Collects monitors per message type
|
|
7
|
+
* and provides combined monitors for each type.
|
|
8
|
+
*
|
|
9
|
+
*/
|
|
10
|
+
export interface MessageMonitorRegistry {
|
|
11
|
+
/** Register a monitor for all message types. */
|
|
12
|
+
registerMonitor(monitor: MessageMonitor<Message>): void
|
|
13
|
+
/** Register a monitor for command messages. */
|
|
14
|
+
registerCommandMonitor(monitor: MessageMonitor<CommandMessage>): void
|
|
15
|
+
/** Register a monitor for event messages. */
|
|
16
|
+
registerEventMonitor(monitor: MessageMonitor<EventMessage>): void
|
|
17
|
+
/** Register a monitor for query messages. */
|
|
18
|
+
registerQueryMonitor(monitor: MessageMonitor<QueryMessage>): void
|
|
19
|
+
|
|
20
|
+
/** Get the combined monitor for command messages. */
|
|
21
|
+
commandMonitor(): MessageMonitor<CommandMessage>
|
|
22
|
+
/** Get the combined monitor for event messages. */
|
|
23
|
+
eventMonitor(): MessageMonitor<EventMessage>
|
|
24
|
+
/** Get the combined monitor for query messages. */
|
|
25
|
+
queryMonitor(): MessageMonitor<QueryMessage>
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Creates a default message monitor registry.
|
|
30
|
+
*/
|
|
31
|
+
export function createMessageMonitorRegistry(): MessageMonitorRegistry {
|
|
32
|
+
const genericMonitors: MessageMonitor<Message>[] = []
|
|
33
|
+
const commandMonitors: MessageMonitor<CommandMessage>[] = []
|
|
34
|
+
const eventMonitors: MessageMonitor<EventMessage>[] = []
|
|
35
|
+
const queryMonitors: MessageMonitor<QueryMessage>[] = []
|
|
36
|
+
|
|
37
|
+
return {
|
|
38
|
+
registerMonitor(monitor) {
|
|
39
|
+
genericMonitors.push(monitor)
|
|
40
|
+
},
|
|
41
|
+
registerCommandMonitor(monitor) {
|
|
42
|
+
commandMonitors.push(monitor)
|
|
43
|
+
},
|
|
44
|
+
registerEventMonitor(monitor) {
|
|
45
|
+
eventMonitors.push(monitor)
|
|
46
|
+
},
|
|
47
|
+
registerQueryMonitor(monitor) {
|
|
48
|
+
queryMonitors.push(monitor)
|
|
49
|
+
},
|
|
50
|
+
|
|
51
|
+
commandMonitor() {
|
|
52
|
+
const all = [...genericMonitors, ...commandMonitors] as MessageMonitor<CommandMessage>[]
|
|
53
|
+
return all.length > 0 ? multiMessageMonitor(all) : noOpMessageMonitor()
|
|
54
|
+
},
|
|
55
|
+
eventMonitor() {
|
|
56
|
+
const all = [...genericMonitors, ...eventMonitors] as MessageMonitor<EventMessage>[]
|
|
57
|
+
return all.length > 0 ? multiMessageMonitor(all) : noOpMessageMonitor()
|
|
58
|
+
},
|
|
59
|
+
queryMonitor() {
|
|
60
|
+
const all = [...genericMonitors, ...queryMonitors] as MessageMonitor<QueryMessage>[]
|
|
61
|
+
return all.length > 0 ? multiMessageMonitor(all) : noOpMessageMonitor()
|
|
62
|
+
},
|
|
63
|
+
}
|
|
64
|
+
}
|