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