@prodforcode/event-forge-mongoose 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,4 +1,4 @@
1
- import { CreateInboxMessageDto, IInboxRepository, RecordInboxMessageResult } from '@prodforcode/event-forge-core';
1
+ import { CreateInboxMessageDto, IInboxRepository, InboxMessage, RecordInboxMessageResult } from '@prodforcode/event-forge-core';
2
2
  import { Model } from 'mongoose';
3
3
  import { InboxMessageDocument } from '../schemas/inbox-message.schema';
4
4
  export declare class MongooseInboxRepository implements IInboxRepository {
@@ -6,10 +6,13 @@ export declare class MongooseInboxRepository implements IInboxRepository {
6
6
  constructor(model: Model<InboxMessageDocument>);
7
7
  record(dto: CreateInboxMessageDto): Promise<RecordInboxMessageResult>;
8
8
  exists(messageId: string, source: string): Promise<boolean>;
9
- markProcessing(id: string): Promise<void>;
9
+ markProcessing(id: string): Promise<boolean>;
10
10
  markProcessed(id: string): Promise<void>;
11
11
  markFailed(id: string, error: string, permanent?: boolean, scheduledAt?: Date): Promise<void>;
12
12
  deleteOlderThan(date: Date): Promise<number>;
13
+ findStuckProcessing(cutoffDate: Date, limit: number): Promise<InboxMessage[]>;
14
+ resetForRetry(id: string, reason: string): Promise<boolean>;
15
+ markPermanentlyFailedRecovery(id: string, reason: string): Promise<void>;
13
16
  private toInboxMessage;
14
17
  }
15
18
  //# sourceMappingURL=mongoose-inbox.repository.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mongoose-inbox.repository.d.ts","sourceRoot":"","sources":["../../src/repositories/mongoose-inbox.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAGhB,wBAAwB,EACzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAMvE,qBAAa,uBAAwB,YAAW,gBAAgB;IAClD,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,KAAK,CAAC,oBAAoB,CAAC;IAEzD,MAAM,CAAC,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAiErE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS3D,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWzC,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYxC,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,UAAQ,EAAE,WAAW,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB3F,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAYlD,OAAO,CAAC,cAAc;CAgBvB"}
1
+ {"version":3,"file":"mongoose-inbox.repository.d.ts","sourceRoot":"","sources":["../../src/repositories/mongoose-inbox.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,EAEZ,wBAAwB,EACzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAMvE,qBAAa,uBAAwB,YAAW,gBAAgB;IAClD,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,KAAK,CAAC,oBAAoB,CAAC;IAEzD,MAAM,CAAC,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IA4FrE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS3D,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAc5C,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYxC,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,UAAQ,EAAE,WAAW,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB3F,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAS5C,mBAAmB,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAc7E,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiB3D,6BAA6B,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB9E,OAAO,CAAC,cAAc;CAoBvB"}
@@ -14,6 +14,13 @@ class MongooseInboxRepository {
14
14
  });
15
15
  if (existing) {
16
16
  const message = this.toInboxMessage(existing);
17
+ if (existing.status === event_forge_core_1.InboxMessageStatus.PROCESSING ||
18
+ existing.status === event_forge_core_1.InboxMessageStatus.FAILED) {
19
+ return {
20
+ message,
21
+ isDuplicate: false,
22
+ };
23
+ }
17
24
  return {
18
25
  message,
19
26
  isDuplicate: true,
@@ -47,6 +54,13 @@ class MongooseInboxRepository {
47
54
  throw new Error(`Race condition: Duplicate key error but message not found for messageId=${dto.messageId}, source=${dto.source}`);
48
55
  }
49
56
  const message = this.toInboxMessage(existing);
57
+ if (existing.status === event_forge_core_1.InboxMessageStatus.PROCESSING ||
58
+ existing.status === event_forge_core_1.InboxMessageStatus.FAILED) {
59
+ return {
60
+ message,
61
+ isDuplicate: false,
62
+ };
63
+ }
50
64
  return {
51
65
  message,
52
66
  isDuplicate: true,
@@ -63,11 +77,13 @@ class MongooseInboxRepository {
63
77
  return count > 0;
64
78
  }
65
79
  async markProcessing(id) {
66
- await this.model.updateOne({ _id: id }, {
67
- $set: {
68
- status: event_forge_core_1.InboxMessageStatus.PROCESSING,
69
- },
70
- });
80
+ const result = await this.model.findOneAndUpdate({
81
+ _id: id,
82
+ status: { $in: [event_forge_core_1.InboxMessageStatus.RECEIVED, event_forge_core_1.InboxMessageStatus.FAILED] },
83
+ }, {
84
+ $set: { status: event_forge_core_1.InboxMessageStatus.PROCESSING },
85
+ }, { new: true });
86
+ return result !== null;
71
87
  }
72
88
  async markProcessed(id) {
73
89
  await this.model.updateOne({ _id: id }, {
@@ -99,6 +115,39 @@ class MongooseInboxRepository {
99
115
  });
100
116
  return result.deletedCount;
101
117
  }
118
+ async findStuckProcessing(cutoffDate, limit) {
119
+ const docs = await this.model.find({
120
+ status: event_forge_core_1.InboxMessageStatus.PROCESSING,
121
+ $or: [
122
+ { updatedAt: { $lt: cutoffDate } },
123
+ { updatedAt: null },
124
+ ],
125
+ }).sort({ updatedAt: 1 }).limit(limit);
126
+ return docs.map((doc) => this.toInboxMessage(doc));
127
+ }
128
+ async resetForRetry(id, reason) {
129
+ const result = await this.model.findOneAndUpdate({ _id: id, status: event_forge_core_1.InboxMessageStatus.PROCESSING }, {
130
+ $set: {
131
+ status: event_forge_core_1.InboxMessageStatus.FAILED,
132
+ recoveryReason: reason,
133
+ lastRecoveredAt: new Date(),
134
+ errorMessage: `Recovered: ${reason}`,
135
+ },
136
+ $inc: { recoveryAttempts: 1 },
137
+ }, { new: true });
138
+ return result !== null;
139
+ }
140
+ async markPermanentlyFailedRecovery(id, reason) {
141
+ await this.model.findOneAndUpdate({ _id: id, status: event_forge_core_1.InboxMessageStatus.PROCESSING }, {
142
+ $set: {
143
+ status: event_forge_core_1.InboxMessageStatus.PERMANENTLY_FAILED,
144
+ recoveryReason: reason,
145
+ lastRecoveredAt: new Date(),
146
+ errorMessage: `Recovery exhausted: ${reason}`,
147
+ },
148
+ $inc: { recoveryAttempts: 1 },
149
+ });
150
+ }
102
151
  toInboxMessage(doc) {
103
152
  return {
104
153
  id: doc._id.toString(),
@@ -113,6 +162,10 @@ class MongooseInboxRepository {
113
162
  maxRetries: doc.maxRetries,
114
163
  scheduledAt: doc.scheduledAt ?? undefined,
115
164
  createdAt: doc.createdAt,
165
+ updatedAt: doc.updatedAt,
166
+ recoveryAttempts: doc.recoveryAttempts ?? 0,
167
+ lastRecoveredAt: doc.lastRecoveredAt ?? undefined,
168
+ recoveryReason: doc.recoveryReason ?? undefined,
116
169
  };
117
170
  }
118
171
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mongoose-inbox.repository.js","sourceRoot":"","sources":["../../src/repositories/mongoose-inbox.repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mongoose-inbox.repository.js","sourceRoot":"","sources":["../../src/repositories/mongoose-inbox.repository.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"inbox-message.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/inbox-message.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAsB,MAAM,+BAA+B,CAAC;AACjF,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAK1D,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC;IAC1F,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAKD,eAAO,MAAM,kBAAkB;;;;;;;;EA0D9B,CAAC;AA4DF,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC,oBAAoB,CAAC,CAAC"}
1
+ {"version":3,"file":"inbox-message.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/inbox-message.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAsB,MAAM,+BAA+B,CAAC;AACjF,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAK1D,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC;IAC1F,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAKD,eAAO,MAAM,kBAAkB;;;;;;;;EAsE9B,CAAC;AA0EF,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC,oBAAoB,CAAC,CAAC"}
@@ -55,6 +55,18 @@ exports.InboxMessageSchema = new mongoose_1.Schema({
55
55
  default: null,
56
56
  index: true,
57
57
  },
58
+ recoveryAttempts: {
59
+ type: Number,
60
+ default: 0,
61
+ },
62
+ lastRecoveredAt: {
63
+ type: Date,
64
+ default: null,
65
+ },
66
+ recoveryReason: {
67
+ type: String,
68
+ default: null,
69
+ },
58
70
  }, {
59
71
  timestamps: { createdAt: 'createdAt', updatedAt: 'updatedAt' },
60
72
  collection: 'inbox_messages',
@@ -86,4 +98,11 @@ exports.InboxMessageSchema.index({
86
98
  }, {
87
99
  name: 'idx_inbox_retry',
88
100
  });
101
+ exports.InboxMessageSchema.index({
102
+ status: 1,
103
+ updatedAt: 1,
104
+ }, {
105
+ name: 'idx_inbox_recovery_sweep',
106
+ partialFilterExpression: { status: 'processing' },
107
+ });
89
108
  //# sourceMappingURL=inbox-message.schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"inbox-message.schema.js","sourceRoot":"","sources":["../../src/schemas/inbox-message.schema.ts"],"names":[],"mappings":";;;AAAA,oEAAiF;AACjF,uCAA0D;AAc7C,QAAA,kBAAkB,GAAG,IAAI,iBAAM,CAC1C;IACE,SAAS,EAAE;QACT,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACf;IACD,MAAM,EAAE;QACN,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACf;IACD,SAAS,EAAE;QACT,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,IAAI;KACZ;IACD,OAAO,EAAE;QACP,IAAI,EAAE,iBAAM,CAAC,KAAK,CAAC,KAAK;QACxB,QAAQ,EAAE,IAAI;KACf;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,iBAAM,CAAC,KAAK,CAAC,KAAK;QACxB,OAAO,EAAE,IAAI;KACd;IACD,MAAM,EAAE;QACN,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,qCAAkB,CAAC;QACvC,OAAO,EAAE,qCAAkB,CAAC,QAAQ;QACpC,KAAK,EAAE,IAAI;KACZ;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,IAAI;KACd;IACD,WAAW,EAAE;QACX,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,IAAI;KACZ;IACD,UAAU,EAAE;QACV,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,IAAI;KACf;IACD,UAAU,EAAE;QACV,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,IAAI;KACf;IACD,WAAW,EAAE;QACX,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,IAAI;KACZ;CACF,EACD;IACE,UAAU,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE;IAC9D,UAAU,EAAE,gBAAgB;CAC7B,CACF,CAAC;AAKF,0BAAkB,CAAC,KAAK,CACtB;IACE,SAAS,EAAE,CAAC;IACZ,MAAM,EAAE,CAAC;CACV,EACD;IACE,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,iCAAiC;CACxC,CACF,CAAC;AAKF,0BAAkB,CAAC,KAAK,CACtB;IACE,SAAS,EAAE,CAAC;IACZ,SAAS,EAAE,CAAC;CACb,EACD;IACE,IAAI,EAAE,sBAAsB;CAC7B,CACF,CAAC;AAKF,0BAAkB,CAAC,KAAK,CACtB;IACE,MAAM,EAAE,CAAC;IACT,SAAS,EAAE,CAAC;CACb,EACD;IACE,IAAI,EAAE,mBAAmB;CAC1B,CACF,CAAC;AAKF,0BAAkB,CAAC,KAAK,CACtB;IACE,MAAM,EAAE,CAAC;IACT,UAAU,EAAE,CAAC;IACb,WAAW,EAAE,CAAC;IACd,SAAS,EAAE,CAAC;CACb,EACD;IACE,IAAI,EAAE,iBAAiB;CACxB,CACF,CAAC"}
1
+ {"version":3,"file":"inbox-message.schema.js","sourceRoot":"","sources":["../../src/schemas/inbox-message.schema.ts"],"names":[],"mappings":";;;AAAA,oEAAiF;AACjF,uCAA0D;AAc7C,QAAA,kBAAkB,GAAG,IAAI,iBAAM,CAC1C;IACE,SAAS,EAAE;QACT,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACf;IACD,MAAM,EAAE;QACN,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACf;IACD,SAAS,EAAE;QACT,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,IAAI;KACZ;IACD,OAAO,EAAE;QACP,IAAI,EAAE,iBAAM,CAAC,KAAK,CAAC,KAAK;QACxB,QAAQ,EAAE,IAAI;KACf;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,iBAAM,CAAC,KAAK,CAAC,KAAK;QACxB,OAAO,EAAE,IAAI;KACd;IACD,MAAM,EAAE;QACN,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,qCAAkB,CAAC;QACvC,OAAO,EAAE,qCAAkB,CAAC,QAAQ;QACpC,KAAK,EAAE,IAAI;KACZ;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,IAAI;KACd;IACD,WAAW,EAAE;QACX,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,IAAI;KACZ;IACD,UAAU,EAAE;QACV,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,IAAI;KACf;IACD,UAAU,EAAE;QACV,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,IAAI;KACf;IACD,WAAW,EAAE;QACX,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,IAAI;KACZ;IACD,gBAAgB,EAAE;QAChB,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,CAAC;KACX;IACD,eAAe,EAAE;QACf,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,IAAI;KACd;IACD,cAAc,EAAE;QACd,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,IAAI;KACd;CACF,EACD;IACE,UAAU,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE;IAC9D,UAAU,EAAE,gBAAgB;CAC7B,CACF,CAAC;AAKF,0BAAkB,CAAC,KAAK,CACtB;IACE,SAAS,EAAE,CAAC;IACZ,MAAM,EAAE,CAAC;CACV,EACD;IACE,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,iCAAiC;CACxC,CACF,CAAC;AAKF,0BAAkB,CAAC,KAAK,CACtB;IACE,SAAS,EAAE,CAAC;IACZ,SAAS,EAAE,CAAC;CACb,EACD;IACE,IAAI,EAAE,sBAAsB;CAC7B,CACF,CAAC;AAKF,0BAAkB,CAAC,KAAK,CACtB;IACE,MAAM,EAAE,CAAC;IACT,SAAS,EAAE,CAAC;CACb,EACD;IACE,IAAI,EAAE,mBAAmB;CAC1B,CACF,CAAC;AAKF,0BAAkB,CAAC,KAAK,CACtB;IACE,MAAM,EAAE,CAAC;IACT,UAAU,EAAE,CAAC;IACb,WAAW,EAAE,CAAC;IACd,SAAS,EAAE,CAAC;CACb,EACD;IACE,IAAI,EAAE,iBAAiB;CACxB,CACF,CAAC;AAKF,0BAAkB,CAAC,KAAK,CACtB;IACE,MAAM,EAAE,CAAC;IACT,SAAS,EAAE,CAAC;CACb,EACD;IACE,IAAI,EAAE,0BAA0B;IAChC,uBAAuB,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;CAClD,CACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prodforcode/event-forge-mongoose",
3
- "version": "1.3.0",
3
+ "version": "1.5.0",
4
4
  "description": "Mongoose adapter for Universal Inbox-Outbox Pattern (MongoDB)",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -17,7 +17,7 @@
17
17
  "license": "MIT",
18
18
  "dependencies": {
19
19
  "mongoose": "^8.0.0",
20
- "@prodforcode/event-forge-core": "1.3.0"
20
+ "@prodforcode/event-forge-core": "1.5.0"
21
21
  },
22
22
  "devDependencies": {
23
23
  "@types/jest": "^29.5.11",