hazo_audit 2.0.1 → 2.1.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.
Files changed (58) hide show
  1. package/CHANGE_LOG.md +80 -0
  2. package/README.md +57 -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.d.ts.map +1 -1
  8. package/dist/client/FieldAuditIcon.js +3 -3
  9. package/dist/client/FieldAuditIcon.js.map +1 -1
  10. package/dist/client/FieldAuditTrail.d.ts.map +1 -1
  11. package/dist/client/FieldAuditTrail.js +72 -9
  12. package/dist/client/FieldAuditTrail.js.map +1 -1
  13. package/dist/client/RevertConfirmDialog.js +1 -1
  14. package/dist/index.d.ts +43 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +9 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/lib/config/hazo_audit_config.d.ts +99 -0
  19. package/dist/lib/config/hazo_audit_config.d.ts.map +1 -0
  20. package/dist/lib/config/hazo_audit_config.js +67 -0
  21. package/dist/lib/config/hazo_audit_config.js.map +1 -0
  22. package/dist/nextjs/index.d.ts +12 -0
  23. package/dist/nextjs/index.d.ts.map +1 -1
  24. package/dist/nextjs/index.js +307 -218
  25. package/dist/nextjs/index.js.map +1 -1
  26. package/dist/server/audited_crud.js +3 -3
  27. package/dist/server/audited_crud.js.map +1 -1
  28. package/dist/server/context.js +3 -3
  29. package/dist/server/context.js.map +1 -1
  30. package/dist/server/diff.js +11 -3
  31. package/dist/server/diff.js.map +1 -1
  32. package/dist/server/errors.d.ts +10 -1
  33. package/dist/server/errors.d.ts.map +1 -1
  34. package/dist/server/errors.js +16 -2
  35. package/dist/server/errors.js.map +1 -1
  36. package/dist/server/intent.js +3 -3
  37. package/dist/server/intent.js.map +1 -1
  38. package/dist/server/outbox.js +2 -2
  39. package/dist/server/outbox.js.map +1 -1
  40. package/dist/server/worker.d.ts +7 -7
  41. package/dist/server/worker.d.ts.map +1 -1
  42. package/dist/server/worker.js +60 -15
  43. package/dist/server/worker.js.map +1 -1
  44. package/dist/server/wrap.js +2 -2
  45. package/dist/server/wrap.js.map +1 -1
  46. package/dist/utils/logger.d.ts +25 -0
  47. package/dist/utils/logger.d.ts.map +1 -0
  48. package/dist/utils/logger.js +42 -0
  49. package/dist/utils/logger.js.map +1 -0
  50. package/dist/utils/uuid.d.ts +19 -0
  51. package/dist/utils/uuid.d.ts.map +1 -0
  52. package/dist/utils/uuid.js +22 -0
  53. package/dist/utils/uuid.js.map +1 -0
  54. package/package.json +36 -21
  55. package/dist/client/cn.d.ts +0 -3
  56. package/dist/client/cn.d.ts.map +0 -1
  57. package/dist/client/cn.js +0 -6
  58. package/dist/client/cn.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -26,7 +26,50 @@ export interface FieldAuditProps {
26
26
  subjectId: string;
27
27
  /** Base path for audit routes. Defaults to `/api/audit`. */
28
28
  api_base?: string;
29
+ /**
30
+ * Map of intent `event_name` → display label. When an intent event shares a
31
+ * `correlation_id` with a field event, the field event's actor line is
32
+ * suffixed with ` (via <label>)` so users can see when a value came from
33
+ * prefill / import / export rather than direct typing.
34
+ *
35
+ * Apps emit intents via `auditIntent(adapter, name, callback, opts)` from
36
+ * `hazo_audit/server`; the package handles the correlation lookup.
37
+ *
38
+ * Example:
39
+ * ```ts
40
+ * intentLabels={{
41
+ * survey_prefill_key_info: 'auto-fill',
42
+ * wp_pdf_prefill: 'PDF import',
43
+ * }}
44
+ * ```
45
+ *
46
+ * `.completed` and `.failed` suffixes are stripped before lookup, so the map
47
+ * only needs the bare event names.
48
+ */
49
+ intentLabels?: Record<string, string>;
50
+ /**
51
+ * Override the op badge labels rendered next to each event in the trail.
52
+ * Defaults to `{ insert: 'Added', update: 'Changed', delete: 'Removed' }`.
53
+ *
54
+ * Pass any subset to override individual ops; unspecified ops keep the
55
+ * defaults. Pass an empty string to fall back to the raw DB op (lowercased).
56
+ */
57
+ opLabels?: OpLabels;
29
58
  }
