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