@agenticc/core 1.0.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.
- package/LICENSE +21 -0
- package/README.md +370 -0
- package/README.zh-CN.md +372 -0
- package/dist/audit/index.d.ts +9 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/index.js +9 -0
- package/dist/audit/index.js.map +1 -0
- package/dist/audit/logger.d.ts +211 -0
- package/dist/audit/logger.d.ts.map +1 -0
- package/dist/audit/logger.js +268 -0
- package/dist/audit/logger.js.map +1 -0
- package/dist/audit/query.d.ts +164 -0
- package/dist/audit/query.d.ts.map +1 -0
- package/dist/audit/query.js +250 -0
- package/dist/audit/query.js.map +1 -0
- package/dist/conversation/context-builder.d.ts +119 -0
- package/dist/conversation/context-builder.d.ts.map +1 -0
- package/dist/conversation/context-builder.js +252 -0
- package/dist/conversation/context-builder.js.map +1 -0
- package/dist/conversation/index.d.ts +10 -0
- package/dist/conversation/index.d.ts.map +1 -0
- package/dist/conversation/index.js +10 -0
- package/dist/conversation/index.js.map +1 -0
- package/dist/conversation/message-store.d.ts +231 -0
- package/dist/conversation/message-store.d.ts.map +1 -0
- package/dist/conversation/message-store.js +404 -0
- package/dist/conversation/message-store.js.map +1 -0
- package/dist/conversation/session.d.ts +201 -0
- package/dist/conversation/session.d.ts.map +1 -0
- package/dist/conversation/session.js +285 -0
- package/dist/conversation/session.js.map +1 -0
- package/dist/core/agent.d.ts +277 -0
- package/dist/core/agent.d.ts.map +1 -0
- package/dist/core/agent.js +674 -0
- package/dist/core/agent.js.map +1 -0
- package/dist/core/agentic-loop.d.ts +98 -0
- package/dist/core/agentic-loop.d.ts.map +1 -0
- package/dist/core/agentic-loop.js +496 -0
- package/dist/core/agentic-loop.js.map +1 -0
- package/dist/core/index.d.ts +14 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +14 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/intent-parser.d.ts +101 -0
- package/dist/core/intent-parser.d.ts.map +1 -0
- package/dist/core/intent-parser.js +221 -0
- package/dist/core/intent-parser.js.map +1 -0
- package/dist/core/plan-generator.d.ts +133 -0
- package/dist/core/plan-generator.d.ts.map +1 -0
- package/dist/core/plan-generator.js +294 -0
- package/dist/core/plan-generator.js.map +1 -0
- package/dist/core/plugin-manager.d.ts +120 -0
- package/dist/core/plugin-manager.d.ts.map +1 -0
- package/dist/core/plugin-manager.js +369 -0
- package/dist/core/plugin-manager.js.map +1 -0
- package/dist/core/response-handler.d.ts +141 -0
- package/dist/core/response-handler.d.ts.map +1 -0
- package/dist/core/response-handler.js +384 -0
- package/dist/core/response-handler.js.map +1 -0
- package/dist/core/tool-executor.d.ts +143 -0
- package/dist/core/tool-executor.d.ts.map +1 -0
- package/dist/core/tool-executor.js +354 -0
- package/dist/core/tool-executor.js.map +1 -0
- package/dist/core/tool-registry.d.ts +133 -0
- package/dist/core/tool-registry.d.ts.map +1 -0
- package/dist/core/tool-registry.js +252 -0
- package/dist/core/tool-registry.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/knowledge/chunker.d.ts +78 -0
- package/dist/knowledge/chunker.d.ts.map +1 -0
- package/dist/knowledge/chunker.js +233 -0
- package/dist/knowledge/chunker.js.map +1 -0
- package/dist/knowledge/embedder.d.ts +93 -0
- package/dist/knowledge/embedder.d.ts.map +1 -0
- package/dist/knowledge/embedder.js +205 -0
- package/dist/knowledge/embedder.js.map +1 -0
- package/dist/knowledge/index.d.ts +10 -0
- package/dist/knowledge/index.d.ts.map +1 -0
- package/dist/knowledge/index.js +11 -0
- package/dist/knowledge/index.js.map +1 -0
- package/dist/knowledge/loaders/index.d.ts +10 -0
- package/dist/knowledge/loaders/index.d.ts.map +1 -0
- package/dist/knowledge/loaders/index.js +10 -0
- package/dist/knowledge/loaders/index.js.map +1 -0
- package/dist/knowledge/loaders/markdown.d.ts +88 -0
- package/dist/knowledge/loaders/markdown.d.ts.map +1 -0
- package/dist/knowledge/loaders/markdown.js +205 -0
- package/dist/knowledge/loaders/markdown.js.map +1 -0
- package/dist/knowledge/loaders/yaml.d.ts +112 -0
- package/dist/knowledge/loaders/yaml.d.ts.map +1 -0
- package/dist/knowledge/loaders/yaml.js +368 -0
- package/dist/knowledge/loaders/yaml.js.map +1 -0
- package/dist/knowledge/retriever.d.ts +144 -0
- package/dist/knowledge/retriever.d.ts.map +1 -0
- package/dist/knowledge/retriever.js +399 -0
- package/dist/knowledge/retriever.js.map +1 -0
- package/dist/knowledge/store.d.ts +146 -0
- package/dist/knowledge/store.d.ts.map +1 -0
- package/dist/knowledge/store.js +420 -0
- package/dist/knowledge/store.js.map +1 -0
- package/dist/llm/adapter.d.ts +194 -0
- package/dist/llm/adapter.d.ts.map +1 -0
- package/dist/llm/adapter.js +42 -0
- package/dist/llm/adapter.js.map +1 -0
- package/dist/llm/adapters/anyrouter.d.ts +84 -0
- package/dist/llm/adapters/anyrouter.d.ts.map +1 -0
- package/dist/llm/adapters/anyrouter.js +372 -0
- package/dist/llm/adapters/anyrouter.js.map +1 -0
- package/dist/llm/adapters/claude.d.ts +66 -0
- package/dist/llm/adapters/claude.d.ts.map +1 -0
- package/dist/llm/adapters/claude.js +323 -0
- package/dist/llm/adapters/claude.js.map +1 -0
- package/dist/llm/adapters/index.d.ts +12 -0
- package/dist/llm/adapters/index.d.ts.map +1 -0
- package/dist/llm/adapters/index.js +12 -0
- package/dist/llm/adapters/index.js.map +1 -0
- package/dist/llm/adapters/mimo.d.ts +85 -0
- package/dist/llm/adapters/mimo.d.ts.map +1 -0
- package/dist/llm/adapters/mimo.js +316 -0
- package/dist/llm/adapters/mimo.js.map +1 -0
- package/dist/llm/adapters/openai.d.ts +53 -0
- package/dist/llm/adapters/openai.d.ts.map +1 -0
- package/dist/llm/adapters/openai.js +293 -0
- package/dist/llm/adapters/openai.js.map +1 -0
- package/dist/llm/adapters/qwen.d.ts +53 -0
- package/dist/llm/adapters/qwen.d.ts.map +1 -0
- package/dist/llm/adapters/qwen.js +299 -0
- package/dist/llm/adapters/qwen.js.map +1 -0
- package/dist/llm/adapters/siliconflow.d.ts +69 -0
- package/dist/llm/adapters/siliconflow.d.ts.map +1 -0
- package/dist/llm/adapters/siliconflow.js +331 -0
- package/dist/llm/adapters/siliconflow.js.map +1 -0
- package/dist/llm/index.d.ts +9 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +12 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/manager.d.ts +97 -0
- package/dist/llm/manager.d.ts.map +1 -0
- package/dist/llm/manager.js +337 -0
- package/dist/llm/manager.js.map +1 -0
- package/dist/test-utils/arbitraries.d.ts +230 -0
- package/dist/test-utils/arbitraries.d.ts.map +1 -0
- package/dist/test-utils/arbitraries.js +280 -0
- package/dist/test-utils/arbitraries.js.map +1 -0
- package/dist/test-utils/cleanup.d.ts +184 -0
- package/dist/test-utils/cleanup.d.ts.map +1 -0
- package/dist/test-utils/cleanup.js +282 -0
- package/dist/test-utils/cleanup.js.map +1 -0
- package/dist/test-utils/config.d.ts +80 -0
- package/dist/test-utils/config.d.ts.map +1 -0
- package/dist/test-utils/config.js +94 -0
- package/dist/test-utils/config.js.map +1 -0
- package/dist/test-utils/index.d.ts +10 -0
- package/dist/test-utils/index.d.ts.map +1 -0
- package/dist/test-utils/index.js +36 -0
- package/dist/test-utils/index.js.map +1 -0
- package/dist/test-utils/mocks.d.ts +170 -0
- package/dist/test-utils/mocks.d.ts.map +1 -0
- package/dist/test-utils/mocks.js +281 -0
- package/dist/test-utils/mocks.js.map +1 -0
- package/dist/types/config.d.ts +170 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +120 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/knowledge.d.ts +95 -0
- package/dist/types/knowledge.d.ts.map +1 -0
- package/dist/types/knowledge.js +7 -0
- package/dist/types/knowledge.js.map +1 -0
- package/dist/types/loop.d.ts +148 -0
- package/dist/types/loop.d.ts.map +1 -0
- package/dist/types/loop.js +16 -0
- package/dist/types/loop.js.map +1 -0
- package/dist/types/plugin.d.ts +137 -0
- package/dist/types/plugin.d.ts.map +1 -0
- package/dist/types/plugin.js +15 -0
- package/dist/types/plugin.js.map +1 -0
- package/dist/types/response.d.ts +186 -0
- package/dist/types/response.d.ts.map +1 -0
- package/dist/types/response.js +99 -0
- package/dist/types/response.js.map +1 -0
- package/dist/types/streaming.d.ts +478 -0
- package/dist/types/streaming.d.ts.map +1 -0
- package/dist/types/streaming.js +483 -0
- package/dist/types/streaming.js.map +1 -0
- package/dist/types/tool.d.ts +118 -0
- package/dist/types/tool.d.ts.map +1 -0
- package/dist/types/tool.js +42 -0
- package/dist/types/tool.js.map +1 -0
- package/dist/utils/error.d.ts +22 -0
- package/dist/utils/error.d.ts.map +1 -0
- package/dist/utils/error.js +36 -0
- package/dist/utils/error.js.map +1 -0
- package/package.json +102 -0
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit Logger
|
|
3
|
+
*
|
|
4
|
+
* Records tool executions, configuration changes, and errors
|
|
5
|
+
* for audit and troubleshooting purposes.
|
|
6
|
+
*
|
|
7
|
+
* _Requirements: 10.1, 10.2, 10.3_
|
|
8
|
+
*/
|
|
9
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
10
|
+
/**
|
|
11
|
+
* Audit Logger
|
|
12
|
+
*
|
|
13
|
+
* In-memory audit logger that records all operations performed by the Agent.
|
|
14
|
+
* Provides methods for logging tool executions, config changes, and errors.
|
|
15
|
+
*/
|
|
16
|
+
export class AuditLogger {
|
|
17
|
+
logs = new Map();
|
|
18
|
+
// Indexes for faster lookups
|
|
19
|
+
logsBySession = new Map();
|
|
20
|
+
logsByType = new Map();
|
|
21
|
+
/**
|
|
22
|
+
* Log a tool execution
|
|
23
|
+
*
|
|
24
|
+
* @param input - Tool execution details
|
|
25
|
+
* @returns The created log entry
|
|
26
|
+
*/
|
|
27
|
+
logToolExecution(input) {
|
|
28
|
+
const log = {
|
|
29
|
+
id: uuidv4(),
|
|
30
|
+
sessionId: input.sessionId,
|
|
31
|
+
operationType: 'tool_execution',
|
|
32
|
+
target: input.toolName,
|
|
33
|
+
params: input.args,
|
|
34
|
+
result: {
|
|
35
|
+
success: input.result.success,
|
|
36
|
+
content: input.result.content,
|
|
37
|
+
data: input.result.data,
|
|
38
|
+
},
|
|
39
|
+
status: input.result.success ? 'success' : 'failure',
|
|
40
|
+
errorMessage: input.result.error?.message,
|
|
41
|
+
createdAt: new Date(),
|
|
42
|
+
durationMs: input.durationMs,
|
|
43
|
+
};
|
|
44
|
+
if (input.result.error) {
|
|
45
|
+
log.metadata = { errorCode: input.result.error.code };
|
|
46
|
+
}
|
|
47
|
+
this.addLog(log);
|
|
48
|
+
return log;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Log a configuration change
|
|
52
|
+
*
|
|
53
|
+
* @param input - Config change details
|
|
54
|
+
* @returns The created log entry
|
|
55
|
+
*/
|
|
56
|
+
logConfigChange(input) {
|
|
57
|
+
const log = {
|
|
58
|
+
id: uuidv4(),
|
|
59
|
+
sessionId: input.sessionId,
|
|
60
|
+
operationType: 'config_change',
|
|
61
|
+
target: input.configKey,
|
|
62
|
+
params: {
|
|
63
|
+
before: input.beforeValue,
|
|
64
|
+
after: input.afterValue,
|
|
65
|
+
},
|
|
66
|
+
result: {
|
|
67
|
+
before: input.beforeValue,
|
|
68
|
+
after: input.afterValue,
|
|
69
|
+
},
|
|
70
|
+
status: 'success',
|
|
71
|
+
createdAt: new Date(),
|
|
72
|
+
metadata: input.metadata,
|
|
73
|
+
};
|
|
74
|
+
this.addLog(log);
|
|
75
|
+
return log;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Log an error
|
|
79
|
+
*
|
|
80
|
+
* @param input - Error details
|
|
81
|
+
* @returns The created log entry
|
|
82
|
+
*/
|
|
83
|
+
logError(input) {
|
|
84
|
+
const log = {
|
|
85
|
+
id: uuidv4(),
|
|
86
|
+
sessionId: input.sessionId,
|
|
87
|
+
operationType: 'error',
|
|
88
|
+
target: input.context,
|
|
89
|
+
status: 'failure',
|
|
90
|
+
errorMessage: input.message,
|
|
91
|
+
errorStack: input.stack,
|
|
92
|
+
createdAt: new Date(),
|
|
93
|
+
metadata: input.details,
|
|
94
|
+
};
|
|
95
|
+
this.addLog(log);
|
|
96
|
+
return log;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Log a knowledge addition
|
|
100
|
+
*
|
|
101
|
+
* @param sessionId - Session ID
|
|
102
|
+
* @param documentId - Document ID
|
|
103
|
+
* @param category - Document category
|
|
104
|
+
* @param title - Document title
|
|
105
|
+
* @returns The created log entry
|
|
106
|
+
*/
|
|
107
|
+
logKnowledgeAdd(sessionId, documentId, category, title) {
|
|
108
|
+
const log = {
|
|
109
|
+
id: uuidv4(),
|
|
110
|
+
sessionId,
|
|
111
|
+
operationType: 'knowledge_add',
|
|
112
|
+
target: documentId,
|
|
113
|
+
params: { category, title },
|
|
114
|
+
status: 'success',
|
|
115
|
+
createdAt: new Date(),
|
|
116
|
+
};
|
|
117
|
+
this.addLog(log);
|
|
118
|
+
return log;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Log a knowledge deletion
|
|
122
|
+
*
|
|
123
|
+
* @param sessionId - Session ID
|
|
124
|
+
* @param documentId - Document ID
|
|
125
|
+
* @param success - Whether deletion was successful
|
|
126
|
+
* @returns The created log entry
|
|
127
|
+
*/
|
|
128
|
+
logKnowledgeDelete(sessionId, documentId, success) {
|
|
129
|
+
const log = {
|
|
130
|
+
id: uuidv4(),
|
|
131
|
+
sessionId,
|
|
132
|
+
operationType: 'knowledge_delete',
|
|
133
|
+
target: documentId,
|
|
134
|
+
status: success ? 'success' : 'failure',
|
|
135
|
+
createdAt: new Date(),
|
|
136
|
+
};
|
|
137
|
+
this.addLog(log);
|
|
138
|
+
return log;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Log a session creation
|
|
142
|
+
*
|
|
143
|
+
* @param sessionId - Session ID
|
|
144
|
+
* @param metadata - Session metadata
|
|
145
|
+
* @returns The created log entry
|
|
146
|
+
*/
|
|
147
|
+
logSessionCreate(sessionId, metadata) {
|
|
148
|
+
const log = {
|
|
149
|
+
id: uuidv4(),
|
|
150
|
+
sessionId,
|
|
151
|
+
operationType: 'session_create',
|
|
152
|
+
target: sessionId,
|
|
153
|
+
status: 'success',
|
|
154
|
+
createdAt: new Date(),
|
|
155
|
+
metadata,
|
|
156
|
+
};
|
|
157
|
+
this.addLog(log);
|
|
158
|
+
return log;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Log a session close
|
|
162
|
+
*
|
|
163
|
+
* @param sessionId - Session ID
|
|
164
|
+
* @returns The created log entry
|
|
165
|
+
*/
|
|
166
|
+
logSessionClose(sessionId) {
|
|
167
|
+
const log = {
|
|
168
|
+
id: uuidv4(),
|
|
169
|
+
sessionId,
|
|
170
|
+
operationType: 'session_close',
|
|
171
|
+
target: sessionId,
|
|
172
|
+
status: 'success',
|
|
173
|
+
createdAt: new Date(),
|
|
174
|
+
};
|
|
175
|
+
this.addLog(log);
|
|
176
|
+
return log;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Get a log entry by ID
|
|
180
|
+
*
|
|
181
|
+
* @param logId - Log entry ID
|
|
182
|
+
* @returns The log entry or undefined
|
|
183
|
+
*/
|
|
184
|
+
getLog(logId) {
|
|
185
|
+
return this.logs.get(logId);
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Get all logs for a session
|
|
189
|
+
*
|
|
190
|
+
* @param sessionId - Session ID
|
|
191
|
+
* @returns Array of log entries
|
|
192
|
+
*/
|
|
193
|
+
getLogsBySession(sessionId) {
|
|
194
|
+
const logIds = this.logsBySession.get(sessionId);
|
|
195
|
+
if (!logIds) {
|
|
196
|
+
return [];
|
|
197
|
+
}
|
|
198
|
+
return Array.from(logIds)
|
|
199
|
+
.map((id) => this.logs.get(id))
|
|
200
|
+
.filter(Boolean)
|
|
201
|
+
.sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Get all logs of a specific type
|
|
205
|
+
*
|
|
206
|
+
* @param operationType - Operation type
|
|
207
|
+
* @returns Array of log entries
|
|
208
|
+
*/
|
|
209
|
+
getLogsByType(operationType) {
|
|
210
|
+
const logIds = this.logsByType.get(operationType);
|
|
211
|
+
if (!logIds) {
|
|
212
|
+
return [];
|
|
213
|
+
}
|
|
214
|
+
return Array.from(logIds)
|
|
215
|
+
.map((id) => this.logs.get(id))
|
|
216
|
+
.filter(Boolean)
|
|
217
|
+
.sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Get all logs
|
|
221
|
+
*
|
|
222
|
+
* @returns Array of all log entries
|
|
223
|
+
*/
|
|
224
|
+
getAllLogs() {
|
|
225
|
+
return Array.from(this.logs.values()).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Get total log count
|
|
229
|
+
*
|
|
230
|
+
* @returns Total number of logs
|
|
231
|
+
*/
|
|
232
|
+
getLogCount() {
|
|
233
|
+
return this.logs.size;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Clear all logs
|
|
237
|
+
*/
|
|
238
|
+
clear() {
|
|
239
|
+
this.logs.clear();
|
|
240
|
+
this.logsBySession.clear();
|
|
241
|
+
this.logsByType.clear();
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Add a log entry to storage
|
|
245
|
+
*/
|
|
246
|
+
addLog(log) {
|
|
247
|
+
this.logs.set(log.id, log);
|
|
248
|
+
// Update session index
|
|
249
|
+
if (log.sessionId) {
|
|
250
|
+
if (!this.logsBySession.has(log.sessionId)) {
|
|
251
|
+
this.logsBySession.set(log.sessionId, new Set());
|
|
252
|
+
}
|
|
253
|
+
this.logsBySession.get(log.sessionId).add(log.id);
|
|
254
|
+
}
|
|
255
|
+
// Update type index
|
|
256
|
+
if (!this.logsByType.has(log.operationType)) {
|
|
257
|
+
this.logsByType.set(log.operationType, new Set());
|
|
258
|
+
}
|
|
259
|
+
this.logsByType.get(log.operationType).add(log.id);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Create a new AuditLogger instance
|
|
264
|
+
*/
|
|
265
|
+
export function createAuditLogger() {
|
|
266
|
+
return new AuditLogger();
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/audit/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit Log Query
|
|
3
|
+
*
|
|
4
|
+
* Provides advanced querying capabilities for audit logs
|
|
5
|
+
* with support for filtering by session, operation type, and time range.
|
|
6
|
+
*
|
|
7
|
+
* _Requirements: 10.4_
|
|
8
|
+
*/
|
|
9
|
+
import type { OperationLog, OperationType, OperationStatus, AuditLogger } from './logger.js';
|
|
10
|
+
/**
|
|
11
|
+
* Query options for filtering audit logs
|
|
12
|
+
*/
|
|
13
|
+
export interface AuditLogQueryOptions {
|
|
14
|
+
/** Filter by session ID */
|
|
15
|
+
sessionId?: string;
|
|
16
|
+
/** Filter by operation type */
|
|
17
|
+
operationType?: OperationType;
|
|
18
|
+
/** Filter by multiple operation types */
|
|
19
|
+
operationTypes?: OperationType[];
|
|
20
|
+
/** Filter by status */
|
|
21
|
+
status?: OperationStatus;
|
|
22
|
+
/** Filter by target (e.g., tool name) */
|
|
23
|
+
target?: string;
|
|
24
|
+
/** Filter by timestamp (after) */
|
|
25
|
+
after?: Date;
|
|
26
|
+
/** Filter by timestamp (before) */
|
|
27
|
+
before?: Date;
|
|
28
|
+
/** Filter by error presence */
|
|
29
|
+
hasError?: boolean;
|
|
30
|
+
/** Maximum number of results */
|
|
31
|
+
limit?: number;
|
|
32
|
+
/** Offset for pagination */
|
|
33
|
+
offset?: number;
|
|
34
|
+
/** Sort order */
|
|
35
|
+
order?: 'asc' | 'desc';
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Aggregated statistics for audit logs
|
|
39
|
+
*/
|
|
40
|
+
export interface AuditLogStats {
|
|
41
|
+
/** Total number of logs */
|
|
42
|
+
totalLogs: number;
|
|
43
|
+
/** Logs by operation type */
|
|
44
|
+
byOperationType: Record<OperationType, number>;
|
|
45
|
+
/** Logs by status */
|
|
46
|
+
byStatus: Record<OperationStatus, number>;
|
|
47
|
+
/** Number of unique sessions */
|
|
48
|
+
uniqueSessions: number;
|
|
49
|
+
/** Average duration for tool executions (ms) */
|
|
50
|
+
avgToolExecutionDuration?: number;
|
|
51
|
+
/** Error rate (percentage) */
|
|
52
|
+
errorRate: number;
|
|
53
|
+
/** Time range of logs */
|
|
54
|
+
timeRange?: {
|
|
55
|
+
earliest: Date;
|
|
56
|
+
latest: Date;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Query result with pagination info
|
|
61
|
+
*/
|
|
62
|
+
export interface AuditLogQueryResult {
|
|
63
|
+
/** Matching log entries */
|
|
64
|
+
logs: OperationLog[];
|
|
65
|
+
/** Total count (before pagination) */
|
|
66
|
+
totalCount: number;
|
|
67
|
+
/** Whether there are more results */
|
|
68
|
+
hasMore: boolean;
|
|
69
|
+
/** Current offset */
|
|
70
|
+
offset: number;
|
|
71
|
+
/** Current limit */
|
|
72
|
+
limit: number;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Audit Log Query Service
|
|
76
|
+
*
|
|
77
|
+
* Provides advanced querying and aggregation capabilities
|
|
78
|
+
* for audit logs.
|
|
79
|
+
*/
|
|
80
|
+
export declare class AuditLogQuery {
|
|
81
|
+
private logger;
|
|
82
|
+
constructor(logger: AuditLogger);
|
|
83
|
+
/**
|
|
84
|
+
* Query logs with advanced filtering
|
|
85
|
+
*
|
|
86
|
+
* @param options - Query options
|
|
87
|
+
* @returns Query result with pagination info
|
|
88
|
+
*/
|
|
89
|
+
query(options?: AuditLogQueryOptions): AuditLogQueryResult;
|
|
90
|
+
/**
|
|
91
|
+
* Get logs for a specific session
|
|
92
|
+
*
|
|
93
|
+
* @param sessionId - Session ID
|
|
94
|
+
* @param options - Additional query options
|
|
95
|
+
* @returns Query result
|
|
96
|
+
*/
|
|
97
|
+
queryBySession(sessionId: string, options?: Omit<AuditLogQueryOptions, 'sessionId'>): AuditLogQueryResult;
|
|
98
|
+
/**
|
|
99
|
+
* Get logs for a specific operation type
|
|
100
|
+
*
|
|
101
|
+
* @param operationType - Operation type
|
|
102
|
+
* @param options - Additional query options
|
|
103
|
+
* @returns Query result
|
|
104
|
+
*/
|
|
105
|
+
queryByOperationType(operationType: OperationType, options?: Omit<AuditLogQueryOptions, 'operationType'>): AuditLogQueryResult;
|
|
106
|
+
/**
|
|
107
|
+
* Get logs within a time range
|
|
108
|
+
*
|
|
109
|
+
* @param after - Start of time range
|
|
110
|
+
* @param before - End of time range
|
|
111
|
+
* @param options - Additional query options
|
|
112
|
+
* @returns Query result
|
|
113
|
+
*/
|
|
114
|
+
queryByTimeRange(after: Date, before: Date, options?: Omit<AuditLogQueryOptions, 'after' | 'before'>): AuditLogQueryResult;
|
|
115
|
+
/**
|
|
116
|
+
* Get error logs
|
|
117
|
+
*
|
|
118
|
+
* @param options - Additional query options
|
|
119
|
+
* @returns Query result
|
|
120
|
+
*/
|
|
121
|
+
queryErrors(options?: Omit<AuditLogQueryOptions, 'hasError'>): AuditLogQueryResult;
|
|
122
|
+
/**
|
|
123
|
+
* Get tool execution logs
|
|
124
|
+
*
|
|
125
|
+
* @param toolName - Optional tool name filter
|
|
126
|
+
* @param options - Additional query options
|
|
127
|
+
* @returns Query result
|
|
128
|
+
*/
|
|
129
|
+
queryToolExecutions(toolName?: string, options?: Omit<AuditLogQueryOptions, 'operationType' | 'target'>): AuditLogQueryResult;
|
|
130
|
+
/**
|
|
131
|
+
* Get aggregated statistics
|
|
132
|
+
*
|
|
133
|
+
* @param options - Optional filter options
|
|
134
|
+
* @returns Aggregated statistics
|
|
135
|
+
*/
|
|
136
|
+
getStats(options?: AuditLogQueryOptions): AuditLogStats;
|
|
137
|
+
/**
|
|
138
|
+
* Get recent logs
|
|
139
|
+
*
|
|
140
|
+
* @param count - Number of logs to return
|
|
141
|
+
* @returns Array of recent logs
|
|
142
|
+
*/
|
|
143
|
+
getRecentLogs(count?: number): OperationLog[];
|
|
144
|
+
/**
|
|
145
|
+
* Search logs by target pattern
|
|
146
|
+
*
|
|
147
|
+
* @param pattern - Search pattern (supports simple wildcards)
|
|
148
|
+
* @param options - Additional query options
|
|
149
|
+
* @returns Query result
|
|
150
|
+
*/
|
|
151
|
+
searchByTarget(pattern: string, options?: Omit<AuditLogQueryOptions, 'target'>): AuditLogQueryResult;
|
|
152
|
+
/**
|
|
153
|
+
* Apply filters to logs
|
|
154
|
+
*/
|
|
155
|
+
private applyFilters;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Create a new AuditLogQuery instance
|
|
159
|
+
*
|
|
160
|
+
* @param logger - AuditLogger instance to query
|
|
161
|
+
* @returns AuditLogQuery instance
|
|
162
|
+
*/
|
|
163
|
+
export declare function createAuditLogQuery(logger: AuditLogger): AuditLogQuery;
|
|
164
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/audit/query.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE7F;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,yCAAyC;IACzC,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,uBAAuB;IACvB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,mCAAmC;IACnC,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB;IACjB,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,eAAe,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC/C,qBAAqB;IACrB,QAAQ,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAC1C,gCAAgC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,gDAAgD;IAChD,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,SAAS,CAAC,EAAE;QACV,QAAQ,EAAE,IAAI,CAAC;QACf,MAAM,EAAE,IAAI,CAAC;KACd,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,2BAA2B;IAC3B,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAEvC;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,mBAAmB;IA+B1D;;;;;;OAMG;IACH,cAAc,CACZ,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,WAAW,CAAC,GAChD,mBAAmB;IAItB;;;;;;OAMG;IACH,oBAAoB,CAClB,aAAa,EAAE,aAAa,EAC5B,OAAO,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,eAAe,CAAC,GACpD,mBAAmB;IAItB;;;;;;;OAOG;IACH,gBAAgB,CACd,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,OAAO,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,OAAO,GAAG,QAAQ,CAAC,GACvD,mBAAmB;IAItB;;;;;OAKG;IACH,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,UAAU,CAAC,GAAG,mBAAmB;IAIlF;;;;;;OAMG;IACH,mBAAmB,CACjB,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,eAAe,GAAG,QAAQ,CAAC,GAC/D,mBAAmB;IAQtB;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,aAAa;IAwDvD;;;;;OAKG;IACH,aAAa,CAAC,KAAK,GAAE,MAAW,GAAG,YAAY,EAAE;IAKjD;;;;;;OAMG;IACH,cAAc,CACZ,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAC,GAC7C,mBAAmB;IAkCtB;;OAEG;IACH,OAAO,CAAC,YAAY;CA4CrB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa,CAEtE"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit Log Query
|
|
3
|
+
*
|
|
4
|
+
* Provides advanced querying capabilities for audit logs
|
|
5
|
+
* with support for filtering by session, operation type, and time range.
|
|
6
|
+
*
|
|
7
|
+
* _Requirements: 10.4_
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Audit Log Query Service
|
|
11
|
+
*
|
|
12
|
+
* Provides advanced querying and aggregation capabilities
|
|
13
|
+
* for audit logs.
|
|
14
|
+
*/
|
|
15
|
+
export class AuditLogQuery {
|
|
16
|
+
logger;
|
|
17
|
+
constructor(logger) {
|
|
18
|
+
this.logger = logger;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Query logs with advanced filtering
|
|
22
|
+
*
|
|
23
|
+
* @param options - Query options
|
|
24
|
+
* @returns Query result with pagination info
|
|
25
|
+
*/
|
|
26
|
+
query(options) {
|
|
27
|
+
let logs = this.logger.getAllLogs();
|
|
28
|
+
// Apply filters
|
|
29
|
+
logs = this.applyFilters(logs, options);
|
|
30
|
+
// Get total count before pagination
|
|
31
|
+
const totalCount = logs.length;
|
|
32
|
+
// Apply sorting
|
|
33
|
+
const order = options?.order ?? 'desc';
|
|
34
|
+
logs.sort((a, b) => {
|
|
35
|
+
const diff = a.createdAt.getTime() - b.createdAt.getTime();
|
|
36
|
+
return order === 'asc' ? diff : -diff;
|
|
37
|
+
});
|
|
38
|
+
// Apply pagination
|
|
39
|
+
const offset = options?.offset ?? 0;
|
|
40
|
+
const limit = options?.limit ?? 100;
|
|
41
|
+
logs = logs.slice(offset, offset + limit);
|
|
42
|
+
return {
|
|
43
|
+
logs,
|
|
44
|
+
totalCount,
|
|
45
|
+
hasMore: offset + logs.length < totalCount,
|
|
46
|
+
offset,
|
|
47
|
+
limit,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Get logs for a specific session
|
|
52
|
+
*
|
|
53
|
+
* @param sessionId - Session ID
|
|
54
|
+
* @param options - Additional query options
|
|
55
|
+
* @returns Query result
|
|
56
|
+
*/
|
|
57
|
+
queryBySession(sessionId, options) {
|
|
58
|
+
return this.query({ ...options, sessionId });
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get logs for a specific operation type
|
|
62
|
+
*
|
|
63
|
+
* @param operationType - Operation type
|
|
64
|
+
* @param options - Additional query options
|
|
65
|
+
* @returns Query result
|
|
66
|
+
*/
|
|
67
|
+
queryByOperationType(operationType, options) {
|
|
68
|
+
return this.query({ ...options, operationType });
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get logs within a time range
|
|
72
|
+
*
|
|
73
|
+
* @param after - Start of time range
|
|
74
|
+
* @param before - End of time range
|
|
75
|
+
* @param options - Additional query options
|
|
76
|
+
* @returns Query result
|
|
77
|
+
*/
|
|
78
|
+
queryByTimeRange(after, before, options) {
|
|
79
|
+
return this.query({ ...options, after, before });
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Get error logs
|
|
83
|
+
*
|
|
84
|
+
* @param options - Additional query options
|
|
85
|
+
* @returns Query result
|
|
86
|
+
*/
|
|
87
|
+
queryErrors(options) {
|
|
88
|
+
return this.query({ ...options, hasError: true });
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get tool execution logs
|
|
92
|
+
*
|
|
93
|
+
* @param toolName - Optional tool name filter
|
|
94
|
+
* @param options - Additional query options
|
|
95
|
+
* @returns Query result
|
|
96
|
+
*/
|
|
97
|
+
queryToolExecutions(toolName, options) {
|
|
98
|
+
return this.query({
|
|
99
|
+
...options,
|
|
100
|
+
operationType: 'tool_execution',
|
|
101
|
+
target: toolName,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get aggregated statistics
|
|
106
|
+
*
|
|
107
|
+
* @param options - Optional filter options
|
|
108
|
+
* @returns Aggregated statistics
|
|
109
|
+
*/
|
|
110
|
+
getStats(options) {
|
|
111
|
+
let logs = this.logger.getAllLogs();
|
|
112
|
+
logs = this.applyFilters(logs, options);
|
|
113
|
+
const byOperationType = {};
|
|
114
|
+
const byStatus = {};
|
|
115
|
+
const sessions = new Set();
|
|
116
|
+
let totalDuration = 0;
|
|
117
|
+
let durationCount = 0;
|
|
118
|
+
let errorCount = 0;
|
|
119
|
+
let earliest;
|
|
120
|
+
let latest;
|
|
121
|
+
for (const log of logs) {
|
|
122
|
+
// Count by operation type
|
|
123
|
+
byOperationType[log.operationType] = (byOperationType[log.operationType] ?? 0) + 1;
|
|
124
|
+
// Count by status
|
|
125
|
+
byStatus[log.status] = (byStatus[log.status] ?? 0) + 1;
|
|
126
|
+
// Track sessions
|
|
127
|
+
if (log.sessionId) {
|
|
128
|
+
sessions.add(log.sessionId);
|
|
129
|
+
}
|
|
130
|
+
// Track duration for tool executions
|
|
131
|
+
if (log.operationType === 'tool_execution' && log.durationMs !== undefined) {
|
|
132
|
+
totalDuration += log.durationMs;
|
|
133
|
+
durationCount++;
|
|
134
|
+
}
|
|
135
|
+
// Count errors
|
|
136
|
+
if (log.status === 'failure' || log.errorMessage) {
|
|
137
|
+
errorCount++;
|
|
138
|
+
}
|
|
139
|
+
// Track time range
|
|
140
|
+
if (!earliest || log.createdAt < earliest) {
|
|
141
|
+
earliest = log.createdAt;
|
|
142
|
+
}
|
|
143
|
+
if (!latest || log.createdAt > latest) {
|
|
144
|
+
latest = log.createdAt;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
totalLogs: logs.length,
|
|
149
|
+
byOperationType: byOperationType,
|
|
150
|
+
byStatus: byStatus,
|
|
151
|
+
uniqueSessions: sessions.size,
|
|
152
|
+
avgToolExecutionDuration: durationCount > 0 ? totalDuration / durationCount : undefined,
|
|
153
|
+
errorRate: logs.length > 0 ? (errorCount / logs.length) * 100 : 0,
|
|
154
|
+
timeRange: earliest && latest ? { earliest, latest } : undefined,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Get recent logs
|
|
159
|
+
*
|
|
160
|
+
* @param count - Number of logs to return
|
|
161
|
+
* @returns Array of recent logs
|
|
162
|
+
*/
|
|
163
|
+
getRecentLogs(count = 10) {
|
|
164
|
+
const result = this.query({ limit: count, order: 'desc' });
|
|
165
|
+
return result.logs;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Search logs by target pattern
|
|
169
|
+
*
|
|
170
|
+
* @param pattern - Search pattern (supports simple wildcards)
|
|
171
|
+
* @param options - Additional query options
|
|
172
|
+
* @returns Query result
|
|
173
|
+
*/
|
|
174
|
+
searchByTarget(pattern, options) {
|
|
175
|
+
let logs = this.logger.getAllLogs();
|
|
176
|
+
logs = this.applyFilters(logs, options);
|
|
177
|
+
// Convert pattern to regex (simple wildcard support)
|
|
178
|
+
const regexPattern = pattern
|
|
179
|
+
.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
|
|
180
|
+
.replace(/\\\*/g, '.*')
|
|
181
|
+
.replace(/\\\?/g, '.');
|
|
182
|
+
const regex = new RegExp(regexPattern, 'i');
|
|
183
|
+
logs = logs.filter((log) => log.target && regex.test(log.target));
|
|
184
|
+
const totalCount = logs.length;
|
|
185
|
+
const offset = options?.offset ?? 0;
|
|
186
|
+
const limit = options?.limit ?? 100;
|
|
187
|
+
const order = options?.order ?? 'desc';
|
|
188
|
+
logs.sort((a, b) => {
|
|
189
|
+
const diff = a.createdAt.getTime() - b.createdAt.getTime();
|
|
190
|
+
return order === 'asc' ? diff : -diff;
|
|
191
|
+
});
|
|
192
|
+
logs = logs.slice(offset, offset + limit);
|
|
193
|
+
return {
|
|
194
|
+
logs,
|
|
195
|
+
totalCount,
|
|
196
|
+
hasMore: offset + logs.length < totalCount,
|
|
197
|
+
offset,
|
|
198
|
+
limit,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Apply filters to logs
|
|
203
|
+
*/
|
|
204
|
+
applyFilters(logs, options) {
|
|
205
|
+
if (!options) {
|
|
206
|
+
return logs;
|
|
207
|
+
}
|
|
208
|
+
if (options.sessionId) {
|
|
209
|
+
logs = logs.filter((log) => log.sessionId === options.sessionId);
|
|
210
|
+
}
|
|
211
|
+
if (options.operationType) {
|
|
212
|
+
logs = logs.filter((log) => log.operationType === options.operationType);
|
|
213
|
+
}
|
|
214
|
+
if (options.operationTypes && options.operationTypes.length > 0) {
|
|
215
|
+
const types = new Set(options.operationTypes);
|
|
216
|
+
logs = logs.filter((log) => types.has(log.operationType));
|
|
217
|
+
}
|
|
218
|
+
if (options.status) {
|
|
219
|
+
logs = logs.filter((log) => log.status === options.status);
|
|
220
|
+
}
|
|
221
|
+
if (options.target) {
|
|
222
|
+
logs = logs.filter((log) => log.target === options.target);
|
|
223
|
+
}
|
|
224
|
+
if (options.after) {
|
|
225
|
+
logs = logs.filter((log) => log.createdAt >= options.after);
|
|
226
|
+
}
|
|
227
|
+
if (options.before) {
|
|
228
|
+
logs = logs.filter((log) => log.createdAt <= options.before);
|
|
229
|
+
}
|
|
230
|
+
if (options.hasError !== undefined) {
|
|
231
|
+
if (options.hasError) {
|
|
232
|
+
logs = logs.filter((log) => log.status === 'failure' || log.errorMessage);
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
logs = logs.filter((log) => log.status !== 'failure' && !log.errorMessage);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return logs;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Create a new AuditLogQuery instance
|
|
243
|
+
*
|
|
244
|
+
* @param logger - AuditLogger instance to query
|
|
245
|
+
* @returns AuditLogQuery instance
|
|
246
|
+
*/
|
|
247
|
+
export function createAuditLogQuery(logger) {
|
|
248
|
+
return new AuditLogQuery(logger);
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=query.js.map
|