@nestjs-transactional/outbox 1.0.0-alpha.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 (126) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +396 -0
  3. package/dist/api/completed-event-publications.d.ts +31 -0
  4. package/dist/api/completed-event-publications.js +58 -0
  5. package/dist/api/completed-event-publications.js.map +1 -0
  6. package/dist/api/failed-event-publications.d.ts +36 -0
  7. package/dist/api/failed-event-publications.js +75 -0
  8. package/dist/api/failed-event-publications.js.map +1 -0
  9. package/dist/api/incomplete-event-publications.d.ts +28 -0
  10. package/dist/api/incomplete-event-publications.js +72 -0
  11. package/dist/api/incomplete-event-publications.js.map +1 -0
  12. package/dist/decorators/inject-decorators.d.ts +85 -0
  13. package/dist/decorators/inject-decorators.js +100 -0
  14. package/dist/decorators/inject-decorators.js.map +1 -0
  15. package/dist/decorators/outbox-events-handler.decorator.d.ts +97 -0
  16. package/dist/decorators/outbox-events-handler.decorator.js +58 -0
  17. package/dist/decorators/outbox-events-handler.decorator.js.map +1 -0
  18. package/dist/dispatcher/data-source-outbox-publisher.d.ts +69 -0
  19. package/dist/dispatcher/data-source-outbox-publisher.js +127 -0
  20. package/dist/dispatcher/data-source-outbox-publisher.js.map +1 -0
  21. package/dist/dispatcher/event-publication-processor.d.ts +69 -0
  22. package/dist/dispatcher/event-publication-processor.js +192 -0
  23. package/dist/dispatcher/event-publication-processor.js.map +1 -0
  24. package/dist/dispatcher/outbox-event-publisher.d.ts +129 -0
  25. package/dist/dispatcher/outbox-event-publisher.js +172 -0
  26. package/dist/dispatcher/outbox-event-publisher.js.map +1 -0
  27. package/dist/dispatcher/processor-options.d.ts +24 -0
  28. package/dist/dispatcher/processor-options.js +15 -0
  29. package/dist/dispatcher/processor-options.js.map +1 -0
  30. package/dist/externalization/errors.d.ts +21 -0
  31. package/dist/externalization/errors.js +30 -0
  32. package/dist/externalization/errors.js.map +1 -0
  33. package/dist/externalization/event-externalizer.d.ts +49 -0
  34. package/dist/externalization/event-externalizer.js +14 -0
  35. package/dist/externalization/event-externalizer.js.map +1 -0
  36. package/dist/externalization/externalization-registry.d.ts +56 -0
  37. package/dist/externalization/externalization-registry.js +103 -0
  38. package/dist/externalization/externalization-registry.js.map +1 -0
  39. package/dist/externalization/externalized.decorator.d.ts +121 -0
  40. package/dist/externalization/externalized.decorator.js +87 -0
  41. package/dist/externalization/externalized.decorator.js.map +1 -0
  42. package/dist/externalization/types.d.ts +39 -0
  43. package/dist/externalization/types.js +3 -0
  44. package/dist/externalization/types.js.map +1 -0
  45. package/dist/index.d.ts +38 -0
  46. package/dist/index.js +58 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/interfaces/outbox-event-handler.interface.d.ts +32 -0
  49. package/dist/interfaces/outbox-event-handler.interface.js +3 -0
  50. package/dist/interfaces/outbox-event-handler.interface.js.map +1 -0
  51. package/dist/module/outbox-processing.module.d.ts +29 -0
  52. package/dist/module/outbox-processing.module.js +66 -0
  53. package/dist/module/outbox-processing.module.js.map +1 -0
  54. package/dist/module/outbox.module.d.ts +196 -0
  55. package/dist/module/outbox.module.js +604 -0
  56. package/dist/module/outbox.module.js.map +1 -0
  57. package/dist/recovery/staleness-monitor.d.ts +39 -0
  58. package/dist/recovery/staleness-monitor.js +118 -0
  59. package/dist/recovery/staleness-monitor.js.map +1 -0
  60. package/dist/recovery/startup-recovery.d.ts +37 -0
  61. package/dist/recovery/startup-recovery.js +55 -0
  62. package/dist/recovery/startup-recovery.js.map +1 -0
  63. package/dist/registry/event-publication-registry.d.ts +70 -0
  64. package/dist/registry/event-publication-registry.js +138 -0
  65. package/dist/registry/event-publication-registry.js.map +1 -0
  66. package/dist/registry/listener-registry.d.ts +52 -0
  67. package/dist/registry/listener-registry.js +67 -0
  68. package/dist/registry/listener-registry.js.map +1 -0
  69. package/dist/registry/multi-ds-listener-registrar.d.ts +78 -0
  70. package/dist/registry/multi-ds-listener-registrar.js +112 -0
  71. package/dist/registry/multi-ds-listener-registrar.js.map +1 -0
  72. package/dist/registry/outbox-listener-scanner.d.ts +66 -0
  73. package/dist/registry/outbox-listener-scanner.js +192 -0
  74. package/dist/registry/outbox-listener-scanner.js.map +1 -0
  75. package/dist/repository/event-publication-repository.d.ts +112 -0
  76. package/dist/repository/event-publication-repository.js +6 -0
  77. package/dist/repository/event-publication-repository.js.map +1 -0
  78. package/dist/serialization/event-serializer.d.ts +28 -0
  79. package/dist/serialization/event-serializer.js +6 -0
  80. package/dist/serialization/event-serializer.js.map +1 -0
  81. package/dist/serialization/event-type-registry.d.ts +41 -0
  82. package/dist/serialization/event-type-registry.js +79 -0
  83. package/dist/serialization/event-type-registry.js.map +1 -0
  84. package/dist/serialization/event-type-resolver.d.ts +43 -0
  85. package/dist/serialization/event-type-resolver.js +66 -0
  86. package/dist/serialization/event-type-resolver.js.map +1 -0
  87. package/dist/serialization/json-event-serializer.d.ts +20 -0
  88. package/dist/serialization/json-event-serializer.js +64 -0
  89. package/dist/serialization/json-event-serializer.js.map +1 -0
  90. package/dist/testing/assertable-published-events.d.ts +71 -0
  91. package/dist/testing/assertable-published-events.js +124 -0
  92. package/dist/testing/assertable-published-events.js.map +1 -0
  93. package/dist/testing/in-memory-repository.d.ts +52 -0
  94. package/dist/testing/in-memory-repository.js +230 -0
  95. package/dist/testing/in-memory-repository.js.map +1 -0
  96. package/dist/testing/index.d.ts +4 -0
  97. package/dist/testing/index.js +20 -0
  98. package/dist/testing/index.js.map +1 -0
  99. package/dist/testing/published-events.d.ts +62 -0
  100. package/dist/testing/published-events.js +110 -0
  101. package/dist/testing/published-events.js.map +1 -0
  102. package/dist/tokens/index.d.ts +2 -0
  103. package/dist/tokens/index.js +14 -0
  104. package/dist/tokens/index.js.map +1 -0
  105. package/dist/tokens/token-utils.d.ts +68 -0
  106. package/dist/tokens/token-utils.js +98 -0
  107. package/dist/tokens/token-utils.js.map +1 -0
  108. package/dist/types/completion-mode.d.ts +16 -0
  109. package/dist/types/completion-mode.js +20 -0
  110. package/dist/types/completion-mode.js.map +1 -0
  111. package/dist/types/errors.d.ts +50 -0
  112. package/dist/types/errors.js +64 -0
  113. package/dist/types/errors.js.map +1 -0
  114. package/dist/types/event-publication.d.ts +47 -0
  115. package/dist/types/event-publication.js +3 -0
  116. package/dist/types/event-publication.js.map +1 -0
  117. package/dist/types/publication-status.d.ts +26 -0
  118. package/dist/types/publication-status.js +30 -0
  119. package/dist/types/publication-status.js.map +1 -0
  120. package/dist/types/resubmission-options.d.ts +37 -0
  121. package/dist/types/resubmission-options.js +62 -0
  122. package/dist/types/resubmission-options.js.map +1 -0
  123. package/dist/types/staleness-config.d.ts +18 -0
  124. package/dist/types/staleness-config.js +10 -0
  125. package/dist/types/staleness-config.js.map +1 -0
  126. package/package.json +77 -0
