@auto-engineer/message-store 0.8.6

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.
@@ -0,0 +1,5 @@
1
+
2
+ > @auto-engineer/message-store@0.8.6 build /home/runner/work/auto-engineer/auto-engineer/packages/message-store
3
+ > tsc && tsx ../../scripts/fix-esm-imports.ts
4
+
5
+ Fixed ESM imports in dist/
package/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ # @auto-engineer/message-store
2
+
3
+ ## 0.8.6
4
+
5
+ ### Patch Changes
6
+
7
+ - @auto-engineer/message-bus@0.8.6
package/LICENSE ADDED
@@ -0,0 +1,10 @@
1
+ Elastic License 2.0
2
+
3
+ Copyright 2024 Sam Hatoum
4
+
5
+ This software and associated documentation files (the "Software") are licensed under the Elastic License 2.0 (the "License"). You may not use this file except in compliance with the License.
6
+
7
+ You may obtain a copy of the License at:
8
+ https://www.elastic.co/licensing/elastic-license
9
+
10
+ Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
@@ -0,0 +1,4 @@
1
+ export * from './interfaces/types';
2
+ export * from './interfaces/IMessageStore';
3
+ export * from './memory/MemoryMessageStore';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './interfaces/types.js';
2
+ export * from './interfaces/IMessageStore.js';
3
+ export * from './memory/MemoryMessageStore.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC"}
@@ -0,0 +1,70 @@
1
+ import type { Message, PositionalMessage, MessageFilter, StreamInfo, SessionInfo, MessageStoreStats, MessageType } from './types';
2
+ export interface IMessageStore {
3
+ /**
4
+ * Save messages to a specific stream
5
+ */
6
+ saveMessages(streamId: string, messages: Message[], expectedRevision?: bigint, messageType?: MessageType): Promise<void>;
7
+ /**
8
+ * Save a single message to a stream
9
+ */
10
+ saveMessage(streamId: string, message: Message, expectedRevision?: bigint, messageType?: MessageType): Promise<void>;
11
+ /**
12
+ * Get messages from a specific stream
13
+ */
14
+ getMessages(streamId: string, fromRevision?: bigint, count?: number): Promise<PositionalMessage[]>;
15
+ /**
16
+ * Get all messages across all streams with optional filtering
17
+ */
18
+ getAllMessages(filter?: MessageFilter, count?: number): Promise<PositionalMessage[]>;
19
+ /**
20
+ * Get all commands across all streams
21
+ */
22
+ getAllCommands(filter?: Omit<MessageFilter, 'messageType'>, count?: number): Promise<PositionalMessage[]>;
23
+ /**
24
+ * Get all events across all streams
25
+ */
26
+ getAllEvents(filter?: Omit<MessageFilter, 'messageType'>, count?: number): Promise<PositionalMessage[]>;
27
+ /**
28
+ * Get information about a specific stream
29
+ */
30
+ getStreamInfo(streamId: string): Promise<StreamInfo | null>;
31
+ /**
32
+ * Get all stream IDs
33
+ */
34
+ getStreams(): Promise<string[]>;
35
+ /**
36
+ * Get information about all sessions
37
+ */
38
+ getSessions(): Promise<SessionInfo[]>;
39
+ /**
40
+ * Get information about a specific session
41
+ */
42
+ getSessionInfo(sessionId: string): Promise<SessionInfo | null>;
43
+ /**
44
+ * Get messages for a specific session
45
+ */
46
+ getSessionMessages(sessionId: string, filter?: Omit<MessageFilter, 'sessionId'>, count?: number): Promise<PositionalMessage[]>;
47
+ /**
48
+ * Get storage statistics
49
+ */
50
+ getStats(): Promise<MessageStoreStats>;
51
+ /**
52
+ * Cleanup resources
53
+ */
54
+ dispose(): Promise<void>;
55
+ }
56
+ export interface ILocalMessageStore extends IMessageStore {
57
+ /**
58
+ * Reset/clear all stored messages
59
+ */
60
+ reset(): Promise<void>;
61
+ /**
62
+ * Create a new session and return the session ID
63
+ */
64
+ createSession(): Promise<string>;
65
+ /**
66
+ * Mark a session as ended
67
+ */
68
+ endSession(sessionId: string): Promise<void>;
69
+ }
70
+ //# sourceMappingURL=IMessageStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IMessageStore.d.ts","sourceRoot":"","sources":["../../../src/interfaces/IMessageStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,WAAW,EACZ,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,YAAY,CACV,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,EAAE,EACnB,gBAAgB,CAAC,EAAE,MAAM,EACzB,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErH;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAEnG;;OAEG;IACH,cAAc,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAErF;;OAEG;IACH,cAAc,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAE1G;;OAEG;IACH,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAExG;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAE5D;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEhC;;OAEG;IACH,WAAW,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAEtC;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAE/D;;OAEG;IACH,kBAAkB,CAChB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,EACzC,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAEhC;;OAEG;IACH,QAAQ,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAEvC;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;OAEG;IACH,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEjC;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IMessageStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IMessageStore.js","sourceRoot":"","sources":["../../../src/interfaces/IMessageStore.ts"],"names":[],"mappings":""}
@@ -0,0 +1,53 @@
1
+ import type { Command, Event } from '@auto-engineer/message-bus';
2
+ export type Message = Command | Event;
3
+ export type MessageType = 'command' | 'event';
4
+ export interface PositionalMessage {
5
+ streamId: string;
6
+ message: Message;
7
+ messageType: MessageType;
8
+ revision: bigint;
9
+ position: bigint;
10
+ timestamp: Date;
11
+ sessionId: string;
12
+ }
13
+ export interface MessageFilter {
14
+ messageType?: MessageType;
15
+ messageNames?: string[];
16
+ streamId?: string;
17
+ sessionId?: string;
18
+ correlationId?: string;
19
+ requestId?: string;
20
+ fromPosition?: bigint;
21
+ toPosition?: bigint;
22
+ fromTimestamp?: Date;
23
+ toTimestamp?: Date;
24
+ jsonFilter?: Record<string, unknown>;
25
+ }
26
+ export interface StreamInfo {
27
+ streamId: string;
28
+ revision: bigint;
29
+ messageCount: number;
30
+ firstPosition: bigint;
31
+ lastPosition: bigint;
32
+ createdAt: Date;
33
+ lastUpdated: Date;
34
+ }
35
+ export interface SessionInfo {
36
+ sessionId: string;
37
+ startedAt: Date;
38
+ messageCount: number;
39
+ commandCount: number;
40
+ eventCount: number;
41
+ lastActivity: Date;
42
+ }
43
+ export interface MessageStoreStats {
44
+ totalMessages: number;
45
+ totalCommands: number;
46
+ totalEvents: number;
47
+ totalStreams: number;
48
+ totalSessions: number;
49
+ memoryUsage?: number;
50
+ oldestMessage?: Date;
51
+ newestMessage?: Date;
52
+ }
53
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/interfaces/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;AAEtC,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;AAE9C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;IAChB,WAAW,EAAE,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,IAAI,CAAC;IACrB,aAAa,CAAC,EAAE,IAAI,CAAC;CACtB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/interfaces/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import type { Message, PositionalMessage, MessageFilter, StreamInfo, SessionInfo, MessageStoreStats, MessageType } from '../interfaces/types';
2
+ import type { ILocalMessageStore } from '../interfaces/IMessageStore';
3
+ export declare class MemoryMessageStore implements ILocalMessageStore {
4
+ private streams;
5
+ private globalPosition;
6
+ private sessions;
7
+ private currentSessionId;
8
+ constructor();
9
+ createSession(): Promise<string>;
10
+ endSession(sessionId: string): Promise<void>;
11
+ saveMessage(streamId: string, message: Message, expectedRevision?: bigint, messageType?: MessageType): Promise<void>;
12
+ saveMessages(streamId: string, messages: Message[], expectedRevision?: bigint, messageType?: MessageType): Promise<void>;
13
+ getMessages(streamId: string, fromRevision?: bigint, count?: number): Promise<PositionalMessage[]>;
14
+ getAllMessages(filter?: MessageFilter, count?: number): Promise<PositionalMessage[]>;
15
+ getAllCommands(filter?: Omit<MessageFilter, 'messageType'>, count?: number): Promise<PositionalMessage[]>;
16
+ getAllEvents(filter?: Omit<MessageFilter, 'messageType'>, count?: number): Promise<PositionalMessage[]>;
17
+ private applyFilter;
18
+ private messageMatchesFilter;
19
+ private passesTypeFilter;
20
+ private passesIdentifierFilters;
21
+ private passesPositionFilters;
22
+ private passesTimestampFilters;
23
+ private passesJsonFilter;
24
+ private matchesJsonFilter;
25
+ getStreamInfo(streamId: string): Promise<StreamInfo | null>;
26
+ getStreams(): Promise<string[]>;
27
+ getSessions(): Promise<SessionInfo[]>;
28
+ getSessionInfo(sessionId: string): Promise<SessionInfo | null>;
29
+ getSessionMessages(sessionId: string, filter?: Omit<MessageFilter, 'sessionId'>, count?: number): Promise<PositionalMessage[]>;
30
+ getStats(): Promise<MessageStoreStats>;
31
+ private estimateMemoryUsage;
32
+ reset(): Promise<void>;
33
+ dispose(): Promise<void>;
34
+ }
35
+ //# sourceMappingURL=MemoryMessageStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryMessageStore.d.ts","sourceRoot":"","sources":["../../../src/memory/MemoryMessageStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,OAAO,EACP,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,WAAW,EACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAYtE,qBAAa,kBAAmB,YAAW,kBAAkB;IAC3D,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,gBAAgB,CAAuB;;IAMzC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IA2BhC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa5C,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,gBAAgB,CAAC,EAAE,MAAM,EACzB,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,IAAI,CAAC;IAKV,YAAY,CAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,EAAE,EACnB,gBAAgB,CAAC,EAAE,MAAM,EACzB,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,IAAI,CAAC;IAiGV,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAmBlG,cAAc,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAmBpF,cAAc,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAIzG,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAI7G,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,uBAAuB;IA4C/B,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,sBAAsB;IAgB9B,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,iBAAiB;IAgBnB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAqB3D,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAI/B,WAAW,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAIrC,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAI9D,kBAAkB,CACtB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,EACzC,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAWzB,QAAQ,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAsC5C,OAAO,CAAC,mBAAmB;IAmBrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAI/B"}
@@ -0,0 +1,359 @@
1
+ import { nanoid } from 'nanoid';
2
+ import createDebug from 'debug';
3
+ const debug = createDebug('message-store:memory');
4
+ export class MemoryMessageStore {
5
+ constructor() {
6
+ this.streams = new Map();
7
+ this.globalPosition = BigInt(0);
8
+ this.sessions = new Map();
9
+ this.currentSessionId = null;
10
+ debug('MemoryMessageStore initialized.');
11
+ }
12
+ async createSession() {
13
+ const sessionId = `session-${Date.now()}-${nanoid(8)}`;
14
+ const sessionInfo = {
15
+ sessionId,
16
+ startedAt: new Date(),
17
+ messageCount: 0,
18
+ commandCount: 0,
19
+ eventCount: 0,
20
+ lastActivity: new Date(),
21
+ };
22
+ this.sessions.set(sessionId, sessionInfo);
23
+ this.currentSessionId = sessionId;
24
+ // Create a dedicated stream for this session
25
+ const sessionStreamId = `session-${sessionId}`;
26
+ this.streams.set(sessionStreamId, {
27
+ messages: [],
28
+ revision: BigInt(-1),
29
+ createdAt: new Date(),
30
+ lastUpdated: new Date(),
31
+ });
32
+ debug('Created new session: %s', sessionId);
33
+ return sessionId;
34
+ }
35
+ async endSession(sessionId) {
36
+ const session = this.sessions.get(sessionId);
37
+ if (session) {
38
+ session.lastActivity = new Date();
39
+ }
40
+ if (this.currentSessionId === sessionId) {
41
+ this.currentSessionId = null;
42
+ }
43
+ debug('Ended session: %s', sessionId);
44
+ }
45
+ async saveMessage(streamId, message, expectedRevision, messageType) {
46
+ return this.saveMessages(streamId, [message], expectedRevision, messageType);
47
+ }
48
+ // eslint-disable-next-line complexity
49
+ async saveMessages(streamId, messages, expectedRevision, messageType) {
50
+ debug('Saving %d messages to stream: %s', messages.length, streamId);
51
+ // Get or create stream
52
+ let streamData = this.streams.get(streamId);
53
+ if (!streamData) {
54
+ if (expectedRevision !== undefined && expectedRevision !== BigInt(-1)) {
55
+ throw new Error(`Stream ${streamId} does not exist, but expected revision ${expectedRevision} was provided`);
56
+ }
57
+ streamData = {
58
+ messages: [],
59
+ revision: BigInt(-1),
60
+ createdAt: new Date(),
61
+ lastUpdated: new Date(),
62
+ };
63
+ this.streams.set(streamId, streamData);
64
+ }
65
+ // Check expected revision
66
+ if (expectedRevision !== undefined && streamData.revision !== expectedRevision) {
67
+ throw new Error(`Expected revision ${expectedRevision} but stream is at revision ${streamData.revision}`);
68
+ }
69
+ const now = new Date();
70
+ const sessionId = this.currentSessionId ?? 'no-session';
71
+ // Convert and store messages
72
+ for (const message of messages) {
73
+ this.globalPosition++;
74
+ streamData.revision++;
75
+ // Determine message type from context or stream name
76
+ const detectedMessageType = messageType ||
77
+ (streamId.includes('command')
78
+ ? 'command'
79
+ : streamId.includes('event')
80
+ ? 'event'
81
+ : // Try to infer from the message structure - commands typically have requestId
82
+ message.requestId !== undefined && message.requestId !== null && message.requestId !== ''
83
+ ? 'command'
84
+ : 'event');
85
+ const positionalMessage = {
86
+ streamId,
87
+ message: {
88
+ ...message,
89
+ timestamp: message.timestamp || now,
90
+ },
91
+ messageType: detectedMessageType,
92
+ revision: streamData.revision,
93
+ position: this.globalPosition,
94
+ timestamp: now,
95
+ sessionId,
96
+ };
97
+ streamData.messages.push(positionalMessage);
98
+ streamData.lastUpdated = now;
99
+ // Update session stats
100
+ const session = this.sessions.get(sessionId);
101
+ if (session) {
102
+ session.messageCount++;
103
+ session.lastActivity = now;
104
+ if (detectedMessageType === 'command') {
105
+ session.commandCount++;
106
+ }
107
+ else {
108
+ session.eventCount++;
109
+ }
110
+ }
111
+ // Also store in session stream
112
+ if (sessionId !== 'no-session') {
113
+ const sessionStreamId = `session-${sessionId}`;
114
+ const sessionStream = this.streams.get(sessionStreamId);
115
+ if (sessionStream) {
116
+ sessionStream.revision++;
117
+ const sessionMessage = {
118
+ ...positionalMessage,
119
+ streamId: sessionStreamId,
120
+ revision: sessionStream.revision,
121
+ };
122
+ sessionStream.messages.push(sessionMessage);
123
+ sessionStream.lastUpdated = now;
124
+ }
125
+ }
126
+ }
127
+ debug('Saved %d messages to stream %s, new revision: %s', messages.length, streamId, streamData.revision.toString());
128
+ }
129
+ async getMessages(streamId, fromRevision, count) {
130
+ const streamData = this.streams.get(streamId);
131
+ if (!streamData) {
132
+ return [];
133
+ }
134
+ let messages = streamData.messages;
135
+ if (fromRevision !== undefined && fromRevision !== null) {
136
+ messages = messages.filter((m) => m.revision >= fromRevision);
137
+ }
138
+ if (count !== undefined && count !== null && !isNaN(count) && count > 0) {
139
+ messages = messages.slice(-count); // Get the most recent N messages
140
+ }
141
+ return [...messages];
142
+ }
143
+ async getAllMessages(filter, count) {
144
+ const allMessages = [];
145
+ for (const streamData of this.streams.values()) {
146
+ allMessages.push(...streamData.messages);
147
+ }
148
+ // Sort by position
149
+ allMessages.sort((a, b) => Number(a.position) - Number(b.position));
150
+ let filtered = this.applyFilter(allMessages, filter);
151
+ if (count !== undefined && count !== null && !isNaN(count) && count > 0) {
152
+ filtered = filtered.slice(-count); // Get the most recent N messages
153
+ }
154
+ return filtered;
155
+ }
156
+ async getAllCommands(filter, count) {
157
+ return this.getAllMessages({ ...filter, messageType: 'command' }, count);
158
+ }
159
+ async getAllEvents(filter, count) {
160
+ return this.getAllMessages({ ...filter, messageType: 'event' }, count);
161
+ }
162
+ applyFilter(messages, filter) {
163
+ if (filter === undefined || filter === null) {
164
+ return messages;
165
+ }
166
+ return messages.filter((message) => this.messageMatchesFilter(message, filter));
167
+ }
168
+ messageMatchesFilter(message, filter) {
169
+ return (this.passesTypeFilter(message, filter) &&
170
+ this.passesIdentifierFilters(message, filter) &&
171
+ this.passesPositionFilters(message, filter) &&
172
+ this.passesTimestampFilters(message, filter) &&
173
+ this.passesJsonFilter(message, filter));
174
+ }
175
+ passesTypeFilter(message, filter) {
176
+ // Message type filter
177
+ if (filter.messageType !== undefined && filter.messageType !== null && message.messageType !== filter.messageType) {
178
+ return false;
179
+ }
180
+ // Message names filter
181
+ if (filter.messageNames !== undefined &&
182
+ filter.messageNames !== null &&
183
+ filter.messageNames.length > 0 &&
184
+ !filter.messageNames.includes(message.message.type)) {
185
+ return false;
186
+ }
187
+ return true;
188
+ }
189
+ // eslint-disable-next-line complexity
190
+ passesIdentifierFilters(message, filter) {
191
+ // Stream ID filter
192
+ if (filter.streamId !== undefined &&
193
+ filter.streamId !== null &&
194
+ filter.streamId !== '' &&
195
+ message.streamId !== filter.streamId) {
196
+ return false;
197
+ }
198
+ // Session ID filter
199
+ if (filter.sessionId !== undefined &&
200
+ filter.sessionId !== null &&
201
+ filter.sessionId !== '' &&
202
+ message.sessionId !== filter.sessionId) {
203
+ return false;
204
+ }
205
+ // Correlation ID filter
206
+ if (filter.correlationId !== undefined &&
207
+ filter.correlationId !== null &&
208
+ filter.correlationId !== '' &&
209
+ message.message.correlationId !== filter.correlationId) {
210
+ return false;
211
+ }
212
+ // Request ID filter
213
+ if (filter.requestId !== undefined &&
214
+ filter.requestId !== null &&
215
+ filter.requestId !== '' &&
216
+ message.message.requestId !== filter.requestId) {
217
+ return false;
218
+ }
219
+ return true;
220
+ }
221
+ passesPositionFilters(message, filter) {
222
+ // Position filters
223
+ if (filter.fromPosition !== undefined && filter.fromPosition !== null && message.position < filter.fromPosition) {
224
+ return false;
225
+ }
226
+ if (filter.toPosition !== undefined && filter.toPosition !== null && message.position > filter.toPosition) {
227
+ return false;
228
+ }
229
+ return true;
230
+ }
231
+ passesTimestampFilters(message, filter) {
232
+ // Timestamp filters
233
+ if (filter.fromTimestamp !== undefined &&
234
+ filter.fromTimestamp !== null &&
235
+ message.timestamp < filter.fromTimestamp) {
236
+ return false;
237
+ }
238
+ if (filter.toTimestamp !== undefined && filter.toTimestamp !== null && message.timestamp > filter.toTimestamp) {
239
+ return false;
240
+ }
241
+ return true;
242
+ }
243
+ passesJsonFilter(message, filter) {
244
+ // JSON filter (simple property matching for now)
245
+ if (filter.jsonFilter !== undefined && filter.jsonFilter !== null) {
246
+ return this.matchesJsonFilter(message.message.data, filter.jsonFilter);
247
+ }
248
+ return true;
249
+ }
250
+ matchesJsonFilter(data, jsonFilter) {
251
+ if (data === undefined || data === null || typeof data !== 'object') {
252
+ return false;
253
+ }
254
+ const dataObj = data;
255
+ for (const [key, expectedValue] of Object.entries(jsonFilter)) {
256
+ if (dataObj[key] !== expectedValue) {
257
+ return false;
258
+ }
259
+ }
260
+ return true;
261
+ }
262
+ async getStreamInfo(streamId) {
263
+ const streamData = this.streams.get(streamId);
264
+ if (!streamData) {
265
+ return null;
266
+ }
267
+ const messages = streamData.messages;
268
+ const firstMessage = messages[0];
269
+ const lastMessage = messages[messages.length - 1];
270
+ return {
271
+ streamId,
272
+ revision: streamData.revision,
273
+ messageCount: messages.length,
274
+ firstPosition: firstMessage?.position ?? BigInt(0),
275
+ lastPosition: lastMessage?.position ?? BigInt(0),
276
+ createdAt: streamData.createdAt,
277
+ lastUpdated: streamData.lastUpdated,
278
+ };
279
+ }
280
+ async getStreams() {
281
+ return Array.from(this.streams.keys());
282
+ }
283
+ async getSessions() {
284
+ return Array.from(this.sessions.values());
285
+ }
286
+ async getSessionInfo(sessionId) {
287
+ return this.sessions.get(sessionId) || null;
288
+ }
289
+ async getSessionMessages(sessionId, filter, count) {
290
+ const sessionStreamId = `session-${sessionId}`;
291
+ const sessionMessages = await this.getMessages(sessionStreamId, undefined, count);
292
+ if (filter) {
293
+ return this.applyFilter(sessionMessages, { ...filter, sessionId });
294
+ }
295
+ return sessionMessages;
296
+ }
297
+ async getStats() {
298
+ let totalMessages = 0;
299
+ let totalCommands = 0;
300
+ let totalEvents = 0;
301
+ let oldestTimestamp;
302
+ let newestTimestamp;
303
+ for (const streamData of this.streams.values()) {
304
+ for (const message of streamData.messages) {
305
+ totalMessages++;
306
+ if (message.messageType === 'command') {
307
+ totalCommands++;
308
+ }
309
+ else {
310
+ totalEvents++;
311
+ }
312
+ if (!oldestTimestamp || message.timestamp < oldestTimestamp) {
313
+ oldestTimestamp = message.timestamp;
314
+ }
315
+ if (!newestTimestamp || message.timestamp > newestTimestamp) {
316
+ newestTimestamp = message.timestamp;
317
+ }
318
+ }
319
+ }
320
+ return {
321
+ totalMessages,
322
+ totalCommands,
323
+ totalEvents,
324
+ totalStreams: this.streams.size,
325
+ totalSessions: this.sessions.size,
326
+ memoryUsage: this.estimateMemoryUsage(),
327
+ oldestMessage: oldestTimestamp,
328
+ newestMessage: newestTimestamp,
329
+ };
330
+ }
331
+ estimateMemoryUsage() {
332
+ // Rough estimation of memory usage in bytes
333
+ let size = 0;
334
+ for (const streamData of this.streams.values()) {
335
+ for (const message of streamData.messages) {
336
+ // Convert BigInt fields to strings for JSON serialization
337
+ const serializedMessage = {
338
+ ...message,
339
+ revision: message.revision.toString(),
340
+ position: message.position.toString(),
341
+ };
342
+ size += JSON.stringify(serializedMessage).length * 2; // Rough estimate for UTF-16
343
+ }
344
+ }
345
+ return size;
346
+ }
347
+ async reset() {
348
+ debug('Resetting message store');
349
+ this.streams.clear();
350
+ this.sessions.clear();
351
+ this.globalPosition = BigInt(0);
352
+ this.currentSessionId = null;
353
+ }
354
+ async dispose() {
355
+ debug('Disposing message store');
356
+ await this.reset();
357
+ }
358
+ }
359
+ //# sourceMappingURL=MemoryMessageStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryMessageStore.js","sourceRoot":"","sources":["../../../src/memory/MemoryMessageStore.ts"],"names":[],"mappings":"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"}