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