@@ -0,0 +1,604 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var OutboxModule_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.OutboxModule = exports.OUTBOX_PROCESSING_BUNDLE = exports.OUTBOX_STALENESS_CONFIG = exports.OUTBOX_PROCESSOR_OPTIONS = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const core_1 = require("@nestjs/core");
13
+ const core_2 = require("@nestjs-transactional/core");
14
+ const completed_event_publications_1 = require("../api/completed-event-publications");
15
+ const failed_event_publications_1 = require("../api/failed-event-publications");
16
+ const incomplete_event_publications_1 = require("../api/incomplete-event-publications");
17
+ const data_source_outbox_publisher_1 = require("../dispatcher/data-source-outbox-publisher");
18
+ const event_publication_processor_1 = require("../dispatcher/event-publication-processor");
19
+ const outbox_event_publisher_1 = require("../dispatcher/outbox-event-publisher");
20
+ const processor_options_1 = require("../dispatcher/processor-options");
21
+ const event_externalizer_1 = require("../externalization/event-externalizer");
22
+ const externalization_registry_1 = require("../externalization/externalization-registry");
23
+ const staleness_monitor_1 = require("../recovery/staleness-monitor");
24
+ const startup_recovery_1 = require("../recovery/startup-recovery");
25
+ const event_publication_registry_1 = require("../registry/event-publication-registry");
26
+ const listener_registry_1 = require("../registry/listener-registry");
27
+ const multi_ds_listener_registrar_1 = require("../registry/multi-ds-listener-registrar");
28
+ const outbox_listener_scanner_1 = require("../registry/outbox-listener-scanner");
29
+ const event_publication_repository_1 = require("../repository/event-publication-repository");
30
+ const event_serializer_1 = require("../serialization/event-serializer");
31
+ const event_type_registry_1 = require("../serialization/event-type-registry");
32
+ const json_event_serializer_1 = require("../serialization/json-event-serializer");
33
+ const in_memory_repository_1 = require("../testing/in-memory-repository");
34
+ const token_utils_1 = require("../tokens/token-utils");
35
+ const staleness_config_1 = require("../types/staleness-config");
36
+ const DEFAULT_DATA_SOURCE = 'default';
37
+ /** DI token carrying the resolved {@link EventPublicationProcessorOptions}. */
38
+ exports.OUTBOX_PROCESSOR_OPTIONS = Symbol('OUTBOX_PROCESSOR_OPTIONS');
39
+ /** DI token carrying the resolved {@link StalenessConfig}. */
40
+ exports.OUTBOX_STALENESS_CONFIG = Symbol('OUTBOX_STALENESS_CONFIG');
41
+ /**
42
+ * Bundle of per-dataSource processors and monitors that
43
+ * {@link OutboxProcessingModule} reads on bootstrap to start every
44
+ * configured outbox loop. Provided by `forRoot` so the processing
45
+ * module needs no per-dataSource configuration of its own.
46
+ */
47
+ exports.OUTBOX_PROCESSING_BUNDLE = Symbol('OUTBOX_PROCESSING_BUNDLE');
48
+ const ASYNC_OPTIONS_TOKEN = (ds) => Symbol(`OUTBOX_ASYNC_OPTIONS[${ds}]`);
49
+ function resolveProcessorOptions(processor, completionMode) {
50
+ return {
51
+ ...processor_options_1.DEFAULT_PROCESSOR_OPTIONS,
52
+ ...processor,
53
+ completionMode: completionMode ?? processor?.completionMode ?? processor_options_1.DEFAULT_PROCESSOR_OPTIONS.completionMode,
54
+ };
55
+ }
56
+ function resolveStalenessConfig(staleness) {
57
+ return { ...staleness_config_1.DEFAULT_STALENESS_CONFIG, ...staleness };
58
+ }
59
+ function resolveRecoveryOptions(republishOnStartup, startupBatchSize) {
60
+ return {
61
+ republishOnStartup: republishOnStartup ?? false,
62
+ startupBatchSize,
63
+ };
64
+ }
65
+ /**
66
+ * Re-bind a Provider's `provide` field to a per-dataSource token.
67
+ * Users supply repository / serializer providers with whatever
68
+ * `provide` value they want (typically the historical singleton
69
+ * tokens) — the module owns the actual token routing per-dataSource
70
+ * and overwrites `provide` here.
71
+ */
72
+ function reBindProvider(provider, token) {
73
+ if (typeof provider === 'function') {
74
+ return { provide: token, useClass: provider };
75
+ }
76
+ return { ...provider, provide: token };
77
+ }
78
+ /**
79
+ * NestJS module that wires the Event Publication Registry. ADR-019
80
+ * shape — multi-dataSource deployments call {@link forRoot} once per
81
+ * dataSource. The first call registers process-wide singletons (smart
82
+ * facade, listener scanner, processing bundle); subsequent calls only
83
+ * register per-dataSource providers. Default-DS class-token aliases
84
+ * are registered by whichever call has `dataSource: 'default'` (or
85
+ * `dataSource` omitted).
86
+ *
87
+ * Cross-call state lives in {@link registrations} — a static class
88
+ * storage keyed by dataSource name. Mirrors `@nestjs/typeorm`'s
89
+ * `EntitiesMetadataStorage` pattern.
90
+ *
91
+ * Does NOT start the processor or staleness monitor automatically —
92
+ * import {@link OutboxProcessingModule} in the worker process to
93
+ * auto-start every registered per-dataSource loop on
94
+ * `OnApplicationBootstrap`.
95
+ *
96
+ * Requires `TransactionalModule.forRoot({ isGlobal: true })` registered
97
+ * earlier in the module tree so the per-DS publisher can find the
98
+ * `TransactionManager` via the global DI scope.
99
+ */
100
+ let OutboxModule = class OutboxModule {
101
+ static { OutboxModule_1 = this; }
102
+ /**
103
+ * @internal
104
+ * Process-wide registry of every dataSource that has called
105
+ * {@link forRoot} or {@link forRootAsync}. Singleton factories
106
+ * (smart facade, processing bundle) close over this Map and
107
+ * enumerate it at injection time, after every `forRoot` has been
108
+ * evaluated synchronously.
109
+ *
110
+ * Tests that build multiple modules sequentially MUST call
111
+ * {@link resetForTesting} between cases — otherwise residual
112
+ * registrations from earlier tests collide with later ones.
113
+ */
114
+ static registrations = new Map();
115
+ /**
116
+ * Test-only — drop every registration so a subsequent `forRoot`
117
+ * starts from a clean slate. Mirrors the cleanup pattern used with
118
+ * `EntitiesMetadataStorage` in `@nestjs/typeorm` test suites.
119
+ *
120
+ * Production code should never call this. Calling at runtime
121
+ * after the module has been initialised would NOT clear the
122
+ * provider tree NestJS already built — it only clears the
123
+ * registration record that drives subsequent `forRoot` calls.
124
+ *
125
+ * @internal
126
+ */
127
+ static resetForTesting() {
128
+ this.registrations.clear();
129
+ }
130
+ static forRoot(options = {}) {
131
+ const ds = options.dataSource ?? DEFAULT_DATA_SOURCE;
132
+ if (this.registrations.has(ds)) {
133
+ throw new Error(`OutboxModule.forRoot('${ds}') called twice — dataSource names must be unique. ` +
134
+ `If this is a test, call OutboxModule.resetForTesting() between cases.`);
135
+ }
136
+ const isFirstRegistration = this.registrations.size === 0;
137
+ const processorOpts = resolveProcessorOptions(options.processor, options.completionMode);
138
+ const stalenessCfg = resolveStalenessConfig(options.staleness);
139
+ const recoveryOpts = resolveRecoveryOptions(options.republishOnStartup, options.startupBatchSize);
140
+ this.registrations.set(ds, {
141
+ dataSource: ds,
142
+ processorOptions: processorOpts,
143
+ stalenessConfig: stalenessCfg,
144
+ recoveryOptions: recoveryOpts,
145
+ });
146
+ const providers = [
147
+ ...buildPerDataSourceProviders(ds, options.repository, options.serializer, processorOpts, stalenessCfg, recoveryOpts),
148
+ ];
149
+ const exportTokens = [...perDataSourceExports(ds)];
150
+ if (ds === DEFAULT_DATA_SOURCE) {
151
+ providers.push(...buildDefaultDataSourceAliases());
152
+ providers.push(failed_event_publications_1.FailedEventPublications, incomplete_event_publications_1.IncompleteEventPublications, completed_event_publications_1.CompletedEventPublications, startup_recovery_1.StartupRecoveryService);
153
+ exportTokens.push(...defaultDataSourceAliasTokens());
154
+ exportTokens.push(failed_event_publications_1.FailedEventPublications, incomplete_event_publications_1.IncompleteEventPublications, completed_event_publications_1.CompletedEventPublications, startup_recovery_1.StartupRecoveryService);
155
+ }
156
+ if (isFirstRegistration) {
157
+ // Process-wide singletons. Their factories close over this
158
+ // class's `registrations` Map and read it at injection time —
159
+ // by then every other forRoot has already pushed its record in
160
+ // (forRoot bodies run synchronously at module-definition time).
161
+ providers.push(...buildFacadePublisherProvider(OutboxModule_1));
162
+ providers.push(buildProcessingBundleProvider(OutboxModule_1));
163
+ providers.push(outbox_listener_scanner_1.OutboxListenerScanner);
164
+ providers.push(...buildMultiDsRegistrarProviders());
165
+ exportTokens.push(outbox_event_publisher_1.OutboxEventPublisher);
166
+ exportTokens.push(exports.OUTBOX_PROCESSING_BUNDLE);
167
+ exportTokens.push(multi_ds_listener_registrar_1.MultiDsOutboxListenerRegistrar);
168
+ exportTokens.push(multi_ds_listener_registrar_1.OUTBOX_LISTENER_REGISTRAR_TOKEN);
169
+ }
170
+ return {
171
+ module: OutboxModule_1,
172
+ global: options.isGlobal ?? true,
173
+ imports: [core_1.DiscoveryModule],
174
+ providers,
175
+ exports: exportTokens,
176
+ };
177
+ }
178
+ /**
179
+ * Asynchronous registration of one dataSource's outbox stack.
180
+ * Symmetric with {@link forRoot} — call once per dataSource;
181
+ * provider-valued fields (`serializer`, `repository`) stay static
182
+ * because providers must be known at module-definition time, while
183
+ * `processor` / `staleness` / etc. resolve via the async factory.
184
+ */
185
+ static forRootAsync(options) {
186
+ const ds = options.dataSource ?? DEFAULT_DATA_SOURCE;
187
+ if (this.registrations.has(ds)) {
188
+ throw new Error(`OutboxModule.forRootAsync('${ds}') called twice — dataSource names must be unique. ` +
189
+ `If this is a test, call OutboxModule.resetForTesting() between cases.`);
190
+ }
191
+ const isFirstRegistration = this.registrations.size === 0;
192
+ // Stub the registration record with defaults — async factory hasn't
193
+ // run yet, so concrete options are filled in by per-DS factory
194
+ // providers below. Singletons that read the Map at injection time
195
+ // only consume `dataSource`, so this stub is sufficient.
196
+ this.registrations.set(ds, {
197
+ dataSource: ds,
198
+ processorOptions: resolveProcessorOptions(undefined, undefined),
199
+ stalenessConfig: resolveStalenessConfig(undefined),
200
+ recoveryOptions: resolveRecoveryOptions(undefined, undefined),
201
+ });
202
+ const asyncToken = ASYNC_OPTIONS_TOKEN(ds);
203
+ const asyncOptionsProvider = {
204
+ provide: asyncToken,
205
+ useFactory: options.useFactory,
206
+ inject: options.inject ? [...options.inject] : undefined,
207
+ };
208
+ const eventTypeRegistryToken = (0, token_utils_1.getEventTypeRegistryToken)(ds);
209
+ const repositoryToken = (0, token_utils_1.getEventPublicationRepositoryToken)(ds);
210
+ const serializerToken = (0, token_utils_1.getOutboxEventSerializerToken)(ds);
211
+ const listenerRegistryToken = (0, token_utils_1.getOutboxListenerRegistryToken)(ds);
212
+ const publicationRegistryToken = (0, token_utils_1.getEventPublicationRegistryToken)(ds);
213
+ const externalizationRegistryToken = (0, token_utils_1.getExternalizationRegistryToken)(ds);
214
+ const processorToken = (0, token_utils_1.getEventPublicationProcessorToken)(ds);
215
+ const publisherToken = (0, token_utils_1.getOutboxPublisherToken)(ds);
216
+ const stalenessToken = perDsStalenessMonitorToken(ds);
217
+ const recoveryToken = perDsStartupRecoveryToken(ds);
218
+ const processorOptionsToken = perDsProcessorOptionsToken(ds);
219
+ const stalenessConfigToken = perDsStalenessConfigToken(ds);
220
+ const recoveryOptionsToken = perDsRecoveryOptionsToken(ds);
221
+ const providers = [
222
+ asyncOptionsProvider,
223
+ { provide: eventTypeRegistryToken, useFactory: () => new event_type_registry_1.EventTypeRegistry() },
224
+ options.repository
225
+ ? reBindProvider(options.repository, repositoryToken)
226
+ : { provide: repositoryToken, useClass: in_memory_repository_1.InMemoryEventPublicationRepository },
227
+ options.serializer
228
+ ? reBindProvider(options.serializer, serializerToken)
229
+ : {
230
+ provide: serializerToken,
231
+ useFactory: (registry) => new json_event_serializer_1.JsonEventSerializer(registry),
232
+ inject: [eventTypeRegistryToken],
233
+ },
234
+ {
235
+ provide: listenerRegistryToken,
236
+ useFactory: () => new listener_registry_1.OutboxListenerRegistry(),
237
+ },
238
+ {
239
+ provide: publicationRegistryToken,
240
+ useFactory: (repo, serializer) => new event_publication_registry_1.EventPublicationRegistry(repo, serializer),
241
+ inject: [repositoryToken, serializerToken],
242
+ },
243
+ {
244
+ provide: externalizationRegistryToken,
245
+ useFactory: (etr) => new externalization_registry_1.ExternalizationRegistry(etr),
246
+ inject: [eventTypeRegistryToken],
247
+ },
248
+ {
249
+ provide: processorOptionsToken,
250
+ useFactory: (opts) => resolveProcessorOptions(opts.processor, opts.completionMode),
251
+ inject: [asyncToken],
252
+ },
253
+ {
254
+ provide: processorToken,
255
+ useFactory: (registry, listeners, opts, externalizer, externalizationRegistry) => new event_publication_processor_1.EventPublicationProcessor(registry, listeners, opts, externalizer, externalizationRegistry),
256
+ inject: [
257
+ publicationRegistryToken,
258
+ listenerRegistryToken,
259
+ processorOptionsToken,
260
+ { token: event_externalizer_1.EVENT_EXTERNALIZER, optional: true },
261
+ externalizationRegistryToken,
262
+ ],
263
+ },
264
+ {
265
+ provide: stalenessConfigToken,
266
+ useFactory: (opts) => resolveStalenessConfig(opts.staleness),
267
+ inject: [asyncToken],
268
+ },
269
+ {
270
+ provide: stalenessToken,
271
+ useFactory: (repo, cfg) => new staleness_monitor_1.StalenessMonitor(repo, cfg),
272
+ inject: [repositoryToken, stalenessConfigToken],
273
+ },
274
+ {
275
+ provide: recoveryOptionsToken,
276
+ useFactory: (opts) => resolveRecoveryOptions(opts.republishOnStartup, opts.startupBatchSize),
277
+ inject: [asyncToken],
278
+ },
279
+ {
280
+ provide: publisherToken,
281
+ useFactory: (publicationRegistry, listenerRegistry) => new data_source_outbox_publisher_1.DataSourceOutboxPublisher(ds, publicationRegistry, listenerRegistry),
282
+ inject: [publicationRegistryToken, listenerRegistryToken],
283
+ },
284
+ ];
285
+ const exportTokens = [...perDataSourceExports(ds)];
286
+ if (ds === DEFAULT_DATA_SOURCE) {
287
+ providers.push({ provide: recoveryToken, useExisting: startup_recovery_1.StartupRecoveryService }, ...buildDefaultDataSourceAliases(), failed_event_publications_1.FailedEventPublications, incomplete_event_publications_1.IncompleteEventPublications, completed_event_publications_1.CompletedEventPublications, startup_recovery_1.StartupRecoveryService);
288
+ exportTokens.push(...defaultDataSourceAliasTokens());
289
+ exportTokens.push(failed_event_publications_1.FailedEventPublications, incomplete_event_publications_1.IncompleteEventPublications, completed_event_publications_1.CompletedEventPublications, startup_recovery_1.StartupRecoveryService);
290
+ }
291
+ if (isFirstRegistration) {
292
+ providers.push(...buildFacadePublisherProvider(OutboxModule_1));
293
+ providers.push(buildProcessingBundleProvider(OutboxModule_1));
294
+ providers.push(outbox_listener_scanner_1.OutboxListenerScanner);
295
+ providers.push(...buildMultiDsRegistrarProviders());
296
+ exportTokens.push(outbox_event_publisher_1.OutboxEventPublisher);
297
+ exportTokens.push(exports.OUTBOX_PROCESSING_BUNDLE);
298
+ exportTokens.push(multi_ds_listener_registrar_1.MultiDsOutboxListenerRegistrar);
299
+ exportTokens.push(multi_ds_listener_registrar_1.OUTBOX_LISTENER_REGISTRAR_TOKEN);
300
+ }
301
+ return {
302
+ module: OutboxModule_1,
303
+ global: options.isGlobal ?? true,
304
+ imports: [core_1.DiscoveryModule, ...(options.imports ?? [])],
305
+ providers,
306
+ exports: exportTokens,
307
+ };
308
+ }
309
+ /**
310
+ * Register event classes that the outbox should know about — typed
311
+ * inputs to the per-dataSource `EventTypeRegistry` so the JSON
312
+ * serializer can revive stored payloads back into class instances,
313
+ * and so externalization mappings (`@Externalized`) can be picked
314
+ * up by the registry scan.
315
+ *
316
+ * @param eventTypes Event classes to register. Empty array is a
317
+ * no-op (matches `TypeOrmModule.forFeature([])`).
318
+ * @param options Optional per-call options. `dataSource` defaults
319
+ * to `'default'` — single-dataSource consumers omit it.
320
+ *
321
+ * @example Single-dataSource
322
+ * ```ts
323
+ * OutboxModule.forFeature([OrderPlacedEvent, OrderShippedEvent])
324
+ * ```
325
+ *
326
+ * @example Multi-dataSource
327
+ * ```ts
328
+ * OutboxModule.forFeature([BillingEvent], { dataSource: 'billing' })
329
+ * OutboxModule.forFeature([InventoryEvent], { dataSource: 'inventory' })
330
+ * ```
331
+ *
332
+ * Multiple `forFeature` calls accumulate into the per-dataSource
333
+ * registry. Duplicate registrations (same event class, same
334
+ * dataSource) throw at bootstrap with a clear message.
335
+ */
336
+ static forFeature(eventTypes, options = {}) {
337
+ const dataSource = options.dataSource ?? DEFAULT_DATA_SOURCE;
338
+ // Symbol() (not Symbol.for) — each forFeature call gets a unique
339
+ // token so multiple imports in the same or different modules
340
+ // don't collide. The factory runs eagerly (singleton scope) for
341
+ // its side effect: registering the listed event classes with the
342
+ // per-dataSource EventTypeRegistry.
343
+ const featureToken = Symbol(`OUTBOX_FEATURE_REGISTRATION[${dataSource}]`);
344
+ return {
345
+ module: OutboxModule_1,
346
+ providers: [
347
+ {
348
+ provide: featureToken,
349
+ useFactory: (registry) => {
350
+ for (const eventType of eventTypes) {
351
+ registry.register(eventType);
352
+ }
353
+ return true;
354
+ },
355
+ inject: [(0, token_utils_1.getEventTypeRegistryToken)(dataSource)],
356
+ },
357
+ ],
358
+ };
359
+ }
360
+ };
361
+ exports.OutboxModule = OutboxModule;
362
+ exports.OutboxModule = OutboxModule = OutboxModule_1 = __decorate([
363
+ (0, common_1.Module)({})
364
+ ], OutboxModule);
365
+ // ---------------------------------------------------------------------------
366
+ // Per-dataSource provider helpers
367
+ // ---------------------------------------------------------------------------
368
+ function perDsStalenessMonitorToken(ds) {
369
+ return `${ds}StalenessMonitor`;
370
+ }
371
+ function perDsStartupRecoveryToken(ds) {
372
+ return `${ds}StartupRecoveryService`;
373
+ }
374
+ function perDsProcessorOptionsToken(ds) {
375
+ return `${ds}ProcessorOptions`;
376
+ }
377
+ function perDsStalenessConfigToken(ds) {
378
+ return `${ds}StalenessConfig`;
379
+ }
380
+ function perDsRecoveryOptionsToken(ds) {
381
+ return `${ds}RecoveryOptions`;
382
+ }
383
+ function buildPerDataSourceProviders(ds, repository, serializer, processorOpts, stalenessCfg, recoveryOpts) {
384
+ const eventTypeRegistryToken = (0, token_utils_1.getEventTypeRegistryToken)(ds);
385
+ const repositoryToken = (0, token_utils_1.getEventPublicationRepositoryToken)(ds);
386
+ const serializerToken = (0, token_utils_1.getOutboxEventSerializerToken)(ds);
387
+ const listenerRegistryToken = (0, token_utils_1.getOutboxListenerRegistryToken)(ds);
388
+ const publicationRegistryToken = (0, token_utils_1.getEventPublicationRegistryToken)(ds);
389
+ const externalizationRegistryToken = (0, token_utils_1.getExternalizationRegistryToken)(ds);
390
+ const processorToken = (0, token_utils_1.getEventPublicationProcessorToken)(ds);
391
+ const publisherToken = (0, token_utils_1.getOutboxPublisherToken)(ds);
392
+ const stalenessToken = perDsStalenessMonitorToken(ds);
393
+ const recoveryToken = perDsStartupRecoveryToken(ds);
394
+ const processorOptionsToken = perDsProcessorOptionsToken(ds);
395
+ const stalenessConfigToken = perDsStalenessConfigToken(ds);
396
+ const recoveryOptionsToken = perDsRecoveryOptionsToken(ds);
397
+ return [
398
+ { provide: eventTypeRegistryToken, useFactory: () => new event_type_registry_1.EventTypeRegistry() },
399
+ repository
400
+ ? reBindProvider(repository, repositoryToken)
401
+ : { provide: repositoryToken, useClass: in_memory_repository_1.InMemoryEventPublicationRepository },
402
+ serializer
403
+ ? reBindProvider(serializer, serializerToken)
404
+ : {
405
+ provide: serializerToken,
406
+ useFactory: (registry) => new json_event_serializer_1.JsonEventSerializer(registry),
407
+ inject: [eventTypeRegistryToken],
408
+ },
409
+ {
410
+ provide: listenerRegistryToken,
411
+ useFactory: () => new listener_registry_1.OutboxListenerRegistry(),
412
+ },
413
+ {
414
+ provide: publicationRegistryToken,
415
+ useFactory: (repo, s) => new event_publication_registry_1.EventPublicationRegistry(repo, s),
416
+ inject: [repositoryToken, serializerToken],
417
+ },
418
+ {
419
+ provide: externalizationRegistryToken,
420
+ useFactory: (etr) => new externalization_registry_1.ExternalizationRegistry(etr),
421
+ inject: [eventTypeRegistryToken],
422
+ },
423
+ { provide: processorOptionsToken, useValue: processorOpts },
424
+ {
425
+ provide: processorToken,
426
+ useFactory: (registry, listeners, opts, externalizer, externalizationRegistry) => new event_publication_processor_1.EventPublicationProcessor(registry, listeners, opts, externalizer, externalizationRegistry),
427
+ inject: [
428
+ publicationRegistryToken,
429
+ listenerRegistryToken,
430
+ processorOptionsToken,
431
+ { token: event_externalizer_1.EVENT_EXTERNALIZER, optional: true },
432
+ externalizationRegistryToken,
433
+ ],
434
+ },
435
+ { provide: stalenessConfigToken, useValue: stalenessCfg },
436
+ {
437
+ provide: stalenessToken,
438
+ useFactory: (repo, cfg) => new staleness_monitor_1.StalenessMonitor(repo, cfg),
439
+ inject: [repositoryToken, stalenessConfigToken],
440
+ },
441
+ { provide: recoveryOptionsToken, useValue: recoveryOpts },
442
+ // StartupRecoveryService for non-default dataSources alias to the
443
+ // class-token instance registered by the default-DS forRoot. The
444
+ // class-token instance reads IncompleteEventPublications +
445
+ // OUTBOX_RECOVERY_OPTIONS — both bound to the default-DS
446
+ // repository. For multi-DS recovery to fire per-dataSource we'd
447
+ // need a per-DS StartupRecoveryService class; deferred to a later
448
+ // phase when multi-DS recovery is exercised. Today's behaviour:
449
+ // recovery runs on the default-DS only.
450
+ { provide: recoveryToken, useExisting: startup_recovery_1.StartupRecoveryService },
451
+ {
452
+ provide: publisherToken,
453
+ useFactory: (publicationRegistry, listenerRegistry) => new data_source_outbox_publisher_1.DataSourceOutboxPublisher(ds, publicationRegistry, listenerRegistry),
454
+ inject: [publicationRegistryToken, listenerRegistryToken],
455
+ },
456
+ ];
457
+ }
458
+ function perDataSourceExports(ds) {
459
+ return [
460
+ (0, token_utils_1.getEventTypeRegistryToken)(ds),
461
+ (0, token_utils_1.getEventPublicationRepositoryToken)(ds),
462
+ (0, token_utils_1.getOutboxEventSerializerToken)(ds),
463
+ (0, token_utils_1.getOutboxListenerRegistryToken)(ds),
464
+ (0, token_utils_1.getEventPublicationRegistryToken)(ds),
465
+ (0, token_utils_1.getExternalizationRegistryToken)(ds),
466
+ (0, token_utils_1.getEventPublicationProcessorToken)(ds),
467
+ (0, token_utils_1.getOutboxPublisherToken)(ds),
468
+ ];
469
+ }
470
+ /**
471
+ * Class-token / singleton-token aliases for the `'default'` dataSource.
472
+ * Registered only when the default DS itself is registered via a
473
+ * `forRoot`/`forRootAsync` call. Preserves the historical contract
474
+ * where `module.get(EventPublicationRegistry)` and
475
+ * `@Inject(EVENT_PUBLICATION_REPOSITORY)` resolve to the
476
+ * single-dataSource instance.
477
+ */
478
+ function buildDefaultDataSourceAliases() {
479
+ const ds = DEFAULT_DATA_SOURCE;
480
+ return [
481
+ { provide: event_type_registry_1.EVENT_TYPE_REGISTRY, useExisting: (0, token_utils_1.getEventTypeRegistryToken)(ds) },
482
+ { provide: event_type_registry_1.EventTypeRegistry, useExisting: (0, token_utils_1.getEventTypeRegistryToken)(ds) },
483
+ { provide: event_serializer_1.EVENT_SERIALIZER, useExisting: (0, token_utils_1.getOutboxEventSerializerToken)(ds) },
484
+ { provide: event_publication_repository_1.EVENT_PUBLICATION_REPOSITORY, useExisting: (0, token_utils_1.getEventPublicationRepositoryToken)(ds) },
485
+ { provide: listener_registry_1.OutboxListenerRegistry, useExisting: (0, token_utils_1.getOutboxListenerRegistryToken)(ds) },
486
+ { provide: event_publication_registry_1.EventPublicationRegistry, useExisting: (0, token_utils_1.getEventPublicationRegistryToken)(ds) },
487
+ { provide: externalization_registry_1.ExternalizationRegistry, useExisting: (0, token_utils_1.getExternalizationRegistryToken)(ds) },
488
+ { provide: event_publication_processor_1.EventPublicationProcessor, useExisting: (0, token_utils_1.getEventPublicationProcessorToken)(ds) },
489
+ { provide: staleness_monitor_1.StalenessMonitor, useExisting: perDsStalenessMonitorToken(ds) },
490
+ { provide: exports.OUTBOX_PROCESSOR_OPTIONS, useExisting: perDsProcessorOptionsToken(ds) },
491
+ { provide: exports.OUTBOX_STALENESS_CONFIG, useExisting: perDsStalenessConfigToken(ds) },
492
+ { provide: startup_recovery_1.OUTBOX_RECOVERY_OPTIONS, useExisting: perDsRecoveryOptionsToken(ds) },
493
+ ];
494
+ }
495
+ function defaultDataSourceAliasTokens() {
496
+ return [
497
+ event_type_registry_1.EVENT_TYPE_REGISTRY,
498
+ event_type_registry_1.EventTypeRegistry,
499
+ event_serializer_1.EVENT_SERIALIZER,
500
+ event_publication_repository_1.EVENT_PUBLICATION_REPOSITORY,
501
+ listener_registry_1.OutboxListenerRegistry,
502
+ event_publication_registry_1.EventPublicationRegistry,
503
+ externalization_registry_1.ExternalizationRegistry,
504
+ event_publication_processor_1.EventPublicationProcessor,
505
+ staleness_monitor_1.StalenessMonitor,
506
+ exports.OUTBOX_PROCESSOR_OPTIONS,
507
+ exports.OUTBOX_STALENESS_CONFIG,
508
+ startup_recovery_1.OUTBOX_RECOVERY_OPTIONS,
509
+ ];
510
+ }
511
+ /**
512
+ * Build the providers that register the smart facade publisher and
513
+ * the {@link OUTBOX_DATA_SOURCE_NAMES} value provider that carries a
514
+ * live reference to {@link OutboxModule.registrations}. The facade
515
+ * itself uses {@link OnModuleInit} to late-bind per-DS publishers /
516
+ * event-type registries via `ModuleRef` — by the time `OnModuleInit`
517
+ * fires, every per-DS provider across every `forRoot` has been
518
+ * instantiated.
519
+ */
520
+ function buildFacadePublisherProvider(moduleClass) {
521
+ return [
522
+ outbox_event_publisher_1.OutboxEventPublisher,
523
+ {
524
+ provide: outbox_event_publisher_1.OUTBOX_DATA_SOURCE_NAMES,
525
+ useValue: privateRegistrations(moduleClass),
526
+ },
527
+ ];
528
+ }
529
+ /**
530
+ * Build the providers wiring the {@link MultiDsOutboxListenerRegistrar}
531
+ * (Phase 14.3.1). Registered in the first-registration block so the
532
+ * cqrs package's `IntegrationEventsHandlerScanner` picks the smart
533
+ * registrar up via its `@Optional() @Inject(OUTBOX_LISTENER_REGISTRAR)`
534
+ * — without any consumer-side wiring. The structural-port token
535
+ * binding goes through {@link OUTBOX_LISTENER_REGISTRAR_TOKEN}
536
+ * (a `Symbol.for(...)` whose key matches cqrs's
537
+ * `OUTBOX_LISTENER_REGISTRAR`) so neither package imports from the
538
+ * other (Convention #8).
539
+ *
540
+ * Class-token registration (`MultiDsOutboxListenerRegistrar` itself)
541
+ * is preserved alongside the alias so tests and advanced consumers
542
+ * can resolve the registrar by class as well.
543
+ */
544
+ function buildMultiDsRegistrarProviders() {
545
+ return [
546
+ multi_ds_listener_registrar_1.MultiDsOutboxListenerRegistrar,
547
+ {
548
+ provide: multi_ds_listener_registrar_1.OUTBOX_LISTENER_REGISTRAR_TOKEN,
549
+ useExisting: multi_ds_listener_registrar_1.MultiDsOutboxListenerRegistrar,
550
+ },
551
+ ];
552
+ }
553
+ /**
554
+ * Build the {@link OUTBOX_PROCESSING_BUNDLE} provider. Same late-bind
555
+ * via `OnModuleInit` pattern: the bundle is materialised as an empty
556
+ * shape at injection time, then {@link OutboxProcessingModule}
557
+ * resolves per-DS processors / monitors / recovery services from
558
+ * `ModuleRef` in its lifecycle hook.
559
+ */
560
+ function buildProcessingBundleProvider(moduleClass) {
561
+ return {
562
+ provide: exports.OUTBOX_PROCESSING_BUNDLE,
563
+ useFactory: (moduleRef) => {
564
+ const dsNames = Array.from(privateRegistrations(moduleClass).keys());
565
+ // Resolve lazily by capturing dsNames + moduleRef in closure. The
566
+ // OutboxProcessingModule's lifecycle hooks call .start() / .stop()
567
+ // on each entry — by the time those run, every per-DS provider
568
+ // has been instantiated and resolvable via ModuleRef.
569
+ const get = (token) => moduleRef.get(token, { strict: false });
570
+ return {
571
+ get processors() {
572
+ return dsNames.map((ds) => get((0, token_utils_1.getEventPublicationProcessorToken)(ds)));
573
+ },
574
+ get monitors() {
575
+ return dsNames.map((ds) => get(perDsStalenessMonitorToken(ds)));
576
+ },
577
+ get recoveryServices() {
578
+ return dsNames.map((ds) => get(perDsStartupRecoveryToken(ds)));
579
+ },
580
+ };
581
+ },
582
+ inject: [core_1.ModuleRef],
583
+ };
584
+ }
585
+ /**
586
+ * Read the private static `registrations` Map from outside the class.
587
+ * The Map is `private` so external code can't mutate it, but our own
588
+ * factories living in this file need read access. By the time these
589
+ * factories run (lazily, at provider-resolution time), every
590
+ * synchronous `forRoot` body has populated the Map.
591
+ *
592
+ * @internal
593
+ */
594
+ function privateRegistrations(moduleClass) {
595
+ return moduleClass
596
+ .registrations;
597
+ }
598
+ // `TransactionManager` referenced for documentation completeness;
599
+ // no longer used directly in this file after Phase 14.3 (the per-DS
600
+ // publisher pushes hooks directly onto the active-transaction object,
601
+ // bypassing manager.registerBeforeCommit's single-tx assumption).
602
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
603
+ const _txManagerRef = core_2.TransactionManager;
604
+ //# sourceMappingURL=outbox.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outbox.module.js","sourceRoot":"","sources":["../../src/module/outbox.module.ts"],"names":[],"mappings":"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"}