@prodforcode/event-forge-core 1.3.0 → 1.5.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.
@@ -1,3 +1,10 @@
1
+ export interface InboxRecoveryConfig {
2
+ enabled?: boolean;
3
+ intervalMs?: number;
4
+ processingTimeoutMs?: number;
5
+ maxRecoveryAttempts?: number;
6
+ action?: 'retry' | 'fail';
7
+ }
1
8
  export interface InboxConfig {
2
9
  cleanupInterval?: number;
3
10
  retentionDays?: number;
@@ -5,6 +12,10 @@ export interface InboxConfig {
5
12
  maxRetries?: number;
6
13
  backoffBaseSeconds?: number;
7
14
  maxBackoffSeconds?: number;
15
+ recovery?: InboxRecoveryConfig;
8
16
  }
9
- export declare const DEFAULT_INBOX_CONFIG: Required<InboxConfig>;
17
+ export declare const DEFAULT_RECOVERY_CONFIG: Required<InboxRecoveryConfig>;
18
+ export declare const DEFAULT_INBOX_CONFIG: Required<Omit<InboxConfig, 'recovery'>> & {
19
+ recovery: Required<InboxRecoveryConfig>;
20
+ };
10
21
  //# sourceMappingURL=inbox.config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"inbox.config.d.ts","sourceRoot":"","sources":["../../src/config/inbox.config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAE1B,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,WAAW,CAAC,EAAE,OAAO,CAAC;IAGtB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAG5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAKD,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,WAAW,CAOtD,CAAC"}
1
+ {"version":3,"file":"inbox.config.d.ts","sourceRoot":"","sources":["../../src/config/inbox.config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAElC,OAAO,CAAC,EAAE,OAAO,CAAC;IAGlB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAG7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAG7B,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC3B;AAKD,MAAM,WAAW,WAAW;IAE1B,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,WAAW,CAAC,EAAE,OAAO,CAAC;IAGtB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAG5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAG3B,QAAQ,CAAC,EAAE,mBAAmB,CAAC;CAChC;AAKD,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,mBAAmB,CAMjE,CAAC;AAKF,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,GAAG;IAAE,QAAQ,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAA;CAQrH,CAAC"}
@@ -1,6 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DEFAULT_INBOX_CONFIG = void 0;
3
+ exports.DEFAULT_INBOX_CONFIG = exports.DEFAULT_RECOVERY_CONFIG = void 0;
4
+ exports.DEFAULT_RECOVERY_CONFIG = {
5
+ enabled: true,
6
+ intervalMs: 60_000,
7
+ processingTimeoutMs: 300_000,
8
+ maxRecoveryAttempts: 3,
9
+ action: 'retry',
10
+ };
4
11
  exports.DEFAULT_INBOX_CONFIG = {
5
12
  cleanupInterval: 86400000,
6
13
  retentionDays: 7,
@@ -8,5 +15,6 @@ exports.DEFAULT_INBOX_CONFIG = {
8
15
  maxRetries: 3,
9
16
  backoffBaseSeconds: 5,
10
17
  maxBackoffSeconds: 3600,
18
+ recovery: exports.DEFAULT_RECOVERY_CONFIG,
11
19
  };
12
20
  //# sourceMappingURL=inbox.config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"inbox.config.js","sourceRoot":"","sources":["../../src/config/inbox.config.ts"],"names":[],"mappings":";;;AA0Ba,QAAA,oBAAoB,GAA0B;IACzD,eAAe,EAAE,QAAQ;IACzB,aAAa,EAAE,CAAC;IAChB,WAAW,EAAE,KAAK;IAClB,UAAU,EAAE,CAAC;IACb,kBAAkB,EAAE,CAAC;IACrB,iBAAiB,EAAE,IAAI;CACxB,CAAC"}
1
+ {"version":3,"file":"inbox.config.js","sourceRoot":"","sources":["../../src/config/inbox.config.ts"],"names":[],"mappings":";;;AAiDa,QAAA,uBAAuB,GAAkC;IACpE,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,MAAM;IAClB,mBAAmB,EAAE,OAAO;IAC5B,mBAAmB,EAAE,CAAC;IACtB,MAAM,EAAE,OAAO;CAChB,CAAC;AAKW,QAAA,oBAAoB,GAA0F;IACzH,eAAe,EAAE,QAAQ;IACzB,aAAa,EAAE,CAAC;IAChB,WAAW,EAAE,KAAK;IAClB,UAAU,EAAE,CAAC;IACb,kBAAkB,EAAE,CAAC;IACrB,iBAAiB,EAAE,IAAI;IACvB,QAAQ,EAAE,+BAAuB;CAClC,CAAC"}
@@ -12,6 +12,10 @@ export interface InboxMessage {
12
12
  maxRetries: number;
13
13
  scheduledAt?: Date;
14
14
  createdAt: Date;
15
+ updatedAt?: Date;
16
+ recoveryAttempts?: number;
17
+ lastRecoveredAt?: Date;
18
+ recoveryReason?: string;
15
19
  }
16
20
  export declare enum InboxMessageStatus {
17
21
  RECEIVED = "received",
@@ -1 +1 @@
1
- {"version":3,"file":"inbox-message.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/inbox-message.interface.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAE3B,EAAE,EAAE,MAAM,CAAC;IAGX,SAAS,EAAE,MAAM,CAAC;IAGlB,MAAM,EAAE,MAAM,CAAC;IAGf,SAAS,EAAE,MAAM,CAAC;IAGlB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAGjC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAGnC,MAAM,EAAE,kBAAkB,CAAC;IAG3B,WAAW,CAAC,EAAE,IAAI,CAAC;IAGnB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,UAAU,EAAE,MAAM,CAAC;IAGnB,UAAU,EAAE,MAAM,CAAC;IAGnB,WAAW,CAAC,EAAE,IAAI,CAAC;IAGnB,SAAS,EAAE,IAAI,CAAC;CACjB;AAKD,oBAAY,kBAAkB;IAC5B,QAAQ,aAAa;IACrB,UAAU,eAAe;IACzB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,kBAAkB,uBAAuB;CAC1C"}
1
+ {"version":3,"file":"inbox-message.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/inbox-message.interface.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAE3B,EAAE,EAAE,MAAM,CAAC;IAGX,SAAS,EAAE,MAAM,CAAC;IAGlB,MAAM,EAAE,MAAM,CAAC;IAGf,SAAS,EAAE,MAAM,CAAC;IAGlB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAGjC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAGnC,MAAM,EAAE,kBAAkB,CAAC;IAG3B,WAAW,CAAC,EAAE,IAAI,CAAC;IAGnB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,UAAU,EAAE,MAAM,CAAC;IAGnB,UAAU,EAAE,MAAM,CAAC;IAGnB,WAAW,CAAC,EAAE,IAAI,CAAC;IAGnB,SAAS,EAAE,IAAI,CAAC;IAGhB,SAAS,CAAC,EAAE,IAAI,CAAC;IAGjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAG1B,eAAe,CAAC,EAAE,IAAI,CAAC;IAGvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAKD,oBAAY,kBAAkB;IAC5B,QAAQ,aAAa;IACrB,UAAU,eAAe;IACzB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,kBAAkB,uBAAuB;CAC1C"}
@@ -1 +1 @@
1
- {"version":3,"file":"inbox-message.interface.js","sourceRoot":"","sources":["../../src/interfaces/inbox-message.interface.ts"],"names":[],"mappings":";;;AAgDA,IAAY,kBAMX;AAND,WAAY,kBAAkB;IAC5B,2CAAqB,CAAA;IACrB,+CAAyB,CAAA;IACzB,6CAAuB,CAAA;IACvB,uCAAiB,CAAA;IACjB,+DAAyC,CAAA;AAC3C,CAAC,EANW,kBAAkB,kCAAlB,kBAAkB,QAM7B"}
1
+ {"version":3,"file":"inbox-message.interface.js","sourceRoot":"","sources":["../../src/interfaces/inbox-message.interface.ts"],"names":[],"mappings":";;;AA4DA,IAAY,kBAMX;AAND,WAAY,kBAAkB;IAC5B,2CAAqB,CAAA;IACrB,+CAAyB,CAAA;IACzB,6CAAuB,CAAA;IACvB,uCAAiB,CAAA;IACjB,+DAAyC,CAAA;AAC3C,CAAC,EANW,kBAAkB,kCAAlB,kBAAkB,QAM7B"}
@@ -7,9 +7,12 @@ export interface RecordInboxMessageResult {
7
7
  export interface IInboxRepository {
8
8
  record(dto: CreateInboxMessageDto): Promise<RecordInboxMessageResult>;
9
9
  exists(messageId: string, source: string): Promise<boolean>;
10
- markProcessing(id: string): Promise<void>;
10
+ markProcessing(id: string): Promise<boolean>;
11
11
  markProcessed(id: string): Promise<void>;
12
12
  markFailed(id: string, error: string, permanent?: boolean, scheduledAt?: Date): Promise<void>;
13
13
  deleteOlderThan(date: Date): Promise<number>;
14
+ findStuckProcessing?(cutoffDate: Date, limit: number): Promise<InboxMessage[]>;
15
+ resetForRetry?(id: string, reason: string): Promise<boolean>;
16
+ markPermanentlyFailedRecovery?(id: string, reason: string): Promise<void>;
14
17
  }
15
18
  //# sourceMappingURL=inbox-repository.interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"inbox-repository.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/inbox-repository.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAKzD,MAAM,WAAW,wBAAwB;IAEvC,OAAO,EAAE,YAAY,CAAC;IAGtB,WAAW,EAAE,OAAO,CAAC;CACtB;AAMD,MAAM,WAAW,gBAAgB;IAM/B,MAAM,CAAC,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAQtE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAM5D,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAM1C,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IASzC,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAO9F,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC9C"}
1
+ {"version":3,"file":"inbox-repository.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/inbox-repository.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAKzD,MAAM,WAAW,wBAAwB;IAEvC,OAAO,EAAE,YAAY,CAAC;IAGtB,WAAW,EAAE,OAAO,CAAC;CACtB;AAMD,MAAM,WAAW,gBAAgB;IAM/B,MAAM,CAAC,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAQtE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAS5D,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAM7C,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IASzC,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAO9F,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAQ7C,mBAAmB,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAU/E,aAAa,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAO7D,6BAA6B,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3E"}
@@ -0,0 +1,26 @@
1
+ import { EventEmitter } from 'events';
2
+ import { InboxConfig } from '../config/inbox.config';
3
+ import { IInboxRepository } from '../interfaces/inbox-repository.interface';
4
+ import { IMessagePublisher } from '../interfaces/message-publisher.interface';
5
+ export interface RecoverySweepResult {
6
+ recovered: number;
7
+ permanentlyFailed: number;
8
+ total: number;
9
+ durationMs: number;
10
+ }
11
+ export declare class InboxRecoveryService extends EventEmitter {
12
+ private readonly repository;
13
+ private readonly publisher;
14
+ private readonly config;
15
+ private sweepTimer?;
16
+ private sweepInProgress;
17
+ private currentSweepPromise?;
18
+ constructor(repository: IInboxRepository, publisher: IMessagePublisher | null, config?: InboxConfig);
19
+ start(): void;
20
+ stop(): Promise<void>;
21
+ sweep(): Promise<RecoverySweepResult>;
22
+ private handleRetry;
23
+ private handlePermanentFailure;
24
+ private runSweep;
25
+ }
26
+ //# sourceMappingURL=inbox-recovery.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbox-recovery.service.d.ts","sourceRoot":"","sources":["../../src/services/inbox-recovery.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAA2B,WAAW,EAAuB,MAAM,wBAAwB,CAAC;AAEnG,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAkB,MAAM,2CAA2C,CAAC;AAQ9F,MAAM,WAAW,mBAAmB;IAElC,SAAS,EAAE,MAAM,CAAC;IAGlB,iBAAiB,EAAE,MAAM,CAAC;IAG1B,KAAK,EAAE,MAAM,CAAC;IAGd,UAAU,EAAE,MAAM,CAAC;CACpB;AAaD,qBAAa,oBAAqB,SAAQ,YAAY;IAOlD,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAP5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,UAAU,CAAC,CAAiC;IACpD,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,mBAAmB,CAAC,CAA+B;gBAGxC,UAAU,EAAE,gBAAgB,EAC5B,SAAS,EAAE,iBAAiB,GAAG,IAAI,EACpD,MAAM,CAAC,EAAE,WAAW;IAStB,KAAK,IAAI,IAAI;IAaP,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAcrB,KAAK,IAAI,OAAO,CAAC,mBAAmB,CAAC;YAyD7B,WAAW;YA4EX,sBAAsB;YAyBtB,QAAQ;CAmBvB"}
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InboxRecoveryService = void 0;
4
+ const events_1 = require("events");
5
+ const inbox_config_1 = require("../config/inbox.config");
6
+ const outbox_message_interface_1 = require("../interfaces/outbox-message.interface");
7
+ const inbox_service_1 = require("./inbox.service");
8
+ class InboxRecoveryService extends events_1.EventEmitter {
9
+ repository;
10
+ publisher;
11
+ config;
12
+ sweepTimer;
13
+ sweepInProgress = false;
14
+ currentSweepPromise;
15
+ constructor(repository, publisher, config) {
16
+ super();
17
+ this.repository = repository;
18
+ this.publisher = publisher;
19
+ this.config = { ...inbox_config_1.DEFAULT_RECOVERY_CONFIG, ...config?.recovery };
20
+ }
21
+ start() {
22
+ if (!this.config.enabled || this.sweepTimer) {
23
+ return;
24
+ }
25
+ this.sweepTimer = setInterval(() => {
26
+ void this.runSweep();
27
+ }, this.config.intervalMs);
28
+ }
29
+ async stop() {
30
+ if (this.sweepTimer) {
31
+ clearInterval(this.sweepTimer);
32
+ this.sweepTimer = undefined;
33
+ }
34
+ if (this.sweepInProgress && this.currentSweepPromise) {
35
+ await this.currentSweepPromise;
36
+ }
37
+ }
38
+ async sweep() {
39
+ const startTime = Date.now();
40
+ const cutoffDate = new Date(Date.now() - this.config.processingTimeoutMs);
41
+ if (!this.repository.findStuckProcessing) {
42
+ return { recovered: 0, permanentlyFailed: 0, total: 0, durationMs: Date.now() - startTime };
43
+ }
44
+ const stuckMessages = await this.repository.findStuckProcessing(cutoffDate, 100);
45
+ let recovered = 0;
46
+ let permanentlyFailed = 0;
47
+ for (const message of stuckMessages) {
48
+ try {
49
+ const recoveryAttempts = message.recoveryAttempts ?? 0;
50
+ const shouldFail = this.config.action === 'fail'
51
+ || recoveryAttempts >= this.config.maxRecoveryAttempts;
52
+ if (shouldFail) {
53
+ await this.handlePermanentFailure(message, recoveryAttempts);
54
+ permanentlyFailed++;
55
+ }
56
+ else {
57
+ const didRecover = await this.handleRetry(message);
58
+ if (didRecover) {
59
+ recovered++;
60
+ }
61
+ else {
62
+ permanentlyFailed++;
63
+ }
64
+ }
65
+ }
66
+ catch (error) {
67
+ console.error(`[InboxRecovery] Error recovering message ${message.messageId}: ${error instanceof Error ? error.message : String(error)}`);
68
+ }
69
+ }
70
+ const result = {
71
+ recovered,
72
+ permanentlyFailed,
73
+ total: stuckMessages.length,
74
+ durationMs: Date.now() - startTime,
75
+ };
76
+ if (stuckMessages.length > 0) {
77
+ this.emit('recovery:sweep:completed', result);
78
+ }
79
+ return result;
80
+ }
81
+ async handleRetry(message) {
82
+ const reason = `Processing timeout exceeded: message stuck since ${message.updatedAt?.toISOString() ?? 'unknown'}`;
83
+ if (!this.repository.resetForRetry) {
84
+ return false;
85
+ }
86
+ const didReset = await this.repository.resetForRetry(message.id, reason);
87
+ if (!didReset) {
88
+ return false;
89
+ }
90
+ let publishSucceeded = false;
91
+ if (this.publisher) {
92
+ try {
93
+ const publishOptions = {
94
+ routingKey: message.eventType,
95
+ headers: {
96
+ 'x-recovery': 'true',
97
+ 'x-recovery-reason': reason,
98
+ 'x-original-source': message.source,
99
+ },
100
+ };
101
+ await this.publisher.publish({
102
+ id: message.messageId,
103
+ aggregateType: message.source,
104
+ aggregateId: message.messageId,
105
+ eventType: message.eventType,
106
+ payload: message.payload,
107
+ metadata: {
108
+ ...message.metadata,
109
+ routingKey: message.eventType,
110
+ },
111
+ status: outbox_message_interface_1.OutboxMessageStatus.PENDING,
112
+ retryCount: 0,
113
+ maxRetries: 0,
114
+ createdAt: message.createdAt,
115
+ updatedAt: new Date(),
116
+ }, publishOptions);
117
+ publishSucceeded = true;
118
+ }
119
+ catch (publishError) {
120
+ console.error(`[InboxRecovery] Failed to re-publish message ${message.messageId}: ${publishError instanceof Error ? publishError.message : String(publishError)}. Message reset to failed in DB but not re-published.`);
121
+ }
122
+ }
123
+ else {
124
+ console.warn(`[InboxRecovery] No publisher available for re-publish. Message ${message.messageId} reset to failed but awaits manual re-delivery.`);
125
+ }
126
+ this.emit(inbox_service_1.InboxEvents.MESSAGE_RECOVERED, {
127
+ messageId: message.messageId,
128
+ id: message.id,
129
+ source: message.source,
130
+ eventType: message.eventType,
131
+ reason,
132
+ action: publishSucceeded ? 'reset_and_republished' : 'reset_only',
133
+ recoveryAttempts: (message.recoveryAttempts ?? 0) + 1,
134
+ });
135
+ return true;
136
+ }
137
+ async handlePermanentFailure(message, recoveryAttempts) {
138
+ const reason = this.config.action === 'fail'
139
+ ? 'Recovery action configured as fail'
140
+ : `Exceeded max recovery attempts (${recoveryAttempts}/${this.config.maxRecoveryAttempts})`;
141
+ if (this.repository.markPermanentlyFailedRecovery) {
142
+ await this.repository.markPermanentlyFailedRecovery(message.id, reason);
143
+ }
144
+ else {
145
+ await this.repository.markFailed(message.id, reason, true);
146
+ }
147
+ this.emit(inbox_service_1.InboxEvents.MESSAGE_RECOVERED, {
148
+ messageId: message.messageId,
149
+ id: message.id,
150
+ source: message.source,
151
+ eventType: message.eventType,
152
+ reason,
153
+ action: 'permanently_failed',
154
+ recoveryAttempts: recoveryAttempts + 1,
155
+ });
156
+ }
157
+ async runSweep() {
158
+ if (this.sweepInProgress) {
159
+ return;
160
+ }
161
+ this.sweepInProgress = true;
162
+ this.currentSweepPromise = this.sweep();
163
+ try {
164
+ await this.currentSweepPromise;
165
+ }
166
+ catch (error) {
167
+ console.error(`[InboxRecovery] Sweep failed: ${error instanceof Error ? error.message : String(error)}`);
168
+ }
169
+ finally {
170
+ this.sweepInProgress = false;
171
+ this.currentSweepPromise = undefined;
172
+ }
173
+ }
174
+ }
175
+ exports.InboxRecoveryService = InboxRecoveryService;
176
+ //# sourceMappingURL=inbox-recovery.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbox-recovery.service.js","sourceRoot":"","sources":["../../src/services/inbox-recovery.service.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,8 @@ export declare enum InboxEvents {
8
8
  MESSAGE_RECEIVED = "inbox:message:received",
9
9
  MESSAGE_DUPLICATE = "inbox:message:duplicate",
10
10
  MESSAGE_PROCESSED = "inbox:message:processed",
11
- MESSAGE_FAILED = "inbox:message:failed"
11
+ MESSAGE_FAILED = "inbox:message:failed",
12
+ MESSAGE_RECOVERED = "inbox:message:recovered"
12
13
  }
13
14
  export declare class InboxService extends EventEmitter {
14
15
  private readonly repository;
@@ -1 +1 @@
1
- {"version":3,"file":"inbox.service.d.ts","sourceRoot":"","sources":["../../src/services/inbox.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAwB,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAK5E,MAAM,MAAM,cAAc,GAAG,CAC3B,OAAO,EAAE,YAAY,KAClB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAK1B,oBAAY,WAAW;IACrB,gBAAgB,2BAA2B;IAC3C,iBAAiB,4BAA4B;IAC7C,iBAAiB,4BAA4B;IAC7C,cAAc,yBAAyB;CACxC;AAOD,qBAAa,YAAa,SAAQ,YAAY;IAM1C,OAAO,CAAC,QAAQ,CAAC,UAAU;IAL7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuC;IAChE,OAAO,CAAC,YAAY,CAAC,CAAiB;gBAGnB,UAAU,EAAE,gBAAgB,EAC7C,MAAM,CAAC,EAAE,WAAW;IAStB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IASjE,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAqB7D,cAAc,CAAC,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBzD,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;YAuC5C,qBAAqB;IAmCnC,OAAO,CAAC,gBAAgB;IAqBxB,YAAY,IAAI,IAAI;IAgBpB,WAAW,IAAI,IAAI;YAUL,OAAO;CAYtB"}
1
+ {"version":3,"file":"inbox.service.d.ts","sourceRoot":"","sources":["../../src/services/inbox.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAwB,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAK5E,MAAM,MAAM,cAAc,GAAG,CAC3B,OAAO,EAAE,YAAY,KAClB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAK1B,oBAAY,WAAW;IACrB,gBAAgB,2BAA2B;IAC3C,iBAAiB,4BAA4B;IAC7C,iBAAiB,4BAA4B;IAC7C,cAAc,yBAAyB;IACvC,iBAAiB,4BAA4B;CAC9C;AAOD,qBAAa,YAAa,SAAQ,YAAY;IAM1C,OAAO,CAAC,QAAQ,CAAC,UAAU;IAL7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuC;IAChE,OAAO,CAAC,YAAY,CAAC,CAAiB;gBAGnB,UAAU,EAAE,gBAAgB,EAC7C,MAAM,CAAC,EAAE,WAAW;IAStB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IASjE,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAqB7D,cAAc,CAAC,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBzD,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;YA2C5C,qBAAqB;IAmCnC,OAAO,CAAC,gBAAgB;IAqBxB,YAAY,IAAI,IAAI;IAgBpB,WAAW,IAAI,IAAI;YAUL,OAAO;CAYtB"}
@@ -11,6 +11,7 @@ var InboxEvents;
11
11
  InboxEvents["MESSAGE_DUPLICATE"] = "inbox:message:duplicate";
12
12
  InboxEvents["MESSAGE_PROCESSED"] = "inbox:message:processed";
13
13
  InboxEvents["MESSAGE_FAILED"] = "inbox:message:failed";
14
+ InboxEvents["MESSAGE_RECOVERED"] = "inbox:message:recovered";
14
15
  })(InboxEvents || (exports.InboxEvents = InboxEvents = {}));
15
16
  class InboxService extends events_1.EventEmitter {
16
17
  repository;
@@ -57,7 +58,10 @@ class InboxService extends events_1.EventEmitter {
57
58
  return;
58
59
  }
59
60
  try {
60
- await this.repository.markProcessing(message.id);
61
+ const canProcess = await this.repository.markProcessing(message.id);
62
+ if (!canProcess) {
63
+ return;
64
+ }
61
65
  const results = await Promise.allSettled(handlers.map((handler) => handler(message)));
62
66
  const failures = results.filter((r) => r.status === 'rejected');
63
67
  if (failures.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"inbox.service.js","sourceRoot":"","sources":["../../src/services/inbox.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inbox.service.js","sourceRoot":"","sources":["../../src/services/inbox.service.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  export * from './inbox.service';
2
+ export * from './inbox-recovery.service';
2
3
  export * from './outbox.service';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC"}
@@ -15,5 +15,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./inbox.service"), exports);
18
+ __exportStar(require("./inbox-recovery.service"), exports);
18
19
  __exportStar(require("./outbox.service"), exports);
19
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,mDAAiC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,2DAAyC;AACzC,mDAAiC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prodforcode/event-forge-core",
3
- "version": "1.3.0",
3
+ "version": "1.5.0",
4
4
  "description": "Core interfaces and services for the Universal Inbox-Outbox Pattern",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",