@vqp/audit-memory 0.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.
@@ -0,0 +1,7 @@
1
+ export { MemoryAuditAdapter } from './memory-adapter.js';
2
+ export type { MemoryAuditConfig } from './memory-adapter.js';
3
+ /**
4
+ * Factory function to create a memory audit adapter
5
+ */
6
+ export declare function createMemoryAuditAdapter(config?: import('./memory-adapter.js').MemoryAuditConfig): Promise<import("./memory-adapter.js").MemoryAuditAdapter>;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,GAAE,OAAO,qBAAqB,EAAE,iBAAsB,6DAI7D"}
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ export { MemoryAuditAdapter } from './memory-adapter.js';
2
+ /**
3
+ * Factory function to create a memory audit adapter
4
+ */
5
+ export async function createMemoryAuditAdapter(config = {}) {
6
+ const { MemoryAuditAdapter } = await import('./memory-adapter.js');
7
+ return new MemoryAuditAdapter(config);
8
+ }
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAGzD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,SAA0D,EAAE;IAE5D,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACnE,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Memory Audit Adapter - Implements AuditPort using in-memory storage
3
+ * This adapter stores audit events in memory for testing and lightweight deployments
4
+ */
5
+ import { AuditPort, VQPQuery, VQPResponse, VQPError, AuditEntry } from '@vqp/core';
6
+ export interface MemoryAuditConfig {
7
+ maxEntries?: number;
8
+ includeFullQuery?: boolean;
9
+ includeFullResponse?: boolean;
10
+ autoCleanup?: boolean;
11
+ logLevel?: 'debug' | 'info' | 'warn' | 'error';
12
+ }
13
+ export declare class MemoryAuditAdapter implements AuditPort {
14
+ private entries;
15
+ private readonly maxEntries;
16
+ private readonly includeFullQuery;
17
+ private readonly includeFullResponse;
18
+ private readonly autoCleanup;
19
+ private readonly logLevel;
20
+ constructor(config?: MemoryAuditConfig);
21
+ logQuery(query: VQPQuery, response: VQPResponse): Promise<void>;
22
+ logError(error: VQPError, context: any): Promise<void>;
23
+ getAuditTrail(filters?: {
24
+ startTime?: string;
25
+ endTime?: string;
26
+ querier?: string;
27
+ event?: string;
28
+ }): Promise<AuditEntry[]>;
29
+ purgeOldEntries(olderThan: string): Promise<number>;
30
+ /**
31
+ * Get current number of stored entries
32
+ */
33
+ getEntryCount(): number;
34
+ /**
35
+ * Clear all entries (useful for testing)
36
+ */
37
+ clearAll(): void;
38
+ /**
39
+ * Get memory usage statistics
40
+ */
41
+ getMemoryStats(): {
42
+ entryCount: number;
43
+ maxEntries: number;
44
+ memoryUsageBytes: number;
45
+ oldestEntry?: string;
46
+ newestEntry?: string;
47
+ };
48
+ private addEntry;
49
+ private sanitizeContext;
50
+ private estimateMemoryUsage;
51
+ /**
52
+ * Get entries by event type
53
+ */
54
+ getEntriesByEvent(eventType: AuditEntry['event']): AuditEntry[];
55
+ /**
56
+ * Get recent entries (last N entries)
57
+ */
58
+ getRecentEntries(count?: number): AuditEntry[];
59
+ /**
60
+ * Search entries by metadata
61
+ */
62
+ searchEntries(searchTerm: string): AuditEntry[];
63
+ }
64
+ //# sourceMappingURL=memory-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-adapter.d.ts","sourceRoot":"","sources":["../src/memory-adapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEnF,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CAChD;AAED,qBAAa,kBAAmB,YAAW,SAAS;IAClD,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAU;IAC3C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAU;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,MAAM,GAAE,iBAAsB;IAQpC,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAmC/D,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBtD,aAAa,CAAC,OAAO,CAAC,EAAE;QAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAkCnB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IASzD;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAIhB;;OAEG;IACH,cAAc,IAAI;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB;IA8BD,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,eAAe;IA6BvB,OAAO,CAAC,mBAAmB;IAW3B;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,UAAU,EAAE;IAI/D;;OAEG;IACH,gBAAgB,CAAC,KAAK,GAAE,MAAY,GAAG,UAAU,EAAE;IAInD;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,EAAE;CAyBhD"}
@@ -0,0 +1,216 @@
1
+ /**
2
+ * Memory Audit Adapter - Implements AuditPort using in-memory storage
3
+ * This adapter stores audit events in memory for testing and lightweight deployments
4
+ */
5
+ export class MemoryAuditAdapter {
6
+ entries = [];
7
+ maxEntries;
8
+ includeFullQuery;
9
+ includeFullResponse;
10
+ autoCleanup;
11
+ logLevel;
12
+ constructor(config = {}) {
13
+ this.maxEntries = config.maxEntries || 10000;
14
+ this.includeFullQuery = config.includeFullQuery || false;
15
+ this.includeFullResponse = config.includeFullResponse || false;
16
+ this.autoCleanup = config.autoCleanup !== false; // Default to true
17
+ this.logLevel = config.logLevel || 'info';
18
+ }
19
+ async logQuery(query, response) {
20
+ const responseTime = new Date(response.timestamp).getTime() - new Date(query.timestamp).getTime();
21
+ const entry = {
22
+ timestamp: response.timestamp, // Use response timestamp for consistency
23
+ event: 'query_processed',
24
+ metadata: {
25
+ vocabulary: query.query.vocab,
26
+ responseTime,
27
+ target: query.target,
28
+ responder: response.responder,
29
+ proofType: response.proof.type,
30
+ ...(this.includeFullQuery && { fullQuery: query }),
31
+ ...(this.includeFullResponse && { fullResponse: response }),
32
+ },
33
+ };
34
+ // Add optional fields only if they have values
35
+ if (query.id) {
36
+ entry.queryId = query.id;
37
+ }
38
+ if (query.requester) {
39
+ entry.querier = query.requester;
40
+ }
41
+ // Only include result if it's a boolean
42
+ if (typeof response.result === 'boolean') {
43
+ entry.result = response.result;
44
+ }
45
+ this.addEntry(entry);
46
+ }
47
+ async logError(error, context) {
48
+ const entry = {
49
+ timestamp: new Date().toISOString(),
50
+ event: 'error_occurred',
51
+ error: {
52
+ name: error.name,
53
+ code: error.code,
54
+ message: error.message,
55
+ details: error.details,
56
+ },
57
+ metadata: {
58
+ errorCode: error.code,
59
+ errorMessage: error.message,
60
+ context: this.sanitizeContext(context),
61
+ },
62
+ };
63
+ this.addEntry(entry);
64
+ }
65
+ async getAuditTrail(filters) {
66
+ let filteredEntries = [...this.entries];
67
+ if (!filters) {
68
+ return filteredEntries;
69
+ }
70
+ // Apply time range filter
71
+ if (filters.startTime) {
72
+ const startTime = new Date(filters.startTime);
73
+ filteredEntries = filteredEntries.filter((entry) => new Date(entry.timestamp) >= startTime);
74
+ }
75
+ if (filters.endTime) {
76
+ const endTime = new Date(filters.endTime);
77
+ filteredEntries = filteredEntries.filter((entry) => new Date(entry.timestamp) <= endTime);
78
+ }
79
+ // Apply querier filter
80
+ if (filters.querier) {
81
+ filteredEntries = filteredEntries.filter((entry) => entry.querier === filters.querier);
82
+ }
83
+ // Apply event filter
84
+ if (filters.event) {
85
+ filteredEntries = filteredEntries.filter((entry) => entry.event === filters.event);
86
+ }
87
+ // Sort by timestamp (newest first)
88
+ return filteredEntries.sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
89
+ }
90
+ async purgeOldEntries(olderThan) {
91
+ const cutoffTime = new Date(olderThan);
92
+ const originalCount = this.entries.length;
93
+ this.entries = this.entries.filter((entry) => new Date(entry.timestamp) > cutoffTime);
94
+ return originalCount - this.entries.length;
95
+ }
96
+ /**
97
+ * Get current number of stored entries
98
+ */
99
+ getEntryCount() {
100
+ return this.entries.length;
101
+ }
102
+ /**
103
+ * Clear all entries (useful for testing)
104
+ */
105
+ clearAll() {
106
+ this.entries = [];
107
+ }
108
+ /**
109
+ * Get memory usage statistics
110
+ */
111
+ getMemoryStats() {
112
+ const memoryUsageBytes = this.estimateMemoryUsage();
113
+ const stats = {
114
+ entryCount: this.entries.length,
115
+ maxEntries: this.maxEntries,
116
+ memoryUsageBytes,
117
+ };
118
+ if (this.entries.length > 0) {
119
+ const oldestEntry = this.entries[this.entries.length - 1];
120
+ const newestEntry = this.entries[0];
121
+ if (oldestEntry) {
122
+ stats.oldestEntry = oldestEntry.timestamp;
123
+ }
124
+ if (newestEntry) {
125
+ stats.newestEntry = newestEntry.timestamp;
126
+ }
127
+ }
128
+ return stats;
129
+ }
130
+ addEntry(entry) {
131
+ // Insert at the beginning to maintain newest-first order
132
+ this.entries.unshift(entry);
133
+ // Perform auto-cleanup if enabled and we exceed maxEntries
134
+ if (this.autoCleanup && this.entries.length > this.maxEntries) {
135
+ // Remove oldest entries (from the end of the array)
136
+ this.entries = this.entries.slice(0, this.maxEntries);
137
+ }
138
+ }
139
+ sanitizeContext(context) {
140
+ if (!context)
141
+ return null;
142
+ // Create a sanitized copy of the context
143
+ try {
144
+ const sanitized = JSON.parse(JSON.stringify(context));
145
+ // Remove potentially sensitive fields
146
+ if (typeof sanitized === 'object') {
147
+ delete sanitized.privateKey;
148
+ delete sanitized.password;
149
+ delete sanitized.secret;
150
+ delete sanitized.token;
151
+ // Recursively sanitize nested objects
152
+ Object.keys(sanitized).forEach((key) => {
153
+ if (typeof sanitized[key] === 'object' && sanitized[key] !== null) {
154
+ sanitized[key] = this.sanitizeContext(sanitized[key]);
155
+ }
156
+ });
157
+ }
158
+ return sanitized;
159
+ }
160
+ catch {
161
+ // If serialization fails, return a safe representation
162
+ return { type: typeof context, error: 'Serialization failed' };
163
+ }
164
+ }
165
+ estimateMemoryUsage() {
166
+ try {
167
+ // Rough estimation of memory usage
168
+ const jsonString = JSON.stringify(this.entries);
169
+ return jsonString.length * 2; // Approximate bytes (UTF-16)
170
+ }
171
+ catch {
172
+ // Fallback estimation
173
+ return this.entries.length * 1000; // Rough estimate: 1KB per entry
174
+ }
175
+ }
176
+ /**
177
+ * Get entries by event type
178
+ */
179
+ getEntriesByEvent(eventType) {
180
+ return this.entries.filter((entry) => entry.event === eventType);
181
+ }
182
+ /**
183
+ * Get recent entries (last N entries)
184
+ */
185
+ getRecentEntries(count = 100) {
186
+ return this.entries.slice(0, Math.min(count, this.entries.length));
187
+ }
188
+ /**
189
+ * Search entries by metadata
190
+ */
191
+ searchEntries(searchTerm) {
192
+ const term = searchTerm.toLowerCase();
193
+ return this.entries.filter((entry) => {
194
+ // Search in queryId
195
+ if (entry.queryId?.toLowerCase().includes(term))
196
+ return true;
197
+ // Search in querier
198
+ if (entry.querier?.toLowerCase().includes(term))
199
+ return true;
200
+ // Search in metadata
201
+ if (entry.metadata) {
202
+ const metadataString = JSON.stringify(entry.metadata).toLowerCase();
203
+ if (metadataString.includes(term))
204
+ return true;
205
+ }
206
+ // Search in error details
207
+ if (entry.error) {
208
+ const errorString = JSON.stringify(entry.error).toLowerCase();
209
+ if (errorString.includes(term))
210
+ return true;
211
+ }
212
+ return false;
213
+ });
214
+ }
215
+ }
216
+ //# sourceMappingURL=memory-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-adapter.js","sourceRoot":"","sources":["../src/memory-adapter.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@vqp/audit-memory",
3
+ "version": "0.0.1",
4
+ "description": "In-memory audit adapter for VQP",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "scripts": {
9
+ "build": "tsc",
10
+ "test": "find src -name '*.test.ts' -exec node --import=tsx --test {} +",
11
+ "lint": "eslint src/**/*.ts",
12
+ "clean": "rm -rf dist"
13
+ },
14
+ "dependencies": {
15
+ "@vqp/core": "^0.0.5"
16
+ },
17
+ "devDependencies": {
18
+ "typescript": "^5.0.0"
19
+ },
20
+ "files": [
21
+ "dist/**/*",
22
+ "README.md"
23
+ ],
24
+ "keywords": [
25
+ "vqp",
26
+ "audit",
27
+ "memory",
28
+ "logging"
29
+ ],
30
+ "license": "MIT"
31
+ }