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