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