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