@h-ai/audit 0.1.0-alpha.72 → 0.1.0-alpha.73
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/README.en.md +71 -13
- package/README.ja.md +71 -13
- package/README.md +72 -14
- package/dist/index.d.ts +257 -8
- package/dist/index.js +1050 -149
- package/dist/index.js.map +1 -1
- package/package.json +23 -3
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
+
import { ReachFunctions } from '@h-ai/reach';
|
|
2
|
+
import { StorageFunctions } from '@h-ai/storage';
|
|
1
3
|
import { z } from 'zod';
|
|
2
4
|
import * as _h_ai_core from '@h-ai/core';
|
|
3
5
|
import { HaiResult, PaginationOptionsInput, PaginatedResult } from '@h-ai/core';
|
|
6
|
+
import * as _h_ai_reldb from '@h-ai/reldb';
|
|
7
|
+
import { DmlWithTxOperations } from '@h-ai/reldb';
|
|
8
|
+
import { SchedulerInitInput } from '@h-ai/scheduler';
|
|
4
9
|
|
|
5
10
|
/**
|
|
6
11
|
* @h-ai/audit — 错误码与配置
|
|
@@ -21,6 +26,65 @@ import { HaiResult, PaginationOptionsInput, PaginatedResult } from '@h-ai/core';
|
|
|
21
26
|
* ```
|
|
22
27
|
*/
|
|
23
28
|
declare const AuditInitConfigSchema: z.ZodObject<{
|
|
29
|
+
alerts: z.ZodDefault<z.ZodObject<{
|
|
30
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
31
|
+
maxNotificationsPerCheck: z.ZodDefault<z.ZodNumber>;
|
|
32
|
+
rules: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
33
|
+
id: z.ZodString;
|
|
34
|
+
actions: z.ZodArray<z.ZodString>;
|
|
35
|
+
resource: z.ZodOptional<z.ZodString>;
|
|
36
|
+
outcomes: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
37
|
+
success: "success";
|
|
38
|
+
failure: "failure";
|
|
39
|
+
denied: "denied";
|
|
40
|
+
}>>>;
|
|
41
|
+
minimumSeverity: z.ZodDefault<z.ZodEnum<{
|
|
42
|
+
error: "error";
|
|
43
|
+
info: "info";
|
|
44
|
+
warning: "warning";
|
|
45
|
+
critical: "critical";
|
|
46
|
+
}>>;
|
|
47
|
+
severity: z.ZodDefault<z.ZodEnum<{
|
|
48
|
+
error: "error";
|
|
49
|
+
warning: "warning";
|
|
50
|
+
critical: "critical";
|
|
51
|
+
}>>;
|
|
52
|
+
threshold: z.ZodDefault<z.ZodNumber>;
|
|
53
|
+
windowSeconds: z.ZodDefault<z.ZodNumber>;
|
|
54
|
+
targets: z.ZodArray<z.ZodObject<{
|
|
55
|
+
id: z.ZodString;
|
|
56
|
+
provider: z.ZodString;
|
|
57
|
+
to: z.ZodString;
|
|
58
|
+
}, z.core.$strip>>;
|
|
59
|
+
}, z.core.$strip>>>;
|
|
60
|
+
schedule: z.ZodDefault<z.ZodObject<{
|
|
61
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
62
|
+
cron: z.ZodDefault<z.ZodString>;
|
|
63
|
+
timezone: z.ZodDefault<z.ZodString>;
|
|
64
|
+
}, z.core.$strip>>;
|
|
65
|
+
}, z.core.$strip>>;
|
|
66
|
+
backup: z.ZodDefault<z.ZodObject<{
|
|
67
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
68
|
+
batchSize: z.ZodDefault<z.ZodNumber>;
|
|
69
|
+
maxRecordBytes: z.ZodDefault<z.ZodNumber>;
|
|
70
|
+
schedule: z.ZodDefault<z.ZodObject<{
|
|
71
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
72
|
+
cron: z.ZodDefault<z.ZodString>;
|
|
73
|
+
timezone: z.ZodDefault<z.ZodString>;
|
|
74
|
+
}, z.core.$strip>>;
|
|
75
|
+
}, z.core.$strip>>;
|
|
76
|
+
capture: z.ZodDefault<z.ZodObject<{
|
|
77
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
78
|
+
includeReads: z.ZodDefault<z.ZodBoolean>;
|
|
79
|
+
}, z.core.$strip>>;
|
|
80
|
+
retention: z.ZodOptional<z.ZodObject<{
|
|
81
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
82
|
+
minDays: z.ZodDefault<z.ZodNumber>;
|
|
83
|
+
}, z.core.$strip>>;
|
|
84
|
+
privacy: z.ZodDefault<z.ZodObject<{
|
|
85
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
86
|
+
fields: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
87
|
+
}, z.core.$strip>>;
|
|
24
88
|
userTable: z.ZodDefault<z.ZodString>;
|
|
25
89
|
userIdColumn: z.ZodDefault<z.ZodString>;
|
|
26
90
|
userNameColumn: z.ZodDefault<z.ZodString>;
|
|
@@ -42,7 +106,12 @@ type AuditInitConfig = z.output<typeof AuditInitConfigSchema>;
|
|
|
42
106
|
* const record: AuditInitConfigInput = { userTable: 'app_users', userIdColumn: 'id', userNameColumn: 'username' }
|
|
43
107
|
* ```
|
|
44
108
|
*/
|
|
45
|
-
type AuditInitConfigInput = z.input<typeof AuditInitConfigSchema
|
|
109
|
+
type AuditInitConfigInput = z.input<typeof AuditInitConfigSchema> & {
|
|
110
|
+
/** 开启备份时注入已初始化且私有访问的存储;audit 不拥有它的生命周期。 */
|
|
111
|
+
storage?: StorageFunctions;
|
|
112
|
+
/** 开启告警时注入已初始化的 Reach;通知人员/目标仍由应用配置。 */
|
|
113
|
+
reach?: ReachFunctions;
|
|
114
|
+
};
|
|
46
115
|
|
|
47
116
|
/**
|
|
48
117
|
* 审计初始化、写入、查询和清理失败的稳定错误定义。
|
|
@@ -62,7 +131,61 @@ declare const HaiAuditError: {
|
|
|
62
131
|
readonly INIT_IN_PROGRESS: _h_ai_core.HaiErrorDef;
|
|
63
132
|
readonly NOT_INITIALIZED: _h_ai_core.HaiErrorDef;
|
|
64
133
|
readonly CONFIG_ERROR: _h_ai_core.HaiErrorDef;
|
|
134
|
+
readonly BACKUP_DISABLED: _h_ai_core.HaiErrorDef;
|
|
135
|
+
readonly BACKUP_FAILED: _h_ai_core.HaiErrorDef;
|
|
136
|
+
readonly BACKUP_INVALID: _h_ai_core.HaiErrorDef;
|
|
137
|
+
readonly BACKUP_CONFLICT: _h_ai_core.HaiErrorDef;
|
|
138
|
+
readonly ALERTS_DISABLED: _h_ai_core.HaiErrorDef;
|
|
139
|
+
readonly ALERTS_FAILED: _h_ai_core.HaiErrorDef;
|
|
65
140
|
};
|
|
141
|
+
/**
|
|
142
|
+
* 事件发生时的最小身份快照,不承载授权真值或凭据。
|
|
143
|
+
* @example
|
|
144
|
+
* ```ts
|
|
145
|
+
* import type { AuditActorSnapshot } from '@h-ai/audit'
|
|
146
|
+
* const actor: AuditActorSnapshot = { id: 'user-1', username: 'alice', roles: ['auditor'] }
|
|
147
|
+
* ```
|
|
148
|
+
*/
|
|
149
|
+
interface AuditActorSnapshot {
|
|
150
|
+
id: string;
|
|
151
|
+
username?: string;
|
|
152
|
+
displayName?: string;
|
|
153
|
+
roles?: string[];
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* 异步请求的审计上下文;不替代会话校验或权限守卫。
|
|
157
|
+
* @example
|
|
158
|
+
* ```ts
|
|
159
|
+
* import type { AuditContext } from '@h-ai/audit'
|
|
160
|
+
* const context: AuditContext = { requestId: 'request-1', actor: { id: 'user-1', username: 'alice' }, ipAddress: '192.0.2.8' }
|
|
161
|
+
* ```
|
|
162
|
+
*/
|
|
163
|
+
interface AuditContext {
|
|
164
|
+
actor?: AuditActorSnapshot | null;
|
|
165
|
+
category?: 'system' | 'business';
|
|
166
|
+
requestId?: string;
|
|
167
|
+
traceId?: string;
|
|
168
|
+
scopeId?: string;
|
|
169
|
+
ipAddress?: string;
|
|
170
|
+
userAgent?: string;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* 分类、结果、等级及事件身份;旧记录升级前未知的值保持 null。
|
|
174
|
+
* @example
|
|
175
|
+
* ```ts
|
|
176
|
+
* import type { AuditEventFields } from '@h-ai/audit'
|
|
177
|
+
* const fields: AuditEventFields = { category: 'system', outcome: 'denied', severity: 'warning', requestId: 'request-1' }
|
|
178
|
+
* ```
|
|
179
|
+
*/
|
|
180
|
+
interface AuditEventFields {
|
|
181
|
+
category?: 'system' | 'business' | null;
|
|
182
|
+
outcome?: 'success' | 'failure' | 'denied' | null;
|
|
183
|
+
severity?: 'info' | 'warning' | 'error' | 'critical' | null;
|
|
184
|
+
requestId?: string | null;
|
|
185
|
+
traceId?: string | null;
|
|
186
|
+
scopeId?: string | null;
|
|
187
|
+
actorSnapshot?: AuditActorSnapshot | null;
|
|
188
|
+
}
|
|
66
189
|
/**
|
|
67
190
|
* 审计日志记录
|
|
68
191
|
*
|
|
@@ -73,7 +196,7 @@ declare const HaiAuditError: {
|
|
|
73
196
|
* const record: AuditLog = { id: 'audit_example', userId: 'user_1', action: 'create', resource: 'orders', resourceId: 'order_1', details: null, ipAddress: null, userAgent: null, createdAt: new Date() }
|
|
74
197
|
* ```
|
|
75
198
|
*/
|
|
76
|
-
interface AuditLog {
|
|
199
|
+
interface AuditLog extends AuditEventFields {
|
|
77
200
|
/** 审计日志 ID,格式为 `audit_` 前缀 + 随机串 */
|
|
78
201
|
id: string;
|
|
79
202
|
/** 操作用户 ID;系统操作时为 null */
|
|
@@ -96,7 +219,7 @@ interface AuditLog {
|
|
|
96
219
|
/**
|
|
97
220
|
* 审计日志记录(含用户名)
|
|
98
221
|
*
|
|
99
|
-
*
|
|
222
|
+
* 新记录使用事件时身份快照;无快照的历史记录才保留旧的用户表关联展示。
|
|
100
223
|
* @example
|
|
101
224
|
* ```ts
|
|
102
225
|
* import type { AuditLogWithUser } from '@h-ai/audit'
|
|
@@ -118,7 +241,7 @@ interface AuditLogWithUser extends AuditLog {
|
|
|
118
241
|
* const record: CreateAuditLogInput = { userId: 'user_1', action: 'create', resource: 'orders', resourceId: 'order_1', details: { status: 'pending' } }
|
|
119
242
|
* ```
|
|
120
243
|
*/
|
|
121
|
-
interface CreateAuditLogInput {
|
|
244
|
+
interface CreateAuditLogInput extends AuditEventFields {
|
|
122
245
|
/** 操作用户 ID;系统操作可省略 */
|
|
123
246
|
userId?: string | null;
|
|
124
247
|
/** 操作类型(如 login / create / update / delete) */
|
|
@@ -145,6 +268,15 @@ interface CreateAuditLogInput {
|
|
|
145
268
|
* ```
|
|
146
269
|
*/
|
|
147
270
|
interface ListAuditLogsOptions extends PaginationOptionsInput {
|
|
271
|
+
/** 按可信入口生成或校验的请求/追踪编号定位关联事件。 */
|
|
272
|
+
requestId?: string;
|
|
273
|
+
traceId?: string;
|
|
274
|
+
category?: 'system' | 'business';
|
|
275
|
+
outcome?: 'success' | 'failure' | 'denied';
|
|
276
|
+
severity?: 'info' | 'warning' | 'error' | 'critical';
|
|
277
|
+
scopeId?: string;
|
|
278
|
+
sortBy?: 'createdAt' | 'action' | 'resource' | 'category' | 'outcome' | 'severity';
|
|
279
|
+
sortDirection?: 'asc' | 'desc';
|
|
148
280
|
/** 按用户 ID 过滤 */
|
|
149
281
|
userId?: string;
|
|
150
282
|
/** 按操作类型过滤(精确匹配) */
|
|
@@ -182,7 +314,7 @@ interface AuditStatItem {
|
|
|
182
314
|
* const record: CrudAuditInput = { userId: 'user_1', action: 'update', resource: 'orders', resourceId: 'order_1', details: { status: 'paid' } }
|
|
183
315
|
* ```
|
|
184
316
|
*/
|
|
185
|
-
interface CrudAuditInput {
|
|
317
|
+
interface CrudAuditInput extends AuditEventFields {
|
|
186
318
|
/** 操作用户 ID(系统操作传 null) */
|
|
187
319
|
userId?: string | null;
|
|
188
320
|
/** 操作类型 */
|
|
@@ -294,6 +426,21 @@ interface AuditHelper {
|
|
|
294
426
|
* ```
|
|
295
427
|
*/
|
|
296
428
|
interface AuditFunctions {
|
|
429
|
+
/** 手动流式归档与完整性核对,关闭后返回未初始化。 */
|
|
430
|
+
readonly backup: AuditBackupOperations;
|
|
431
|
+
/** 宿主显式装配的备份/告警任务计划;没有启用自动任务时为 null。 */
|
|
432
|
+
readonly schedulerPlan: Required<Pick<SchedulerInitInput, 'tasks' | 'hooks'>> | null;
|
|
433
|
+
/** 检查已提交事件的本窗口和前一窗口;每个规则/目标/窗口只尝试一次外部通知。 */
|
|
434
|
+
checkAlerts: (options?: {
|
|
435
|
+
signal?: AbortSignal;
|
|
436
|
+
}) => Promise<HaiResult<AuditAlertReport>>;
|
|
437
|
+
/**
|
|
438
|
+
* 在异步隔离的审计上下文中执行操作;同步或异步结果原样返回,调用方异常原样传播。
|
|
439
|
+
* @param context - 可信宿主解析的关联字段与身份快照。
|
|
440
|
+
* @param operation - 业务操作,内部 audit.log 自动补齐未显式指定的字段。
|
|
441
|
+
* @returns 业务操作的原始返回值或 Promise。
|
|
442
|
+
*/
|
|
443
|
+
withContext: <T>(context: AuditContext, operation: () => T) => T;
|
|
297
444
|
/**
|
|
298
445
|
* 初始化审计模块
|
|
299
446
|
*
|
|
@@ -311,9 +458,23 @@ interface AuditFunctions {
|
|
|
311
458
|
* 记录一条审计日志
|
|
312
459
|
*
|
|
313
460
|
* @param input - 日志内容(action 和 resource 为必填)
|
|
461
|
+
* @param tx - 可选的调用者事务;提交或回滚同时决定事件,不在此提交事务。
|
|
314
462
|
* @returns 成功时返回创建的 AuditLog;失败时返回 LOG_FAILED
|
|
315
463
|
*/
|
|
316
|
-
log: (input: CreateAuditLogInput) => Promise<HaiResult<AuditLog>>;
|
|
464
|
+
log: (input: CreateAuditLogInput, tx?: DmlWithTxOperations) => Promise<HaiResult<AuditLog>>;
|
|
465
|
+
/**
|
|
466
|
+
* 框架入口自动记录。模块未初始化或关闭自动采集时跳过;默认跳过成功读取。
|
|
467
|
+
* 不改变原业务结果;调用方仍须检查记录失败,避免静默丢失审计。
|
|
468
|
+
* @param input - 仅包含安全的事件字段,不应复制请求体或凭据。
|
|
469
|
+
* @param options - 入口是否属于读取操作;失败和拒绝的读取始终采集。
|
|
470
|
+
* @param options.read - 读取标志;默认 false。
|
|
471
|
+
* @param options.tx - 可选的调用者事务;回滚不会留下成功变更事件。
|
|
472
|
+
* @returns 持久化成功或按配置跳过时成功,否则返回审计错误。
|
|
473
|
+
*/
|
|
474
|
+
capture: (input: CreateAuditLogInput, options?: {
|
|
475
|
+
read?: boolean;
|
|
476
|
+
tx?: DmlWithTxOperations;
|
|
477
|
+
}) => Promise<HaiResult<void>>;
|
|
317
478
|
/**
|
|
318
479
|
* 分页查询审计日志列表(含用户名 LEFT JOIN)
|
|
319
480
|
*
|
|
@@ -342,7 +503,7 @@ interface AuditFunctions {
|
|
|
342
503
|
* @param days - 统计天数,默认 7
|
|
343
504
|
* @returns 成功时返回 AuditStatItem 数组;失败时返回 STATS_FAILED
|
|
344
505
|
*/
|
|
345
|
-
getStats: (days?: number) => Promise<HaiResult<AuditStatItem[]>>;
|
|
506
|
+
getStats: (days?: number, filters?: Pick<ListAuditLogsOptions, 'category' | 'outcome' | 'severity' | 'scopeId' | 'userId' | 'resource'>) => Promise<HaiResult<AuditStatItem[]>>;
|
|
346
507
|
/**
|
|
347
508
|
* 便捷记录器,封装常见审计场景
|
|
348
509
|
*
|
|
@@ -350,6 +511,82 @@ interface AuditFunctions {
|
|
|
350
511
|
*/
|
|
351
512
|
readonly helper: AuditHelper;
|
|
352
513
|
}
|
|
514
|
+
/**
|
|
515
|
+
* 私有归档键前缀;宿主公开文件入口须拒绝此命名空间,即使备份策略已关闭。
|
|
516
|
+
* @example
|
|
517
|
+
* ```ts
|
|
518
|
+
* import { AUDIT_BACKUP_PREFIX } from '@h-ai/audit'
|
|
519
|
+
* const key = `${AUDIT_BACKUP_PREFIX}daily-archive.jsonl`
|
|
520
|
+
* ```
|
|
521
|
+
*/
|
|
522
|
+
declare const AUDIT_BACKUP_PREFIX = "hai-private/audit-backups/";
|
|
523
|
+
/**
|
|
524
|
+
* 归档扫描条件。缺省截止时刻在开始时固定,过程中新增日志交给下一次归档。
|
|
525
|
+
* @example
|
|
526
|
+
* ```ts
|
|
527
|
+
* import type { AuditBackupOptions } from '@h-ai/audit'
|
|
528
|
+
* const options: AuditBackupOptions = { id: 'daily-archive', from: new Date('2026-01-01T00:00:00Z') }
|
|
529
|
+
* ```
|
|
530
|
+
*/
|
|
531
|
+
interface AuditBackupOptions {
|
|
532
|
+
/** 同一业务执行使用稳定 ID;省略时生成随机 ID。已有 ID 仅核对并复用完整归档。 */
|
|
533
|
+
id?: string;
|
|
534
|
+
from?: Date;
|
|
535
|
+
to?: Date;
|
|
536
|
+
signal?: AbortSignal;
|
|
537
|
+
}
|
|
538
|
+
/**
|
|
539
|
+
* 完整归档回执;SHA-256 校验内容完整性,不能替代独立存储权限或真实性认证。
|
|
540
|
+
* @example
|
|
541
|
+
* ```ts
|
|
542
|
+
* import { audit, type AuditBackupInfo } from '@h-ai/audit'
|
|
543
|
+
* // 宿主已初始化 RelDB、私有 Storage 和 Audit。
|
|
544
|
+
* const result = await audit.backup.run()
|
|
545
|
+
* if (result.success) { const receipt: AuditBackupInfo = result.data; void receipt.sha256 }
|
|
546
|
+
* ```
|
|
547
|
+
*/
|
|
548
|
+
interface AuditBackupInfo {
|
|
549
|
+
id: string;
|
|
550
|
+
key: string;
|
|
551
|
+
recordCount: number;
|
|
552
|
+
sha256: string;
|
|
553
|
+
createdAt: Date;
|
|
554
|
+
cutoff: Date;
|
|
555
|
+
}
|
|
556
|
+
/**
|
|
557
|
+
* 备份不覆盖在线审计。JSONL 归档可核对后用于离线恢复/独立查询存储。
|
|
558
|
+
* @example
|
|
559
|
+
* ```ts
|
|
560
|
+
* import { audit, type AuditBackupOperations } from '@h-ai/audit'
|
|
561
|
+
* const operations: AuditBackupOperations = audit.backup
|
|
562
|
+
* const result = await operations.run({ id: 'daily-archive' })
|
|
563
|
+
* if (!result.success) result.error.code
|
|
564
|
+
* ```
|
|
565
|
+
*/
|
|
566
|
+
interface AuditBackupOperations {
|
|
567
|
+
/** 创建或核对并复用同一 ID 的完整归档;已有归档不覆盖,输入无效、取消或存储失败返回失败。 */
|
|
568
|
+
run: (options?: AuditBackupOptions) => Promise<HaiResult<AuditBackupInfo>>;
|
|
569
|
+
/** 有界流式核对规范、记录数和校验和;只允许读取私有归档命名空间。 */
|
|
570
|
+
verify: (key: string, options?: {
|
|
571
|
+
signal?: AbortSignal;
|
|
572
|
+
}) => Promise<HaiResult<AuditBackupInfo>>;
|
|
573
|
+
}
|
|
574
|
+
/**
|
|
575
|
+
* 本次检查的通知提交回执;submitted 不证明收件人已阅读,queued 仅表示 Reach 持久入队。
|
|
576
|
+
* @example
|
|
577
|
+
* ```ts
|
|
578
|
+
* import { audit, type AuditAlertReport } from '@h-ai/audit'
|
|
579
|
+
* const result = await audit.checkAlerts()
|
|
580
|
+
* if (result.success) { const report: AuditAlertReport = result.data; void report.failed }
|
|
581
|
+
* ```
|
|
582
|
+
*/
|
|
583
|
+
interface AuditAlertReport {
|
|
584
|
+
submitted: number;
|
|
585
|
+
queued: number;
|
|
586
|
+
failed: number;
|
|
587
|
+
/** 已达到单轮通知上限,后续检查继续领取未尝试目标。 */
|
|
588
|
+
more: boolean;
|
|
589
|
+
}
|
|
353
590
|
|
|
354
591
|
/**
|
|
355
592
|
* @h-ai/audit — 审计日志服务主入口
|
|
@@ -396,4 +633,16 @@ interface AuditFunctions {
|
|
|
396
633
|
*/
|
|
397
634
|
declare const audit: AuditFunctions;
|
|
398
635
|
|
|
399
|
-
|
|
636
|
+
/**
|
|
637
|
+
* 只读预检或迁移审计字段、保留设置和写入保护;升级前停旧写入并备份。
|
|
638
|
+
* @example
|
|
639
|
+
* ```ts
|
|
640
|
+
* import { migrateAudit } from '@h-ai/audit'
|
|
641
|
+
* const plan = await migrateAudit({ dryRun: true }) // RelDB 已初始化;不改写记录。
|
|
642
|
+
* ```
|
|
643
|
+
*/
|
|
644
|
+
declare function migrateAudit(options?: {
|
|
645
|
+
dryRun?: boolean;
|
|
646
|
+
}): Promise<HaiResult<_h_ai_reldb.SchemaMigrationPlan>>;
|
|
647
|
+
|
|
648
|
+
export { AUDIT_BACKUP_PREFIX, type AuditActorSnapshot, type AuditAlertReport, type AuditBackupInfo, type AuditBackupOperations, type AuditBackupOptions, type AuditContext, type AuditEventFields, type AuditFunctions, type AuditHelper, type AuditInitConfig, type AuditInitConfigInput, AuditInitConfigSchema, type AuditLog, type AuditLogWithUser, type AuditStatItem, type CreateAuditLogInput, type CrudAuditInput, HaiAuditError, type ListAuditLogsOptions, audit, migrateAudit };
|