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