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