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