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