[{"data":1,"prerenderedAt":4764},["ShallowReactive",2],{"navigation_docs":3,"-use-cases-audit-recording":581,"-use-cases-audit-recording-surround":4759},[4,35,85,138,318,458,517,556],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Start","\u002Fstart","1.start",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",{"title":30,"path":31,"stem":32,"icon":33},"Choose your logger","\u002Fstart\u002Ftypescript-logging-library","1.start\u002F5.typescript-logging-library","i-lucide-file-code",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Learn","\u002Flearn","2.learn",[40,45,50,55,60,65,70,75,80],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":66,"path":67,"stem":68,"icon":69},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":71,"path":72,"stem":73,"icon":74},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":76,"path":77,"stem":78,"icon":79},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":81,"path":82,"stem":83,"icon":84},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":86,"path":87,"stem":88,"children":89,"page":34},"CLI","\u002Fcli","3.cli",[90,93,98,103,108,113,118,123,128,133],{"title":41,"path":91,"stem":92,"icon":49},"\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":94,"path":95,"stem":96,"icon":97},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":99,"path":100,"stem":101,"icon":102},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":104,"path":105,"stem":106,"icon":107},"Rules","\u002Fcli\u002Frules","3.cli\u002F3.rules","i-lucide-list-checks",{"title":109,"path":110,"stem":111,"icon":112},"Scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring","i-lucide-gauge",{"title":114,"path":115,"stem":116,"icon":117},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":119,"path":120,"stem":121,"icon":122},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":124,"path":125,"stem":126,"icon":127},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":129,"path":130,"stem":131,"icon":132},"agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents","i-lucide-bot",{"title":134,"path":135,"stem":136,"icon":137},"Observability Score","\u002Fcli\u002Fobservability-score","3.cli\u002F9.observability-score","i-lucide-activity",{"title":139,"path":140,"stem":141,"children":142,"page":34},"Integrate","\u002Fintegrate","4.integrate",[143,147,230],{"title":41,"path":144,"stem":145,"icon":146},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":148,"path":149,"stem":150,"children":151,"page":34},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[152,155,185,210],{"title":41,"path":153,"stem":154,"icon":44},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":156,"path":157,"stem":158,"children":159,"page":34},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[160,165,170,175,180],{"title":161,"path":162,"stem":163,"icon":164},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":166,"path":167,"stem":168,"icon":169},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":171,"path":172,"stem":173,"icon":174},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":176,"path":177,"stem":178,"icon":179},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":181,"path":182,"stem":183,"icon":184},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":186,"path":187,"stem":188,"children":189,"page":34},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[190,195,200,205],{"title":191,"path":192,"stem":193,"icon":194},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":196,"path":197,"stem":198,"icon":199},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":201,"path":202,"stem":203,"icon":204},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":206,"path":207,"stem":208,"icon":209},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":211,"path":212,"stem":213,"children":214,"page":34},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[215,220,225],{"title":216,"path":217,"stem":218,"icon":219},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":221,"path":222,"stem":223,"icon":224},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":226,"path":227,"stem":228,"icon":229},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":231,"path":232,"stem":233,"children":234,"page":34},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[235,239,244,249,254,259,264,269,274,279,284,289,294,299,303,308,313],{"title":41,"path":236,"stem":237,"icon":238},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":240,"path":241,"stem":242,"icon":243},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":245,"path":246,"stem":247,"icon":248},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":250,"path":251,"stem":252,"icon":253},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":255,"path":256,"stem":257,"icon":258},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":260,"path":261,"stem":262,"icon":263},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":265,"path":266,"stem":267,"icon":268},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":270,"path":271,"stem":272,"icon":273},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":275,"path":276,"stem":277,"icon":278},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":280,"path":281,"stem":282,"icon":283},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":285,"path":286,"stem":287,"icon":288},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":290,"path":291,"stem":292,"icon":293},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":295,"path":296,"stem":297,"icon":298},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":300,"path":301,"stem":302,"icon":79},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":304,"path":305,"stem":306,"icon":307},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":309,"path":310,"stem":311,"icon":312},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":314,"path":315,"stem":316,"icon":317},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":319,"path":320,"stem":321,"children":322,"page":34},"Use Cases","\u002Fuse-cases","5.use-cases",[323,326,331,359,386,418,439,444,449,453],{"title":41,"path":324,"stem":325,"icon":107},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":327,"path":328,"stem":329,"icon":330},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":332,"icon":333,"path":334,"stem":335,"children":336,"page":34},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[337,340,345,350,355],{"title":41,"path":338,"stem":339,"icon":44},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":341,"path":342,"stem":343,"icon":344},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":346,"path":347,"stem":348,"icon":349},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":351,"path":352,"stem":353,"icon":354},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":356,"path":357,"stem":358,"icon":137},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry",{"title":360,"icon":361,"path":362,"stem":363,"children":364,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[365,368,373,378,382],{"title":41,"path":366,"stem":367,"icon":44},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":369,"path":370,"stem":371,"icon":372},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":374,"path":375,"stem":376,"icon":377},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":379,"path":380,"stem":381,"icon":330},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":383,"path":384,"stem":385,"icon":112},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":387,"icon":388,"path":389,"stem":390,"children":391,"page":34},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[392,395,400,405,410,414],{"title":41,"path":393,"stem":394,"icon":44},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":396,"path":397,"stem":398,"icon":399},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":401,"path":402,"stem":403,"icon":404},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":406,"path":407,"stem":408,"icon":409},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":411,"path":412,"stem":413,"icon":388},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":415,"path":416,"stem":417,"icon":84},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":356,"icon":112,"path":419,"stem":420,"children":421,"page":34},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[422,425,430,435],{"title":41,"path":423,"stem":424,"icon":44},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":426,"path":427,"stem":428,"icon":429},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":431,"path":432,"stem":433,"icon":434},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":436,"path":437,"stem":438,"icon":84},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":440,"path":441,"stem":442,"icon":443},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":445,"path":446,"stem":447,"icon":448},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":450,"path":451,"stem":452,"icon":434},"Node.js request logging","\u002Fuse-cases\u002Fstructured-logging-nodejs","5.use-cases\u002F6.structured-logging-nodejs",{"title":454,"path":455,"stem":456,"icon":457},"Libraries","\u002Fuse-cases\u002Flibraries","5.use-cases\u002F7.libraries","i-lucide-package",{"title":459,"path":460,"stem":461,"children":462,"page":34},"Extend","\u002Fextend","6.extend",[463,467,472,477,481,486,490,494,498,502,507,512],{"title":41,"path":464,"stem":465,"icon":466},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":468,"path":469,"stem":470,"icon":471},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":473,"path":474,"stem":475,"icon":476},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":478,"path":479,"stem":480,"icon":471},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":482,"path":483,"stem":484,"icon":485},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":415,"path":487,"stem":488,"icon":489},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":491,"path":492,"stem":493,"icon":466},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":495,"path":496,"stem":497,"icon":443},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":499,"path":500,"stem":501,"icon":69},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":503,"path":504,"stem":505,"icon":506},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":508,"path":509,"stem":510,"icon":511},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":513,"path":514,"stem":515,"icon":516},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":436,"path":518,"stem":519,"children":520,"page":34},"\u002Freference","7.reference",[521,525,530,533,538,542,547,551],{"title":41,"path":522,"stem":523,"icon":524},"\u002Freference\u002Foverview","7.reference\u002F0.overview","i-lucide-book-marked",{"title":526,"path":527,"stem":528,"icon":529},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":383,"path":531,"stem":532,"icon":112},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":534,"path":535,"stem":536,"icon":537},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":539,"path":540,"stem":541,"icon":388},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":543,"path":544,"stem":545,"icon":546},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":548,"path":549,"stem":550,"icon":443},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":552,"path":553,"stem":554,"icon":555},"Cost","\u002Freference\u002Fcost","7.reference\u002F7.cost","i-lucide-receipt",{"title":557,"path":558,"stem":559,"children":560,"page":34},"Compare","\u002Fcompare","8.compare",[561,565,569,573,577],{"title":562,"path":563,"stem":564,"icon":546},"evlog vs Pino","\u002Fcompare\u002Fpino","8.compare\u002F1.pino",{"title":566,"path":567,"stem":568,"icon":204},"evlog vs OpenTelemetry","\u002Fcompare\u002Fopentelemetry","8.compare\u002F2.opentelemetry",{"title":570,"path":571,"stem":572,"icon":546},"evlog vs LogTape","\u002Fcompare\u002Flogtape","8.compare\u002F3.logtape",{"title":574,"path":575,"stem":576,"icon":546},"evlog vs Winston: formats and request events","\u002Fcompare\u002Fwinston","8.compare\u002F4.winston",{"title":578,"path":579,"stem":580,"icon":546},"evlog vs Consola: reporters and request context","\u002Fcompare\u002Fconsola","8.compare\u002F5.consola",{"id":582,"title":583,"body":584,"description":4747,"extension":4748,"links":4749,"meta":4755,"navigation":4756,"path":402,"seo":4757,"stem":403,"__hash__":4758},"docs\u002F5.use-cases\u002F4.audit\u002F03.recording.md","Recording Events",{"type":585,"value":586,"toc":4732},"minimark",[587,591,599,608,838,841,847,853,1492,1499,1504,1871,1891,1897,1902,2068,2076,2082,2108,2492,2505,2603,2703,2714,2717,2768,2782,2786,2792,2869,2875,2888,2894,2900,2935,3603,3610,3616,3634,4688,4691,4728],[588,589,590],"p",{},"Five APIs cover every shape of audit recording: in-request, denied, standalone, auto-instrumented, and typed.",[592,593,595],"h2",{"id":594},"logaudit",[596,597,598],"code",{},"log.audit()",[588,600,601,603,604,607],{},[596,602,598],{}," is sugar over ",[596,605,606],{},"log.set({ audit: ... })"," plus tail-sample force-keep:",[609,610,615],"pre",{"className":611,"code":612,"language":613,"meta":614,"style":614},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","log.audit({\n  action: 'invoice.refund',\n  actor: { type: 'user', id: user.id },\n  target: { type: 'invoice', id: 'inv_889' },\n  outcome: 'success',\n})\n\n\u002F\u002F Strictly equivalent to:\nlog.set({ audit: { action: 'invoice.refund', \u002F* ... *\u002F, version: 1 } })\n","typescript","",[596,616,617,640,663,705,742,759,768,775,782],{"__ignoreMap":614},[618,619,622,626,630,634,637],"span",{"class":620,"line":621},"line",1,[618,623,625],{"class":624},"sTEyZ","log",[618,627,629],{"class":628},"sMK4o",".",[618,631,633],{"class":632},"s2Zo4","audit",[618,635,636],{"class":624},"(",[618,638,639],{"class":628},"{\n",[618,641,643,647,650,653,657,660],{"class":620,"line":642},2,[618,644,646],{"class":645},"swJcz","  action",[618,648,649],{"class":628},":",[618,651,652],{"class":628}," '",[618,654,656],{"class":655},"sfazB","invoice.refund",[618,658,659],{"class":628},"'",[618,661,662],{"class":628},",\n",[618,664,666,669,671,674,677,679,681,684,686,689,692,694,697,699,702],{"class":620,"line":665},3,[618,667,668],{"class":645},"  actor",[618,670,649],{"class":628},[618,672,673],{"class":628}," {",[618,675,676],{"class":645}," type",[618,678,649],{"class":628},[618,680,652],{"class":628},[618,682,683],{"class":655},"user",[618,685,659],{"class":628},[618,687,688],{"class":628},",",[618,690,691],{"class":645}," id",[618,693,649],{"class":628},[618,695,696],{"class":624}," user",[618,698,629],{"class":628},[618,700,701],{"class":624},"id ",[618,703,704],{"class":628},"},\n",[618,706,708,711,713,715,717,719,721,724,726,728,730,732,734,737,739],{"class":620,"line":707},4,[618,709,710],{"class":645},"  target",[618,712,649],{"class":628},[618,714,673],{"class":628},[618,716,676],{"class":645},[618,718,649],{"class":628},[618,720,652],{"class":628},[618,722,723],{"class":655},"invoice",[618,725,659],{"class":628},[618,727,688],{"class":628},[618,729,691],{"class":645},[618,731,649],{"class":628},[618,733,652],{"class":628},[618,735,736],{"class":655},"inv_889",[618,738,659],{"class":628},[618,740,741],{"class":628}," },\n",[618,743,745,748,750,752,755,757],{"class":620,"line":744},5,[618,746,747],{"class":645},"  outcome",[618,749,649],{"class":628},[618,751,652],{"class":628},[618,753,754],{"class":655},"success",[618,756,659],{"class":628},[618,758,662],{"class":628},[618,760,762,765],{"class":620,"line":761},6,[618,763,764],{"class":628},"}",[618,766,767],{"class":624},")\n",[618,769,771],{"class":620,"line":770},7,[618,772,774],{"emptyLinePlaceholder":773},true,"\n",[618,776,778],{"class":620,"line":777},8,[618,779,781],{"class":780},"sHwdD","\u002F\u002F Strictly equivalent to:\n",[618,783,785,787,789,792,794,797,800,802,804,807,809,811,813,815,817,820,822,825,827,831,834,836],{"class":620,"line":784},9,[618,786,625],{"class":624},[618,788,629],{"class":628},[618,790,791],{"class":632},"set",[618,793,636],{"class":624},[618,795,796],{"class":628},"{",[618,798,799],{"class":645}," audit",[618,801,649],{"class":628},[618,803,673],{"class":628},[618,805,806],{"class":645}," action",[618,808,649],{"class":628},[618,810,652],{"class":628},[618,812,656],{"class":655},[618,814,659],{"class":628},[618,816,688],{"class":628},[618,818,819],{"class":780}," \u002F* ... *\u002F",[618,821,688],{"class":628},[618,823,824],{"class":645}," version",[618,826,649],{"class":628},[618,828,830],{"class":829},"sbssI"," 1",[618,832,833],{"class":628}," }",[618,835,833],{"class":628},[618,837,767],{"class":624},[588,839,840],{},"This is the form you'll use most. The audit event lands on the same wide event as the rest of the request.",[592,842,844],{"id":843},"logauditdeny",[596,845,846],{},"log.audit.deny()",[588,848,849,852],{},[596,850,851],{},"log.audit.deny(reason, fields)"," records AuthZ-denied actions. Most teams forget to log denials, but they're exactly what auditors and security teams ask for:",[854,855,856,1047],"code-group",{},[609,857,860],{"className":611,"code":858,"filename":859,"language":613,"meta":614,"style":614},"if (!user.canRefund(invoice)) {\n  log.audit.deny('Insufficient permissions', {\n    action: 'invoice.refund',\n    actor: { type: 'user', id: user.id },\n    target: { type: 'invoice', id: invoice.id },\n  })\n  throw createError({ status: 403, message: 'Forbidden' })\n}\n","Input",[596,861,862,886,914,929,963,997,1004,1042],{"__ignoreMap":614},[618,863,864,868,871,874,876,878,881,884],{"class":620,"line":621},[618,865,867],{"class":866},"s7zQu","if",[618,869,870],{"class":624}," (",[618,872,873],{"class":628},"!",[618,875,683],{"class":624},[618,877,629],{"class":628},[618,879,880],{"class":632},"canRefund",[618,882,883],{"class":624},"(invoice)) ",[618,885,639],{"class":628},[618,887,888,891,893,895,897,900,902,904,907,909,911],{"class":620,"line":642},[618,889,890],{"class":624},"  log",[618,892,629],{"class":628},[618,894,633],{"class":624},[618,896,629],{"class":628},[618,898,899],{"class":632},"deny",[618,901,636],{"class":645},[618,903,659],{"class":628},[618,905,906],{"class":655},"Insufficient permissions",[618,908,659],{"class":628},[618,910,688],{"class":628},[618,912,913],{"class":628}," {\n",[618,915,916,919,921,923,925,927],{"class":620,"line":665},[618,917,918],{"class":645},"    action",[618,920,649],{"class":628},[618,922,652],{"class":628},[618,924,656],{"class":655},[618,926,659],{"class":628},[618,928,662],{"class":628},[618,930,931,934,936,938,940,942,944,946,948,950,952,954,956,958,961],{"class":620,"line":707},[618,932,933],{"class":645},"    actor",[618,935,649],{"class":628},[618,937,673],{"class":628},[618,939,676],{"class":645},[618,941,649],{"class":628},[618,943,652],{"class":628},[618,945,683],{"class":655},[618,947,659],{"class":628},[618,949,688],{"class":628},[618,951,691],{"class":645},[618,953,649],{"class":628},[618,955,696],{"class":624},[618,957,629],{"class":628},[618,959,960],{"class":624},"id",[618,962,741],{"class":628},[618,964,965,968,970,972,974,976,978,980,982,984,986,988,991,993,995],{"class":620,"line":744},[618,966,967],{"class":645},"    target",[618,969,649],{"class":628},[618,971,673],{"class":628},[618,973,676],{"class":645},[618,975,649],{"class":628},[618,977,652],{"class":628},[618,979,723],{"class":655},[618,981,659],{"class":628},[618,983,688],{"class":628},[618,985,691],{"class":645},[618,987,649],{"class":628},[618,989,990],{"class":624}," invoice",[618,992,629],{"class":628},[618,994,960],{"class":624},[618,996,741],{"class":628},[618,998,999,1002],{"class":620,"line":761},[618,1000,1001],{"class":628},"  }",[618,1003,767],{"class":645},[618,1005,1006,1009,1012,1014,1016,1019,1021,1024,1026,1029,1031,1033,1036,1038,1040],{"class":620,"line":770},[618,1007,1008],{"class":866},"  throw",[618,1010,1011],{"class":632}," createError",[618,1013,636],{"class":645},[618,1015,796],{"class":628},[618,1017,1018],{"class":645}," status",[618,1020,649],{"class":628},[618,1022,1023],{"class":829}," 403",[618,1025,688],{"class":628},[618,1027,1028],{"class":645}," message",[618,1030,649],{"class":628},[618,1032,652],{"class":628},[618,1034,1035],{"class":655},"Forbidden",[618,1037,659],{"class":628},[618,1039,833],{"class":628},[618,1041,767],{"class":645},[618,1043,1044],{"class":620,"line":777},[618,1045,1046],{"class":628},"}\n",[609,1048,1053],{"className":1049,"code":1050,"filename":1051,"language":1052,"meta":614,"style":614},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"level\": \"warn\",\n  \"service\": \"billing-api\",\n  \"method\": \"POST\",\n  \"path\": \"\u002Fapi\u002Finvoices\u002Finv_889\u002Frefund\",\n  \"status\": 403,\n  \"duration\": \"12ms\",\n  \"durationMs\": 12,\n  \"requestId\": \"9c3f7d12-8a45-4e60-b8a9-1f0d4c5e6e7d\",\n  \"audit\": {\n    \"action\": \"invoice.refund\",\n    \"actor\": { \"type\": \"user\", \"id\": \"usr_intruder\" },\n    \"target\": { \"type\": \"invoice\", \"id\": \"inv_889\" },\n    \"outcome\": \"denied\",\n    \"reason\": \"Insufficient permissions\",\n    \"version\": 1,\n    \"idempotencyKey\": \"ak_d12c3a4f5b6e7d8c\",\n    \"context\": {\n      \"requestId\": \"9c3f7d12-8a45-4e60-b8a9-1f0d4c5e6e7d\",\n      \"ip\": \"203.0.113.7\"\n    }\n  }\n}\n","Output — denied","json",[596,1054,1055,1059,1083,1103,1123,1143,1158,1178,1194,1214,1227,1249,1297,1343,1364,1384,1400,1421,1435,1455,1475,1481,1487],{"__ignoreMap":614},[618,1056,1057],{"class":620,"line":621},[618,1058,639],{"class":628},[618,1060,1061,1064,1068,1071,1073,1076,1079,1081],{"class":620,"line":642},[618,1062,1063],{"class":628},"  \"",[618,1065,1067],{"class":1066},"spNyl","level",[618,1069,1070],{"class":628},"\"",[618,1072,649],{"class":628},[618,1074,1075],{"class":628}," \"",[618,1077,1078],{"class":655},"warn",[618,1080,1070],{"class":628},[618,1082,662],{"class":628},[618,1084,1085,1087,1090,1092,1094,1096,1099,1101],{"class":620,"line":665},[618,1086,1063],{"class":628},[618,1088,1089],{"class":1066},"service",[618,1091,1070],{"class":628},[618,1093,649],{"class":628},[618,1095,1075],{"class":628},[618,1097,1098],{"class":655},"billing-api",[618,1100,1070],{"class":628},[618,1102,662],{"class":628},[618,1104,1105,1107,1110,1112,1114,1116,1119,1121],{"class":620,"line":707},[618,1106,1063],{"class":628},[618,1108,1109],{"class":1066},"method",[618,1111,1070],{"class":628},[618,1113,649],{"class":628},[618,1115,1075],{"class":628},[618,1117,1118],{"class":655},"POST",[618,1120,1070],{"class":628},[618,1122,662],{"class":628},[618,1124,1125,1127,1130,1132,1134,1136,1139,1141],{"class":620,"line":744},[618,1126,1063],{"class":628},[618,1128,1129],{"class":1066},"path",[618,1131,1070],{"class":628},[618,1133,649],{"class":628},[618,1135,1075],{"class":628},[618,1137,1138],{"class":655},"\u002Fapi\u002Finvoices\u002Finv_889\u002Frefund",[618,1140,1070],{"class":628},[618,1142,662],{"class":628},[618,1144,1145,1147,1150,1152,1154,1156],{"class":620,"line":761},[618,1146,1063],{"class":628},[618,1148,1149],{"class":1066},"status",[618,1151,1070],{"class":628},[618,1153,649],{"class":628},[618,1155,1023],{"class":829},[618,1157,662],{"class":628},[618,1159,1160,1162,1165,1167,1169,1171,1174,1176],{"class":620,"line":770},[618,1161,1063],{"class":628},[618,1163,1164],{"class":1066},"duration",[618,1166,1070],{"class":628},[618,1168,649],{"class":628},[618,1170,1075],{"class":628},[618,1172,1173],{"class":655},"12ms",[618,1175,1070],{"class":628},[618,1177,662],{"class":628},[618,1179,1180,1182,1185,1187,1189,1192],{"class":620,"line":777},[618,1181,1063],{"class":628},[618,1183,1184],{"class":1066},"durationMs",[618,1186,1070],{"class":628},[618,1188,649],{"class":628},[618,1190,1191],{"class":829}," 12",[618,1193,662],{"class":628},[618,1195,1196,1198,1201,1203,1205,1207,1210,1212],{"class":620,"line":784},[618,1197,1063],{"class":628},[618,1199,1200],{"class":1066},"requestId",[618,1202,1070],{"class":628},[618,1204,649],{"class":628},[618,1206,1075],{"class":628},[618,1208,1209],{"class":655},"9c3f7d12-8a45-4e60-b8a9-1f0d4c5e6e7d",[618,1211,1070],{"class":628},[618,1213,662],{"class":628},[618,1215,1217,1219,1221,1223,1225],{"class":620,"line":1216},10,[618,1218,1063],{"class":628},[618,1220,633],{"class":1066},[618,1222,1070],{"class":628},[618,1224,649],{"class":628},[618,1226,913],{"class":628},[618,1228,1230,1233,1237,1239,1241,1243,1245,1247],{"class":620,"line":1229},11,[618,1231,1232],{"class":628},"    \"",[618,1234,1236],{"class":1235},"sBMFI","action",[618,1238,1070],{"class":628},[618,1240,649],{"class":628},[618,1242,1075],{"class":628},[618,1244,656],{"class":655},[618,1246,1070],{"class":628},[618,1248,662],{"class":628},[618,1250,1252,1254,1257,1259,1261,1263,1265,1268,1270,1272,1274,1276,1278,1280,1282,1284,1286,1288,1290,1293,1295],{"class":620,"line":1251},12,[618,1253,1232],{"class":628},[618,1255,1256],{"class":1235},"actor",[618,1258,1070],{"class":628},[618,1260,649],{"class":628},[618,1262,673],{"class":628},[618,1264,1075],{"class":628},[618,1266,1267],{"class":829},"type",[618,1269,1070],{"class":628},[618,1271,649],{"class":628},[618,1273,1075],{"class":628},[618,1275,683],{"class":655},[618,1277,1070],{"class":628},[618,1279,688],{"class":628},[618,1281,1075],{"class":628},[618,1283,960],{"class":829},[618,1285,1070],{"class":628},[618,1287,649],{"class":628},[618,1289,1075],{"class":628},[618,1291,1292],{"class":655},"usr_intruder",[618,1294,1070],{"class":628},[618,1296,741],{"class":628},[618,1298,1300,1302,1305,1307,1309,1311,1313,1315,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341],{"class":620,"line":1299},13,[618,1301,1232],{"class":628},[618,1303,1304],{"class":1235},"target",[618,1306,1070],{"class":628},[618,1308,649],{"class":628},[618,1310,673],{"class":628},[618,1312,1075],{"class":628},[618,1314,1267],{"class":829},[618,1316,1070],{"class":628},[618,1318,649],{"class":628},[618,1320,1075],{"class":628},[618,1322,723],{"class":655},[618,1324,1070],{"class":628},[618,1326,688],{"class":628},[618,1328,1075],{"class":628},[618,1330,960],{"class":829},[618,1332,1070],{"class":628},[618,1334,649],{"class":628},[618,1336,1075],{"class":628},[618,1338,736],{"class":655},[618,1340,1070],{"class":628},[618,1342,741],{"class":628},[618,1344,1346,1348,1351,1353,1355,1357,1360,1362],{"class":620,"line":1345},14,[618,1347,1232],{"class":628},[618,1349,1350],{"class":1235},"outcome",[618,1352,1070],{"class":628},[618,1354,649],{"class":628},[618,1356,1075],{"class":628},[618,1358,1359],{"class":655},"denied",[618,1361,1070],{"class":628},[618,1363,662],{"class":628},[618,1365,1367,1369,1372,1374,1376,1378,1380,1382],{"class":620,"line":1366},15,[618,1368,1232],{"class":628},[618,1370,1371],{"class":1235},"reason",[618,1373,1070],{"class":628},[618,1375,649],{"class":628},[618,1377,1075],{"class":628},[618,1379,906],{"class":655},[618,1381,1070],{"class":628},[618,1383,662],{"class":628},[618,1385,1387,1389,1392,1394,1396,1398],{"class":620,"line":1386},16,[618,1388,1232],{"class":628},[618,1390,1391],{"class":1235},"version",[618,1393,1070],{"class":628},[618,1395,649],{"class":628},[618,1397,830],{"class":829},[618,1399,662],{"class":628},[618,1401,1403,1405,1408,1410,1412,1414,1417,1419],{"class":620,"line":1402},17,[618,1404,1232],{"class":628},[618,1406,1407],{"class":1235},"idempotencyKey",[618,1409,1070],{"class":628},[618,1411,649],{"class":628},[618,1413,1075],{"class":628},[618,1415,1416],{"class":655},"ak_d12c3a4f5b6e7d8c",[618,1418,1070],{"class":628},[618,1420,662],{"class":628},[618,1422,1424,1426,1429,1431,1433],{"class":620,"line":1423},18,[618,1425,1232],{"class":628},[618,1427,1428],{"class":1235},"context",[618,1430,1070],{"class":628},[618,1432,649],{"class":628},[618,1434,913],{"class":628},[618,1436,1438,1441,1443,1445,1447,1449,1451,1453],{"class":620,"line":1437},19,[618,1439,1440],{"class":628},"      \"",[618,1442,1200],{"class":829},[618,1444,1070],{"class":628},[618,1446,649],{"class":628},[618,1448,1075],{"class":628},[618,1450,1209],{"class":655},[618,1452,1070],{"class":628},[618,1454,662],{"class":628},[618,1456,1458,1460,1463,1465,1467,1469,1472],{"class":620,"line":1457},20,[618,1459,1440],{"class":628},[618,1461,1462],{"class":829},"ip",[618,1464,1070],{"class":628},[618,1466,649],{"class":628},[618,1468,1075],{"class":628},[618,1470,1471],{"class":655},"203.0.113.7",[618,1473,1474],{"class":628},"\"\n",[618,1476,1478],{"class":620,"line":1477},21,[618,1479,1480],{"class":628},"    }\n",[618,1482,1484],{"class":620,"line":1483},22,[618,1485,1486],{"class":628},"  }\n",[618,1488,1490],{"class":620,"line":1489},23,[618,1491,1046],{"class":628},[592,1493,1495,1496],{"id":1494},"standalone-audit","Standalone ",[596,1497,1498],{},"audit()",[588,1500,1501,1502,649],{},"For non-request contexts (jobs, scripts, CLIs), use the standalone ",[596,1503,1498],{},[854,1505,1506,1649],{},[609,1507,1510],{"className":611,"code":1508,"filename":1509,"language":613,"meta":614,"style":614},"import { audit } from 'evlog'\n\naudit({\n  action: 'cron.cleanup',\n  actor: { type: 'system', id: 'cron' },\n  target: { type: 'job', id: 'cleanup-stale-sessions' },\n  outcome: 'success',\n})\n","scripts\u002Fcleanup.ts",[596,1511,1512,1534,1538,1546,1561,1595,1629,1643],{"__ignoreMap":614},[618,1513,1514,1517,1519,1521,1523,1526,1528,1531],{"class":620,"line":621},[618,1515,1516],{"class":866},"import",[618,1518,673],{"class":628},[618,1520,799],{"class":624},[618,1522,833],{"class":628},[618,1524,1525],{"class":866}," from",[618,1527,652],{"class":628},[618,1529,1530],{"class":655},"evlog",[618,1532,1533],{"class":628},"'\n",[618,1535,1536],{"class":620,"line":642},[618,1537,774],{"emptyLinePlaceholder":773},[618,1539,1540,1542,1544],{"class":620,"line":665},[618,1541,633],{"class":632},[618,1543,636],{"class":624},[618,1545,639],{"class":628},[618,1547,1548,1550,1552,1554,1557,1559],{"class":620,"line":707},[618,1549,646],{"class":645},[618,1551,649],{"class":628},[618,1553,652],{"class":628},[618,1555,1556],{"class":655},"cron.cleanup",[618,1558,659],{"class":628},[618,1560,662],{"class":628},[618,1562,1563,1565,1567,1569,1571,1573,1575,1578,1580,1582,1584,1586,1588,1591,1593],{"class":620,"line":744},[618,1564,668],{"class":645},[618,1566,649],{"class":628},[618,1568,673],{"class":628},[618,1570,676],{"class":645},[618,1572,649],{"class":628},[618,1574,652],{"class":628},[618,1576,1577],{"class":655},"system",[618,1579,659],{"class":628},[618,1581,688],{"class":628},[618,1583,691],{"class":645},[618,1585,649],{"class":628},[618,1587,652],{"class":628},[618,1589,1590],{"class":655},"cron",[618,1592,659],{"class":628},[618,1594,741],{"class":628},[618,1596,1597,1599,1601,1603,1605,1607,1609,1612,1614,1616,1618,1620,1622,1625,1627],{"class":620,"line":761},[618,1598,710],{"class":645},[618,1600,649],{"class":628},[618,1602,673],{"class":628},[618,1604,676],{"class":645},[618,1606,649],{"class":628},[618,1608,652],{"class":628},[618,1610,1611],{"class":655},"job",[618,1613,659],{"class":628},[618,1615,688],{"class":628},[618,1617,691],{"class":645},[618,1619,649],{"class":628},[618,1621,652],{"class":628},[618,1623,1624],{"class":655},"cleanup-stale-sessions",[618,1626,659],{"class":628},[618,1628,741],{"class":628},[618,1630,1631,1633,1635,1637,1639,1641],{"class":620,"line":770},[618,1632,747],{"class":645},[618,1634,649],{"class":628},[618,1636,652],{"class":628},[618,1638,754],{"class":655},[618,1640,659],{"class":628},[618,1642,662],{"class":628},[618,1644,1645,1647],{"class":620,"line":777},[618,1646,764],{"class":628},[618,1648,767],{"class":624},[609,1650,1653],{"className":1049,"code":1651,"filename":1652,"language":1052,"meta":614,"style":614},"{\n  \"level\": \"info\",\n  \"service\": \"billing-api\",\n  \"audit\": {\n    \"action\": \"cron.cleanup\",\n    \"actor\": { \"type\": \"system\", \"id\": \"cron\" },\n    \"target\": { \"type\": \"job\", \"id\": \"cleanup-stale-sessions\" },\n    \"outcome\": \"success\",\n    \"version\": 1,\n    \"idempotencyKey\": \"ak_2b8e1f9d4c6a7b3e\"\n  }\n}\n","Output — wide event",[596,1654,1655,1659,1678,1696,1708,1726,1770,1814,1832,1846,1863,1867],{"__ignoreMap":614},[618,1656,1657],{"class":620,"line":621},[618,1658,639],{"class":628},[618,1660,1661,1663,1665,1667,1669,1671,1674,1676],{"class":620,"line":642},[618,1662,1063],{"class":628},[618,1664,1067],{"class":1066},[618,1666,1070],{"class":628},[618,1668,649],{"class":628},[618,1670,1075],{"class":628},[618,1672,1673],{"class":655},"info",[618,1675,1070],{"class":628},[618,1677,662],{"class":628},[618,1679,1680,1682,1684,1686,1688,1690,1692,1694],{"class":620,"line":665},[618,1681,1063],{"class":628},[618,1683,1089],{"class":1066},[618,1685,1070],{"class":628},[618,1687,649],{"class":628},[618,1689,1075],{"class":628},[618,1691,1098],{"class":655},[618,1693,1070],{"class":628},[618,1695,662],{"class":628},[618,1697,1698,1700,1702,1704,1706],{"class":620,"line":707},[618,1699,1063],{"class":628},[618,1701,633],{"class":1066},[618,1703,1070],{"class":628},[618,1705,649],{"class":628},[618,1707,913],{"class":628},[618,1709,1710,1712,1714,1716,1718,1720,1722,1724],{"class":620,"line":744},[618,1711,1232],{"class":628},[618,1713,1236],{"class":1235},[618,1715,1070],{"class":628},[618,1717,649],{"class":628},[618,1719,1075],{"class":628},[618,1721,1556],{"class":655},[618,1723,1070],{"class":628},[618,1725,662],{"class":628},[618,1727,1728,1730,1732,1734,1736,1738,1740,1742,1744,1746,1748,1750,1752,1754,1756,1758,1760,1762,1764,1766,1768],{"class":620,"line":761},[618,1729,1232],{"class":628},[618,1731,1256],{"class":1235},[618,1733,1070],{"class":628},[618,1735,649],{"class":628},[618,1737,673],{"class":628},[618,1739,1075],{"class":628},[618,1741,1267],{"class":829},[618,1743,1070],{"class":628},[618,1745,649],{"class":628},[618,1747,1075],{"class":628},[618,1749,1577],{"class":655},[618,1751,1070],{"class":628},[618,1753,688],{"class":628},[618,1755,1075],{"class":628},[618,1757,960],{"class":829},[618,1759,1070],{"class":628},[618,1761,649],{"class":628},[618,1763,1075],{"class":628},[618,1765,1590],{"class":655},[618,1767,1070],{"class":628},[618,1769,741],{"class":628},[618,1771,1772,1774,1776,1778,1780,1782,1784,1786,1788,1790,1792,1794,1796,1798,1800,1802,1804,1806,1808,1810,1812],{"class":620,"line":770},[618,1773,1232],{"class":628},[618,1775,1304],{"class":1235},[618,1777,1070],{"class":628},[618,1779,649],{"class":628},[618,1781,673],{"class":628},[618,1783,1075],{"class":628},[618,1785,1267],{"class":829},[618,1787,1070],{"class":628},[618,1789,649],{"class":628},[618,1791,1075],{"class":628},[618,1793,1611],{"class":655},[618,1795,1070],{"class":628},[618,1797,688],{"class":628},[618,1799,1075],{"class":628},[618,1801,960],{"class":829},[618,1803,1070],{"class":628},[618,1805,649],{"class":628},[618,1807,1075],{"class":628},[618,1809,1624],{"class":655},[618,1811,1070],{"class":628},[618,1813,741],{"class":628},[618,1815,1816,1818,1820,1822,1824,1826,1828,1830],{"class":620,"line":777},[618,1817,1232],{"class":628},[618,1819,1350],{"class":1235},[618,1821,1070],{"class":628},[618,1823,649],{"class":628},[618,1825,1075],{"class":628},[618,1827,754],{"class":655},[618,1829,1070],{"class":628},[618,1831,662],{"class":628},[618,1833,1834,1836,1838,1840,1842,1844],{"class":620,"line":784},[618,1835,1232],{"class":628},[618,1837,1391],{"class":1235},[618,1839,1070],{"class":628},[618,1841,649],{"class":628},[618,1843,830],{"class":829},[618,1845,662],{"class":628},[618,1847,1848,1850,1852,1854,1856,1858,1861],{"class":620,"line":1216},[618,1849,1232],{"class":628},[618,1851,1407],{"class":1235},[618,1853,1070],{"class":628},[618,1855,649],{"class":628},[618,1857,1075],{"class":628},[618,1859,1860],{"class":655},"ak_2b8e1f9d4c6a7b3e",[618,1862,1474],{"class":628},[618,1864,1865],{"class":620,"line":1229},[618,1866,1486],{"class":628},[618,1868,1869],{"class":620,"line":1251},[618,1870,1046],{"class":628},[1872,1873,1495,1874,1876,1877,1879,1880,1879,1883,1886,1887,1890],"note",{},[596,1875,1498],{}," events have no ",[596,1878,1200],{},", no ",[596,1881,1882],{},"context.ip",[596,1884,1885],{},"userAgent",", because there is no request to enrich from. Add your own context manually (",[596,1888,1889],{},"context: { jobId, queue, runId }",") when it matters for forensics.",[592,1892,1894],{"id":1893},"defineauditaction",[596,1895,1896],{},"defineAuditAction()",[588,1898,1899,1900,649],{},"Define audit actions in one place to avoid magic strings and get full type-safety on ",[596,1901,1304],{},[609,1903,1905],{"className":611,"code":1904,"language":613,"meta":614,"style":614},"import { defineAuditAction } from 'evlog'\n\nconst refund = defineAuditAction('invoice.refund', { target: 'invoice' })\n\nlog.audit(refund({\n  actor: { type: 'user', id: user.id },\n  target: { id: 'inv_889' }, \u002F\u002F type inferred as 'invoice'\n  outcome: 'success',\n}))\n",[596,1906,1907,1926,1930,1970,1974,1991,2023,2047,2061],{"__ignoreMap":614},[618,1908,1909,1911,1913,1916,1918,1920,1922,1924],{"class":620,"line":621},[618,1910,1516],{"class":866},[618,1912,673],{"class":628},[618,1914,1915],{"class":624}," defineAuditAction",[618,1917,833],{"class":628},[618,1919,1525],{"class":866},[618,1921,652],{"class":628},[618,1923,1530],{"class":655},[618,1925,1533],{"class":628},[618,1927,1928],{"class":620,"line":642},[618,1929,774],{"emptyLinePlaceholder":773},[618,1931,1932,1935,1938,1941,1943,1945,1947,1949,1951,1953,1955,1958,1960,1962,1964,1966,1968],{"class":620,"line":665},[618,1933,1934],{"class":1066},"const",[618,1936,1937],{"class":624}," refund ",[618,1939,1940],{"class":628},"=",[618,1942,1915],{"class":632},[618,1944,636],{"class":624},[618,1946,659],{"class":628},[618,1948,656],{"class":655},[618,1950,659],{"class":628},[618,1952,688],{"class":628},[618,1954,673],{"class":628},[618,1956,1957],{"class":645}," target",[618,1959,649],{"class":628},[618,1961,652],{"class":628},[618,1963,723],{"class":655},[618,1965,659],{"class":628},[618,1967,833],{"class":628},[618,1969,767],{"class":624},[618,1971,1972],{"class":620,"line":707},[618,1973,774],{"emptyLinePlaceholder":773},[618,1975,1976,1978,1980,1982,1984,1987,1989],{"class":620,"line":744},[618,1977,625],{"class":624},[618,1979,629],{"class":628},[618,1981,633],{"class":632},[618,1983,636],{"class":624},[618,1985,1986],{"class":632},"refund",[618,1988,636],{"class":624},[618,1990,639],{"class":628},[618,1992,1993,1995,1997,1999,2001,2003,2005,2007,2009,2011,2013,2015,2017,2019,2021],{"class":620,"line":761},[618,1994,668],{"class":645},[618,1996,649],{"class":628},[618,1998,673],{"class":628},[618,2000,676],{"class":645},[618,2002,649],{"class":628},[618,2004,652],{"class":628},[618,2006,683],{"class":655},[618,2008,659],{"class":628},[618,2010,688],{"class":628},[618,2012,691],{"class":645},[618,2014,649],{"class":628},[618,2016,696],{"class":624},[618,2018,629],{"class":628},[618,2020,701],{"class":624},[618,2022,704],{"class":628},[618,2024,2025,2027,2029,2031,2033,2035,2037,2039,2041,2044],{"class":620,"line":770},[618,2026,710],{"class":645},[618,2028,649],{"class":628},[618,2030,673],{"class":628},[618,2032,691],{"class":645},[618,2034,649],{"class":628},[618,2036,652],{"class":628},[618,2038,736],{"class":655},[618,2040,659],{"class":628},[618,2042,2043],{"class":628}," },",[618,2045,2046],{"class":780}," \u002F\u002F type inferred as 'invoice'\n",[618,2048,2049,2051,2053,2055,2057,2059],{"class":620,"line":777},[618,2050,747],{"class":645},[618,2052,649],{"class":628},[618,2054,652],{"class":628},[618,2056,754],{"class":655},[618,2058,659],{"class":628},[618,2060,662],{"class":628},[618,2062,2063,2065],{"class":620,"line":784},[618,2064,764],{"class":628},[618,2066,2067],{"class":624},"))\n",[588,2069,2070,2071,629],{},"Pair this with the action dictionary from ",[2072,2073,2075],"a",{"href":2074},"\u002Fuse-cases\u002Faudit\u002Fschema#action-naming","Schema → Action naming",[592,2077,2079],{"id":2078},"defineauditcatalog",[596,2080,2081],{},"defineAuditCatalog()",[588,2083,2084,2085,2089,2090,2093,2094,2097,2098,2101,2102,2104,2105,629],{},"For more than a handful of actions, group them in a typed ",[2086,2087,2088],"strong",{},"catalog"," instead of declaring ",[596,2091,2092],{},"defineAuditAction"," one-by-one. Same convention as error catalogs: ",[596,2095,2096],{},"UPPER_SNAKE_CASE"," keys, ",[596,2099,2100],{},"lower.dot.case"," prefix, wire ",[596,2103,1236],{}," is ",[596,2106,2107],{},"${prefix}.${KEY}",[854,2109,2110,2368],{},[609,2111,2114],{"className":611,"code":2112,"filename":2113,"language":613,"meta":614,"style":614},"import { defineAuditCatalog } from 'evlog'\n\nexport const billingAudit = defineAuditCatalog('billing', {\n  INVOICE_REFUND: {\n    target: 'invoice',\n    severity: 'high',\n    requiresChanges: true,\n    description: 'Refund an invoice to the customer',\n    redactPaths: ['cardNumber'],\n  },\n  INVOICE_CREATE:      { target: 'invoice' },\n  INVOICE_VOID:        { target: 'invoice', severity: 'high', requiresReason: true },\n  SUBSCRIPTION_CANCEL: { target: 'subscription', severity: 'high' },\n})\n","audit\u002Fbilling.ts",[596,2115,2116,2135,2139,2167,2176,2190,2206,2219,2235,2257,2262,2284,2328,2362],{"__ignoreMap":614},[618,2117,2118,2120,2122,2125,2127,2129,2131,2133],{"class":620,"line":621},[618,2119,1516],{"class":866},[618,2121,673],{"class":628},[618,2123,2124],{"class":624}," defineAuditCatalog",[618,2126,833],{"class":628},[618,2128,1525],{"class":866},[618,2130,652],{"class":628},[618,2132,1530],{"class":655},[618,2134,1533],{"class":628},[618,2136,2137],{"class":620,"line":642},[618,2138,774],{"emptyLinePlaceholder":773},[618,2140,2141,2144,2147,2150,2152,2154,2156,2158,2161,2163,2165],{"class":620,"line":665},[618,2142,2143],{"class":866},"export",[618,2145,2146],{"class":1066}," const",[618,2148,2149],{"class":624}," billingAudit ",[618,2151,1940],{"class":628},[618,2153,2124],{"class":632},[618,2155,636],{"class":624},[618,2157,659],{"class":628},[618,2159,2160],{"class":655},"billing",[618,2162,659],{"class":628},[618,2164,688],{"class":628},[618,2166,913],{"class":628},[618,2168,2169,2172,2174],{"class":620,"line":707},[618,2170,2171],{"class":645},"  INVOICE_REFUND",[618,2173,649],{"class":628},[618,2175,913],{"class":628},[618,2177,2178,2180,2182,2184,2186,2188],{"class":620,"line":744},[618,2179,967],{"class":645},[618,2181,649],{"class":628},[618,2183,652],{"class":628},[618,2185,723],{"class":655},[618,2187,659],{"class":628},[618,2189,662],{"class":628},[618,2191,2192,2195,2197,2199,2202,2204],{"class":620,"line":761},[618,2193,2194],{"class":645},"    severity",[618,2196,649],{"class":628},[618,2198,652],{"class":628},[618,2200,2201],{"class":655},"high",[618,2203,659],{"class":628},[618,2205,662],{"class":628},[618,2207,2208,2211,2213,2217],{"class":620,"line":770},[618,2209,2210],{"class":645},"    requiresChanges",[618,2212,649],{"class":628},[618,2214,2216],{"class":2215},"sfNiH"," true",[618,2218,662],{"class":628},[618,2220,2221,2224,2226,2228,2231,2233],{"class":620,"line":777},[618,2222,2223],{"class":645},"    description",[618,2225,649],{"class":628},[618,2227,652],{"class":628},[618,2229,2230],{"class":655},"Refund an invoice to the customer",[618,2232,659],{"class":628},[618,2234,662],{"class":628},[618,2236,2237,2240,2242,2245,2247,2250,2252,2255],{"class":620,"line":784},[618,2238,2239],{"class":645},"    redactPaths",[618,2241,649],{"class":628},[618,2243,2244],{"class":624}," [",[618,2246,659],{"class":628},[618,2248,2249],{"class":655},"cardNumber",[618,2251,659],{"class":628},[618,2253,2254],{"class":624},"]",[618,2256,662],{"class":628},[618,2258,2259],{"class":620,"line":1216},[618,2260,2261],{"class":628},"  },\n",[618,2263,2264,2267,2269,2272,2274,2276,2278,2280,2282],{"class":620,"line":1229},[618,2265,2266],{"class":645},"  INVOICE_CREATE",[618,2268,649],{"class":628},[618,2270,2271],{"class":628},"      {",[618,2273,1957],{"class":645},[618,2275,649],{"class":628},[618,2277,652],{"class":628},[618,2279,723],{"class":655},[618,2281,659],{"class":628},[618,2283,741],{"class":628},[618,2285,2286,2289,2291,2294,2296,2298,2300,2302,2304,2306,2309,2311,2313,2315,2317,2319,2322,2324,2326],{"class":620,"line":1251},[618,2287,2288],{"class":645},"  INVOICE_VOID",[618,2290,649],{"class":628},[618,2292,2293],{"class":628},"        {",[618,2295,1957],{"class":645},[618,2297,649],{"class":628},[618,2299,652],{"class":628},[618,2301,723],{"class":655},[618,2303,659],{"class":628},[618,2305,688],{"class":628},[618,2307,2308],{"class":645}," severity",[618,2310,649],{"class":628},[618,2312,652],{"class":628},[618,2314,2201],{"class":655},[618,2316,659],{"class":628},[618,2318,688],{"class":628},[618,2320,2321],{"class":645}," requiresReason",[618,2323,649],{"class":628},[618,2325,2216],{"class":2215},[618,2327,741],{"class":628},[618,2329,2330,2333,2335,2337,2339,2341,2343,2346,2348,2350,2352,2354,2356,2358,2360],{"class":620,"line":1299},[618,2331,2332],{"class":645},"  SUBSCRIPTION_CANCEL",[618,2334,649],{"class":628},[618,2336,673],{"class":628},[618,2338,1957],{"class":645},[618,2340,649],{"class":628},[618,2342,652],{"class":628},[618,2344,2345],{"class":655},"subscription",[618,2347,659],{"class":628},[618,2349,688],{"class":628},[618,2351,2308],{"class":645},[618,2353,649],{"class":628},[618,2355,652],{"class":628},[618,2357,2201],{"class":655},[618,2359,659],{"class":628},[618,2361,741],{"class":628},[618,2363,2364,2366],{"class":620,"line":1345},[618,2365,764],{"class":628},[618,2367,767],{"class":624},[609,2369,2372],{"className":611,"code":2370,"filename":2371,"language":613,"meta":614,"style":614},"import { billingAudit } from '~\u002Faudit\u002Fbilling'\n\nlog.audit(billingAudit.INVOICE_REFUND({\n  actor: { type: 'user', id: user.id },\n  target: { id: 'inv_889' }, \u002F\u002F type inferred as 'invoice'\n  outcome: 'success',\n}))\n","server\u002Fapi\u002Frefund.post.ts",[596,2373,2374,2394,2398,2418,2450,2472,2486],{"__ignoreMap":614},[618,2375,2376,2378,2380,2383,2385,2387,2389,2392],{"class":620,"line":621},[618,2377,1516],{"class":866},[618,2379,673],{"class":628},[618,2381,2382],{"class":624}," billingAudit",[618,2384,833],{"class":628},[618,2386,1525],{"class":866},[618,2388,652],{"class":628},[618,2390,2391],{"class":655},"~\u002Faudit\u002Fbilling",[618,2393,1533],{"class":628},[618,2395,2396],{"class":620,"line":642},[618,2397,774],{"emptyLinePlaceholder":773},[618,2399,2400,2402,2404,2406,2409,2411,2414,2416],{"class":620,"line":665},[618,2401,625],{"class":624},[618,2403,629],{"class":628},[618,2405,633],{"class":632},[618,2407,2408],{"class":624},"(billingAudit",[618,2410,629],{"class":628},[618,2412,2413],{"class":632},"INVOICE_REFUND",[618,2415,636],{"class":624},[618,2417,639],{"class":628},[618,2419,2420,2422,2424,2426,2428,2430,2432,2434,2436,2438,2440,2442,2444,2446,2448],{"class":620,"line":707},[618,2421,668],{"class":645},[618,2423,649],{"class":628},[618,2425,673],{"class":628},[618,2427,676],{"class":645},[618,2429,649],{"class":628},[618,2431,652],{"class":628},[618,2433,683],{"class":655},[618,2435,659],{"class":628},[618,2437,688],{"class":628},[618,2439,691],{"class":645},[618,2441,649],{"class":628},[618,2443,696],{"class":624},[618,2445,629],{"class":628},[618,2447,701],{"class":624},[618,2449,704],{"class":628},[618,2451,2452,2454,2456,2458,2460,2462,2464,2466,2468,2470],{"class":620,"line":744},[618,2453,710],{"class":645},[618,2455,649],{"class":628},[618,2457,673],{"class":628},[618,2459,691],{"class":645},[618,2461,649],{"class":628},[618,2463,652],{"class":628},[618,2465,736],{"class":655},[618,2467,659],{"class":628},[618,2469,2043],{"class":628},[618,2471,2046],{"class":780},[618,2473,2474,2476,2478,2480,2482,2484],{"class":620,"line":761},[618,2475,747],{"class":645},[618,2477,649],{"class":628},[618,2479,652],{"class":628},[618,2481,754],{"class":655},[618,2483,659],{"class":628},[618,2485,662],{"class":628},[618,2487,2488,2490],{"class":620,"line":770},[618,2489,764],{"class":628},[618,2491,2067],{"class":624},[588,2493,2494,2495,2497,2498,2501,2502,649],{},"Each entry produces a thin wrapper around ",[596,2496,2092],{}," (target type is fixed at definition time, action name is auto-prefixed). Catalog metadata is exposed on each factory and on ",[596,2499,2500],{},"_actions"," \u002F ",[596,2503,2504],{},"_prefix",[609,2506,2508],{"className":611,"code":2507,"language":613,"meta":614,"style":614},"billingAudit.INVOICE_REFUND.action           \u002F\u002F 'billing.INVOICE_REFUND' (literal type)\nbillingAudit.INVOICE_REFUND.target           \u002F\u002F 'invoice'\nbillingAudit.INVOICE_REFUND.severity         \u002F\u002F 'high'\nbillingAudit.INVOICE_REFUND.requiresChanges \u002F\u002F true\nbillingAudit.INVOICE_REFUND.redactPaths      \u002F\u002F ['cardNumber']\nbillingAudit._actions                        \u002F\u002F readonly ['billing.INVOICE_REFUND', ...]\n",[596,2509,2510,2527,2543,2559,2575,2591],{"__ignoreMap":614},[618,2511,2512,2515,2517,2519,2521,2524],{"class":620,"line":621},[618,2513,2514],{"class":624},"billingAudit",[618,2516,629],{"class":628},[618,2518,2413],{"class":624},[618,2520,629],{"class":628},[618,2522,2523],{"class":624},"action           ",[618,2525,2526],{"class":780},"\u002F\u002F 'billing.INVOICE_REFUND' (literal type)\n",[618,2528,2529,2531,2533,2535,2537,2540],{"class":620,"line":642},[618,2530,2514],{"class":624},[618,2532,629],{"class":628},[618,2534,2413],{"class":624},[618,2536,629],{"class":628},[618,2538,2539],{"class":624},"target           ",[618,2541,2542],{"class":780},"\u002F\u002F 'invoice'\n",[618,2544,2545,2547,2549,2551,2553,2556],{"class":620,"line":665},[618,2546,2514],{"class":624},[618,2548,629],{"class":628},[618,2550,2413],{"class":624},[618,2552,629],{"class":628},[618,2554,2555],{"class":624},"severity         ",[618,2557,2558],{"class":780},"\u002F\u002F 'high'\n",[618,2560,2561,2563,2565,2567,2569,2572],{"class":620,"line":707},[618,2562,2514],{"class":624},[618,2564,629],{"class":628},[618,2566,2413],{"class":624},[618,2568,629],{"class":628},[618,2570,2571],{"class":624},"requiresChanges ",[618,2573,2574],{"class":780},"\u002F\u002F true\n",[618,2576,2577,2579,2581,2583,2585,2588],{"class":620,"line":744},[618,2578,2514],{"class":624},[618,2580,629],{"class":628},[618,2582,2413],{"class":624},[618,2584,629],{"class":628},[618,2586,2587],{"class":624},"redactPaths      ",[618,2589,2590],{"class":780},"\u002F\u002F ['cardNumber']\n",[618,2592,2593,2595,2597,2600],{"class":620,"line":761},[618,2594,2514],{"class":624},[618,2596,629],{"class":628},[618,2598,2599],{"class":624},"_actions                        ",[618,2601,2602],{"class":780},"\u002F\u002F readonly ['billing.INVOICE_REFUND', ...]\n",[2604,2605,2606,2619],"table",{},[2607,2608,2609],"thead",{},[2610,2611,2612,2616],"tr",{},[2613,2614,2615],"th",{},"Entry field",[2613,2617,2618],{},"Purpose",[2620,2621,2622,2636,2646,2659,2677,2689],"tbody",{},[2610,2623,2624,2629],{},[2625,2626,2627],"td",{},[596,2628,1304],{},[2625,2630,2631,2632,2635],{},"Default ",[596,2633,2634],{},"target.type"," injected at call sites",[2610,2637,2638,2643],{},[2625,2639,2640],{},[596,2641,2642],{},"description",[2625,2644,2645],{},"Human-readable label for docs, SIEM rules, review tooling",[2610,2647,2648,2653],{},[2625,2649,2650],{},[596,2651,2652],{},"severity",[2625,2654,2655,2658],{},[596,2656,2657],{},"'low' | 'medium' | 'high' | 'critical'"," — alerting and review priority",[2610,2660,2661,2666],{},[2625,2662,2663],{},[596,2664,2665],{},"requiresChanges",[2625,2667,2668,2669,2672,2673,2676],{},"Document that callers should attach ",[596,2670,2671],{},"changes"," (e.g. via ",[596,2674,2675],{},"auditDiff",")",[2610,2678,2679,2684],{},[2625,2680,2681],{},[596,2682,2683],{},"requiresReason",[2625,2685,2668,2686,2688],{},[596,2687,1371],{}," (especially denials)",[2610,2690,2691,2696],{},[2625,2692,2693],{},[596,2694,2695],{},"redactPaths",[2625,2697,2698,2699,2702],{},"Default paths for ",[596,2700,2701],{},"auditDiff({ redactPaths: [...] })"," on this action",[2704,2705,2707,2709,2710,2713],"h3",{"id":2706},"defineauditaction-vs-defineauditcatalog-when-to-choose",[596,2708,2092],{}," vs ",[596,2711,2712],{},"defineAuditCatalog",": when to choose",[588,2715,2716],{},"Both produce the same call-site factory shape. Pick by scale:",[2718,2719,2720,2736],"ul",{},[2721,2722,2723,2728,2729,2732,2733,2735],"li",{},[2086,2724,2725],{},[596,2726,2727],{},"defineAuditAction(action, opts?)",": one-off actions, or per-file organisation in very large repos. Mirrors ",[596,2730,2731],{},"defineError",". Equivalent to a catalog with a single entry but with no prefix derivation: you write the full wire ",[596,2734,1236],{}," directly.",[2721,2737,2738,2743,2744,2747,2748,2750,2751,2753,2754,2756,2757,2759,2760,2763,2764,2767],{},[2086,2739,2740],{},[596,2741,2742],{},"defineAuditCatalog(prefix, map)",": group anything beyond a handful of related actions under one prefix. Mirrors ",[596,2745,2746],{},"defineErrorCatalog",". The wire ",[596,2749,1236],{}," is auto-derived as ",[596,2752,2107],{},", catalog metadata (",[596,2755,2500],{},", ",[596,2758,2504],{},") is exposed for introspection, and a single ",[596,2761,2762],{},"declare module 'evlog'"," line surfaces the whole bundle in the typed ",[596,2765,2766],{},"AuditAction"," union.",[588,2769,2770,2771,2773,2774,2756,2776,2756,2779,2781],{},"You can mix the two in the same codebase. Keep cross-cutting one-off actions as ",[596,2772,2092],{},", group bounded contexts (",[596,2775,2160],{},[596,2777,2778],{},"auth",[596,2780,2345],{},") as catalogs.",[2704,2783,2785],{"id":2784},"type-safe-actions-everywhere-opt-in","Type-safe actions everywhere (opt-in)",[588,2787,2788,2789,649],{},"Mirror the error catalog augmentation by augmenting ",[596,2790,2791],{},"RegisteredAuditCatalogs",[609,2793,2795],{"className":611,"code":2794,"language":613,"meta":614,"style":614},"import type { billingAudit } from '.\u002Faudit\u002Fbilling'\n\ndeclare module 'evlog' {\n  interface RegisteredAuditCatalogs {\n    billing: typeof billingAudit\n  }\n}\n",[596,2796,2797,2818,2822,2838,2848,2861,2865],{"__ignoreMap":614},[618,2798,2799,2801,2803,2805,2807,2809,2811,2813,2816],{"class":620,"line":621},[618,2800,1516],{"class":866},[618,2802,676],{"class":866},[618,2804,673],{"class":628},[618,2806,2382],{"class":624},[618,2808,833],{"class":628},[618,2810,1525],{"class":866},[618,2812,652],{"class":628},[618,2814,2815],{"class":655},".\u002Faudit\u002Fbilling",[618,2817,1533],{"class":628},[618,2819,2820],{"class":620,"line":642},[618,2821,774],{"emptyLinePlaceholder":773},[618,2823,2824,2827,2830,2832,2834,2836],{"class":620,"line":665},[618,2825,2826],{"class":1066},"declare",[618,2828,2829],{"class":1066}," module",[618,2831,652],{"class":628},[618,2833,1530],{"class":655},[618,2835,659],{"class":628},[618,2837,913],{"class":628},[618,2839,2840,2843,2846],{"class":620,"line":707},[618,2841,2842],{"class":1066},"  interface",[618,2844,2845],{"class":1235}," RegisteredAuditCatalogs",[618,2847,913],{"class":628},[618,2849,2850,2853,2855,2858],{"class":620,"line":744},[618,2851,2852],{"class":645},"    billing",[618,2854,649],{"class":628},[618,2856,2857],{"class":628}," typeof",[618,2859,2860],{"class":624}," billingAudit\n",[618,2862,2863],{"class":620,"line":761},[618,2864,1486],{"class":628},[618,2866,2867],{"class":620,"line":770},[618,2868,1046],{"class":628},[588,2870,2871,2872,2874],{},"This surfaces the union of all registered actions on the typed ",[596,2873,2766],{}," export, useful for shared helpers, dashboards, and refactor-safe comparisons.",[2876,2877,2880,2883,2884,2887],"callout",{"color":2878,"icon":2879,"to":82},"primary","i-lucide-arrow-right",[2086,2881,2882],{},"Going further."," The dedicated ",[2072,2885,2886],{"href":82},"Catalogs page"," covers the scaling story (single file → folder → feature → npm package) for both error and audit catalogs, plus npm packaging, composition patterns, and the type-augmentation deep dive.",[592,2889,2891],{"id":2890},"auditdiff",[596,2892,2893],{},"auditDiff()",[588,2895,2896,2897,2899],{},"For mutating actions, use ",[596,2898,2893],{}," to produce a compact, redact-aware JSON Patch:",[2901,2902,2903,2908,2909,2104,2911,2915,2916,2919,2920,2923,2924,2927,2928,2931,2932,2934],"warning",{},[2086,2904,2905,2906,629],{},"Don't feed entire DB rows into ",[596,2907,2893],{}," Strip computed columns, hashed passwords, internal flags, and large JSON blobs before diffing. The point of ",[596,2910,2671],{},[2912,2913,2914],"em",{},"what changed semantically"," (status went from ",[596,2917,2918],{},"paid"," → ",[596,2921,2922],{},"refunded","), not ",[2912,2925,2926],{},"what bytes changed"," (a ",[596,2929,2930],{},"lastModified"," timestamp ticked). A noisy ",[596,2933,2671],{}," field is the fastest way to make audit logs unreadable.",[854,2936,2937,3181],{},[609,2938,2940],{"className":611,"code":2939,"filename":859,"language":613,"meta":614,"style":614},"import { auditDiff } from 'evlog'\n\nconst before = await db.users.byId(id)\nconst after = await db.users.update(id, patch)\n\nlog.audit({\n  action: 'user.update',\n  actor: { type: 'user', id: actorId },\n  target: { type: 'user', id },\n  outcome: 'success',\n  changes: auditDiff(before, after, { redactPaths: ['password', 'token'] }),\n})\n",[596,2941,2942,2961,2965,2993,3023,3027,3039,3054,3083,3108,3122,3175],{"__ignoreMap":614},[618,2943,2944,2946,2948,2951,2953,2955,2957,2959],{"class":620,"line":621},[618,2945,1516],{"class":866},[618,2947,673],{"class":628},[618,2949,2950],{"class":624}," auditDiff",[618,2952,833],{"class":628},[618,2954,1525],{"class":866},[618,2956,652],{"class":628},[618,2958,1530],{"class":655},[618,2960,1533],{"class":628},[618,2962,2963],{"class":620,"line":642},[618,2964,774],{"emptyLinePlaceholder":773},[618,2966,2967,2969,2972,2974,2977,2980,2982,2985,2987,2990],{"class":620,"line":665},[618,2968,1934],{"class":1066},[618,2970,2971],{"class":624}," before ",[618,2973,1940],{"class":628},[618,2975,2976],{"class":866}," await",[618,2978,2979],{"class":624}," db",[618,2981,629],{"class":628},[618,2983,2984],{"class":624},"users",[618,2986,629],{"class":628},[618,2988,2989],{"class":632},"byId",[618,2991,2992],{"class":624},"(id)\n",[618,2994,2995,2997,3000,3002,3004,3006,3008,3010,3012,3015,3018,3020],{"class":620,"line":707},[618,2996,1934],{"class":1066},[618,2998,2999],{"class":624}," after ",[618,3001,1940],{"class":628},[618,3003,2976],{"class":866},[618,3005,2979],{"class":624},[618,3007,629],{"class":628},[618,3009,2984],{"class":624},[618,3011,629],{"class":628},[618,3013,3014],{"class":632},"update",[618,3016,3017],{"class":624},"(id",[618,3019,688],{"class":628},[618,3021,3022],{"class":624}," patch)\n",[618,3024,3025],{"class":620,"line":744},[618,3026,774],{"emptyLinePlaceholder":773},[618,3028,3029,3031,3033,3035,3037],{"class":620,"line":761},[618,3030,625],{"class":624},[618,3032,629],{"class":628},[618,3034,633],{"class":632},[618,3036,636],{"class":624},[618,3038,639],{"class":628},[618,3040,3041,3043,3045,3047,3050,3052],{"class":620,"line":770},[618,3042,646],{"class":645},[618,3044,649],{"class":628},[618,3046,652],{"class":628},[618,3048,3049],{"class":655},"user.update",[618,3051,659],{"class":628},[618,3053,662],{"class":628},[618,3055,3056,3058,3060,3062,3064,3066,3068,3070,3072,3074,3076,3078,3081],{"class":620,"line":777},[618,3057,668],{"class":645},[618,3059,649],{"class":628},[618,3061,673],{"class":628},[618,3063,676],{"class":645},[618,3065,649],{"class":628},[618,3067,652],{"class":628},[618,3069,683],{"class":655},[618,3071,659],{"class":628},[618,3073,688],{"class":628},[618,3075,691],{"class":645},[618,3077,649],{"class":628},[618,3079,3080],{"class":624}," actorId ",[618,3082,704],{"class":628},[618,3084,3085,3087,3089,3091,3093,3095,3097,3099,3101,3103,3106],{"class":620,"line":784},[618,3086,710],{"class":645},[618,3088,649],{"class":628},[618,3090,673],{"class":628},[618,3092,676],{"class":645},[618,3094,649],{"class":628},[618,3096,652],{"class":628},[618,3098,683],{"class":655},[618,3100,659],{"class":628},[618,3102,688],{"class":628},[618,3104,3105],{"class":624}," id ",[618,3107,704],{"class":628},[618,3109,3110,3112,3114,3116,3118,3120],{"class":620,"line":1216},[618,3111,747],{"class":645},[618,3113,649],{"class":628},[618,3115,652],{"class":628},[618,3117,754],{"class":655},[618,3119,659],{"class":628},[618,3121,662],{"class":628},[618,3123,3124,3127,3129,3131,3134,3136,3139,3141,3143,3146,3148,3150,3152,3155,3157,3159,3161,3164,3166,3169,3171,3173],{"class":620,"line":1229},[618,3125,3126],{"class":645},"  changes",[618,3128,649],{"class":628},[618,3130,2950],{"class":632},[618,3132,3133],{"class":624},"(before",[618,3135,688],{"class":628},[618,3137,3138],{"class":624}," after",[618,3140,688],{"class":628},[618,3142,673],{"class":628},[618,3144,3145],{"class":645}," redactPaths",[618,3147,649],{"class":628},[618,3149,2244],{"class":624},[618,3151,659],{"class":628},[618,3153,3154],{"class":655},"password",[618,3156,659],{"class":628},[618,3158,688],{"class":628},[618,3160,652],{"class":628},[618,3162,3163],{"class":655},"token",[618,3165,659],{"class":628},[618,3167,3168],{"class":624},"] ",[618,3170,764],{"class":628},[618,3172,2676],{"class":624},[618,3174,662],{"class":628},[618,3176,3177,3179],{"class":620,"line":1251},[618,3178,764],{"class":628},[618,3180,767],{"class":624},[609,3182,3185],{"className":1049,"code":3183,"filename":3184,"language":1052,"meta":614,"style":614},"{\n  \"audit\": {\n    \"action\": \"user.update\",\n    \"actor\": { \"type\": \"user\", \"id\": \"usr_42\" },\n    \"target\": { \"type\": \"user\", \"id\": \"usr_99\" },\n    \"outcome\": \"success\",\n    \"changes\": [\n      { \"op\": \"replace\", \"path\": \"\u002Femail\", \"from\": \"old@example.com\", \"to\": \"new@example.com\" },\n      { \"op\": \"replace\", \"path\": \"\u002Frole\", \"from\": \"member\", \"to\": \"admin\" },\n      { \"op\": \"replace\", \"path\": \"\u002Fpassword\", \"from\": \"[REDACTED]\", \"to\": \"[REDACTED]\" }\n    ],\n    \"version\": 1,\n    \"idempotencyKey\": \"ak_5e7d8f9a0b1c2d3e\"\n  }\n}\n","Output — changes patch",[596,3186,3187,3191,3203,3221,3266,3311,3329,3342,3417,3488,3559,3564,3578,3595,3599],{"__ignoreMap":614},[618,3188,3189],{"class":620,"line":621},[618,3190,639],{"class":628},[618,3192,3193,3195,3197,3199,3201],{"class":620,"line":642},[618,3194,1063],{"class":628},[618,3196,633],{"class":1066},[618,3198,1070],{"class":628},[618,3200,649],{"class":628},[618,3202,913],{"class":628},[618,3204,3205,3207,3209,3211,3213,3215,3217,3219],{"class":620,"line":665},[618,3206,1232],{"class":628},[618,3208,1236],{"class":1235},[618,3210,1070],{"class":628},[618,3212,649],{"class":628},[618,3214,1075],{"class":628},[618,3216,3049],{"class":655},[618,3218,1070],{"class":628},[618,3220,662],{"class":628},[618,3222,3223,3225,3227,3229,3231,3233,3235,3237,3239,3241,3243,3245,3247,3249,3251,3253,3255,3257,3259,3262,3264],{"class":620,"line":707},[618,3224,1232],{"class":628},[618,3226,1256],{"class":1235},[618,3228,1070],{"class":628},[618,3230,649],{"class":628},[618,3232,673],{"class":628},[618,3234,1075],{"class":628},[618,3236,1267],{"class":829},[618,3238,1070],{"class":628},[618,3240,649],{"class":628},[618,3242,1075],{"class":628},[618,3244,683],{"class":655},[618,3246,1070],{"class":628},[618,3248,688],{"class":628},[618,3250,1075],{"class":628},[618,3252,960],{"class":829},[618,3254,1070],{"class":628},[618,3256,649],{"class":628},[618,3258,1075],{"class":628},[618,3260,3261],{"class":655},"usr_42",[618,3263,1070],{"class":628},[618,3265,741],{"class":628},[618,3267,3268,3270,3272,3274,3276,3278,3280,3282,3284,3286,3288,3290,3292,3294,3296,3298,3300,3302,3304,3307,3309],{"class":620,"line":744},[618,3269,1232],{"class":628},[618,3271,1304],{"class":1235},[618,3273,1070],{"class":628},[618,3275,649],{"class":628},[618,3277,673],{"class":628},[618,3279,1075],{"class":628},[618,3281,1267],{"class":829},[618,3283,1070],{"class":628},[618,3285,649],{"class":628},[618,3287,1075],{"class":628},[618,3289,683],{"class":655},[618,3291,1070],{"class":628},[618,3293,688],{"class":628},[618,3295,1075],{"class":628},[618,3297,960],{"class":829},[618,3299,1070],{"class":628},[618,3301,649],{"class":628},[618,3303,1075],{"class":628},[618,3305,3306],{"class":655},"usr_99",[618,3308,1070],{"class":628},[618,3310,741],{"class":628},[618,3312,3313,3315,3317,3319,3321,3323,3325,3327],{"class":620,"line":761},[618,3314,1232],{"class":628},[618,3316,1350],{"class":1235},[618,3318,1070],{"class":628},[618,3320,649],{"class":628},[618,3322,1075],{"class":628},[618,3324,754],{"class":655},[618,3326,1070],{"class":628},[618,3328,662],{"class":628},[618,3330,3331,3333,3335,3337,3339],{"class":620,"line":770},[618,3332,1232],{"class":628},[618,3334,2671],{"class":1235},[618,3336,1070],{"class":628},[618,3338,649],{"class":628},[618,3340,3341],{"class":628}," [\n",[618,3343,3344,3346,3348,3351,3353,3355,3357,3360,3362,3364,3366,3368,3370,3372,3374,3377,3379,3381,3383,3386,3388,3390,3392,3395,3397,3399,3401,3404,3406,3408,3410,3413,3415],{"class":620,"line":777},[618,3345,2271],{"class":628},[618,3347,1075],{"class":628},[618,3349,3350],{"class":829},"op",[618,3352,1070],{"class":628},[618,3354,649],{"class":628},[618,3356,1075],{"class":628},[618,3358,3359],{"class":655},"replace",[618,3361,1070],{"class":628},[618,3363,688],{"class":628},[618,3365,1075],{"class":628},[618,3367,1129],{"class":829},[618,3369,1070],{"class":628},[618,3371,649],{"class":628},[618,3373,1075],{"class":628},[618,3375,3376],{"class":655},"\u002Femail",[618,3378,1070],{"class":628},[618,3380,688],{"class":628},[618,3382,1075],{"class":628},[618,3384,3385],{"class":829},"from",[618,3387,1070],{"class":628},[618,3389,649],{"class":628},[618,3391,1075],{"class":628},[618,3393,3394],{"class":655},"old@example.com",[618,3396,1070],{"class":628},[618,3398,688],{"class":628},[618,3400,1075],{"class":628},[618,3402,3403],{"class":829},"to",[618,3405,1070],{"class":628},[618,3407,649],{"class":628},[618,3409,1075],{"class":628},[618,3411,3412],{"class":655},"new@example.com",[618,3414,1070],{"class":628},[618,3416,741],{"class":628},[618,3418,3419,3421,3423,3425,3427,3429,3431,3433,3435,3437,3439,3441,3443,3445,3447,3450,3452,3454,3456,3458,3460,3462,3464,3467,3469,3471,3473,3475,3477,3479,3481,3484,3486],{"class":620,"line":784},[618,3420,2271],{"class":628},[618,3422,1075],{"class":628},[618,3424,3350],{"class":829},[618,3426,1070],{"class":628},[618,3428,649],{"class":628},[618,3430,1075],{"class":628},[618,3432,3359],{"class":655},[618,3434,1070],{"class":628},[618,3436,688],{"class":628},[618,3438,1075],{"class":628},[618,3440,1129],{"class":829},[618,3442,1070],{"class":628},[618,3444,649],{"class":628},[618,3446,1075],{"class":628},[618,3448,3449],{"class":655},"\u002Frole",[618,3451,1070],{"class":628},[618,3453,688],{"class":628},[618,3455,1075],{"class":628},[618,3457,3385],{"class":829},[618,3459,1070],{"class":628},[618,3461,649],{"class":628},[618,3463,1075],{"class":628},[618,3465,3466],{"class":655},"member",[618,3468,1070],{"class":628},[618,3470,688],{"class":628},[618,3472,1075],{"class":628},[618,3474,3403],{"class":829},[618,3476,1070],{"class":628},[618,3478,649],{"class":628},[618,3480,1075],{"class":628},[618,3482,3483],{"class":655},"admin",[618,3485,1070],{"class":628},[618,3487,741],{"class":628},[618,3489,3490,3492,3494,3496,3498,3500,3502,3504,3506,3508,3510,3512,3514,3516,3518,3521,3523,3525,3527,3529,3531,3533,3535,3538,3540,3542,3544,3546,3548,3550,3552,3554,3556],{"class":620,"line":1216},[618,3491,2271],{"class":628},[618,3493,1075],{"class":628},[618,3495,3350],{"class":829},[618,3497,1070],{"class":628},[618,3499,649],{"class":628},[618,3501,1075],{"class":628},[618,3503,3359],{"class":655},[618,3505,1070],{"class":628},[618,3507,688],{"class":628},[618,3509,1075],{"class":628},[618,3511,1129],{"class":829},[618,3513,1070],{"class":628},[618,3515,649],{"class":628},[618,3517,1075],{"class":628},[618,3519,3520],{"class":655},"\u002Fpassword",[618,3522,1070],{"class":628},[618,3524,688],{"class":628},[618,3526,1075],{"class":628},[618,3528,3385],{"class":829},[618,3530,1070],{"class":628},[618,3532,649],{"class":628},[618,3534,1075],{"class":628},[618,3536,3537],{"class":655},"[REDACTED]",[618,3539,1070],{"class":628},[618,3541,688],{"class":628},[618,3543,1075],{"class":628},[618,3545,3403],{"class":829},[618,3547,1070],{"class":628},[618,3549,649],{"class":628},[618,3551,1075],{"class":628},[618,3553,3537],{"class":655},[618,3555,1070],{"class":628},[618,3557,3558],{"class":628}," }\n",[618,3560,3561],{"class":620,"line":1229},[618,3562,3563],{"class":628},"    ],\n",[618,3565,3566,3568,3570,3572,3574,3576],{"class":620,"line":1251},[618,3567,1232],{"class":628},[618,3569,1391],{"class":1235},[618,3571,1070],{"class":628},[618,3573,649],{"class":628},[618,3575,830],{"class":829},[618,3577,662],{"class":628},[618,3579,3580,3582,3584,3586,3588,3590,3593],{"class":620,"line":1299},[618,3581,1232],{"class":628},[618,3583,1407],{"class":1235},[618,3585,1070],{"class":628},[618,3587,649],{"class":628},[618,3589,1075],{"class":628},[618,3591,3592],{"class":655},"ak_5e7d8f9a0b1c2d3e",[618,3594,1474],{"class":628},[618,3596,3597],{"class":620,"line":1345},[618,3598,1486],{"class":628},[618,3600,3601],{"class":620,"line":1366},[618,3602,1046],{"class":628},[592,3604,3606,3609],{"id":3605},"withaudit-auto-instrumentation",[596,3607,3608],{},"withAudit()",": auto-instrumentation",[588,3611,3612,3613,3615],{},"Devs forget to call ",[596,3614,598],{},". Wrap the function and never miss a record:",[3617,3618,3619,3622,3623,3626,3627,3629,3630,3633],"tip",{},[2086,3620,3621],{},"When to wrap vs. call manually."," Wrap functions that are ",[2912,3624,3625],{},"pure audit-worthy actions"," (refund, delete, role change, password reset): outcome resolution is automatic and you can't accidentally skip the call. Stick to manual ",[596,3628,598],{}," when the audit is one of several decisions inside a larger handler, or when you need to emit the audit ",[2912,3631,3632],{},"before"," the action completes (e.g. \"user requested deletion\").",[854,3635,3636,3929,4134,4450],{},[609,3637,3639],{"className":611,"code":3638,"filename":859,"language":613,"meta":614,"style":614},"import { withAudit, AuditDeniedError } from 'evlog'\n\nconst refundInvoice = withAudit(\n  { action: 'invoice.refund', target: input => ({ type: 'invoice', id: input.id }) },\n  async (input: { id: string }, ctx) => {\n    if (!ctx.actor) throw new AuditDeniedError('Anonymous refund denied')\n    return await db.invoices.refund(input.id)\n  },\n)\n\nawait refundInvoice({ id: 'inv_889' }, {\n  actor: { type: 'user', id: user.id },\n  correlationId: requestId,\n})\n",[596,3640,3641,3665,3669,3683,3744,3776,3813,3841,3845,3849,3853,3879,3911,3923],{"__ignoreMap":614},[618,3642,3643,3645,3647,3650,3652,3655,3657,3659,3661,3663],{"class":620,"line":621},[618,3644,1516],{"class":866},[618,3646,673],{"class":628},[618,3648,3649],{"class":624}," withAudit",[618,3651,688],{"class":628},[618,3653,3654],{"class":624}," AuditDeniedError",[618,3656,833],{"class":628},[618,3658,1525],{"class":866},[618,3660,652],{"class":628},[618,3662,1530],{"class":655},[618,3664,1533],{"class":628},[618,3666,3667],{"class":620,"line":642},[618,3668,774],{"emptyLinePlaceholder":773},[618,3670,3671,3673,3676,3678,3680],{"class":620,"line":665},[618,3672,1934],{"class":1066},[618,3674,3675],{"class":624}," refundInvoice ",[618,3677,1940],{"class":628},[618,3679,3649],{"class":632},[618,3681,3682],{"class":624},"(\n",[618,3684,3685,3688,3690,3692,3694,3696,3698,3700,3702,3704,3708,3711,3713,3715,3717,3719,3721,3723,3725,3727,3729,3731,3733,3735,3737,3739,3742],{"class":620,"line":707},[618,3686,3687],{"class":628},"  {",[618,3689,806],{"class":645},[618,3691,649],{"class":628},[618,3693,652],{"class":628},[618,3695,656],{"class":655},[618,3697,659],{"class":628},[618,3699,688],{"class":628},[618,3701,1957],{"class":632},[618,3703,649],{"class":628},[618,3705,3707],{"class":3706},"sHdIc"," input",[618,3709,3710],{"class":1066}," =>",[618,3712,870],{"class":624},[618,3714,796],{"class":628},[618,3716,676],{"class":645},[618,3718,649],{"class":628},[618,3720,652],{"class":628},[618,3722,723],{"class":655},[618,3724,659],{"class":628},[618,3726,688],{"class":628},[618,3728,691],{"class":645},[618,3730,649],{"class":628},[618,3732,3707],{"class":624},[618,3734,629],{"class":628},[618,3736,701],{"class":624},[618,3738,764],{"class":628},[618,3740,3741],{"class":624},") ",[618,3743,704],{"class":628},[618,3745,3746,3749,3751,3754,3756,3758,3760,3762,3765,3767,3770,3772,3774],{"class":620,"line":744},[618,3747,3748],{"class":1066},"  async",[618,3750,870],{"class":628},[618,3752,3753],{"class":3706},"input",[618,3755,649],{"class":628},[618,3757,673],{"class":628},[618,3759,691],{"class":645},[618,3761,649],{"class":628},[618,3763,3764],{"class":1235}," string",[618,3766,2043],{"class":628},[618,3768,3769],{"class":3706}," ctx",[618,3771,2676],{"class":628},[618,3773,3710],{"class":1066},[618,3775,913],{"class":628},[618,3777,3778,3781,3783,3785,3788,3790,3792,3794,3797,3800,3802,3804,3806,3809,3811],{"class":620,"line":761},[618,3779,3780],{"class":866},"    if",[618,3782,870],{"class":645},[618,3784,873],{"class":628},[618,3786,3787],{"class":624},"ctx",[618,3789,629],{"class":628},[618,3791,1256],{"class":624},[618,3793,3741],{"class":645},[618,3795,3796],{"class":866},"throw",[618,3798,3799],{"class":628}," new",[618,3801,3654],{"class":632},[618,3803,636],{"class":645},[618,3805,659],{"class":628},[618,3807,3808],{"class":655},"Anonymous refund denied",[618,3810,659],{"class":628},[618,3812,767],{"class":645},[618,3814,3815,3818,3820,3822,3824,3827,3829,3831,3833,3835,3837,3839],{"class":620,"line":770},[618,3816,3817],{"class":866},"    return",[618,3819,2976],{"class":866},[618,3821,2979],{"class":624},[618,3823,629],{"class":628},[618,3825,3826],{"class":624},"invoices",[618,3828,629],{"class":628},[618,3830,1986],{"class":632},[618,3832,636],{"class":645},[618,3834,3753],{"class":624},[618,3836,629],{"class":628},[618,3838,960],{"class":624},[618,3840,767],{"class":645},[618,3842,3843],{"class":620,"line":777},[618,3844,2261],{"class":628},[618,3846,3847],{"class":620,"line":784},[618,3848,767],{"class":624},[618,3850,3851],{"class":620,"line":1216},[618,3852,774],{"emptyLinePlaceholder":773},[618,3854,3855,3858,3861,3863,3865,3867,3869,3871,3873,3875,3877],{"class":620,"line":1229},[618,3856,3857],{"class":866},"await",[618,3859,3860],{"class":632}," refundInvoice",[618,3862,636],{"class":624},[618,3864,796],{"class":628},[618,3866,691],{"class":645},[618,3868,649],{"class":628},[618,3870,652],{"class":628},[618,3872,736],{"class":655},[618,3874,659],{"class":628},[618,3876,2043],{"class":628},[618,3878,913],{"class":628},[618,3880,3881,3883,3885,3887,3889,3891,3893,3895,3897,3899,3901,3903,3905,3907,3909],{"class":620,"line":1251},[618,3882,668],{"class":645},[618,3884,649],{"class":628},[618,3886,673],{"class":628},[618,3888,676],{"class":645},[618,3890,649],{"class":628},[618,3892,652],{"class":628},[618,3894,683],{"class":655},[618,3896,659],{"class":628},[618,3898,688],{"class":628},[618,3900,691],{"class":645},[618,3902,649],{"class":628},[618,3904,696],{"class":624},[618,3906,629],{"class":628},[618,3908,701],{"class":624},[618,3910,704],{"class":628},[618,3912,3913,3916,3918,3921],{"class":620,"line":1299},[618,3914,3915],{"class":645},"  correlationId",[618,3917,649],{"class":628},[618,3919,3920],{"class":624}," requestId",[618,3922,662],{"class":628},[618,3924,3925,3927],{"class":620,"line":1345},[618,3926,764],{"class":628},[618,3928,767],{"class":624},[609,3930,3933],{"className":1049,"code":3931,"filename":3932,"language":1052,"meta":614,"style":614},"{\n  \"audit\": {\n    \"action\": \"invoice.refund\",\n    \"actor\": { \"type\": \"user\", \"id\": \"usr_42\" },\n    \"target\": { \"type\": \"invoice\", \"id\": \"inv_889\" },\n    \"outcome\": \"success\",\n    \"version\": 1,\n    \"idempotencyKey\": \"ak_8f3c4b2a1e5d6f7c\",\n    \"correlationId\": \"a566ef91-7765-4f59-b6f0-b9f40ce71599\"\n  }\n}\n","Output — success",[596,3934,3935,3939,3951,3969,4013,4057,4075,4089,4108,4126,4130],{"__ignoreMap":614},[618,3936,3937],{"class":620,"line":621},[618,3938,639],{"class":628},[618,3940,3941,3943,3945,3947,3949],{"class":620,"line":642},[618,3942,1063],{"class":628},[618,3944,633],{"class":1066},[618,3946,1070],{"class":628},[618,3948,649],{"class":628},[618,3950,913],{"class":628},[618,3952,3953,3955,3957,3959,3961,3963,3965,3967],{"class":620,"line":665},[618,3954,1232],{"class":628},[618,3956,1236],{"class":1235},[618,3958,1070],{"class":628},[618,3960,649],{"class":628},[618,3962,1075],{"class":628},[618,3964,656],{"class":655},[618,3966,1070],{"class":628},[618,3968,662],{"class":628},[618,3970,3971,3973,3975,3977,3979,3981,3983,3985,3987,3989,3991,3993,3995,3997,3999,4001,4003,4005,4007,4009,4011],{"class":620,"line":707},[618,3972,1232],{"class":628},[618,3974,1256],{"class":1235},[618,3976,1070],{"class":628},[618,3978,649],{"class":628},[618,3980,673],{"class":628},[618,3982,1075],{"class":628},[618,3984,1267],{"class":829},[618,3986,1070],{"class":628},[618,3988,649],{"class":628},[618,3990,1075],{"class":628},[618,3992,683],{"class":655},[618,3994,1070],{"class":628},[618,3996,688],{"class":628},[618,3998,1075],{"class":628},[618,4000,960],{"class":829},[618,4002,1070],{"class":628},[618,4004,649],{"class":628},[618,4006,1075],{"class":628},[618,4008,3261],{"class":655},[618,4010,1070],{"class":628},[618,4012,741],{"class":628},[618,4014,4015,4017,4019,4021,4023,4025,4027,4029,4031,4033,4035,4037,4039,4041,4043,4045,4047,4049,4051,4053,4055],{"class":620,"line":744},[618,4016,1232],{"class":628},[618,4018,1304],{"class":1235},[618,4020,1070],{"class":628},[618,4022,649],{"class":628},[618,4024,673],{"class":628},[618,4026,1075],{"class":628},[618,4028,1267],{"class":829},[618,4030,1070],{"class":628},[618,4032,649],{"class":628},[618,4034,1075],{"class":628},[618,4036,723],{"class":655},[618,4038,1070],{"class":628},[618,4040,688],{"class":628},[618,4042,1075],{"class":628},[618,4044,960],{"class":829},[618,4046,1070],{"class":628},[618,4048,649],{"class":628},[618,4050,1075],{"class":628},[618,4052,736],{"class":655},[618,4054,1070],{"class":628},[618,4056,741],{"class":628},[618,4058,4059,4061,4063,4065,4067,4069,4071,4073],{"class":620,"line":761},[618,4060,1232],{"class":628},[618,4062,1350],{"class":1235},[618,4064,1070],{"class":628},[618,4066,649],{"class":628},[618,4068,1075],{"class":628},[618,4070,754],{"class":655},[618,4072,1070],{"class":628},[618,4074,662],{"class":628},[618,4076,4077,4079,4081,4083,4085,4087],{"class":620,"line":770},[618,4078,1232],{"class":628},[618,4080,1391],{"class":1235},[618,4082,1070],{"class":628},[618,4084,649],{"class":628},[618,4086,830],{"class":829},[618,4088,662],{"class":628},[618,4090,4091,4093,4095,4097,4099,4101,4104,4106],{"class":620,"line":777},[618,4092,1232],{"class":628},[618,4094,1407],{"class":1235},[618,4096,1070],{"class":628},[618,4098,649],{"class":628},[618,4100,1075],{"class":628},[618,4102,4103],{"class":655},"ak_8f3c4b2a1e5d6f7c",[618,4105,1070],{"class":628},[618,4107,662],{"class":628},[618,4109,4110,4112,4115,4117,4119,4121,4124],{"class":620,"line":784},[618,4111,1232],{"class":628},[618,4113,4114],{"class":1235},"correlationId",[618,4116,1070],{"class":628},[618,4118,649],{"class":628},[618,4120,1075],{"class":628},[618,4122,4123],{"class":655},"a566ef91-7765-4f59-b6f0-b9f40ce71599",[618,4125,1474],{"class":628},[618,4127,4128],{"class":620,"line":1216},[618,4129,1486],{"class":628},[618,4131,4132],{"class":620,"line":1229},[618,4133,1046],{"class":628},[609,4135,4138],{"className":1049,"code":4136,"filename":4137,"language":1052,"meta":614,"style":614},"{\n  \"level\": \"error\",\n  \"audit\": {\n    \"action\": \"invoice.refund\",\n    \"actor\": { \"type\": \"user\", \"id\": \"usr_42\" },\n    \"target\": { \"type\": \"invoice\", \"id\": \"inv_889\" },\n    \"outcome\": \"failure\",\n    \"reason\": \"Stripe error: charge already refunded\",\n    \"version\": 1,\n    \"idempotencyKey\": \"ak_4c5d6e7f8a9b0c1d\",\n    \"correlationId\": \"a566ef91-7765-4f59-b6f0-b9f40ce71599\"\n  },\n  \"error\": {\n    \"name\": \"StripeError\",\n    \"message\": \"charge already refunded\",\n    \"stack\": \"...\"\n  }\n}\n","Output — failure",[596,4139,4140,4144,4163,4175,4193,4237,4281,4300,4319,4333,4352,4368,4372,4384,4404,4424,4442,4446],{"__ignoreMap":614},[618,4141,4142],{"class":620,"line":621},[618,4143,639],{"class":628},[618,4145,4146,4148,4150,4152,4154,4156,4159,4161],{"class":620,"line":642},[618,4147,1063],{"class":628},[618,4149,1067],{"class":1066},[618,4151,1070],{"class":628},[618,4153,649],{"class":628},[618,4155,1075],{"class":628},[618,4157,4158],{"class":655},"error",[618,4160,1070],{"class":628},[618,4162,662],{"class":628},[618,4164,4165,4167,4169,4171,4173],{"class":620,"line":665},[618,4166,1063],{"class":628},[618,4168,633],{"class":1066},[618,4170,1070],{"class":628},[618,4172,649],{"class":628},[618,4174,913],{"class":628},[618,4176,4177,4179,4181,4183,4185,4187,4189,4191],{"class":620,"line":707},[618,4178,1232],{"class":628},[618,4180,1236],{"class":1235},[618,4182,1070],{"class":628},[618,4184,649],{"class":628},[618,4186,1075],{"class":628},[618,4188,656],{"class":655},[618,4190,1070],{"class":628},[618,4192,662],{"class":628},[618,4194,4195,4197,4199,4201,4203,4205,4207,4209,4211,4213,4215,4217,4219,4221,4223,4225,4227,4229,4231,4233,4235],{"class":620,"line":744},[618,4196,1232],{"class":628},[618,4198,1256],{"class":1235},[618,4200,1070],{"class":628},[618,4202,649],{"class":628},[618,4204,673],{"class":628},[618,4206,1075],{"class":628},[618,4208,1267],{"class":829},[618,4210,1070],{"class":628},[618,4212,649],{"class":628},[618,4214,1075],{"class":628},[618,4216,683],{"class":655},[618,4218,1070],{"class":628},[618,4220,688],{"class":628},[618,4222,1075],{"class":628},[618,4224,960],{"class":829},[618,4226,1070],{"class":628},[618,4228,649],{"class":628},[618,4230,1075],{"class":628},[618,4232,3261],{"class":655},[618,4234,1070],{"class":628},[618,4236,741],{"class":628},[618,4238,4239,4241,4243,4245,4247,4249,4251,4253,4255,4257,4259,4261,4263,4265,4267,4269,4271,4273,4275,4277,4279],{"class":620,"line":761},[618,4240,1232],{"class":628},[618,4242,1304],{"class":1235},[618,4244,1070],{"class":628},[618,4246,649],{"class":628},[618,4248,673],{"class":628},[618,4250,1075],{"class":628},[618,4252,1267],{"class":829},[618,4254,1070],{"class":628},[618,4256,649],{"class":628},[618,4258,1075],{"class":628},[618,4260,723],{"class":655},[618,4262,1070],{"class":628},[618,4264,688],{"class":628},[618,4266,1075],{"class":628},[618,4268,960],{"class":829},[618,4270,1070],{"class":628},[618,4272,649],{"class":628},[618,4274,1075],{"class":628},[618,4276,736],{"class":655},[618,4278,1070],{"class":628},[618,4280,741],{"class":628},[618,4282,4283,4285,4287,4289,4291,4293,4296,4298],{"class":620,"line":770},[618,4284,1232],{"class":628},[618,4286,1350],{"class":1235},[618,4288,1070],{"class":628},[618,4290,649],{"class":628},[618,4292,1075],{"class":628},[618,4294,4295],{"class":655},"failure",[618,4297,1070],{"class":628},[618,4299,662],{"class":628},[618,4301,4302,4304,4306,4308,4310,4312,4315,4317],{"class":620,"line":777},[618,4303,1232],{"class":628},[618,4305,1371],{"class":1235},[618,4307,1070],{"class":628},[618,4309,649],{"class":628},[618,4311,1075],{"class":628},[618,4313,4314],{"class":655},"Stripe error: charge already refunded",[618,4316,1070],{"class":628},[618,4318,662],{"class":628},[618,4320,4321,4323,4325,4327,4329,4331],{"class":620,"line":784},[618,4322,1232],{"class":628},[618,4324,1391],{"class":1235},[618,4326,1070],{"class":628},[618,4328,649],{"class":628},[618,4330,830],{"class":829},[618,4332,662],{"class":628},[618,4334,4335,4337,4339,4341,4343,4345,4348,4350],{"class":620,"line":1216},[618,4336,1232],{"class":628},[618,4338,1407],{"class":1235},[618,4340,1070],{"class":628},[618,4342,649],{"class":628},[618,4344,1075],{"class":628},[618,4346,4347],{"class":655},"ak_4c5d6e7f8a9b0c1d",[618,4349,1070],{"class":628},[618,4351,662],{"class":628},[618,4353,4354,4356,4358,4360,4362,4364,4366],{"class":620,"line":1229},[618,4355,1232],{"class":628},[618,4357,4114],{"class":1235},[618,4359,1070],{"class":628},[618,4361,649],{"class":628},[618,4363,1075],{"class":628},[618,4365,4123],{"class":655},[618,4367,1474],{"class":628},[618,4369,4370],{"class":620,"line":1251},[618,4371,2261],{"class":628},[618,4373,4374,4376,4378,4380,4382],{"class":620,"line":1299},[618,4375,1063],{"class":628},[618,4377,4158],{"class":1066},[618,4379,1070],{"class":628},[618,4381,649],{"class":628},[618,4383,913],{"class":628},[618,4385,4386,4388,4391,4393,4395,4397,4400,4402],{"class":620,"line":1345},[618,4387,1232],{"class":628},[618,4389,4390],{"class":1235},"name",[618,4392,1070],{"class":628},[618,4394,649],{"class":628},[618,4396,1075],{"class":628},[618,4398,4399],{"class":655},"StripeError",[618,4401,1070],{"class":628},[618,4403,662],{"class":628},[618,4405,4406,4408,4411,4413,4415,4417,4420,4422],{"class":620,"line":1366},[618,4407,1232],{"class":628},[618,4409,4410],{"class":1235},"message",[618,4412,1070],{"class":628},[618,4414,649],{"class":628},[618,4416,1075],{"class":628},[618,4418,4419],{"class":655},"charge already refunded",[618,4421,1070],{"class":628},[618,4423,662],{"class":628},[618,4425,4426,4428,4431,4433,4435,4437,4440],{"class":620,"line":1386},[618,4427,1232],{"class":628},[618,4429,4430],{"class":1235},"stack",[618,4432,1070],{"class":628},[618,4434,649],{"class":628},[618,4436,1075],{"class":628},[618,4438,4439],{"class":655},"...",[618,4441,1474],{"class":628},[618,4443,4444],{"class":620,"line":1402},[618,4445,1486],{"class":628},[618,4447,4448],{"class":620,"line":1423},[618,4449,1046],{"class":628},[609,4451,4453],{"className":1049,"code":4452,"filename":1051,"language":1052,"meta":614,"style":614},"{\n  \"level\": \"warn\",\n  \"audit\": {\n    \"action\": \"invoice.refund\",\n    \"actor\": { \"type\": \"system\", \"id\": \"anonymous\" },\n    \"target\": { \"type\": \"invoice\", \"id\": \"inv_889\" },\n    \"outcome\": \"denied\",\n    \"reason\": \"Anonymous refund denied\",\n    \"version\": 1,\n    \"idempotencyKey\": \"ak_d12c3a4f5b6e7d8c\",\n    \"correlationId\": \"a566ef91-7765-4f59-b6f0-b9f40ce71599\"\n  }\n}\n",[596,4454,4455,4459,4477,4489,4507,4552,4596,4614,4632,4646,4664,4680,4684],{"__ignoreMap":614},[618,4456,4457],{"class":620,"line":621},[618,4458,639],{"class":628},[618,4460,4461,4463,4465,4467,4469,4471,4473,4475],{"class":620,"line":642},[618,4462,1063],{"class":628},[618,4464,1067],{"class":1066},[618,4466,1070],{"class":628},[618,4468,649],{"class":628},[618,4470,1075],{"class":628},[618,4472,1078],{"class":655},[618,4474,1070],{"class":628},[618,4476,662],{"class":628},[618,4478,4479,4481,4483,4485,4487],{"class":620,"line":665},[618,4480,1063],{"class":628},[618,4482,633],{"class":1066},[618,4484,1070],{"class":628},[618,4486,649],{"class":628},[618,4488,913],{"class":628},[618,4490,4491,4493,4495,4497,4499,4501,4503,4505],{"class":620,"line":707},[618,4492,1232],{"class":628},[618,4494,1236],{"class":1235},[618,4496,1070],{"class":628},[618,4498,649],{"class":628},[618,4500,1075],{"class":628},[618,4502,656],{"class":655},[618,4504,1070],{"class":628},[618,4506,662],{"class":628},[618,4508,4509,4511,4513,4515,4517,4519,4521,4523,4525,4527,4529,4531,4533,4535,4537,4539,4541,4543,4545,4548,4550],{"class":620,"line":744},[618,4510,1232],{"class":628},[618,4512,1256],{"class":1235},[618,4514,1070],{"class":628},[618,4516,649],{"class":628},[618,4518,673],{"class":628},[618,4520,1075],{"class":628},[618,4522,1267],{"class":829},[618,4524,1070],{"class":628},[618,4526,649],{"class":628},[618,4528,1075],{"class":628},[618,4530,1577],{"class":655},[618,4532,1070],{"class":628},[618,4534,688],{"class":628},[618,4536,1075],{"class":628},[618,4538,960],{"class":829},[618,4540,1070],{"class":628},[618,4542,649],{"class":628},[618,4544,1075],{"class":628},[618,4546,4547],{"class":655},"anonymous",[618,4549,1070],{"class":628},[618,4551,741],{"class":628},[618,4553,4554,4556,4558,4560,4562,4564,4566,4568,4570,4572,4574,4576,4578,4580,4582,4584,4586,4588,4590,4592,4594],{"class":620,"line":761},[618,4555,1232],{"class":628},[618,4557,1304],{"class":1235},[618,4559,1070],{"class":628},[618,4561,649],{"class":628},[618,4563,673],{"class":628},[618,4565,1075],{"class":628},[618,4567,1267],{"class":829},[618,4569,1070],{"class":628},[618,4571,649],{"class":628},[618,4573,1075],{"class":628},[618,4575,723],{"class":655},[618,4577,1070],{"class":628},[618,4579,688],{"class":628},[618,4581,1075],{"class":628},[618,4583,960],{"class":829},[618,4585,1070],{"class":628},[618,4587,649],{"class":628},[618,4589,1075],{"class":628},[618,4591,736],{"class":655},[618,4593,1070],{"class":628},[618,4595,741],{"class":628},[618,4597,4598,4600,4602,4604,4606,4608,4610,4612],{"class":620,"line":770},[618,4599,1232],{"class":628},[618,4601,1350],{"class":1235},[618,4603,1070],{"class":628},[618,4605,649],{"class":628},[618,4607,1075],{"class":628},[618,4609,1359],{"class":655},[618,4611,1070],{"class":628},[618,4613,662],{"class":628},[618,4615,4616,4618,4620,4622,4624,4626,4628,4630],{"class":620,"line":777},[618,4617,1232],{"class":628},[618,4619,1371],{"class":1235},[618,4621,1070],{"class":628},[618,4623,649],{"class":628},[618,4625,1075],{"class":628},[618,4627,3808],{"class":655},[618,4629,1070],{"class":628},[618,4631,662],{"class":628},[618,4633,4634,4636,4638,4640,4642,4644],{"class":620,"line":784},[618,4635,1232],{"class":628},[618,4637,1391],{"class":1235},[618,4639,1070],{"class":628},[618,4641,649],{"class":628},[618,4643,830],{"class":829},[618,4645,662],{"class":628},[618,4647,4648,4650,4652,4654,4656,4658,4660,4662],{"class":620,"line":1216},[618,4649,1232],{"class":628},[618,4651,1407],{"class":1235},[618,4653,1070],{"class":628},[618,4655,649],{"class":628},[618,4657,1075],{"class":628},[618,4659,1416],{"class":655},[618,4661,1070],{"class":628},[618,4663,662],{"class":628},[618,4665,4666,4668,4670,4672,4674,4676,4678],{"class":620,"line":1229},[618,4667,1232],{"class":628},[618,4669,4114],{"class":1235},[618,4671,1070],{"class":628},[618,4673,649],{"class":628},[618,4675,1075],{"class":628},[618,4677,4123],{"class":655},[618,4679,1474],{"class":628},[618,4681,4682],{"class":620,"line":1251},[618,4683,1486],{"class":628},[618,4685,4686],{"class":620,"line":1299},[618,4687,1046],{"class":628},[588,4689,4690],{},"Outcome resolution:",[2718,4692,4693,4702,4721],{},[2721,4694,4695,4698,4699,629],{},[596,4696,4697],{},"fn"," resolves → ",[596,4700,4701],{},"outcome: 'success'",[2721,4703,4704,4706,4707,4710,4711,4714,4715,4718,4719,629],{},[596,4705,4697],{}," throws an ",[596,4708,4709],{},"AuditDeniedError"," (or any error with ",[596,4712,4713],{},"status === 403",") → ",[596,4716,4717],{},"outcome: 'denied'",", error message becomes ",[596,4720,1371],{},[2721,4722,4723,4724,4727],{},"Other thrown errors → ",[596,4725,4726],{},"outcome: 'failure'",", then re-thrown.",[4729,4730,4731],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":614,"searchDepth":642,"depth":642,"links":4733},[4734,4735,4736,4738,4739,4744,4745],{"id":594,"depth":642,"text":598},{"id":843,"depth":642,"text":846},{"id":1494,"depth":642,"text":4737},"Standalone audit()",{"id":1893,"depth":642,"text":1896},{"id":2078,"depth":642,"text":2081,"children":4740},[4741,4743],{"id":2706,"depth":665,"text":4742},"defineAuditAction vs defineAuditCatalog: when to choose",{"id":2784,"depth":665,"text":2785},{"id":2890,"depth":642,"text":2893},{"id":3605,"depth":642,"text":4746},"withAudit(): auto-instrumentation","log.audit and log.audit.deny, standalone audit(), withAudit, the defineAuditAction and defineAuditCatalog registries, and auditDiff.","md",[4750,4753],{"label":396,"icon":399,"to":397,"color":4751,"variant":4752},"neutral","subtle",{"label":4754,"icon":409,"to":407,"color":4751,"variant":4752},"Drains & Integrity",{},{"title":401,"icon":404},{"title":583,"description":4747},"YK_TuxM0Kw3KwobrESvfeXNNFfJZ7GYyBbaWKVUsCdI",[4760,4762],{"title":396,"path":397,"stem":398,"description":4761,"icon":399,"children":-1},"The AuditFields type, action naming conventions, actor types, idempotency, and how the schema sits inside a regular wide event.",{"title":406,"path":407,"stem":408,"description":4763,"icon":409,"children":-1},"auditEnricher to auto-fill request context, auditOnly to route audits to a dedicated sink, and signed for tamper-evident HMAC or hash-chain integrity.",1789074373314]