59
+ /**
60
+ * Friendly op label overrides for the audit trail badge. Keys correspond to
61
+ * the database `op` value on `hazo_audit_field` rows.
62
+ */
63
+ export interface OpLabels {
64
+ insert?: string;
65
+ update?: string;
66
+ delete?: string;
67
+ }
68
+ /**
69
+ * Default friendly labels for the op badge. Action-oriented, past-tense so
70
+ * the badge reads naturally next to the actor: "Added by Pubs Abayasiri".
71
+ */
72
+ export declare const DEFAULT_OP_LABELS: Required<OpLabels>;
30
73
  /**
31
74
  * Canonicalises a JSONB path (e.g., `working_paper.sections.0.name`) into a
32
75
  * stable, human-readable identifier. Apps register these by name in
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,eAAO,MAAM,kBAAkB,EAAG,oBAA6B,CAAC;AAChE,eAAO,MAAM,oBAAoB,EAAG,sBAA+B,CAAC;AACpE,eAAO,MAAM,wBAAwB,EAAG,0BAAmC,CAAC;AAM5E,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,aAAa,GACb,gBAAgB,CAAC;AAErB,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,SAAS,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAMD,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,QAAQ,CAIhD,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;AAMpD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACnC,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,SAAS,CAAC;IACtB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,SAAS,CAAC;IACtB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACnC,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;CACtB;AAOD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IACjD,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B"}
package/dist/index.js CHANGED
@@ -17,4 +17,13 @@
17
17
  export const AUDIT_VIEW_HISTORY = 'view_audit_history';
18
18
  export const AUDIT_VIEW_SENSITIVE = 'view_sensitive_audit';
19
19
  export const AUDIT_VIEW_ACROSS_SCOPES = 'view_audit_across_scopes';
20
+ /**
21
+ * Default friendly labels for the op badge. Action-oriented, past-tense so
22
+ * the badge reads naturally next to the actor: "Added by Pubs Abayasiri".
23
+ */
24
+ export const DEFAULT_OP_LABELS = {
25
+ insert: 'Added',
26
+ update: 'Changed',
27
+ delete: 'Removed',
28
+ };
20
29
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,gFAAgF;AAChF,2EAA2E;AAC3E,+DAA+D;AAC/D,gFAAgF;AAEhF,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAA6B,CAAC;AAChE,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAA+B,CAAC;AACpE,MAAM,CAAC,MAAM,wBAAwB,GAAG,0BAAmC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,gFAAgF;AAChF,2EAA2E;AAC3E,+DAA+D;AAC/D,gFAAgF;AAEhF,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAA6B,CAAC;AAChE,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAA+B,CAAC;AACpE,MAAM,CAAC,MAAM,wBAAwB,GAAG,0BAAmC,CAAC;AAuE5E;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAuB;IACnD,MAAM,EAAE,OAAO;IACf,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;CAClB,CAAC"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * hazo_audit standard workspace-configuration schema + loader.
3
+ *
4
+ * Wraps hazo_core's `loadConfig` with a Zod schema that mirrors the
5
+ * `[general]` and `[log.overrides]` sections of `config/hazo_audit_config.ini`.
6
+ *
7
+ * Capture / retention / worker / overrides sections continue to be loaded
8
+ * by `src/server/config.ts::loadAuditConfig()` — that's the package-specific
9
+ * runtime config layer and is kept separate so the workspace-standard loader
10
+ * stays a thin Zod wrapper.
11
+ *
12
+ * Resolution order (per hazo_core/loadConfig):
13
+ * 1. <pkg>_config.ini at process.cwd()/config/ or package root
14
+ * 2. <pkg>_config.<HAZO_ENV>.ini overlay
15
+ * 3. HAZO_AUDIT_<SECTION>_<KEY> env-var overrides
16
+ */
17
+ import { z } from 'zod';
18
+ declare const schema: z.ZodNullable<z.ZodObject<{
19
+ general: z.ZodOptional<z.ZodObject<{
20
+ env: z.ZodOptional<z.ZodString>;
21
+ }, "strip", z.ZodTypeAny, {
22
+ env?: string | undefined;
23
+ }, {
24
+ env?: string | undefined;
25
+ }>>;
26
+ log: z.ZodOptional<z.ZodObject<{
27
+ overrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
28
+ }, "strip", z.ZodTypeAny, {
29
+ overrides?: Record<string, string> | undefined;
30
+ }, {
31
+ overrides?: Record<string, string> | undefined;
32
+ }>>;
33
+ retention: z.ZodOptional<z.ZodObject<{
34
+ outbox_drained_ttl_days: z.ZodOptional<z.ZodString>;
35
+ outbox_failed_ttl_days: z.ZodOptional<z.ZodString>;
36
+ }, "strip", z.ZodTypeAny, {
37
+ outbox_drained_ttl_days?: string | undefined;
38
+ outbox_failed_ttl_days?: string | undefined;
39
+ }, {
40
+ outbox_drained_ttl_days?: string | undefined;
41
+ outbox_failed_ttl_days?: string | undefined;
42
+ }>>;
43
+ worker: z.ZodOptional<z.ZodObject<{
44
+ poll_ms: z.ZodOptional<z.ZodString>;
45
+ max_attempts: z.ZodOptional<z.ZodString>;
46
+ backoff_initial_ms: z.ZodOptional<z.ZodString>;
47
+ reaper_interval_ms: z.ZodOptional<z.ZodString>;
48
+ }, "strip", z.ZodTypeAny, {
49
+ poll_ms?: string | undefined;
50
+ max_attempts?: string | undefined;
51
+ backoff_initial_ms?: string | undefined;
52
+ reaper_interval_ms?: string | undefined;
53
+ }, {
54
+ poll_ms?: string | undefined;
55
+ max_attempts?: string | undefined;
56
+ backoff_initial_ms?: string | undefined;
57
+ reaper_interval_ms?: string | undefined;
58
+ }>>;
59
+ }, "strip", z.ZodTypeAny, {
60
+ log?: {
61
+ overrides?: Record<string, string> | undefined;
62
+ } | undefined;
63
+ general?: {
64
+ env?: string | undefined;
65
+ } | undefined;
66
+ retention?: {
67
+ outbox_drained_ttl_days?: string | undefined;
68
+ outbox_failed_ttl_days?: string | undefined;
69
+ } | undefined;
70
+ worker?: {
71
+ poll_ms?: string | undefined;
72
+ max_attempts?: string | undefined;
73
+ backoff_initial_ms?: string | undefined;
74
+ reaper_interval_ms?: string | undefined;
75
+ } | undefined;
76
+ }, {
77
+ log?: {
78
+ overrides?: Record<string, string> | undefined;
79
+ } | undefined;
80
+ general?: {
81
+ env?: string | undefined;
82
+ } | undefined;
83
+ retention?: {
84
+ outbox_drained_ttl_days?: string | undefined;
85
+ outbox_failed_ttl_days?: string | undefined;
86
+ } | undefined;
87
+ worker?: {
88
+ poll_ms?: string | undefined;
89
+ max_attempts?: string | undefined;
90
+ backoff_initial_ms?: string | undefined;
91
+ reaper_interval_ms?: string | undefined;
92
+ } | undefined;
93
+ }>>;
94
+ export type AuditStandardConfig = NonNullable<z.infer<typeof schema>>;
95
+ export declare function getAuditConfig(): AuditStandardConfig;
96
+ /** Reset the in-memory cache. Mainly for tests. */
97
+ export declare function resetAuditConfigCache(): void;
98
+ export {};
99
+ //# sourceMappingURL=hazo_audit_config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hazo_audit_config.d.ts","sourceRoot":"","sources":["../../../src/lib/config/hazo_audit_config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BC,CAAC;AAEd,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC;AAItE,wBAAgB,cAAc,IAAI,mBAAmB,CAYpD;AAED,mDAAmD;AACnD,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * hazo_audit standard workspace-configuration schema + loader.
3
+ *
4
+ * Wraps hazo_core's `loadConfig` with a Zod schema that mirrors the
5
+ * `[general]` and `[log.overrides]` sections of `config/hazo_audit_config.ini`.
6
+ *
7
+ * Capture / retention / worker / overrides sections continue to be loaded
8
+ * by `src/server/config.ts::loadAuditConfig()` — that's the package-specific
9
+ * runtime config layer and is kept separate so the workspace-standard loader
10
+ * stays a thin Zod wrapper.
11
+ *
12
+ * Resolution order (per hazo_core/loadConfig):
13
+ * 1. <pkg>_config.ini at process.cwd()/config/ or package root
14
+ * 2. <pkg>_config.<HAZO_ENV>.ini overlay
15
+ * 3. HAZO_AUDIT_<SECTION>_<KEY> env-var overrides
16
+ */
17
+ import { loadConfig } from 'hazo_core';
18
+ import { z } from 'zod';
19
+ const schema = z
20
+ .object({
21
+ general: z
22
+ .object({
23
+ env: z.string().optional(),
24
+ })
25
+ .optional(),
26
+ log: z
27
+ .object({
28
+ overrides: z.record(z.string(), z.string()).optional(),
29
+ })
30
+ .optional(),
31
+ retention: z
32
+ .object({
33
+ outbox_drained_ttl_days: z.string().optional(),
34
+ outbox_failed_ttl_days: z.string().optional(),
35
+ })
36
+ .optional(),
37
+ worker: z
38
+ .object({
39
+ poll_ms: z.string().optional(),
40
+ max_attempts: z.string().optional(),
41
+ backoff_initial_ms: z.string().optional(),
42
+ reaper_interval_ms: z.string().optional(),
43
+ })
44
+ .optional(),
45
+ })
46
+ .nullable();
47
+ let _cached = null;
48
+ export function getAuditConfig() {
49
+ if (_cached !== null)
50
+ return _cached;
51
+ try {
52
+ _cached =
53
+ loadConfig({
54
+ pkg: 'hazo_audit',
55
+ schema: schema,
56
+ }) ?? {};
57
+ }
58
+ catch {
59
+ _cached = {};
60
+ }
61
+ return _cached;
62
+ }
63
+ /** Reset the in-memory cache. Mainly for tests. */
64
+ export function resetAuditConfigCache() {
65
+ _cached = null;
66
+ }
67
+ //# sourceMappingURL=hazo_audit_config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hazo_audit_config.js","sourceRoot":"","sources":["../../../src/lib/config/hazo_audit_config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,GAAG,CAAC;KACb,MAAM,CAAC;IACN,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC3B,CAAC;SACD,QAAQ,EAAE;IACb,GAAG,EAAE,CAAC;SACH,MAAM,CAAC;QACN,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KACvD,CAAC;SACD,QAAQ,EAAE;IACb,SAAS,EAAE,CAAC;SACT,MAAM,CAAC;QACN,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC9C,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC9C,CAAC;SACD,QAAQ,EAAE;IACb,MAAM,EAAE,CAAC;SACN,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC9B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACnC,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACzC,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC1C,CAAC;SACD,QAAQ,EAAE;CACd,CAAC;KACD,QAAQ,EAAE,CAAC;AAId,IAAI,OAAO,GAA+B,IAAI,CAAC;AAE/C,MAAM,UAAU,cAAc;IAC5B,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC;IACrC,IAAI,CAAC;QACH,OAAO;YACL,UAAU,CAAsB;gBAC9B,GAAG,EAAE,YAAY;gBACjB,MAAM,EAAE,MAAe;aACxB,CAAC,IAAI,EAAE,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,EAAE,CAAC;IACf,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,qBAAqB;IACnC,OAAO,GAAG,IAAI,CAAC;AACjB,CAAC"}
@@ -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
@@ -46,6 +52,7 @@ export interface AuditRequest extends Request {
46
52
  nextUrl?: URL;
47
53
  }
