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