hazo_audit 2.0.2 → 2.1.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.
Files changed (48) hide show
  1. package/CHANGE_LOG.md +63 -0
  2. package/README.md +5 -1
  3. package/config/hazo_audit_config.ini.sample +28 -0
  4. package/db_setup_postgres.sql +76 -0
  5. package/db_setup_sqlite.sql +72 -0
  6. package/dist/client/AuditViewer.js +1 -1
  7. package/dist/client/FieldAuditIcon.js +1 -1
  8. package/dist/client/FieldAuditTrail.js +1 -1
  9. package/dist/client/RevertConfirmDialog.js +1 -1
  10. package/dist/lib/config/hazo_audit_config.d.ts +99 -0
  11. package/dist/lib/config/hazo_audit_config.d.ts.map +1 -0
  12. package/dist/lib/config/hazo_audit_config.js +67 -0
  13. package/dist/lib/config/hazo_audit_config.js.map +1 -0
  14. package/dist/nextjs/index.d.ts +12 -0
  15. package/dist/nextjs/index.d.ts.map +1 -1
  16. package/dist/nextjs/index.js +307 -218
  17. package/dist/nextjs/index.js.map +1 -1
  18. package/dist/server/audited_crud.js +3 -3
  19. package/dist/server/audited_crud.js.map +1 -1
  20. package/dist/server/context.js +3 -3
  21. package/dist/server/context.js.map +1 -1
  22. package/dist/server/errors.d.ts +10 -1
  23. package/dist/server/errors.d.ts.map +1 -1
  24. package/dist/server/errors.js +16 -2
  25. package/dist/server/errors.js.map +1 -1
  26. package/dist/server/intent.js +3 -3
  27. package/dist/server/intent.js.map +1 -1
  28. package/dist/server/outbox.js +2 -2
  29. package/dist/server/outbox.js.map +1 -1
  30. package/dist/server/worker.d.ts +7 -7
  31. package/dist/server/worker.d.ts.map +1 -1
  32. package/dist/server/worker.js +60 -15
  33. package/dist/server/worker.js.map +1 -1
  34. package/dist/server/wrap.js +2 -2
  35. package/dist/server/wrap.js.map +1 -1
  36. package/dist/utils/logger.d.ts +25 -0
  37. package/dist/utils/logger.d.ts.map +1 -0
  38. package/dist/utils/logger.js +42 -0
  39. package/dist/utils/logger.js.map +1 -0
  40. package/dist/utils/uuid.d.ts +19 -0
  41. package/dist/utils/uuid.d.ts.map +1 -0
  42. package/dist/utils/uuid.js +22 -0
  43. package/dist/utils/uuid.js.map +1 -0
  44. package/package.json +36 -21
  45. package/dist/client/cn.d.ts +0 -3
  46. package/dist/client/cn.d.ts.map +0 -1
  47. package/dist/client/cn.js +0 -6
  48. package/dist/client/cn.js.map +0 -1