48
54
  import type { HazoConnectAdapter } from 'hazo_connect';
55
+ import { type Logger } from '../utils/logger.js';
49
56
  export interface AuditAuth {
50
57
  user_id: string;
51
58
  scope_id: string | null;
@@ -65,6 +72,11 @@ export interface AuditEventsRoutesOptions {
65
72
  /** Default page size for list. Defaults to 50, capped at 200. */
66
73
  default_limit?: number;
67
74
  max_limit?: number;
75
+ /**
76
+ * Optional logger override. Defaults to `get_logger()` (hazo_core's
77
+ * `createLogger('hazo_audit')`).
78
+ */
79
+ logger?: Logger;
68
80
  }
69
81
  type NextHandler = (req: AuditRequest, ctx?: {
70
82
  params: Promise<Record<string, string>> | Record<string, string>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nextjs/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C;;;;;GAKG;AACH,MAAM,WAAW,YAAa,SAAQ,OAAO;IAC3C,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,GAAG,SAAS,CAAA;KAAE,CAAC;IAC/D,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AACD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAYvD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,kBAAkB,CAAC;IAClC,qEAAqE;IACrE,OAAO,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IAC7E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,KAAK,WAAW,GAAG,CACjB,GAAG,EAAE,YAAY,EACjB,GAAG,CAAC,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,KACvE,OAAO,CAAC,YAAY,CAAC,CAAC;AAE3B,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC;IAC9B,MAAM,EAAE;QAAE,GAAG,EAAE,WAAW,CAAA;KAAE,CAAC;CAC9B;AAuCD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,wBAAwB,GAC7B,iBAAiB,CA4PnB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nextjs/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQ3C;;;;;GAKG;AACH,MAAM,WAAW,YAAa,SAAQ,OAAO;IAC3C,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,GAAG,SAAS,CAAA;KAAE,CAAC;IAC/D,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AACD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAWvD,OAAO,EAA0B,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEzE,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,kBAAkB,CAAC;IAClC,qEAAqE;IACrE,OAAO,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IAC7E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,KAAK,WAAW,GAAG,CACjB,GAAG,EAAE,YAAY,EACjB,GAAG,CAAC,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,KACvE,OAAO,CAAC,YAAY,CAAC,CAAC;AAE3B,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC;IAC9B,MAAM,EAAE;QAAE,GAAG,EAAE,WAAW,CAAA;KAAE,CAAC;CAC9B;AAqED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,wBAAwB,GAC7B,iBAAiB,CA4TnB"}