@zdavison/matador 2.0.1
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/cli.ts +453 -0
- package/dist/checkpoint/context.d.ts +59 -0
- package/dist/checkpoint/context.d.ts.map +1 -0
- package/dist/checkpoint/context.js +140 -0
- package/dist/checkpoint/context.test.d.ts +2 -0
- package/dist/checkpoint/context.test.d.ts.map +1 -0
- package/dist/checkpoint/context.test.js +424 -0
- package/dist/checkpoint/index.d.ts +7 -0
- package/dist/checkpoint/index.d.ts.map +1 -0
- package/dist/checkpoint/index.js +6 -0
- package/dist/checkpoint/stores/memory.d.ts +29 -0
- package/dist/checkpoint/stores/memory.d.ts.map +1 -0
- package/dist/checkpoint/stores/memory.js +39 -0
- package/dist/checkpoint/stores/noop.d.ts +14 -0
- package/dist/checkpoint/stores/noop.d.ts.map +1 -0
- package/dist/checkpoint/stores/noop.js +18 -0
- package/dist/checkpoint/stores/stores.test.d.ts +2 -0
- package/dist/checkpoint/stores/stores.test.d.ts.map +1 -0
- package/dist/checkpoint/stores/stores.test.js +146 -0
- package/dist/checkpoint/types.d.ts +119 -0
- package/dist/checkpoint/types.d.ts.map +1 -0
- package/dist/checkpoint/types.js +1 -0
- package/dist/codec/codec.d.ts +29 -0
- package/dist/codec/codec.d.ts.map +1 -0
- package/dist/codec/codec.js +15 -0
- package/dist/codec/header-aware-codec.d.ts +36 -0
- package/dist/codec/header-aware-codec.d.ts.map +1 -0
- package/dist/codec/header-aware-codec.js +1 -0
- package/dist/codec/index.d.ts +6 -0
- package/dist/codec/index.d.ts.map +1 -0
- package/dist/codec/index.js +3 -0
- package/dist/codec/json-codec.d.ts +13 -0
- package/dist/codec/json-codec.d.ts.map +1 -0
- package/dist/codec/json-codec.js +64 -0
- package/dist/codec/rabbitmq-codec.d.ts +28 -0
- package/dist/codec/rabbitmq-codec.d.ts.map +1 -0
- package/dist/codec/rabbitmq-codec.js +242 -0
- package/dist/codec/rabbitmq-codec.test.d.ts +2 -0
- package/dist/codec/rabbitmq-codec.test.d.ts.map +1 -0
- package/dist/codec/rabbitmq-codec.test.js +433 -0
- package/dist/core/fanout.d.ts +59 -0
- package/dist/core/fanout.d.ts.map +1 -0
- package/dist/core/fanout.js +121 -0
- package/dist/core/fanout.test.d.ts +2 -0
- package/dist/core/fanout.test.d.ts.map +1 -0
- package/dist/core/fanout.test.js +1055 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +3 -0
- package/dist/core/matador.d.ts +133 -0
- package/dist/core/matador.d.ts.map +1 -0
- package/dist/core/matador.js +222 -0
- package/dist/core/matador.test.d.ts +2 -0
- package/dist/core/matador.test.d.ts.map +1 -0
- package/dist/core/matador.test.js +446 -0
- package/dist/core/shutdown.d.ts +78 -0
- package/dist/core/shutdown.d.ts.map +1 -0
- package/dist/core/shutdown.js +111 -0
- package/dist/core/shutdown.test.d.ts +2 -0
- package/dist/core/shutdown.test.d.ts.map +1 -0
- package/dist/core/shutdown.test.js +524 -0
- package/dist/errors/checkpoint-errors.d.ts +30 -0
- package/dist/errors/checkpoint-errors.d.ts.map +1 -0
- package/dist/errors/checkpoint-errors.js +49 -0
- package/dist/errors/has-description.d.ts +18 -0
- package/dist/errors/has-description.d.ts.map +1 -0
- package/dist/errors/has-description.js +9 -0
- package/dist/errors/index.d.ts +6 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +22 -0
- package/dist/errors/matador-errors.d.ts +183 -0
- package/dist/errors/matador-errors.d.ts.map +1 -0
- package/dist/errors/matador-errors.js +376 -0
- package/dist/errors/retry-errors.d.ts +67 -0
- package/dist/errors/retry-errors.d.ts.map +1 -0
- package/dist/errors/retry-errors.js +108 -0
- package/dist/hooks/index.d.ts +4 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/safe-hooks.d.ts +34 -0
- package/dist/hooks/safe-hooks.d.ts.map +1 -0
- package/dist/hooks/safe-hooks.js +135 -0
- package/dist/hooks/types.d.ts +189 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +9 -0
- package/dist/index.cjs +3156 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +23 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/pipeline/index.d.ts +3 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline/index.js +1 -0
- package/dist/pipeline/pipeline.d.ts +60 -0
- package/dist/pipeline/pipeline.d.ts.map +1 -0
- package/dist/pipeline/pipeline.js +261 -0
- package/dist/pipeline/pipeline.test.d.ts +2 -0
- package/dist/pipeline/pipeline.test.d.ts.map +1 -0
- package/dist/pipeline/pipeline.test.js +1065 -0
- package/dist/retry/index.d.ts +4 -0
- package/dist/retry/index.d.ts.map +1 -0
- package/dist/retry/index.js +1 -0
- package/dist/retry/policy.d.ts +43 -0
- package/dist/retry/policy.d.ts.map +1 -0
- package/dist/retry/policy.js +1 -0
- package/dist/retry/standard-policy.d.ts +44 -0
- package/dist/retry/standard-policy.d.ts.map +1 -0
- package/dist/retry/standard-policy.js +102 -0
- package/dist/retry/standard-policy.test.d.ts +2 -0
- package/dist/retry/standard-policy.test.d.ts.map +1 -0
- package/dist/retry/standard-policy.test.js +190 -0
- package/dist/schema/index.d.ts +4 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +2 -0
- package/dist/schema/registry.d.ts +63 -0
- package/dist/schema/registry.d.ts.map +1 -0
- package/dist/schema/registry.js +171 -0
- package/dist/schema/registry.test.d.ts +2 -0
- package/dist/schema/registry.test.d.ts.map +1 -0
- package/dist/schema/registry.test.js +278 -0
- package/dist/schema/types.d.ts +158 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +74 -0
- package/dist/schema/types.test.d.ts +2 -0
- package/dist/schema/types.test.d.ts.map +1 -0
- package/dist/schema/types.test.js +243 -0
- package/dist/topology/builder.d.ts +66 -0
- package/dist/topology/builder.d.ts.map +1 -0
- package/dist/topology/builder.js +156 -0
- package/dist/topology/builder.test.d.ts +2 -0
- package/dist/topology/builder.test.d.ts.map +1 -0
- package/dist/topology/builder.test.js +222 -0
- package/dist/topology/index.d.ts +5 -0
- package/dist/topology/index.d.ts.map +1 -0
- package/dist/topology/index.js +2 -0
- package/dist/topology/types.d.ts +76 -0
- package/dist/topology/types.d.ts.map +1 -0
- package/dist/topology/types.js +18 -0
- package/dist/transport/capabilities.d.ts +66 -0
- package/dist/transport/capabilities.d.ts.map +1 -0
- package/dist/transport/capabilities.js +18 -0
- package/dist/transport/connection-manager.d.ts +95 -0
- package/dist/transport/connection-manager.d.ts.map +1 -0
- package/dist/transport/connection-manager.js +144 -0
- package/dist/transport/index.d.ts +11 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +5 -0
- package/dist/transport/local/local-transport.d.ts +62 -0
- package/dist/transport/local/local-transport.d.ts.map +1 -0
- package/dist/transport/local/local-transport.js +241 -0
- package/dist/transport/local/local-transport.test.d.ts +2 -0
- package/dist/transport/local/local-transport.test.d.ts.map +1 -0
- package/dist/transport/local/local-transport.test.js +192 -0
- package/dist/transport/multi/multi-transport.d.ts +94 -0
- package/dist/transport/multi/multi-transport.d.ts.map +1 -0
- package/dist/transport/multi/multi-transport.js +184 -0
- package/dist/transport/multi/multi-transport.test.d.ts +2 -0
- package/dist/transport/multi/multi-transport.test.d.ts.map +1 -0
- package/dist/transport/multi/multi-transport.test.js +236 -0
- package/dist/transport/rabbitmq/rabbitmq-transport.d.ts +73 -0
- package/dist/transport/rabbitmq/rabbitmq-transport.d.ts.map +1 -0
- package/dist/transport/rabbitmq/rabbitmq-transport.js +518 -0
- package/dist/transport/transport.d.ts +152 -0
- package/dist/transport/transport.d.ts.map +1 -0
- package/dist/transport/transport.js +1 -0
- package/dist/types/common.d.ts +41 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +12 -0
- package/dist/types/envelope.d.ts +82 -0
- package/dist/types/envelope.d.ts.map +1 -0
- package/dist/types/envelope.js +36 -0
- package/dist/types/event.d.ts +96 -0
- package/dist/types/event.d.ts.map +1 -0
- package/dist/types/event.js +26 -0
- package/dist/types/event.test.d.ts +2 -0
- package/dist/types/event.test.d.ts.map +1 -0
- package/dist/types/event.test.js +130 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/types/subscriber.d.ts +207 -0
- package/dist/types/subscriber.d.ts.map +1 -0
- package/dist/types/subscriber.js +99 -0
- package/examples/config.ts +126 -0
- package/examples/event.ts +26 -0
- package/examples/order-event.json +19 -0
- package/package.json +66 -0
- package/src/checkpoint/context.test.ts +510 -0
- package/src/checkpoint/context.ts +213 -0
- package/src/checkpoint/index.ts +30 -0
- package/src/checkpoint/stores/memory.ts +47 -0
- package/src/checkpoint/stores/noop.ts +22 -0
- package/src/checkpoint/stores/stores.test.ts +177 -0
- package/src/checkpoint/types.ts +147 -0
- package/src/codec/codec.ts +42 -0
- package/src/codec/header-aware-codec.ts +41 -0
- package/src/codec/index.ts +11 -0
- package/src/codec/json-codec.ts +69 -0
- package/src/codec/rabbitmq-codec.test.ts +516 -0
- package/src/codec/rabbitmq-codec.ts +336 -0
- package/src/core/fanout.test.ts +1351 -0
- package/src/core/fanout.ts +184 -0
- package/src/core/index.ts +12 -0
- package/src/core/matador.test.ts +575 -0
- package/src/core/matador.ts +344 -0
- package/src/core/shutdown.test.ts +853 -0
- package/src/core/shutdown.ts +165 -0
- package/src/errors/checkpoint-errors.ts +62 -0
- package/src/errors/has-description.ts +25 -0
- package/src/errors/index.ts +57 -0
- package/src/errors/matador-errors.ts +477 -0
- package/src/errors/retry-errors.ts +134 -0
- package/src/hooks/index.ts +15 -0
- package/src/hooks/safe-hooks.ts +223 -0
- package/src/hooks/types.ts +248 -0
- package/src/index.ts +231 -0
- package/src/pipeline/index.ts +2 -0
- package/src/pipeline/pipeline.test.ts +1317 -0
- package/src/pipeline/pipeline.ts +371 -0
- package/src/retry/index.ts +4 -0
- package/src/retry/policy.ts +46 -0
- package/src/retry/standard-policy.test.ts +282 -0
- package/src/retry/standard-policy.ts +156 -0
- package/src/schema/index.ts +16 -0
- package/src/schema/registry.test.ts +339 -0
- package/src/schema/registry.ts +226 -0
- package/src/schema/types.test.ts +281 -0
- package/src/schema/types.ts +217 -0
- package/src/topology/builder.test.ts +275 -0
- package/src/topology/builder.ts +199 -0
- package/src/topology/index.ts +15 -0
- package/src/topology/types.ts +109 -0
- package/src/transport/capabilities.ts +88 -0
- package/src/transport/connection-manager.ts +218 -0
- package/src/transport/index.ts +42 -0
- package/src/transport/local/local-transport.test.ts +262 -0
- package/src/transport/local/local-transport.ts +327 -0
- package/src/transport/multi/multi-transport.test.ts +320 -0
- package/src/transport/multi/multi-transport.ts +294 -0
- package/src/transport/rabbitmq/rabbitmq-transport.ts +753 -0
- package/src/transport/transport.ts +200 -0
- package/src/types/common.ts +53 -0
- package/src/types/envelope.ts +152 -0
- package/src/types/event.test.ts +157 -0
- package/src/types/event.ts +118 -0
- package/src/types/index.ts +52 -0
- package/src/types/subscriber.ts +310 -0
- package/test/e2e/multi-transport.e2e.test.ts +236 -0
- package/test/e2e/rabbitmq-transport.e2e.test.ts +327 -0
- package/test/e2e/transport-compliance.e2e.test.ts +505 -0
- package/test/integration/matador.integration.test.ts +634 -0
- package/tsconfig.json +29 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/tsup.config.ts +13 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { type Logger, consoleLogger } from '../hooks/index.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Shutdown state.
|
|
5
|
+
*/
|
|
6
|
+
export type ShutdownState =
|
|
7
|
+
| 'running'
|
|
8
|
+
| 'stopping-receive'
|
|
9
|
+
| 'waiting-handlers'
|
|
10
|
+
| 'stopping-enqueue'
|
|
11
|
+
| 'disconnecting'
|
|
12
|
+
| 'stopped';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Configuration for shutdown manager.
|
|
16
|
+
*/
|
|
17
|
+
export interface ShutdownConfig {
|
|
18
|
+
/** Timeout for graceful shutdown in milliseconds */
|
|
19
|
+
readonly gracefulShutdownTimeout: number;
|
|
20
|
+
|
|
21
|
+
/** Polling interval when waiting for handlers to idle */
|
|
22
|
+
readonly idlePollingInterval: number;
|
|
23
|
+
|
|
24
|
+
/** Logger for shutdown events (defaults to console) */
|
|
25
|
+
readonly logger: Logger;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Default shutdown configuration.
|
|
30
|
+
*/
|
|
31
|
+
export const defaultShutdownConfig: ShutdownConfig = {
|
|
32
|
+
gracefulShutdownTimeout: 30000,
|
|
33
|
+
idlePollingInterval: 1000,
|
|
34
|
+
logger: consoleLogger,
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Handler state tracking.
|
|
39
|
+
*/
|
|
40
|
+
export interface HandlersState {
|
|
41
|
+
readonly eventsBeingProcessed: number;
|
|
42
|
+
readonly eventsBeingEnqueued: number;
|
|
43
|
+
readonly isIdle: boolean;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Manages graceful shutdown of Matador.
|
|
48
|
+
*
|
|
49
|
+
* Shutdown sequence:
|
|
50
|
+
* 1. Stop receiving new messages
|
|
51
|
+
* 2. Wait for in-flight processing to complete
|
|
52
|
+
* 3. Stop accepting new enqueue requests
|
|
53
|
+
* 4. Disconnect transport
|
|
54
|
+
*/
|
|
55
|
+
export class ShutdownManager {
|
|
56
|
+
private _state: ShutdownState = 'running';
|
|
57
|
+
private readonly config: ShutdownConfig;
|
|
58
|
+
private eventsBeingProcessed = 0;
|
|
59
|
+
private acceptingEnqueue = true;
|
|
60
|
+
|
|
61
|
+
constructor(
|
|
62
|
+
private readonly getEnqueueCount: () => number,
|
|
63
|
+
private readonly stopReceiving: () => Promise<void>,
|
|
64
|
+
private readonly disconnectTransport: () => Promise<void>,
|
|
65
|
+
config: Partial<ShutdownConfig> = {},
|
|
66
|
+
) {
|
|
67
|
+
this.config = { ...defaultShutdownConfig, ...config };
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Current shutdown state.
|
|
72
|
+
*/
|
|
73
|
+
get state(): ShutdownState {
|
|
74
|
+
return this._state;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Whether enqueue is currently allowed.
|
|
79
|
+
*/
|
|
80
|
+
get isEnqueueAllowed(): boolean {
|
|
81
|
+
return this.acceptingEnqueue;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Gets current handler state.
|
|
86
|
+
*/
|
|
87
|
+
getHandlersState(): HandlersState {
|
|
88
|
+
const eventsBeingEnqueued = this.getEnqueueCount();
|
|
89
|
+
return {
|
|
90
|
+
eventsBeingProcessed: this.eventsBeingProcessed,
|
|
91
|
+
eventsBeingEnqueued,
|
|
92
|
+
isIdle: this.eventsBeingProcessed === 0 && eventsBeingEnqueued === 0,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Increment processing counter.
|
|
98
|
+
*/
|
|
99
|
+
incrementProcessing(): void {
|
|
100
|
+
this.eventsBeingProcessed++;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Decrement processing counter.
|
|
105
|
+
*/
|
|
106
|
+
decrementProcessing(): void {
|
|
107
|
+
this.eventsBeingProcessed--;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Performs graceful shutdown.
|
|
112
|
+
*/
|
|
113
|
+
async shutdown(): Promise<void> {
|
|
114
|
+
if (this._state !== 'running') {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// 1. Stop receiving new messages
|
|
119
|
+
this._state = 'stopping-receive';
|
|
120
|
+
await this.stopReceiving();
|
|
121
|
+
|
|
122
|
+
// 2. Wait for handlers to idle
|
|
123
|
+
this._state = 'waiting-handlers';
|
|
124
|
+
await this.waitForIdle();
|
|
125
|
+
|
|
126
|
+
// 3. Stop accepting new enqueue requests
|
|
127
|
+
this._state = 'stopping-enqueue';
|
|
128
|
+
this.acceptingEnqueue = false;
|
|
129
|
+
|
|
130
|
+
// 4. Disconnect transport
|
|
131
|
+
this._state = 'disconnecting';
|
|
132
|
+
await this.disconnectTransport();
|
|
133
|
+
|
|
134
|
+
this._state = 'stopped';
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Forcefully stops without waiting.
|
|
139
|
+
*/
|
|
140
|
+
async forceStop(): Promise<void> {
|
|
141
|
+
this.acceptingEnqueue = false;
|
|
142
|
+
await this.stopReceiving();
|
|
143
|
+
await this.disconnectTransport();
|
|
144
|
+
this._state = 'stopped';
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
private async waitForIdle(): Promise<void> {
|
|
148
|
+
const deadline = Date.now() + this.config.gracefulShutdownTimeout;
|
|
149
|
+
|
|
150
|
+
while (!this.getHandlersState().isIdle) {
|
|
151
|
+
if (Date.now() > deadline) {
|
|
152
|
+
this.config.logger.warn(
|
|
153
|
+
`[Matador] ⚠️ Shutdown timeout reached with ${this.eventsBeingProcessed} events still processing`,
|
|
154
|
+
);
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
await this.sleep(this.config.idlePollingInterval);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
private sleep(ms: number): Promise<void> {
|
|
163
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { MatadorError } from './matador-errors.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Thrown when a duplicate io() key is used within a single subscriber execution.
|
|
5
|
+
* Each io() call must have a unique key to prevent cache collisions.
|
|
6
|
+
*/
|
|
7
|
+
export class DuplicateIoKeyError extends MatadorError {
|
|
8
|
+
readonly description =
|
|
9
|
+
'The same io() key was used multiple times in a single subscriber execution. ' +
|
|
10
|
+
'Each io() call must have a unique key to ensure correct checkpoint behavior. ' +
|
|
11
|
+
'ACTION: Ensure all io() keys are unique within the subscriber. ' +
|
|
12
|
+
'For dynamic operations (e.g., loops), include a unique identifier in the key ' +
|
|
13
|
+
'(e.g., `process-item-${item.id}`).';
|
|
14
|
+
|
|
15
|
+
constructor(
|
|
16
|
+
public readonly key: string,
|
|
17
|
+
public readonly subscriberName: string,
|
|
18
|
+
) {
|
|
19
|
+
super(
|
|
20
|
+
`Duplicate io key "${key}" in subscriber "${subscriberName}". ` +
|
|
21
|
+
`Each io() call must have a unique key.`,
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Thrown when checkpoint store operations fail.
|
|
28
|
+
*/
|
|
29
|
+
export class CheckpointStoreError extends MatadorError {
|
|
30
|
+
readonly description =
|
|
31
|
+
'A checkpoint store operation failed. This may cause issues with resumable subscribers. ' +
|
|
32
|
+
'ACTION: Check the underlying storage system (Redis, etc.) for connectivity issues. ' +
|
|
33
|
+
'The subscriber may re-execute operations that were already completed.';
|
|
34
|
+
|
|
35
|
+
constructor(
|
|
36
|
+
public readonly operation: 'get' | 'set' | 'delete',
|
|
37
|
+
public readonly envelopeId: string,
|
|
38
|
+
public readonly cause: Error,
|
|
39
|
+
) {
|
|
40
|
+
super(
|
|
41
|
+
`Checkpoint store ${operation} failed for envelope "${envelopeId}": ${cause.message}`,
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Type guard for DuplicateIoKeyError.
|
|
48
|
+
*/
|
|
49
|
+
export function isDuplicateIoKeyError(
|
|
50
|
+
error: unknown,
|
|
51
|
+
): error is DuplicateIoKeyError {
|
|
52
|
+
return error instanceof DuplicateIoKeyError;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Type guard for CheckpointStoreError.
|
|
57
|
+
*/
|
|
58
|
+
export function isCheckpointStoreError(
|
|
59
|
+
error: unknown,
|
|
60
|
+
): error is CheckpointStoreError {
|
|
61
|
+
return error instanceof CheckpointStoreError;
|
|
62
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interface for errors that provide a human-readable description.
|
|
3
|
+
* The description explains what the error means and what actions
|
|
4
|
+
* users should take when encountering it in logs/observability.
|
|
5
|
+
*/
|
|
6
|
+
export interface HasDescription {
|
|
7
|
+
/**
|
|
8
|
+
* Human-readable description of the error type.
|
|
9
|
+
* Intended for logging and observability to help users understand
|
|
10
|
+
* the error and determine appropriate remediation steps.
|
|
11
|
+
*/
|
|
12
|
+
readonly description: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Type guard to check if an error implements HasDescription.
|
|
17
|
+
*/
|
|
18
|
+
export function hasDescription(error: unknown): error is HasDescription {
|
|
19
|
+
return (
|
|
20
|
+
typeof error === 'object' &&
|
|
21
|
+
error !== null &&
|
|
22
|
+
'description' in error &&
|
|
23
|
+
typeof (error as HasDescription).description === 'string'
|
|
24
|
+
);
|
|
25
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export type { HasDescription } from './has-description.js';
|
|
2
|
+
export { hasDescription } from './has-description.js';
|
|
3
|
+
|
|
4
|
+
export {
|
|
5
|
+
DontRetry,
|
|
6
|
+
DoRetry,
|
|
7
|
+
EventAssertionError,
|
|
8
|
+
isAssertionError,
|
|
9
|
+
isDontRetry,
|
|
10
|
+
isDoRetry,
|
|
11
|
+
RetryControlError,
|
|
12
|
+
} from './retry-errors.js';
|
|
13
|
+
|
|
14
|
+
export {
|
|
15
|
+
// Base class
|
|
16
|
+
MatadorError,
|
|
17
|
+
isMatadorError,
|
|
18
|
+
// Lifecycle errors
|
|
19
|
+
NotStartedError,
|
|
20
|
+
isNotStartedError,
|
|
21
|
+
ShutdownInProgressError,
|
|
22
|
+
// Transport errors
|
|
23
|
+
TransportNotConnectedError,
|
|
24
|
+
isTransportNotConnectedError,
|
|
25
|
+
TransportClosedError,
|
|
26
|
+
TransportSendError,
|
|
27
|
+
AllTransportsFailedError,
|
|
28
|
+
DelayedMessagesNotSupportedError,
|
|
29
|
+
// Schema & configuration errors
|
|
30
|
+
EventNotRegisteredError,
|
|
31
|
+
isEventNotRegisteredError,
|
|
32
|
+
SubscriberNotRegisteredError,
|
|
33
|
+
isSubscriberNotRegisteredError,
|
|
34
|
+
NoSubscribersExistError,
|
|
35
|
+
InvalidSchemaError,
|
|
36
|
+
SubscriberIsStubError,
|
|
37
|
+
LocalTransportCannotProcessStubError,
|
|
38
|
+
// Queue errors
|
|
39
|
+
QueueNotFoundError,
|
|
40
|
+
// Event validation errors
|
|
41
|
+
InvalidEventError,
|
|
42
|
+
// Message processing errors
|
|
43
|
+
MessageMaybePoisonedError,
|
|
44
|
+
isMessageMaybePoisonedError,
|
|
45
|
+
IdempotentMessageCannotRetryError,
|
|
46
|
+
isIdempotentMessageCannotRetryError,
|
|
47
|
+
// Timeout errors
|
|
48
|
+
TimeoutError,
|
|
49
|
+
} from './matador-errors.js';
|
|
50
|
+
|
|
51
|
+
export {
|
|
52
|
+
// Checkpoint errors
|
|
53
|
+
CheckpointStoreError,
|
|
54
|
+
DuplicateIoKeyError,
|
|
55
|
+
isCheckpointStoreError,
|
|
56
|
+
isDuplicateIoKeyError,
|
|
57
|
+
} from './checkpoint-errors.js';
|