@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.
Files changed (266) hide show
  1. package/dist/command-bus.d.ts +30 -0
  2. package/dist/command-bus.d.ts.map +1 -0
  3. package/dist/command-bus.js +2 -0
  4. package/dist/command-bus.js.map +1 -0
  5. package/dist/command-handler.d.ts +58 -0
  6. package/dist/command-handler.d.ts.map +1 -0
  7. package/dist/command-handler.js +12 -0
  8. package/dist/command-handler.js.map +1 -0
  9. package/dist/command-handling-module.d.ts +53 -0
  10. package/dist/command-handling-module.d.ts.map +1 -0
  11. package/dist/command-handling-module.js +130 -0
  12. package/dist/command-handling-module.js.map +1 -0
  13. package/dist/correlation-data.d.ts +79 -0
  14. package/dist/correlation-data.d.ts.map +1 -0
  15. package/dist/correlation-data.js +133 -0
  16. package/dist/correlation-data.js.map +1 -0
  17. package/dist/dead-letter-queue.d.ts +134 -0
  18. package/dist/dead-letter-queue.d.ts.map +1 -0
  19. package/dist/dead-letter-queue.js +176 -0
  20. package/dist/dead-letter-queue.js.map +1 -0
  21. package/dist/dead-lettering-handler.d.ts +42 -0
  22. package/dist/dead-lettering-handler.d.ts.map +1 -0
  23. package/dist/dead-lettering-handler.js +67 -0
  24. package/dist/dead-lettering-handler.js.map +1 -0
  25. package/dist/descriptor.d.ts +135 -0
  26. package/dist/descriptor.d.ts.map +1 -0
  27. package/dist/descriptor.js +36 -0
  28. package/dist/descriptor.js.map +1 -0
  29. package/dist/emit-update.d.ts +22 -0
  30. package/dist/emit-update.d.ts.map +1 -0
  31. package/dist/emit-update.js +23 -0
  32. package/dist/emit-update.js.map +1 -0
  33. package/dist/event-bus.d.ts +29 -0
  34. package/dist/event-bus.d.ts.map +1 -0
  35. package/dist/event-bus.js +22 -0
  36. package/dist/event-bus.js.map +1 -0
  37. package/dist/event-criteria.d.ts +87 -0
  38. package/dist/event-criteria.d.ts.map +1 -0
  39. package/dist/event-criteria.js +90 -0
  40. package/dist/event-criteria.js.map +1 -0
  41. package/dist/event-gateway.d.ts +19 -0
  42. package/dist/event-gateway.d.ts.map +1 -0
  43. package/dist/event-gateway.js +22 -0
  44. package/dist/event-gateway.js.map +1 -0
  45. package/dist/event-handler.d.ts +30 -0
  46. package/dist/event-handler.d.ts.map +1 -0
  47. package/dist/event-handler.js +18 -0
  48. package/dist/event-handler.js.map +1 -0
  49. package/dist/event-processor-builder.d.ts +148 -0
  50. package/dist/event-processor-builder.d.ts.map +1 -0
  51. package/dist/event-processor-builder.js +175 -0
  52. package/dist/event-processor-builder.js.map +1 -0
  53. package/dist/event-processor.d.ts +10 -0
  54. package/dist/event-processor.d.ts.map +1 -0
  55. package/dist/event-processor.js +2 -0
  56. package/dist/event-processor.js.map +1 -0
  57. package/dist/event-sink.d.ts +23 -0
  58. package/dist/event-sink.d.ts.map +1 -0
  59. package/dist/event-sink.js +2 -0
  60. package/dist/event-sink.js.map +1 -0
  61. package/dist/event-source.d.ts +98 -0
  62. package/dist/event-source.d.ts.map +1 -0
  63. package/dist/event-source.js +191 -0
  64. package/dist/event-source.js.map +1 -0
  65. package/dist/gateway.d.ts +68 -0
  66. package/dist/gateway.d.ts.map +1 -0
  67. package/dist/gateway.js +62 -0
  68. package/dist/gateway.js.map +1 -0
  69. package/dist/handler-enhancer.d.ts +53 -0
  70. package/dist/handler-enhancer.d.ts.map +1 -0
  71. package/dist/handler-enhancer.js +17 -0
  72. package/dist/handler-enhancer.js.map +1 -0
  73. package/dist/handler.d.ts +51 -0
  74. package/dist/handler.d.ts.map +1 -0
  75. package/dist/handler.js +26 -0
  76. package/dist/handler.js.map +1 -0
  77. package/dist/index.d.ts +53 -0
  78. package/dist/index.d.ts.map +1 -0
  79. package/dist/index.js +103 -0
  80. package/dist/index.js.map +1 -0
  81. package/dist/intercepting-command-bus.d.ts +17 -0
  82. package/dist/intercepting-command-bus.d.ts.map +1 -0
  83. package/dist/intercepting-command-bus.js +54 -0
  84. package/dist/intercepting-command-bus.js.map +1 -0
  85. package/dist/intercepting-event-bus.d.ts +8 -0
  86. package/dist/intercepting-event-bus.d.ts.map +1 -0
  87. package/dist/intercepting-event-bus.js +22 -0
  88. package/dist/intercepting-event-bus.js.map +1 -0
  89. package/dist/intercepting-query-bus.d.ts +17 -0
  90. package/dist/intercepting-query-bus.d.ts.map +1 -0
  91. package/dist/intercepting-query-bus.js +68 -0
  92. package/dist/intercepting-query-bus.js.map +1 -0
  93. package/dist/interceptor.d.ts +46 -0
  94. package/dist/interceptor.d.ts.map +1 -0
  95. package/dist/interceptor.js +2 -0
  96. package/dist/interceptor.js.map +1 -0
  97. package/dist/message-monitor-registry.d.ts +28 -0
  98. package/dist/message-monitor-registry.d.ts.map +1 -0
  99. package/dist/message-monitor-registry.js +37 -0
  100. package/dist/message-monitor-registry.js.map +1 -0
  101. package/dist/message-monitor.d.ts +36 -0
  102. package/dist/message-monitor.d.ts.map +1 -0
  103. package/dist/message-monitor.js +39 -0
  104. package/dist/message-monitor.js.map +1 -0
  105. package/dist/message.d.ts +42 -0
  106. package/dist/message.d.ts.map +1 -0
  107. package/dist/message.js +2 -0
  108. package/dist/message.js.map +1 -0
  109. package/dist/processing-state.d.ts +115 -0
  110. package/dist/processing-state.d.ts.map +1 -0
  111. package/dist/processing-state.js +205 -0
  112. package/dist/processing-state.js.map +1 -0
  113. package/dist/processor-configuration.d.ts +51 -0
  114. package/dist/processor-configuration.d.ts.map +1 -0
  115. package/dist/processor-configuration.js +2 -0
  116. package/dist/processor-configuration.js.map +1 -0
  117. package/dist/query-bus.d.ts +51 -0
  118. package/dist/query-bus.d.ts.map +1 -0
  119. package/dist/query-bus.js +2 -0
  120. package/dist/query-bus.js.map +1 -0
  121. package/dist/query-handler.d.ts +35 -0
  122. package/dist/query-handler.d.ts.map +1 -0
  123. package/dist/query-handler.js +19 -0
  124. package/dist/query-handler.js.map +1 -0
  125. package/dist/query-handling-module.d.ts +24 -0
  126. package/dist/query-handling-module.d.ts.map +1 -0
  127. package/dist/query-handling-module.js +32 -0
  128. package/dist/query-handling-module.js.map +1 -0
  129. package/dist/replay-token.d.ts +31 -0
  130. package/dist/replay-token.d.ts.map +1 -0
  131. package/dist/replay-token.js +37 -0
  132. package/dist/replay-token.js.map +1 -0
  133. package/dist/retrying-command-bus.d.ts +32 -0
  134. package/dist/retrying-command-bus.d.ts.map +1 -0
  135. package/dist/retrying-command-bus.js +58 -0
  136. package/dist/retrying-command-bus.js.map +1 -0
  137. package/dist/routing-strategy.d.ts +30 -0
  138. package/dist/routing-strategy.d.ts.map +1 -0
  139. package/dist/routing-strategy.js +37 -0
  140. package/dist/routing-strategy.js.map +1 -0
  141. package/dist/segment.d.ts +72 -0
  142. package/dist/segment.d.ts.map +1 -0
  143. package/dist/segment.js +103 -0
  144. package/dist/segment.js.map +1 -0
  145. package/dist/send.d.ts +28 -0
  146. package/dist/send.d.ts.map +1 -0
  147. package/dist/send.js +36 -0
  148. package/dist/send.js.map +1 -0
  149. package/dist/serializer.d.ts +40 -0
  150. package/dist/serializer.d.ts.map +1 -0
  151. package/dist/serializer.js +90 -0
  152. package/dist/serializer.js.map +1 -0
  153. package/dist/simple-command-bus.d.ts +23 -0
  154. package/dist/simple-command-bus.d.ts.map +1 -0
  155. package/dist/simple-command-bus.js +49 -0
  156. package/dist/simple-command-bus.js.map +1 -0
  157. package/dist/simple-query-bus.d.ts +16 -0
  158. package/dist/simple-query-bus.d.ts.map +1 -0
  159. package/dist/simple-query-bus.js +122 -0
  160. package/dist/simple-query-bus.js.map +1 -0
  161. package/dist/span-factory.d.ts +58 -0
  162. package/dist/span-factory.d.ts.map +1 -0
  163. package/dist/span-factory.js +19 -0
  164. package/dist/span-factory.js.map +1 -0
  165. package/dist/streaming-event-processor.d.ts +65 -0
  166. package/dist/streaming-event-processor.d.ts.map +1 -0
  167. package/dist/streaming-event-processor.js +239 -0
  168. package/dist/streaming-event-processor.js.map +1 -0
  169. package/dist/subscribing-event-processor.d.ts +57 -0
  170. package/dist/subscribing-event-processor.d.ts.map +1 -0
  171. package/dist/subscribing-event-processor.js +100 -0
  172. package/dist/subscribing-event-processor.js.map +1 -0
  173. package/dist/subscription-query.d.ts +63 -0
  174. package/dist/subscription-query.d.ts.map +1 -0
  175. package/dist/subscription-query.js +119 -0
  176. package/dist/subscription-query.js.map +1 -0
  177. package/dist/token-store.d.ts +83 -0
  178. package/dist/token-store.d.ts.map +1 -0
  179. package/dist/token-store.js +112 -0
  180. package/dist/token-store.js.map +1 -0
  181. package/dist/tracing-command-bus.d.ts +16 -0
  182. package/dist/tracing-command-bus.d.ts.map +1 -0
  183. package/dist/tracing-command-bus.js +44 -0
  184. package/dist/tracing-command-bus.js.map +1 -0
  185. package/dist/tracing-handler-enhancer.d.ts +11 -0
  186. package/dist/tracing-handler-enhancer.d.ts.map +1 -0
  187. package/dist/tracing-handler-enhancer.js +27 -0
  188. package/dist/tracing-handler-enhancer.js.map +1 -0
  189. package/dist/tracking-event-processor.d.ts +72 -0
  190. package/dist/tracking-event-processor.d.ts.map +1 -0
  191. package/dist/tracking-event-processor.js +223 -0
  192. package/dist/tracking-event-processor.js.map +1 -0
  193. package/dist/tracking-token.d.ts +120 -0
  194. package/dist/tracking-token.d.ts.map +1 -0
  195. package/dist/tracking-token.js +132 -0
  196. package/dist/tracking-token.js.map +1 -0
  197. package/dist/transaction.d.ts +60 -0
  198. package/dist/transaction.d.ts.map +1 -0
  199. package/dist/transaction.js +74 -0
  200. package/dist/transaction.js.map +1 -0
  201. package/dist/unit-of-work.d.ts +41 -0
  202. package/dist/unit-of-work.d.ts.map +1 -0
  203. package/dist/unit-of-work.js +96 -0
  204. package/dist/unit-of-work.js.map +1 -0
  205. package/dist/upcaster.d.ts +91 -0
  206. package/dist/upcaster.d.ts.map +1 -0
  207. package/dist/upcaster.js +114 -0
  208. package/dist/upcaster.js.map +1 -0
  209. package/dist/with-namespace.d.ts +59 -0
  210. package/dist/with-namespace.d.ts.map +1 -0
  211. package/dist/with-namespace.js +42 -0
  212. package/dist/with-namespace.js.map +1 -0
  213. package/package.json +65 -0
  214. package/src/command-bus.ts +34 -0
  215. package/src/command-handler.ts +116 -0
  216. package/src/command-handling-module.ts +183 -0
  217. package/src/correlation-data.ts +169 -0
  218. package/src/dead-letter-queue.ts +330 -0
  219. package/src/dead-lettering-handler.ts +109 -0
  220. package/src/descriptor.ts +176 -0
  221. package/src/emit-update.ts +35 -0
  222. package/src/event-bus.ts +45 -0
  223. package/src/event-criteria.ts +141 -0
  224. package/src/event-gateway.ts +42 -0
  225. package/src/event-handler.ts +44 -0
  226. package/src/event-processor-builder.ts +246 -0
  227. package/src/event-processor.ts +9 -0
  228. package/src/event-sink.ts +23 -0
  229. package/src/event-source.ts +301 -0
  230. package/src/gateway.ts +144 -0
  231. package/src/handler-enhancer.ts +70 -0
  232. package/src/handler.ts +133 -0
  233. package/src/index.ts +356 -0
  234. package/src/intercepting-command-bus.ts +73 -0
  235. package/src/intercepting-event-bus.ts +29 -0
  236. package/src/intercepting-query-bus.ts +104 -0
  237. package/src/interceptor.ts +48 -0
  238. package/src/message-monitor-registry.ts +64 -0
  239. package/src/message-monitor.ts +68 -0
  240. package/src/message.ts +41 -0
  241. package/src/processing-state.ts +258 -0
  242. package/src/processor-configuration.ts +59 -0
  243. package/src/query-bus.ts +69 -0
  244. package/src/query-handler.ts +49 -0
  245. package/src/query-handling-module.ts +44 -0
  246. package/src/replay-token.ts +53 -0
  247. package/src/retrying-command-bus.ts +80 -0
  248. package/src/routing-strategy.ts +59 -0
  249. package/src/segment.ts +136 -0
  250. package/src/send.ts +44 -0
  251. package/src/serializer.ts +122 -0
  252. package/src/simple-command-bus.ts +59 -0
  253. package/src/simple-query-bus.ts +158 -0
  254. package/src/span-factory.ts +81 -0
  255. package/src/streaming-event-processor.ts +351 -0
  256. package/src/subscribing-event-processor.ts +169 -0
  257. package/src/subscription-query.ts +173 -0
  258. package/src/token-store.ts +211 -0
  259. package/src/tracing-command-bus.ts +52 -0
  260. package/src/tracing-handler-enhancer.ts +34 -0
  261. package/src/tracking-event-processor.ts +336 -0
  262. package/src/tracking-token.ts +231 -0
  263. package/src/transaction.ts +98 -0
  264. package/src/unit-of-work.ts +138 -0
  265. package/src/upcaster.ts +174 -0
  266. 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
+ }