@aichatwar/shared 1.0.167 → 1.0.169

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.
@@ -8,6 +8,7 @@ export declare abstract class Listener<T extends BaseEvent> {
8
8
  protected consumer: Consumer;
9
9
  protected ackDeadline: number;
10
10
  protected fromBeginning: boolean;
11
+ protected maxEventAgeMs: number;
11
12
  private currentPayload?;
12
13
  private retryCount;
13
14
  private readonly maxInitialRetries;
@@ -14,6 +14,7 @@ class Listener {
14
14
  constructor(consumer) {
15
15
  this.ackDeadline = 5 * 1000; // 5 seconds
16
16
  this.fromBeginning = false; // Override in subclasses to read from beginning
17
+ this.maxEventAgeMs = 0; // 0 = disabled. When set, messages older than this are auto-acked and skipped.
17
18
  this.retryCount = 0;
18
19
  this.maxInitialRetries = 3; // Show detailed retry logs for first 3 attempts
19
20
  this.maxRetryDelay = 60000; // Cap delay at 60 seconds
@@ -121,6 +122,18 @@ class Listener {
121
122
  // Commented out key logging as requested
122
123
  // console.log(`📨 [${this.topic}] Message received -> groupId: ${this.groupId}, partition: ${payload.partition}, offset: ${payload.message.offset}, key: ${payload.message.key?.toString() || 'none'}`);
123
124
  console.log(`📨 [${this.topic}] Message received -> groupId: ${this.groupId}, partition: ${payload.partition}, offset: ${payload.message.offset}, value length: ${payload.message.value.toString().length}`);
125
+ // Skip stale messages when maxEventAgeMs is configured
126
+ if (this.maxEventAgeMs > 0 && payload.message.timestamp) {
127
+ const messageAge = Date.now() - Number(payload.message.timestamp);
128
+ if (messageAge > this.maxEventAgeMs) {
129
+ yield this.consumer.commitOffsets([{
130
+ topic: payload.topic,
131
+ partition: payload.partition,
132
+ offset: (BigInt(payload.message.offset) + BigInt(1)).toString()
133
+ }]);
134
+ return;
135
+ }
136
+ }
124
137
  // Store current payload for manual ack
125
138
  this.currentPayload = payload;
126
139
  try {
@@ -0,0 +1,7 @@
1
+ export declare enum SubscriptionTier {
2
+ Free = "free",
3
+ Basic = "basic",
4
+ Pro = "pro",
5
+ Enterprise = "enterprise"
6
+ }
7
+ export declare const AGENT_LIMITS_BY_TIER: Record<SubscriptionTier, number>;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AGENT_LIMITS_BY_TIER = exports.SubscriptionTier = void 0;
4
+ var SubscriptionTier;
5
+ (function (SubscriptionTier) {
6
+ SubscriptionTier["Free"] = "free";
7
+ SubscriptionTier["Basic"] = "basic";
8
+ SubscriptionTier["Pro"] = "pro";
9
+ SubscriptionTier["Enterprise"] = "enterprise";
10
+ })(SubscriptionTier || (exports.SubscriptionTier = SubscriptionTier = {}));
11
+ exports.AGENT_LIMITS_BY_TIER = {
12
+ [SubscriptionTier.Free]: 2,
13
+ [SubscriptionTier.Basic]: 3,
14
+ [SubscriptionTier.Pro]: 5,
15
+ [SubscriptionTier.Enterprise]: 50,
16
+ };
@@ -1,6 +1,7 @@
1
1
  import { Subjects } from "./subjects";
2
2
  import { BaseEvent } from "./baseEvent";
3
3
  import { UserStatus } from "./types/userStatus";
4
+ import { SubscriptionTier } from "./types/subscriptionTier";
4
5
  interface UserCreatedEvent extends BaseEvent {
5
6
  subject: Subjects.UserCreated;
6
7
  data: {
@@ -11,6 +12,7 @@ interface UserCreatedEvent extends BaseEvent {
11
12
  isAgent?: boolean;
12
13
  ownerUserId?: string;
13
14
  role?: 'user' | 'admin';
15
+ subscriptionTier?: SubscriptionTier;
14
16
  };
15
17
  }
16
18
  interface UserUpdatedEvent extends BaseEvent {
@@ -21,6 +23,7 @@ interface UserUpdatedEvent extends BaseEvent {
21
23
  status: UserStatus;
22
24
  version: number;
23
25
  role?: 'user' | 'admin';
26
+ subscriptionTier?: SubscriptionTier;
24
27
  };
25
28
  }
26
29
  interface UserSingedInEvent extends BaseEvent {
package/build/index.d.ts CHANGED
@@ -36,6 +36,7 @@ export * from "./events/types/friendshipStatus";
36
36
  export * from "./events/types/userStatus";
37
37
  export * from "./events/types/visibility";
38
38
  export * from "./events/types/postStatus";
39
+ export * from "./events/types/subscriptionTier";
39
40
  export * from "./events/userEvents";
40
41
  export * from "./events/mediaEvents";
41
42
  export * from "./events/agentManagerEvents";
package/build/index.js CHANGED
@@ -52,6 +52,7 @@ __exportStar(require("./events/types/friendshipStatus"), exports);
52
52
  __exportStar(require("./events/types/userStatus"), exports);
53
53
  __exportStar(require("./events/types/visibility"), exports);
54
54
  __exportStar(require("./events/types/postStatus"), exports);
55
+ __exportStar(require("./events/types/subscriptionTier"), exports);
55
56
  __exportStar(require("./events/userEvents"), exports);
56
57
  __exportStar(require("./events/mediaEvents"), exports);
57
58
  __exportStar(require("./events/agentManagerEvents"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aichatwar/shared",
3
- "version": "1.0.167",
3
+ "version": "1.0.169",
4
4
  "main": "./build/index.js",
5
5
  "typs": "./build/index.d.ts",
6
6
  "files": [