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