@@ -5,6 +5,12 @@
5
5
  * their existing auth system (typically hazo_auth's hazo_get_tenant_auth)
6
6
  * without a hard module dep at this layer.
7
7
  *
8
+ * Every handler wraps its body with hazo_core's `withContext` so the
9
+ * correlation ID flows through every nested log call and downstream
10
+ * `fetchWithRequestId` outbound request. Errors are routed through
11
+ * `handleError()` which is HazoError-aware: 5xx → logger.error, 4xx →
12
+ * logger.warn.
13
+ *
8
14
  * Mounting (Next.js App Router):
9
15
  *
10
16
  * // app/api/audit/events/route.ts
@@ -31,12 +37,34 @@
31
37
  */
32
38
  import 'server-only';
33
39
  import { NextResponse } from 'next/server';
34
- import { randomUUID } from 'node:crypto';
40
+ import { HazoError, generateRequestId, getCorrelationId, withContext, } from 'hazo_core';
35
41
  import { QueryBuilder, createCrudService } from 'hazo_connect/server';
36
42
  import { AUDIT_VIEW_HISTORY, AUDIT_VIEW_SENSITIVE, AUDIT_VIEW_ACROSS_SCOPES, } from '../index.js';
43
+ import { get_logger, set_logger } from '../utils/logger.js';
37
44
  function jsonError(message, status) {
38
45
  return NextResponse.json({ error: message }, { status });
39
46
  }
47
+ /** Wrap an error caught in a handler — log appropriately and return a response. */
48
+ function handleError(logger, event, error) {
49
+ if (HazoError.is(error)) {
50
+ const status = error.httpStatus ?? 500;
51
+ if (status >= 500) {
52
+ logger.error(event, {
53
+ code: error.code,
54
+ message: error.message,
55
+ context: error.context,
56
+ });
57
+ }
58
+ else {
59
+ logger.warn(event, { code: error.code, message: error.message });
60
+ }
61
+ return jsonError(error.message, status);
62
+ }
63
+ logger.error(event, {
64
+ error: error instanceof Error ? error.message : String(error),
65
+ });
66
+ return jsonError('Internal server error', 500);
67
+ }
40
68
  /** Parse a JSON-text column back into a JS value (no-op if already parsed). */
41
69
  function parseJsonColumn(v) {
42
70
  if (v == null)
@@ -69,237 +97,298 @@ async function resolveParams(ctx) {
69
97
  const p = ctx.params;
70
98
  return p instanceof Promise ? await p : p;
71
99
  }
100
+ /** Generate a UUID for DB primary keys. Strips the `req_` prefix from generateRequestId(). */
101
+ function generateUUID() {
102
+ return generateRequestId().slice(4);
103
+ }
72
104
  export function createAuditEventsRoutes(opts) {
105
+ if (opts.logger) {
106
+ set_logger(opts.logger);
107
+ }
108
+ const logger = get_logger();
73
109
  const historyPerm = opts.history_permission ?? AUDIT_VIEW_HISTORY;
74
110
  const revealPerm = opts.reveal_permission ?? AUDIT_VIEW_SENSITIVE;
75
111
  const crossScopePerm = opts.cross_scope_permission ?? AUDIT_VIEW_ACROSS_SCOPES;
76
112
  const defaultLimit = opts.default_limit ?? 50;
77
113
  const maxLimit = opts.max_limit ?? 200;
78
114
  const GET = async (req) => {
79
- const auth = await Promise.resolve(opts.getAuth(req));
80
- if (!auth)
81
- return jsonError('Unauthenticated', 401);
82
- if (!auth.permissions.includes(historyPerm)) {
83
- return jsonError('Forbidden', 403);
84
- }
85
- const url = new URL(req.url);
86
- const subject_kind = url.searchParams.get('subject_kind');
87
- const subject_id = url.searchParams.get('subject_id');
88
- if (!subject_kind || !subject_id) {
89
- return jsonError('subject_kind and subject_id are required', 400);
90
- }
91
- const field_path = url.searchParams.get('field_path');
92
- const actor_user_id = url.searchParams.get('actor_user_id');
93
- const since = url.searchParams.get('since');
94
- const until = url.searchParams.get('until');
95
- const include = url.searchParams.get('include') || '';
96
- const wantIntent = include.split(',').map((s) => s.trim()).includes('intent');
97
- const limit = Math.min(Number.parseInt(url.searchParams.get('limit') || '', 10) || defaultLimit, maxLimit);
98
- const cursor = url.searchParams.get('cursor');
99
- const canSeeSensitive = auth.permissions.includes(revealPerm);
100
- const canCrossScope = auth.permissions.includes(crossScopePerm);
101
- // ── Field events ─────────────────────────────────────────────────────
102
- let qb = new QueryBuilder()
103
- .from('hazo_audit_field')
104
- .select('*')
105
- .where('subject_kind', 'eq', subject_kind)
106
- .where('subject_id', 'eq', subject_id)
107
- .order('occurred_at', 'desc')
108
- .limit(limit);
109
- if (field_path)
110
- qb = qb.where('field_path', 'eq', field_path);
111
- if (actor_user_id)
112
- qb = qb.where('actor_user_id', 'eq', actor_user_id);
113
- if (since)
114
- qb = qb.where('occurred_at', 'gte', since);
115
- if (until)
116
- qb = qb.where('occurred_at', 'lte', until);
117
- if (!canCrossScope && auth.scope_id) {
118
- qb = qb.where('scope_id', 'eq', auth.scope_id);
119
- }
120
- if (cursor)
121
- qb = qb.where('occurred_at', 'lt', cursor);
122
- let field_events = [];
123
- try {
124
- const rows = await opts.audit_adapter.query(qb, 'GET');
125
- field_events = Array.isArray(rows)
126
- ? rows
127
- .map(normaliseField)
128
- .map((r) => (canSeeSensitive ? r : maskField(r)))
129
- : [];
130
- }
131
- catch (err) {
132
- return jsonError(`Failed to read field events: ${err instanceof Error ? err.message : 'unknown'}`, 500);
133
- }
134
- let intent_events;
135
- if (wantIntent) {
136
- let iqb = new QueryBuilder()
137
- .from('hazo_audit_intent')
138
- .select('*')
139
- .where('subject_kind', 'eq', subject_kind)
140
- .where('subject_id', 'eq', subject_id)
141
- .order('occurred_at', 'desc')
142
- .limit(limit);
143
- if (since)
144
- iqb = iqb.where('occurred_at', 'gte', since);
145
- if (until)
146
- iqb = iqb.where('occurred_at', 'lte', until);
147
- if (!canCrossScope && auth.scope_id) {
148
- iqb = iqb.where('scope_id', 'eq', auth.scope_id);
149
- }
115
+ return withContext({ correlationId: getCorrelationId() ?? generateRequestId() }, async () => {
150
116
  try {
151
- const irows = await opts.audit_adapter.query(iqb, 'GET');
152
- intent_events = Array.isArray(irows) ? irows : [];
117
+ const auth = await Promise.resolve(opts.getAuth(req));
118
+ if (!auth) {
119
+ logger.warn('events.list.unauthenticated');
120
+ return jsonError('Unauthenticated', 401);
121
+ }
122
+ if (!auth.permissions.includes(historyPerm)) {
123
+ logger.warn('events.list.forbidden', {
124
+ user_id: auth.user_id,
125
+ missing: historyPerm,
126
+ });
127
+ return jsonError('Forbidden', 403);
128
+ }
129
+ const url = new URL(req.url);
130
+ const subject_kind = url.searchParams.get('subject_kind');
131
+ const subject_id = url.searchParams.get('subject_id');
132
+ if (!subject_kind || !subject_id) {
133
+ return jsonError('subject_kind and subject_id are required', 400);
134
+ }
135
+ const field_path = url.searchParams.get('field_path');
136
+ const actor_user_id = url.searchParams.get('actor_user_id');
137
+ const since = url.searchParams.get('since');
138
+ const until = url.searchParams.get('until');
139
+ const include = url.searchParams.get('include') || '';
140
+ const wantIntent = include
141
+ .split(',')
142
+ .map((s) => s.trim())
143
+ .includes('intent');
144
+ const limit = Math.min(Number.parseInt(url.searchParams.get('limit') || '', 10) || defaultLimit, maxLimit);
145
+ const cursor = url.searchParams.get('cursor');
146
+ const canSeeSensitive = auth.permissions.includes(revealPerm);
147
+ const canCrossScope = auth.permissions.includes(crossScopePerm);
148
+ // ── Field events ───────────────────────────────────────────────
149
+ let qb = new QueryBuilder()
150
+ .from('hazo_audit_field')
151
+ .select('*')
152
+ .where('subject_kind', 'eq', subject_kind)
153
+ .where('subject_id', 'eq', subject_id)
154
+ .order('occurred_at', 'desc')
155
+ .limit(limit);
156
+ if (field_path)
157
+ qb = qb.where('field_path', 'eq', field_path);
158
+ if (actor_user_id)
159
+ qb = qb.where('actor_user_id', 'eq', actor_user_id);
160
+ if (since)
161
+ qb = qb.where('occurred_at', 'gte', since);
162
+ if (until)
163
+ qb = qb.where('occurred_at', 'lte', until);
164
+ if (!canCrossScope && auth.scope_id) {
165
+ qb = qb.where('scope_id', 'eq', auth.scope_id);
166
+ }
167
+ if (cursor)
168
+ qb = qb.where('occurred_at', 'lt', cursor);
169
+ const rows = await opts.audit_adapter.query(qb, 'GET');
170
+ const field_events = Array.isArray(rows)
171
+ ? rows
172
+ .map(normaliseField)
173
+ .map((r) => (canSeeSensitive ? r : maskField(r)))
174
+ : [];
175
+ let intent_events;
176
+ if (wantIntent) {
177
+ let iqb = new QueryBuilder()
178
+ .from('hazo_audit_intent')
179
+ .select('*')
180
+ .where('subject_kind', 'eq', subject_kind)
181
+ .where('subject_id', 'eq', subject_id)
182
+ .order('occurred_at', 'desc')
183
+ .limit(limit);
184
+ if (since)
185
+ iqb = iqb.where('occurred_at', 'gte', since);
186
+ if (until)
187
+ iqb = iqb.where('occurred_at', 'lte', until);
188
+ if (!canCrossScope && auth.scope_id) {
189
+ iqb = iqb.where('scope_id', 'eq', auth.scope_id);
190
+ }
191
+ try {
192
+ const irows = await opts.audit_adapter.query(iqb, 'GET');
193
+ intent_events = Array.isArray(irows)
194
+ ? irows
195
+ : [];
196
+ }
197
+ catch (err) {
198
+ logger.warn('events.list.intent_read_failed', {
199
+ error: err instanceof Error ? err.message : String(err),
200
+ });
201
+ intent_events = [];
202
+ }
203
+ }
204
+ const next_cursor = field_events.length === limit
205
+ ? field_events[field_events.length - 1].occurred_at
206
+ : null;
207
+ const body = {
208
+ field_events,
209
+ intent_events,
210
+ next_cursor,
211
+ };
212
+ return NextResponse.json(body);
153
213
  }
154
- catch {
155
- intent_events = [];
214
+ catch (error) {
215
+ return handleError(logger, 'events.list.failed', error);
156
216
  }
157
- }
158
- const next_cursor = field_events.length === limit
159
- ? field_events[field_events.length - 1].occurred_at
160
- : null;
161
- const body = { field_events, intent_events, next_cursor };
162
- return NextResponse.json(body);
217
+ });
163
218
  };
164
219
  const reveal = async (req, ctx) => {
165
- const auth = await Promise.resolve(opts.getAuth(req));
166
- if (!auth)
167
- return jsonError('Unauthenticated', 401);
168
- if (!auth.permissions.includes(historyPerm)) {
169
- return jsonError('Forbidden', 403);
170
- }
171
- if (!auth.permissions.includes(revealPerm)) {
172
- return jsonError('Forbidden — sensitive reveal not permitted', 403);
173
- }
174
- const params = await resolveParams(ctx);
175
- const id = params.id;
176
- if (!id)
177
- return jsonError('Missing id param', 400);
178
- // Fetch the row directly (no scope filter on reveal — caller already
179
- // proved permission and we want consistent behavior with the list query).
180
- const qb = new QueryBuilder()
181
- .from('hazo_audit_field')
182
- .select('*')
183
- .where('id', 'eq', id)
184
- .limit(1);
185
- if (!auth.permissions.includes(crossScopePerm) &&
186
- auth.scope_id) {
187
- qb.where('scope_id', 'eq', auth.scope_id);
188
- }
189
- let row = null;
190
- try {
191
- const rows = await opts.audit_adapter.query(qb, 'GET');
192
- row = Array.isArray(rows) && rows.length > 0
193
- ? rows[0]
194
- : null;
195
- }
196
- catch (err) {
197
- return jsonError(`Failed to read field event: ${err instanceof Error ? err.message : 'unknown'}`, 500);
198
- }
199
- if (!row)
200
- return jsonError('Not found', 404);
201
- // Reveal is itself audited — write an intent row tagged 'audit_reveal'.
202
- try {
203
- const intentSvc = createCrudService(opts.audit_adapter, 'hazo_audit_intent', { autoId: { enabled: true, column: 'id' } });
204
- await intentSvc.insert({
205
- id: randomUUID(),
206
- scope_id: row.scope_id,
207
- correlation_id: row.correlation_id,
208
- event_name: 'audit_reveal',
209
- payload: JSON.stringify({ audit_field_id: id }),
210
- subject_kind: row.subject_kind,
211
- subject_id: row.subject_id,
212
- actor_kind: 'user',
213
- actor_user_id: auth.user_id,
214
- actor_label: auth.user_label ?? null,
215
- });
216
- }
217
- catch {
218
- /* swallow: reveal still succeeds; log loss is acceptable here */
219
- }
220
- const body = {
221
- id: row.id,
222
- before_value: parseJsonColumn(row.before_value),
223
- after_value: parseJsonColumn(row.after_value),
224
- };
225
- return NextResponse.json(body);
220
+ return withContext({ correlationId: getCorrelationId() ?? generateRequestId() }, async () => {
221
+ try {
222
+ const auth = await Promise.resolve(opts.getAuth(req));
223
+ if (!auth) {
224
+ logger.warn('events.reveal.unauthenticated');
225
+ return jsonError('Unauthenticated', 401);
226
+ }
227
+ if (!auth.permissions.includes(historyPerm)) {
228
+ logger.warn('events.reveal.forbidden', { user_id: auth.user_id });
229
+ return jsonError('Forbidden', 403);
230
+ }
231
+ if (!auth.permissions.includes(revealPerm)) {
232
+ logger.warn('events.reveal.sensitive_forbidden', {
233
+ user_id: auth.user_id,
234
+ });
235
+ return jsonError('Forbidden sensitive reveal not permitted', 403);
236
+ }
237
+ const params = await resolveParams(ctx);
238
+ const id = params.id;
239
+ if (!id)
240
+ return jsonError('Missing id param', 400);
241
+ // Fetch the row directly (no scope filter on reveal — caller
242
+ // already proved permission and we want consistent behavior with
243
+ // the list query).
244
+ const qb = new QueryBuilder()
245
+ .from('hazo_audit_field')
246
+ .select('*')
247
+ .where('id', 'eq', id)
248
+ .limit(1);
249
+ if (!auth.permissions.includes(crossScopePerm) &&
250
+ auth.scope_id) {
251
+ qb.where('scope_id', 'eq', auth.scope_id);
252
+ }
253
+ const rows = await opts.audit_adapter.query(qb, 'GET');
254
+ const row = Array.isArray(rows) && rows.length > 0
255
+ ? rows[0]
256
+ : null;
257
+ if (!row)
258
+ return jsonError('Not found', 404);
259
+ // Reveal is itself audited — write an intent row tagged
260
+ // 'audit_reveal'. Best-effort: reveal still succeeds if the
261
+ // bookkeeping write fails.
262
+ try {
263
+ const intentSvc = createCrudService(opts.audit_adapter, 'hazo_audit_intent', { autoId: { enabled: true, column: 'id' } });
264
+ await intentSvc.insert({
265
+ id: generateUUID(),
266
+ scope_id: row.scope_id,
267
+ correlation_id: row.correlation_id,
268
+ event_name: 'audit_reveal',
269
+ payload: JSON.stringify({ audit_field_id: id }),
270
+ subject_kind: row.subject_kind,
271
+ subject_id: row.subject_id,
272
+ actor_kind: 'user',
273
+ actor_user_id: auth.user_id,
274
+ actor_label: auth.user_label ?? null,
275
+ });
276
+ }
277
+ catch (err) {
278
+ logger.warn('events.reveal.audit_write_failed', {
279
+ error: err instanceof Error ? err.message : String(err),
280
+ });
281
+ }
282
+ logger.info('events.reveal.served', {
283
+ audit_field_id: id,
284
+ user_id: auth.user_id,
285
+ });
286
+ const body = {
287
+ id: row.id,
288
+ before_value: parseJsonColumn(row.before_value),
289
+ after_value: parseJsonColumn(row.after_value),
290
+ };
291
+ return NextResponse.json(body);
292
+ }
293
+ catch (error) {
294
+ return handleError(logger, 'events.reveal.failed', error);
295
+ }
296
+ });
226
297
  };
227
298
  const viewerGET = async (req) => {
228
- const auth = await Promise.resolve(opts.getAuth(req));
229
- if (!auth)
230
- return jsonError('Unauthenticated', 401);
231
- const viewerPerm = opts.viewer_permission ?? historyPerm;
232
- if (!auth.permissions.includes(viewerPerm)) {
233
- return jsonError('Forbidden', 403);
234
- }
235
- const url = new URL(req.url);
236
- const subject_kind = url.searchParams.get('subject_kind');
237
- const subject_id = url.searchParams.get('subject_id');
238
- const field_path = url.searchParams.get('field_path');
239
- const actor_user_id = url.searchParams.get('actor_user_id');
240
- const correlation_id = url.searchParams.get('correlation_id');
241
- const since = url.searchParams.get('since');
242
- const until = url.searchParams.get('until');
243
- const format = url.searchParams.get('format') || 'json';
244
- const limit = Math.min(Number.parseInt(url.searchParams.get('limit') || '', 10) || defaultLimit, maxLimit);
245
- const canSeeSensitive = auth.permissions.includes(revealPerm);
246
- const canCrossScope = auth.permissions.includes(crossScopePerm);
247
- let qb = new QueryBuilder()
248
- .from('hazo_audit_field')
249
- .select('*')
250
- .order('occurred_at', 'desc')
251
- .limit(limit);
252
- if (subject_kind)
253
- qb = qb.where('subject_kind', 'eq', subject_kind);
254
- if (subject_id)
255
- qb = qb.where('subject_id', 'eq', subject_id);
256
- if (field_path)
257
- qb = qb.where('field_path', 'eq', field_path);
258
- if (actor_user_id)
259
- qb = qb.where('actor_user_id', 'eq', actor_user_id);
260
- if (correlation_id)
261
- qb = qb.where('correlation_id', 'eq', correlation_id);
262
- if (since)
263
- qb = qb.where('occurred_at', 'gte', since);
264
- if (until)
265
- qb = qb.where('occurred_at', 'lte', until);
266
- if (!canCrossScope && auth.scope_id) {
267
- qb = qb.where('scope_id', 'eq', auth.scope_id);
268
- }
269
- let events = [];
270
- try {
271
- const rows = await opts.audit_adapter.query(qb, 'GET');
272
- events = Array.isArray(rows)
273
- ? rows
274
- .map(normaliseField)
275
- .map((r) => (canSeeSensitive ? r : maskField(r)))
276
- : [];
277
- }
278
- catch (err) {
279
- return jsonError(`Failed to read viewer events: ${err instanceof Error ? err.message : 'unknown'}`, 500);
280
- }
281
- if (format === 'csv') {
282
- const cols = [
283
- 'id', 'occurred_at', 'subject_kind', 'subject_id', 'field_path', 'op',
284
- 'before_value', 'after_value', 'actor_kind', 'actor_user_id', 'correlation_id',
285
- ];
286
- const escape = (v) => {
287
- if (v == null)
288
- return '';
289
- const s = typeof v === 'string' ? v : JSON.stringify(v);
290
- return /[,\n"]/.test(s) ? `"${s.replace(/"/g, '""')}"` : s;
291
- };
292
- const header = cols.join(',');
293
- const body = events.map((e) => cols.map((c) => escape(e[c])).join(',')).join('\n');
294
- return new NextResponse(`${header}\n${body}`, {
295
- status: 200,
296
- headers: {
297
- 'content-type': 'text/csv; charset=utf-8',
298
- 'content-disposition': 'attachment; filename="audit_events.csv"',
299
- },
300
- });
301
- }
302
- return NextResponse.json({ events });
299
+ return withContext({ correlationId: getCorrelationId() ?? generateRequestId() }, async () => {
300
+ try {
301
+ const auth = await Promise.resolve(opts.getAuth(req));
302
+ if (!auth) {
303
+ logger.warn('viewer.list.unauthenticated');
304
+ return jsonError('Unauthenticated', 401);
305
+ }
306
+ const viewerPerm = opts.viewer_permission ?? historyPerm;
307
+ if (!auth.permissions.includes(viewerPerm)) {
308
+ logger.warn('viewer.list.forbidden', {
309
+ user_id: auth.user_id,
310
+ missing: viewerPerm,
311
+ });
312
+ return jsonError('Forbidden', 403);
313
+ }
314
+ const url = new URL(req.url);
315
+ const subject_kind = url.searchParams.get('subject_kind');
316
+ const subject_id = url.searchParams.get('subject_id');
317
+ const field_path = url.searchParams.get('field_path');
318
+ const actor_user_id = url.searchParams.get('actor_user_id');
319
+ const correlation_id = url.searchParams.get('correlation_id');
320
+ const since = url.searchParams.get('since');
321
+ const until = url.searchParams.get('until');
322
+ const format = url.searchParams.get('format') || 'json';
323
+ const limit = Math.min(Number.parseInt(url.searchParams.get('limit') || '', 10) || defaultLimit, maxLimit);
324
+ const canSeeSensitive = auth.permissions.includes(revealPerm);
325
+ const canCrossScope = auth.permissions.includes(crossScopePerm);
326
+ let qb = new QueryBuilder()
327
+ .from('hazo_audit_field')
328
+ .select('*')
329
+ .order('occurred_at', 'desc')
330
+ .limit(limit);
331
+ if (subject_kind)
332
+ qb = qb.where('subject_kind', 'eq', subject_kind);
333
+ if (subject_id)
334
+ qb = qb.where('subject_id', 'eq', subject_id);
335
+ if (field_path)
336
+ qb = qb.where('field_path', 'eq', field_path);
337
+ if (actor_user_id)
338
+ qb = qb.where('actor_user_id', 'eq', actor_user_id);
339
+ if (correlation_id)
340
+ qb = qb.where('correlation_id', 'eq', correlation_id);
341
+ if (since)
342
+ qb = qb.where('occurred_at', 'gte', since);
343
+ if (until)
344
+ qb = qb.where('occurred_at', 'lte', until);
345
+ if (!canCrossScope && auth.scope_id) {
346
+ qb = qb.where('scope_id', 'eq', auth.scope_id);
347
+ }
348
+ const rows = await opts.audit_adapter.query(qb, 'GET');
349
+ const events = Array.isArray(rows)
350
+ ? rows
351
+ .map(normaliseField)
352
+ .map((r) => (canSeeSensitive ? r : maskField(r)))
353
+ : [];
354
+ if (format === 'csv') {
355
+ const cols = [
356
+ 'id',
357
+ 'occurred_at',
358
+ 'subject_kind',
359
+ 'subject_id',
360
+ 'field_path',
361
+ 'op',
362
+ 'before_value',
363
+ 'after_value',
364
+ 'actor_kind',
365
+ 'actor_user_id',
366
+ 'correlation_id',
367
+ ];
368
+ const escape = (v) => {
369
+ if (v == null)
370
+ return '';
371
+ const s = typeof v === 'string' ? v : JSON.stringify(v);
372
+ return /[,\n"]/.test(s) ? `"${s.replace(/"/g, '""')}"` : s;
373
+ };
374
+ const header = cols.join(',');
375
+ const body = events
376
+ .map((e) => cols.map((c) => escape(e[c])).join(','))
377
+ .join('\n');
378
+ return new NextResponse(`${header}\n${body}`, {
379
+ status: 200,
380
+ headers: {
381
+ 'content-type': 'text/csv; charset=utf-8',
382
+ 'content-disposition': 'attachment; filename="audit_events.csv"',
383
+ },
384
+ });
385
+ }
386
+ return NextResponse.json({ events });
387
+ }
388
+ catch (error) {
389
+ return handleError(logger, 'viewer.list.failed', error);
390
+ }
391
+ });
303
392
  };
304
393
  return { GET, reveal: { POST: reveal }, viewer: { GET: viewerGET } };
305
394
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nextjs/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nextjs/index.ts"],"names":[],"mappings":"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"}