[{"data":1,"prerenderedAt":2974},["ShallowReactive",2],{"navigation_docs":3,"-use-cases-audit-overview":434,"-use-cases-audit-overview-surround":2969},[4,30,80,240,348,403],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Start","\u002Fstart","1.start",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Learn","\u002Flearn","2.learn",[35,40,45,50,55,60,65,70,75],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":61,"path":62,"stem":63,"icon":64},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":66,"path":67,"stem":68,"icon":69},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":71,"path":72,"stem":73,"icon":74},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":76,"path":77,"stem":78,"icon":79},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":81,"path":82,"stem":83,"children":84,"page":29},"Integrate","\u002Fintegrate","3.integrate",[85,89,152],{"title":36,"path":86,"stem":87,"icon":88},"\u002Fintegrate\u002Foverview","3.integrate\u002F0.overview","i-lucide-plug",{"title":90,"path":91,"stem":92,"children":93,"page":29},"Adapters","\u002Fintegrate\u002Fadapters","3.integrate\u002Fadapters",[94,97,137],{"title":36,"path":95,"stem":96,"icon":39},"\u002Fintegrate\u002Fadapters\u002Foverview","3.integrate\u002Fadapters\u002F01.overview",{"title":98,"path":99,"stem":100,"children":101,"page":29},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","3.integrate\u002Fadapters\u002Fcloud",[102,107,112,117,122,127,132],{"title":103,"path":104,"stem":105,"icon":106},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","3.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":108,"path":109,"stem":110,"icon":111},"OTLP","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fotlp","3.integrate\u002Fadapters\u002Fcloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":113,"path":114,"stem":115,"icon":116},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","3.integrate\u002Fadapters\u002Fcloud\u002F03.posthog","i-simple-icons-posthog",{"title":118,"path":119,"stem":120,"icon":121},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","3.integrate\u002Fadapters\u002Fcloud\u002F04.sentry","i-simple-icons-sentry",{"title":123,"path":124,"stem":125,"icon":126},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","3.integrate\u002Fadapters\u002Fcloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":128,"path":129,"stem":130,"icon":131},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","3.integrate\u002Fadapters\u002Fcloud\u002F06.datadog","i-simple-icons-datadog",{"title":133,"path":134,"stem":135,"icon":136},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fhyperdx","3.integrate\u002Fadapters\u002Fcloud\u002F07.hyperdx","i-custom-hyperdx",{"title":138,"path":139,"stem":140,"children":141,"page":29},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","3.integrate\u002Fadapters\u002Fself-hosted",[142,147],{"title":143,"path":144,"stem":145,"icon":146},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","3.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":148,"path":149,"stem":150,"icon":151},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","3.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":153,"path":154,"stem":155,"children":156,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","3.integrate\u002Fframeworks",[157,161,166,171,176,181,186,191,196,201,206,211,216,221,225,230,235],{"title":36,"path":158,"stem":159,"icon":160},"\u002Fintegrate\u002Fframeworks\u002Foverview","3.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":162,"path":163,"stem":164,"icon":165},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","3.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":167,"path":168,"stem":169,"icon":170},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","3.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":172,"path":173,"stem":174,"icon":175},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","3.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":177,"path":178,"stem":179,"icon":180},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","3.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":182,"path":183,"stem":184,"icon":185},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","3.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":187,"path":188,"stem":189,"icon":190},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","3.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":192,"path":193,"stem":194,"icon":195},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","3.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":197,"path":198,"stem":199,"icon":200},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","3.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":202,"path":203,"stem":204,"icon":205},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","3.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":207,"path":208,"stem":209,"icon":210},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","3.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":212,"path":213,"stem":214,"icon":215},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","3.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":217,"path":218,"stem":219,"icon":220},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","3.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":222,"path":223,"stem":224,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","3.integrate\u002Fframeworks\u002F13.standalone",{"title":226,"path":227,"stem":228,"icon":229},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","3.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":231,"path":232,"stem":233,"icon":234},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","3.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":236,"path":237,"stem":238,"icon":239},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","3.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":241,"path":242,"stem":243,"children":244,"page":29},"Use Cases","\u002Fuse-cases","4.use-cases",[245,249,254,283,311,343],{"title":36,"path":246,"stem":247,"icon":248},"\u002Fuse-cases\u002Foverview","4.use-cases\u002F0.overview","i-lucide-list-checks",{"title":250,"path":251,"stem":252,"icon":253},"Client Logging","\u002Fuse-cases\u002Fclient-logging","4.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":255,"icon":256,"path":257,"stem":258,"children":259,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","4.use-cases\u002F2.ai-sdk",[260,263,268,273,278],{"title":36,"path":261,"stem":262,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","4.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":264,"path":265,"stem":266,"icon":267},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","4.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":269,"path":270,"stem":271,"icon":272},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","4.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":274,"path":275,"stem":276,"icon":277},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","4.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":279,"path":280,"stem":281,"icon":282},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","4.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":284,"icon":285,"path":286,"stem":287,"children":288,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","4.use-cases\u002F3.better-auth",[289,292,297,302,306],{"title":36,"path":290,"stem":291,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","4.use-cases\u002F3.better-auth\u002F01.overview",{"title":293,"path":294,"stem":295,"icon":296},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","4.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":298,"path":299,"stem":300,"icon":301},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","4.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":303,"path":304,"stem":305,"icon":253},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","4.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":307,"path":308,"stem":309,"icon":310},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","4.use-cases\u002F3.better-auth\u002F05.performance","i-lucide-gauge",{"title":312,"icon":313,"path":314,"stem":315,"children":316,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","4.use-cases\u002F4.audit",[317,320,325,330,335,339],{"title":36,"path":318,"stem":319,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","4.use-cases\u002F4.audit\u002F01.overview",{"title":321,"path":322,"stem":323,"icon":324},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","4.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":326,"path":327,"stem":328,"icon":329},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","4.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":331,"path":332,"stem":333,"icon":334},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","4.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":336,"path":337,"stem":338,"icon":313},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","4.use-cases\u002F4.audit\u002F05.compliance",{"title":340,"path":341,"stem":342,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","4.use-cases\u002F4.audit\u002F06.recipes",{"title":344,"path":345,"stem":346,"icon":347},"Enrichers","\u002Fuse-cases\u002Fenrichers","4.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":349,"path":350,"stem":351,"children":352,"page":29},"Extend","\u002Fextend","5.extend",[353,357,362,367,372,376,380,384,388,393,398],{"title":36,"path":354,"stem":355,"icon":356},"\u002Fextend\u002Foverview","5.extend\u002F0.overview","i-lucide-blocks",{"title":358,"path":359,"stem":360,"icon":361},"Stream","\u002Fextend\u002Fstream","5.extend\u002F1.stream","i-lucide-radio-tower",{"title":363,"path":364,"stem":365,"icon":366},"Custom framework","\u002Fextend\u002Fcustom-framework","5.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":368,"path":369,"stem":370,"icon":371},"FS reader","\u002Fextend\u002Ffs-reader","5.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":340,"path":373,"stem":374,"icon":375},"\u002Fextend\u002Fconsumer-recipes","5.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":377,"path":378,"stem":379,"icon":356},"Plugins","\u002Fextend\u002Fplugins","5.extend\u002F4.plugins",{"title":381,"path":382,"stem":383,"icon":347},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","5.extend\u002F5.custom-enrichers",{"title":385,"path":386,"stem":387,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","5.extend\u002F6.tail-sampling",{"title":389,"path":390,"stem":391,"icon":392},"Identity headers","\u002Fextend\u002Fidentity-headers","5.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":394,"path":395,"stem":396,"icon":397},"Custom drains","\u002Fextend\u002Fcustom-drains","5.extend\u002F8.custom-drains","i-lucide-share-2",{"title":399,"path":400,"stem":401,"icon":402},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","5.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":404,"path":405,"stem":406,"children":407,"page":29},"Reference","\u002Freference","6.reference",[408,413,416,421,425,430],{"title":409,"path":410,"stem":411,"icon":412},"Configuration","\u002Freference\u002Fconfiguration","6.reference\u002F1.configuration","i-lucide-settings",{"title":307,"path":414,"stem":415,"icon":310},"\u002Freference\u002Fperformance","6.reference\u002F2.performance",{"title":417,"path":418,"stem":419,"icon":420},"Vite Plugin","\u002Freference\u002Fvite-plugin","6.reference\u002F3.vite-plugin","i-custom-vite",{"title":422,"path":423,"stem":424,"icon":313},"Best Practices","\u002Freference\u002Fbest-practices","6.reference\u002F4.best-practices",{"title":426,"path":427,"stem":428,"icon":429},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","6.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":431,"path":432,"stem":433,"icon":347},"Agent Skills","\u002Freference\u002Fagent-skills","6.reference\u002F6.agent-skills",{"id":435,"title":312,"body":436,"description":2955,"extension":2956,"links":2957,"meta":2965,"navigation":2966,"path":318,"seo":2967,"stem":319,"__hash__":2968},"docs\u002F4.use-cases\u002F4.audit\u002F01.overview.md",{"type":437,"value":438,"toc":2948},"minimark",[439,457,504,508,534,563,576,580,587,594,597,601,604,912,2809,2812,2848,2858,2861,2865,2883,2886,2890,2944],[440,441,442,443,447,448,452,453,456],"p",{},"evlog's audit layer is ",[444,445,446],"strong",{},"not a parallel system",". Audit events are wide events with a reserved ",[449,450,451],"code",{},"audit"," field. Every existing primitive — drains, enrichers, redact, tail-sampling — applies as is. Enable audit logs by adding ",[444,454,455],{},"1 enricher + 1 drain wrapper + 1 helper",".",[458,459,462,465,490],"prompt",{":actions":460,"description":461,"icon":313},"[\"copy\",\"cursor\",\"windsurf\"]","Add an audit log to my app",[440,463,464],{},"Add a tamper-evident audit log to my app on top of evlog.",[466,467,468,472,475,478,481,484,487],"ul",{},[469,470,471],"li",{},"Identify my framework and follow its evlog integration pattern",[469,473,474],{},"Register auditEnricher() on the evlog:enrich hook (or in initLogger.enrichers)",[469,476,477],{},"Register a separate auditOnly(signed(createFsDrain({ dir: '.audit' }), { strategy: 'hash-chain' })) drain alongside my main drain",[469,479,480],{},"Use { await: true } on the audit drain so audit events are flushed before the response returns",[469,482,483],{},"Call log.audit({ action, actor, target, outcome, reason }) for every security-sensitive action (login, role change, refund, data export, deletion)",[469,485,486],{},"Audit events are force-kept past sampling and signed via hash-chain for tamper-evidence",[469,488,489],{},"Combine with the Better Auth integration so actor.id \u002F actor.email are automatic",[440,491,492,493,499,500],{},"Docs: ",[494,495,496],"a",{"href":496,"rel":497},"https:\u002F\u002Fwww.evlog.dev\u002Fuse-cases\u002Faudit\u002Foverview",[498],"nofollow","\nAdapters: ",[494,501,502],{"href":502,"rel":503},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fadapters\u002Foverview",[498],[505,506,431],"h2",{"id":507},"agent-skills",[440,509,510,511,516,517,520,521,524,525,530,531,456],{},"Install the evlog skill catalog so your assistant can follow ",[444,512,513],{},[449,514,515],{},"build-audit-logs"," end to end: written policy, framework wiring, ",[449,518,519],{},"withAudit"," \u002F ",[449,522,523],{},"log.audit",", denials, redaction, multi-tenant isolation, tamper-evident sinks, and grep-based review passes. If you use the file-system drain for audits or general logs, ",[444,526,527],{},[449,528,529],{},"analyze-logs"," teaches assistants to read NDJSON under ",[449,532,533],{},".evlog\u002Flogs\u002F",[535,536,542],"pre",{"className":537,"code":538,"filename":539,"language":540,"meta":541,"style":541},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npx skills add https:\u002F\u002Fwww.evlog.dev\n","Terminal","bash","",[449,543,544],{"__ignoreMap":541},[545,546,549,553,557,560],"span",{"class":547,"line":548},"line",1,[545,550,552],{"class":551},"sBMFI","npx",[545,554,556],{"class":555},"sfazB"," skills",[545,558,559],{"class":555}," add",[545,561,562],{"class":555}," https:\u002F\u002Fwww.evlog.dev\n",[440,564,565,566,568,569,572,573,456],{},"See ",[494,567,431],{"href":432}," for the full list. Skill paths in the repo: ",[449,570,571],{},"skills\u002Fbuild-audit-logs",", ",[449,574,575],{},"skills\u002Fanalyze-logs",[505,577,579],{"id":578},"why-audit-logs","Why Audit Logs?",[440,581,582,583,586],{},"Compliance frameworks (SOC2, HIPAA, GDPR, PCI) require knowing ",[444,584,585],{},"who did what, on which resource, when, from where, with which outcome",". evlog covers this without a second logging library.",[588,589,590,593],"tip",{},[444,591,592],{},"An audit event is a fact about an intent, not a measurement of an operation."," A regular wide event answers \"how did this request behave?\" (latency, status, tokens). An audit event answers \"who tried to do what, and was it allowed?\". Same pipeline, different question — that's why the schema is reserved and the event is force-kept past sampling.",[595,596],"audit-force-keep",{},[505,598,600],{"id":599},"quickstart","Quickstart",[440,602,603],{},"You already use evlog. Add audit logs in three changes:",[535,605,610],{"className":606,"code":607,"filename":608,"language":609,"meta":541,"style":541},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { auditEnricher, auditOnly, signed } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createFsDrain } from 'evlog\u002Ffs'\n\nexport default defineNitroPlugin((nitro) => {\n  nitro.hooks.hook('evlog:enrich', auditEnricher())\n  nitro.hooks.hook('evlog:drain', createAxiomDrain())\n  nitro.hooks.hook('evlog:drain', auditOnly(\n    signed(createFsDrain({ dir: '.audit' }), { strategy: 'hash-chain' }),\n    { await: true },\n  ))\n})\n","server\u002Fplugins\u002Fevlog.ts","typescript",[449,611,612,652,673,694,701,733,767,795,823,879,897,903],{"__ignoreMap":541},[545,613,614,618,622,626,629,632,634,637,640,643,646,649],{"class":547,"line":548},[545,615,617],{"class":616},"s7zQu","import",[545,619,621],{"class":620},"sMK4o"," {",[545,623,625],{"class":624},"sTEyZ"," auditEnricher",[545,627,628],{"class":620},",",[545,630,631],{"class":624}," auditOnly",[545,633,628],{"class":620},[545,635,636],{"class":624}," signed",[545,638,639],{"class":620}," }",[545,641,642],{"class":616}," from",[545,644,645],{"class":620}," '",[545,647,648],{"class":555},"evlog",[545,650,651],{"class":620},"'\n",[545,653,655,657,659,662,664,666,668,671],{"class":547,"line":654},2,[545,656,617],{"class":616},[545,658,621],{"class":620},[545,660,661],{"class":624}," createAxiomDrain",[545,663,639],{"class":620},[545,665,642],{"class":616},[545,667,645],{"class":620},[545,669,670],{"class":555},"evlog\u002Faxiom",[545,672,651],{"class":620},[545,674,676,678,680,683,685,687,689,692],{"class":547,"line":675},3,[545,677,617],{"class":616},[545,679,621],{"class":620},[545,681,682],{"class":624}," createFsDrain",[545,684,639],{"class":620},[545,686,642],{"class":616},[545,688,645],{"class":620},[545,690,691],{"class":555},"evlog\u002Ffs",[545,693,651],{"class":620},[545,695,697],{"class":547,"line":696},4,[545,698,700],{"emptyLinePlaceholder":699},true,"\n",[545,702,704,707,710,714,717,719,723,726,730],{"class":547,"line":703},5,[545,705,706],{"class":616},"export",[545,708,709],{"class":616}," default",[545,711,713],{"class":712},"s2Zo4"," defineNitroPlugin",[545,715,716],{"class":624},"(",[545,718,716],{"class":620},[545,720,722],{"class":721},"sHdIc","nitro",[545,724,725],{"class":620},")",[545,727,729],{"class":728},"spNyl"," =>",[545,731,732],{"class":620}," {\n",[545,734,736,739,741,744,746,749,752,755,758,760,762,764],{"class":547,"line":735},6,[545,737,738],{"class":624},"  nitro",[545,740,456],{"class":620},[545,742,743],{"class":624},"hooks",[545,745,456],{"class":620},[545,747,748],{"class":712},"hook",[545,750,716],{"class":751},"swJcz",[545,753,754],{"class":620},"'",[545,756,757],{"class":555},"evlog:enrich",[545,759,754],{"class":620},[545,761,628],{"class":620},[545,763,625],{"class":712},[545,765,766],{"class":751},"())\n",[545,768,770,772,774,776,778,780,782,784,787,789,791,793],{"class":547,"line":769},7,[545,771,738],{"class":624},[545,773,456],{"class":620},[545,775,743],{"class":624},[545,777,456],{"class":620},[545,779,748],{"class":712},[545,781,716],{"class":751},[545,783,754],{"class":620},[545,785,786],{"class":555},"evlog:drain",[545,788,754],{"class":620},[545,790,628],{"class":620},[545,792,661],{"class":712},[545,794,766],{"class":751},[545,796,798,800,802,804,806,808,810,812,814,816,818,820],{"class":547,"line":797},8,[545,799,738],{"class":624},[545,801,456],{"class":620},[545,803,743],{"class":624},[545,805,456],{"class":620},[545,807,748],{"class":712},[545,809,716],{"class":751},[545,811,754],{"class":620},[545,813,786],{"class":555},[545,815,754],{"class":620},[545,817,628],{"class":620},[545,819,631],{"class":712},[545,821,822],{"class":751},"(\n",[545,824,826,829,831,834,836,839,842,845,847,850,852,854,856,858,860,863,865,867,870,872,874,876],{"class":547,"line":825},9,[545,827,828],{"class":712},"    signed",[545,830,716],{"class":751},[545,832,833],{"class":712},"createFsDrain",[545,835,716],{"class":751},[545,837,838],{"class":620},"{",[545,840,841],{"class":751}," dir",[545,843,844],{"class":620},":",[545,846,645],{"class":620},[545,848,849],{"class":555},".audit",[545,851,754],{"class":620},[545,853,639],{"class":620},[545,855,725],{"class":751},[545,857,628],{"class":620},[545,859,621],{"class":620},[545,861,862],{"class":751}," strategy",[545,864,844],{"class":620},[545,866,645],{"class":620},[545,868,869],{"class":555},"hash-chain",[545,871,754],{"class":620},[545,873,639],{"class":620},[545,875,725],{"class":751},[545,877,878],{"class":620},",\n",[545,880,882,885,888,890,894],{"class":547,"line":881},10,[545,883,884],{"class":620},"    {",[545,886,887],{"class":751}," await",[545,889,844],{"class":620},[545,891,893],{"class":892},"sfNiH"," true",[545,895,896],{"class":620}," },\n",[545,898,900],{"class":547,"line":899},11,[545,901,902],{"class":751},"  ))\n",[545,904,906,909],{"class":547,"line":905},12,[545,907,908],{"class":620},"}",[545,910,911],{"class":624},")\n",[913,914,915,1209,1512,1885,2196,2354],"code-group",{},[535,916,919],{"className":606,"code":917,"filename":918,"language":609,"meta":541,"style":541},"export default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n  const user = await requireUser(event)\n  const invoice = await refundInvoice(getRouterParam(event, 'id'))\n\n  log.audit({\n    action: 'invoice.refund',\n    actor: { type: 'user', id: user.id, email: user.email },\n    target: { type: 'invoice', id: invoice.id },\n    outcome: 'success',\n    reason: 'Customer requested refund',\n  })\n\n  return { ok: true }\n})\n","Nuxt \u002F Nitro",[449,920,921,947,967,987,1022,1026,1040,1056,1106,1140,1156,1172,1179,1184,1202],{"__ignoreMap":541},[545,922,923,925,927,930,932,935,938,941,943,945],{"class":547,"line":548},[545,924,706],{"class":616},[545,926,709],{"class":616},[545,928,929],{"class":712}," defineEventHandler",[545,931,716],{"class":624},[545,933,934],{"class":728},"async",[545,936,937],{"class":620}," (",[545,939,940],{"class":721},"event",[545,942,725],{"class":620},[545,944,729],{"class":728},[545,946,732],{"class":620},[545,948,949,952,955,958,961,963,965],{"class":547,"line":654},[545,950,951],{"class":728},"  const",[545,953,954],{"class":624}," log",[545,956,957],{"class":620}," =",[545,959,960],{"class":712}," useLogger",[545,962,716],{"class":751},[545,964,940],{"class":624},[545,966,911],{"class":751},[545,968,969,971,974,976,978,981,983,985],{"class":547,"line":675},[545,970,951],{"class":728},[545,972,973],{"class":624}," user",[545,975,957],{"class":620},[545,977,887],{"class":616},[545,979,980],{"class":712}," requireUser",[545,982,716],{"class":751},[545,984,940],{"class":624},[545,986,911],{"class":751},[545,988,989,991,994,996,998,1001,1003,1006,1008,1010,1012,1014,1017,1019],{"class":547,"line":696},[545,990,951],{"class":728},[545,992,993],{"class":624}," invoice",[545,995,957],{"class":620},[545,997,887],{"class":616},[545,999,1000],{"class":712}," refundInvoice",[545,1002,716],{"class":751},[545,1004,1005],{"class":712},"getRouterParam",[545,1007,716],{"class":751},[545,1009,940],{"class":624},[545,1011,628],{"class":620},[545,1013,645],{"class":620},[545,1015,1016],{"class":555},"id",[545,1018,754],{"class":620},[545,1020,1021],{"class":751},"))\n",[545,1023,1024],{"class":547,"line":703},[545,1025,700],{"emptyLinePlaceholder":699},[545,1027,1028,1031,1033,1035,1037],{"class":547,"line":735},[545,1029,1030],{"class":624},"  log",[545,1032,456],{"class":620},[545,1034,451],{"class":712},[545,1036,716],{"class":751},[545,1038,1039],{"class":620},"{\n",[545,1041,1042,1045,1047,1049,1052,1054],{"class":547,"line":769},[545,1043,1044],{"class":751},"    action",[545,1046,844],{"class":620},[545,1048,645],{"class":620},[545,1050,1051],{"class":555},"invoice.refund",[545,1053,754],{"class":620},[545,1055,878],{"class":620},[545,1057,1058,1061,1063,1065,1068,1070,1072,1075,1077,1079,1082,1084,1086,1088,1090,1092,1095,1097,1099,1101,1104],{"class":547,"line":797},[545,1059,1060],{"class":751},"    actor",[545,1062,844],{"class":620},[545,1064,621],{"class":620},[545,1066,1067],{"class":751}," type",[545,1069,844],{"class":620},[545,1071,645],{"class":620},[545,1073,1074],{"class":555},"user",[545,1076,754],{"class":620},[545,1078,628],{"class":620},[545,1080,1081],{"class":751}," id",[545,1083,844],{"class":620},[545,1085,973],{"class":624},[545,1087,456],{"class":620},[545,1089,1016],{"class":624},[545,1091,628],{"class":620},[545,1093,1094],{"class":751}," email",[545,1096,844],{"class":620},[545,1098,973],{"class":624},[545,1100,456],{"class":620},[545,1102,1103],{"class":624},"email",[545,1105,896],{"class":620},[545,1107,1108,1111,1113,1115,1117,1119,1121,1124,1126,1128,1130,1132,1134,1136,1138],{"class":547,"line":825},[545,1109,1110],{"class":751},"    target",[545,1112,844],{"class":620},[545,1114,621],{"class":620},[545,1116,1067],{"class":751},[545,1118,844],{"class":620},[545,1120,645],{"class":620},[545,1122,1123],{"class":555},"invoice",[545,1125,754],{"class":620},[545,1127,628],{"class":620},[545,1129,1081],{"class":751},[545,1131,844],{"class":620},[545,1133,993],{"class":624},[545,1135,456],{"class":620},[545,1137,1016],{"class":624},[545,1139,896],{"class":620},[545,1141,1142,1145,1147,1149,1152,1154],{"class":547,"line":881},[545,1143,1144],{"class":751},"    outcome",[545,1146,844],{"class":620},[545,1148,645],{"class":620},[545,1150,1151],{"class":555},"success",[545,1153,754],{"class":620},[545,1155,878],{"class":620},[545,1157,1158,1161,1163,1165,1168,1170],{"class":547,"line":899},[545,1159,1160],{"class":751},"    reason",[545,1162,844],{"class":620},[545,1164,645],{"class":620},[545,1166,1167],{"class":555},"Customer requested refund",[545,1169,754],{"class":620},[545,1171,878],{"class":620},[545,1173,1174,1177],{"class":547,"line":905},[545,1175,1176],{"class":620},"  }",[545,1178,911],{"class":751},[545,1180,1182],{"class":547,"line":1181},13,[545,1183,700],{"emptyLinePlaceholder":699},[545,1185,1187,1190,1192,1195,1197,1199],{"class":547,"line":1186},14,[545,1188,1189],{"class":616},"  return",[545,1191,621],{"class":620},[545,1193,1194],{"class":751}," ok",[545,1196,844],{"class":620},[545,1198,893],{"class":892},[545,1200,1201],{"class":620}," }\n",[545,1203,1205,1207],{"class":547,"line":1204},15,[545,1206,908],{"class":620},[545,1208,911],{"class":624},[535,1210,1212],{"className":606,"code":1211,"filename":167,"language":609,"meta":541,"style":541},"import { withEvlog, useLogger } from '@\u002Flib\u002Fevlog'\n\nexport const POST = withEvlog(async (req, { params }) => {\n  const log = useLogger()\n  const user = await requireUser(req)\n  const invoice = await refundInvoice(params.id)\n\n  log.audit({\n    action: 'invoice.refund',\n    actor: { type: 'user', id: user.id, email: user.email },\n    target: { type: 'invoice', id: invoice.id },\n    outcome: 'success',\n    reason: 'Customer requested refund',\n  })\n\n  return Response.json({ ok: true })\n})\n",[449,1213,1214,1238,1242,1280,1293,1311,1334,1338,1350,1364,1408,1440,1454,1468,1474,1478,1505],{"__ignoreMap":541},[545,1215,1216,1218,1220,1223,1225,1227,1229,1231,1233,1236],{"class":547,"line":548},[545,1217,617],{"class":616},[545,1219,621],{"class":620},[545,1221,1222],{"class":624}," withEvlog",[545,1224,628],{"class":620},[545,1226,960],{"class":624},[545,1228,639],{"class":620},[545,1230,642],{"class":616},[545,1232,645],{"class":620},[545,1234,1235],{"class":555},"@\u002Flib\u002Fevlog",[545,1237,651],{"class":620},[545,1239,1240],{"class":547,"line":654},[545,1241,700],{"emptyLinePlaceholder":699},[545,1243,1244,1246,1249,1252,1255,1257,1259,1261,1263,1266,1268,1270,1273,1276,1278],{"class":547,"line":675},[545,1245,706],{"class":616},[545,1247,1248],{"class":728}," const",[545,1250,1251],{"class":624}," POST ",[545,1253,1254],{"class":620},"=",[545,1256,1222],{"class":712},[545,1258,716],{"class":624},[545,1260,934],{"class":728},[545,1262,937],{"class":620},[545,1264,1265],{"class":721},"req",[545,1267,628],{"class":620},[545,1269,621],{"class":620},[545,1271,1272],{"class":721}," params",[545,1274,1275],{"class":620}," })",[545,1277,729],{"class":728},[545,1279,732],{"class":620},[545,1281,1282,1284,1286,1288,1290],{"class":547,"line":696},[545,1283,951],{"class":728},[545,1285,954],{"class":624},[545,1287,957],{"class":620},[545,1289,960],{"class":712},[545,1291,1292],{"class":751},"()\n",[545,1294,1295,1297,1299,1301,1303,1305,1307,1309],{"class":547,"line":703},[545,1296,951],{"class":728},[545,1298,973],{"class":624},[545,1300,957],{"class":620},[545,1302,887],{"class":616},[545,1304,980],{"class":712},[545,1306,716],{"class":751},[545,1308,1265],{"class":624},[545,1310,911],{"class":751},[545,1312,1313,1315,1317,1319,1321,1323,1325,1328,1330,1332],{"class":547,"line":735},[545,1314,951],{"class":728},[545,1316,993],{"class":624},[545,1318,957],{"class":620},[545,1320,887],{"class":616},[545,1322,1000],{"class":712},[545,1324,716],{"class":751},[545,1326,1327],{"class":624},"params",[545,1329,456],{"class":620},[545,1331,1016],{"class":624},[545,1333,911],{"class":751},[545,1335,1336],{"class":547,"line":769},[545,1337,700],{"emptyLinePlaceholder":699},[545,1339,1340,1342,1344,1346,1348],{"class":547,"line":797},[545,1341,1030],{"class":624},[545,1343,456],{"class":620},[545,1345,451],{"class":712},[545,1347,716],{"class":751},[545,1349,1039],{"class":620},[545,1351,1352,1354,1356,1358,1360,1362],{"class":547,"line":825},[545,1353,1044],{"class":751},[545,1355,844],{"class":620},[545,1357,645],{"class":620},[545,1359,1051],{"class":555},[545,1361,754],{"class":620},[545,1363,878],{"class":620},[545,1365,1366,1368,1370,1372,1374,1376,1378,1380,1382,1384,1386,1388,1390,1392,1394,1396,1398,1400,1402,1404,1406],{"class":547,"line":881},[545,1367,1060],{"class":751},[545,1369,844],{"class":620},[545,1371,621],{"class":620},[545,1373,1067],{"class":751},[545,1375,844],{"class":620},[545,1377,645],{"class":620},[545,1379,1074],{"class":555},[545,1381,754],{"class":620},[545,1383,628],{"class":620},[545,1385,1081],{"class":751},[545,1387,844],{"class":620},[545,1389,973],{"class":624},[545,1391,456],{"class":620},[545,1393,1016],{"class":624},[545,1395,628],{"class":620},[545,1397,1094],{"class":751},[545,1399,844],{"class":620},[545,1401,973],{"class":624},[545,1403,456],{"class":620},[545,1405,1103],{"class":624},[545,1407,896],{"class":620},[545,1409,1410,1412,1414,1416,1418,1420,1422,1424,1426,1428,1430,1432,1434,1436,1438],{"class":547,"line":899},[545,1411,1110],{"class":751},[545,1413,844],{"class":620},[545,1415,621],{"class":620},[545,1417,1067],{"class":751},[545,1419,844],{"class":620},[545,1421,645],{"class":620},[545,1423,1123],{"class":555},[545,1425,754],{"class":620},[545,1427,628],{"class":620},[545,1429,1081],{"class":751},[545,1431,844],{"class":620},[545,1433,993],{"class":624},[545,1435,456],{"class":620},[545,1437,1016],{"class":624},[545,1439,896],{"class":620},[545,1441,1442,1444,1446,1448,1450,1452],{"class":547,"line":905},[545,1443,1144],{"class":751},[545,1445,844],{"class":620},[545,1447,645],{"class":620},[545,1449,1151],{"class":555},[545,1451,754],{"class":620},[545,1453,878],{"class":620},[545,1455,1456,1458,1460,1462,1464,1466],{"class":547,"line":1181},[545,1457,1160],{"class":751},[545,1459,844],{"class":620},[545,1461,645],{"class":620},[545,1463,1167],{"class":555},[545,1465,754],{"class":620},[545,1467,878],{"class":620},[545,1469,1470,1472],{"class":547,"line":1186},[545,1471,1176],{"class":620},[545,1473,911],{"class":751},[545,1475,1476],{"class":547,"line":1204},[545,1477,700],{"emptyLinePlaceholder":699},[545,1479,1481,1483,1486,1488,1491,1493,1495,1497,1499,1501,1503],{"class":547,"line":1480},16,[545,1482,1189],{"class":616},[545,1484,1485],{"class":624}," Response",[545,1487,456],{"class":620},[545,1489,1490],{"class":712},"json",[545,1492,716],{"class":751},[545,1494,838],{"class":620},[545,1496,1194],{"class":751},[545,1498,844],{"class":620},[545,1500,893],{"class":892},[545,1502,639],{"class":620},[545,1504,911],{"class":751},[545,1506,1508,1510],{"class":547,"line":1507},17,[545,1509,908],{"class":620},[545,1511,911],{"class":624},[535,1513,1515],{"className":606,"code":1514,"filename":197,"language":609,"meta":541,"style":541},"import type { EvlogVariables } from 'evlog\u002Fhono'\nimport { Hono } from 'hono'\n\nconst app = new Hono\u003CEvlogVariables>()\n\napp.post('\u002Finvoices\u002F:id\u002Frefund', async (c) => {\n  const log = c.get('log')\n  const user = await requireUser(c)\n  const invoice = await refundInvoice(c.req.param('id'))\n\n  log.audit({\n    action: 'invoice.refund',\n    actor: { type: 'user', id: user.id, email: user.email },\n    target: { type: 'invoice', id: invoice.id },\n    outcome: 'success',\n    reason: 'Customer requested refund',\n  })\n\n  return c.json({ ok: true })\n})\n",[449,1516,1517,1539,1559,1563,1589,1593,1628,1655,1673,1708,1712,1724,1738,1782,1814,1828,1842,1848,1853,1878],{"__ignoreMap":541},[545,1518,1519,1521,1523,1525,1528,1530,1532,1534,1537],{"class":547,"line":548},[545,1520,617],{"class":616},[545,1522,1067],{"class":616},[545,1524,621],{"class":620},[545,1526,1527],{"class":624}," EvlogVariables",[545,1529,639],{"class":620},[545,1531,642],{"class":616},[545,1533,645],{"class":620},[545,1535,1536],{"class":555},"evlog\u002Fhono",[545,1538,651],{"class":620},[545,1540,1541,1543,1545,1548,1550,1552,1554,1557],{"class":547,"line":654},[545,1542,617],{"class":616},[545,1544,621],{"class":620},[545,1546,1547],{"class":624}," Hono",[545,1549,639],{"class":620},[545,1551,642],{"class":616},[545,1553,645],{"class":620},[545,1555,1556],{"class":555},"hono",[545,1558,651],{"class":620},[545,1560,1561],{"class":547,"line":675},[545,1562,700],{"emptyLinePlaceholder":699},[545,1564,1565,1568,1571,1573,1576,1578,1581,1584,1587],{"class":547,"line":696},[545,1566,1567],{"class":728},"const",[545,1569,1570],{"class":624}," app ",[545,1572,1254],{"class":620},[545,1574,1575],{"class":620}," new",[545,1577,1547],{"class":712},[545,1579,1580],{"class":620},"\u003C",[545,1582,1583],{"class":551},"EvlogVariables",[545,1585,1586],{"class":620},">",[545,1588,1292],{"class":624},[545,1590,1591],{"class":547,"line":703},[545,1592,700],{"emptyLinePlaceholder":699},[545,1594,1595,1598,1600,1603,1605,1607,1610,1612,1614,1617,1619,1622,1624,1626],{"class":547,"line":735},[545,1596,1597],{"class":624},"app",[545,1599,456],{"class":620},[545,1601,1602],{"class":712},"post",[545,1604,716],{"class":624},[545,1606,754],{"class":620},[545,1608,1609],{"class":555},"\u002Finvoices\u002F:id\u002Frefund",[545,1611,754],{"class":620},[545,1613,628],{"class":620},[545,1615,1616],{"class":728}," async",[545,1618,937],{"class":620},[545,1620,1621],{"class":721},"c",[545,1623,725],{"class":620},[545,1625,729],{"class":728},[545,1627,732],{"class":620},[545,1629,1630,1632,1634,1636,1639,1641,1644,1646,1648,1651,1653],{"class":547,"line":769},[545,1631,951],{"class":728},[545,1633,954],{"class":624},[545,1635,957],{"class":620},[545,1637,1638],{"class":624}," c",[545,1640,456],{"class":620},[545,1642,1643],{"class":712},"get",[545,1645,716],{"class":751},[545,1647,754],{"class":620},[545,1649,1650],{"class":555},"log",[545,1652,754],{"class":620},[545,1654,911],{"class":751},[545,1656,1657,1659,1661,1663,1665,1667,1669,1671],{"class":547,"line":797},[545,1658,951],{"class":728},[545,1660,973],{"class":624},[545,1662,957],{"class":620},[545,1664,887],{"class":616},[545,1666,980],{"class":712},[545,1668,716],{"class":751},[545,1670,1621],{"class":624},[545,1672,911],{"class":751},[545,1674,1675,1677,1679,1681,1683,1685,1687,1689,1691,1693,1695,1698,1700,1702,1704,1706],{"class":547,"line":825},[545,1676,951],{"class":728},[545,1678,993],{"class":624},[545,1680,957],{"class":620},[545,1682,887],{"class":616},[545,1684,1000],{"class":712},[545,1686,716],{"class":751},[545,1688,1621],{"class":624},[545,1690,456],{"class":620},[545,1692,1265],{"class":624},[545,1694,456],{"class":620},[545,1696,1697],{"class":712},"param",[545,1699,716],{"class":751},[545,1701,754],{"class":620},[545,1703,1016],{"class":555},[545,1705,754],{"class":620},[545,1707,1021],{"class":751},[545,1709,1710],{"class":547,"line":881},[545,1711,700],{"emptyLinePlaceholder":699},[545,1713,1714,1716,1718,1720,1722],{"class":547,"line":899},[545,1715,1030],{"class":624},[545,1717,456],{"class":620},[545,1719,451],{"class":712},[545,1721,716],{"class":751},[545,1723,1039],{"class":620},[545,1725,1726,1728,1730,1732,1734,1736],{"class":547,"line":905},[545,1727,1044],{"class":751},[545,1729,844],{"class":620},[545,1731,645],{"class":620},[545,1733,1051],{"class":555},[545,1735,754],{"class":620},[545,1737,878],{"class":620},[545,1739,1740,1742,1744,1746,1748,1750,1752,1754,1756,1758,1760,1762,1764,1766,1768,1770,1772,1774,1776,1778,1780],{"class":547,"line":1181},[545,1741,1060],{"class":751},[545,1743,844],{"class":620},[545,1745,621],{"class":620},[545,1747,1067],{"class":751},[545,1749,844],{"class":620},[545,1751,645],{"class":620},[545,1753,1074],{"class":555},[545,1755,754],{"class":620},[545,1757,628],{"class":620},[545,1759,1081],{"class":751},[545,1761,844],{"class":620},[545,1763,973],{"class":624},[545,1765,456],{"class":620},[545,1767,1016],{"class":624},[545,1769,628],{"class":620},[545,1771,1094],{"class":751},[545,1773,844],{"class":620},[545,1775,973],{"class":624},[545,1777,456],{"class":620},[545,1779,1103],{"class":624},[545,1781,896],{"class":620},[545,1783,1784,1786,1788,1790,1792,1794,1796,1798,1800,1802,1804,1806,1808,1810,1812],{"class":547,"line":1186},[545,1785,1110],{"class":751},[545,1787,844],{"class":620},[545,1789,621],{"class":620},[545,1791,1067],{"class":751},[545,1793,844],{"class":620},[545,1795,645],{"class":620},[545,1797,1123],{"class":555},[545,1799,754],{"class":620},[545,1801,628],{"class":620},[545,1803,1081],{"class":751},[545,1805,844],{"class":620},[545,1807,993],{"class":624},[545,1809,456],{"class":620},[545,1811,1016],{"class":624},[545,1813,896],{"class":620},[545,1815,1816,1818,1820,1822,1824,1826],{"class":547,"line":1204},[545,1817,1144],{"class":751},[545,1819,844],{"class":620},[545,1821,645],{"class":620},[545,1823,1151],{"class":555},[545,1825,754],{"class":620},[545,1827,878],{"class":620},[545,1829,1830,1832,1834,1836,1838,1840],{"class":547,"line":1480},[545,1831,1160],{"class":751},[545,1833,844],{"class":620},[545,1835,645],{"class":620},[545,1837,1167],{"class":555},[545,1839,754],{"class":620},[545,1841,878],{"class":620},[545,1843,1844,1846],{"class":547,"line":1507},[545,1845,1176],{"class":620},[545,1847,911],{"class":751},[545,1849,1851],{"class":547,"line":1850},18,[545,1852,700],{"emptyLinePlaceholder":699},[545,1854,1856,1858,1860,1862,1864,1866,1868,1870,1872,1874,1876],{"class":547,"line":1855},19,[545,1857,1189],{"class":616},[545,1859,1638],{"class":624},[545,1861,456],{"class":620},[545,1863,1490],{"class":712},[545,1865,716],{"class":751},[545,1867,838],{"class":620},[545,1869,1194],{"class":751},[545,1871,844],{"class":620},[545,1873,893],{"class":892},[545,1875,639],{"class":620},[545,1877,911],{"class":751},[545,1879,1881,1883],{"class":547,"line":1880},20,[545,1882,908],{"class":620},[545,1884,911],{"class":624},[535,1886,1888],{"className":606,"code":1887,"filename":192,"language":609,"meta":541,"style":541},"import type { Request, Response } from 'express'\n\napp.post('\u002Finvoices\u002F:id\u002Frefund', async (req: Request, res: Response) => {\n  const log = req.log\n  const user = await requireUser(req)\n  const invoice = await refundInvoice(req.params.id)\n\n  log.audit({\n    action: 'invoice.refund',\n    actor: { type: 'user', id: user.id, email: user.email },\n    target: { type: 'invoice', id: invoice.id },\n    outcome: 'success',\n    reason: 'Customer requested refund',\n  })\n\n  res.json({ ok: true })\n})\n",[449,1889,1890,1916,1920,1963,1979,1997,2023,2027,2039,2053,2097,2129,2143,2157,2163,2167,2190],{"__ignoreMap":541},[545,1891,1892,1894,1896,1898,1901,1903,1905,1907,1909,1911,1914],{"class":547,"line":548},[545,1893,617],{"class":616},[545,1895,1067],{"class":616},[545,1897,621],{"class":620},[545,1899,1900],{"class":624}," Request",[545,1902,628],{"class":620},[545,1904,1485],{"class":624},[545,1906,639],{"class":620},[545,1908,642],{"class":616},[545,1910,645],{"class":620},[545,1912,1913],{"class":555},"express",[545,1915,651],{"class":620},[545,1917,1918],{"class":547,"line":654},[545,1919,700],{"emptyLinePlaceholder":699},[545,1921,1922,1924,1926,1928,1930,1932,1934,1936,1938,1940,1942,1944,1946,1948,1950,1953,1955,1957,1959,1961],{"class":547,"line":675},[545,1923,1597],{"class":624},[545,1925,456],{"class":620},[545,1927,1602],{"class":712},[545,1929,716],{"class":624},[545,1931,754],{"class":620},[545,1933,1609],{"class":555},[545,1935,754],{"class":620},[545,1937,628],{"class":620},[545,1939,1616],{"class":728},[545,1941,937],{"class":620},[545,1943,1265],{"class":721},[545,1945,844],{"class":620},[545,1947,1900],{"class":551},[545,1949,628],{"class":620},[545,1951,1952],{"class":721}," res",[545,1954,844],{"class":620},[545,1956,1485],{"class":551},[545,1958,725],{"class":620},[545,1960,729],{"class":728},[545,1962,732],{"class":620},[545,1964,1965,1967,1969,1971,1974,1976],{"class":547,"line":696},[545,1966,951],{"class":728},[545,1968,954],{"class":624},[545,1970,957],{"class":620},[545,1972,1973],{"class":624}," req",[545,1975,456],{"class":620},[545,1977,1978],{"class":624},"log\n",[545,1980,1981,1983,1985,1987,1989,1991,1993,1995],{"class":547,"line":703},[545,1982,951],{"class":728},[545,1984,973],{"class":624},[545,1986,957],{"class":620},[545,1988,887],{"class":616},[545,1990,980],{"class":712},[545,1992,716],{"class":751},[545,1994,1265],{"class":624},[545,1996,911],{"class":751},[545,1998,1999,2001,2003,2005,2007,2009,2011,2013,2015,2017,2019,2021],{"class":547,"line":735},[545,2000,951],{"class":728},[545,2002,993],{"class":624},[545,2004,957],{"class":620},[545,2006,887],{"class":616},[545,2008,1000],{"class":712},[545,2010,716],{"class":751},[545,2012,1265],{"class":624},[545,2014,456],{"class":620},[545,2016,1327],{"class":624},[545,2018,456],{"class":620},[545,2020,1016],{"class":624},[545,2022,911],{"class":751},[545,2024,2025],{"class":547,"line":769},[545,2026,700],{"emptyLinePlaceholder":699},[545,2028,2029,2031,2033,2035,2037],{"class":547,"line":797},[545,2030,1030],{"class":624},[545,2032,456],{"class":620},[545,2034,451],{"class":712},[545,2036,716],{"class":751},[545,2038,1039],{"class":620},[545,2040,2041,2043,2045,2047,2049,2051],{"class":547,"line":825},[545,2042,1044],{"class":751},[545,2044,844],{"class":620},[545,2046,645],{"class":620},[545,2048,1051],{"class":555},[545,2050,754],{"class":620},[545,2052,878],{"class":620},[545,2054,2055,2057,2059,2061,2063,2065,2067,2069,2071,2073,2075,2077,2079,2081,2083,2085,2087,2089,2091,2093,2095],{"class":547,"line":881},[545,2056,1060],{"class":751},[545,2058,844],{"class":620},[545,2060,621],{"class":620},[545,2062,1067],{"class":751},[545,2064,844],{"class":620},[545,2066,645],{"class":620},[545,2068,1074],{"class":555},[545,2070,754],{"class":620},[545,2072,628],{"class":620},[545,2074,1081],{"class":751},[545,2076,844],{"class":620},[545,2078,973],{"class":624},[545,2080,456],{"class":620},[545,2082,1016],{"class":624},[545,2084,628],{"class":620},[545,2086,1094],{"class":751},[545,2088,844],{"class":620},[545,2090,973],{"class":624},[545,2092,456],{"class":620},[545,2094,1103],{"class":624},[545,2096,896],{"class":620},[545,2098,2099,2101,2103,2105,2107,2109,2111,2113,2115,2117,2119,2121,2123,2125,2127],{"class":547,"line":899},[545,2100,1110],{"class":751},[545,2102,844],{"class":620},[545,2104,621],{"class":620},[545,2106,1067],{"class":751},[545,2108,844],{"class":620},[545,2110,645],{"class":620},[545,2112,1123],{"class":555},[545,2114,754],{"class":620},[545,2116,628],{"class":620},[545,2118,1081],{"class":751},[545,2120,844],{"class":620},[545,2122,993],{"class":624},[545,2124,456],{"class":620},[545,2126,1016],{"class":624},[545,2128,896],{"class":620},[545,2130,2131,2133,2135,2137,2139,2141],{"class":547,"line":905},[545,2132,1144],{"class":751},[545,2134,844],{"class":620},[545,2136,645],{"class":620},[545,2138,1151],{"class":555},[545,2140,754],{"class":620},[545,2142,878],{"class":620},[545,2144,2145,2147,2149,2151,2153,2155],{"class":547,"line":1181},[545,2146,1160],{"class":751},[545,2148,844],{"class":620},[545,2150,645],{"class":620},[545,2152,1167],{"class":555},[545,2154,754],{"class":620},[545,2156,878],{"class":620},[545,2158,2159,2161],{"class":547,"line":1186},[545,2160,1176],{"class":620},[545,2162,911],{"class":751},[545,2164,2165],{"class":547,"line":1204},[545,2166,700],{"emptyLinePlaceholder":699},[545,2168,2169,2172,2174,2176,2178,2180,2182,2184,2186,2188],{"class":547,"line":1480},[545,2170,2171],{"class":624},"  res",[545,2173,456],{"class":620},[545,2175,1490],{"class":712},[545,2177,716],{"class":751},[545,2179,838],{"class":620},[545,2181,1194],{"class":751},[545,2183,844],{"class":620},[545,2185,893],{"class":892},[545,2187,639],{"class":620},[545,2189,911],{"class":751},[545,2191,2192,2194],{"class":547,"line":1507},[545,2193,908],{"class":620},[545,2195,911],{"class":624},[535,2197,2200],{"className":606,"code":2198,"filename":2199,"language":609,"meta":541,"style":541},"import { audit } from 'evlog'\n\naudit({\n  action: 'invoice.refund',\n  actor: { type: 'system', id: 'billing-worker' },\n  target: { type: 'invoice', id: 'inv_889' },\n  outcome: 'success',\n  reason: 'Auto-refund triggered by chargeback webhook',\n})\n","Standalone job",[449,2201,2202,2221,2225,2233,2248,2283,2317,2332,2348],{"__ignoreMap":541},[545,2203,2204,2206,2208,2211,2213,2215,2217,2219],{"class":547,"line":548},[545,2205,617],{"class":616},[545,2207,621],{"class":620},[545,2209,2210],{"class":624}," audit",[545,2212,639],{"class":620},[545,2214,642],{"class":616},[545,2216,645],{"class":620},[545,2218,648],{"class":555},[545,2220,651],{"class":620},[545,2222,2223],{"class":547,"line":654},[545,2224,700],{"emptyLinePlaceholder":699},[545,2226,2227,2229,2231],{"class":547,"line":675},[545,2228,451],{"class":712},[545,2230,716],{"class":624},[545,2232,1039],{"class":620},[545,2234,2235,2238,2240,2242,2244,2246],{"class":547,"line":696},[545,2236,2237],{"class":751},"  action",[545,2239,844],{"class":620},[545,2241,645],{"class":620},[545,2243,1051],{"class":555},[545,2245,754],{"class":620},[545,2247,878],{"class":620},[545,2249,2250,2253,2255,2257,2259,2261,2263,2266,2268,2270,2272,2274,2276,2279,2281],{"class":547,"line":703},[545,2251,2252],{"class":751},"  actor",[545,2254,844],{"class":620},[545,2256,621],{"class":620},[545,2258,1067],{"class":751},[545,2260,844],{"class":620},[545,2262,645],{"class":620},[545,2264,2265],{"class":555},"system",[545,2267,754],{"class":620},[545,2269,628],{"class":620},[545,2271,1081],{"class":751},[545,2273,844],{"class":620},[545,2275,645],{"class":620},[545,2277,2278],{"class":555},"billing-worker",[545,2280,754],{"class":620},[545,2282,896],{"class":620},[545,2284,2285,2288,2290,2292,2294,2296,2298,2300,2302,2304,2306,2308,2310,2313,2315],{"class":547,"line":735},[545,2286,2287],{"class":751},"  target",[545,2289,844],{"class":620},[545,2291,621],{"class":620},[545,2293,1067],{"class":751},[545,2295,844],{"class":620},[545,2297,645],{"class":620},[545,2299,1123],{"class":555},[545,2301,754],{"class":620},[545,2303,628],{"class":620},[545,2305,1081],{"class":751},[545,2307,844],{"class":620},[545,2309,645],{"class":620},[545,2311,2312],{"class":555},"inv_889",[545,2314,754],{"class":620},[545,2316,896],{"class":620},[545,2318,2319,2322,2324,2326,2328,2330],{"class":547,"line":769},[545,2320,2321],{"class":751},"  outcome",[545,2323,844],{"class":620},[545,2325,645],{"class":620},[545,2327,1151],{"class":555},[545,2329,754],{"class":620},[545,2331,878],{"class":620},[545,2333,2334,2337,2339,2341,2344,2346],{"class":547,"line":797},[545,2335,2336],{"class":751},"  reason",[545,2338,844],{"class":620},[545,2340,645],{"class":620},[545,2342,2343],{"class":555},"Auto-refund triggered by chargeback webhook",[545,2345,754],{"class":620},[545,2347,878],{"class":620},[545,2349,2350,2352],{"class":547,"line":825},[545,2351,908],{"class":620},[545,2353,911],{"class":624},[535,2355,2359],{"className":2356,"code":2357,"filename":2358,"language":1490,"meta":541,"style":541},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"level\": \"info\",\n  \"service\": \"billing-api\",\n  \"method\": \"POST\",\n  \"path\": \"\u002Fapi\u002Finvoices\u002Finv_889\u002Frefund\",\n  \"status\": 200,\n  \"duration\": \"84ms\",\n  \"requestId\": \"a566ef91-7765-4f59-b6f0-b9f40ce71599\",\n  \"audit\": {\n    \"action\": \"invoice.refund\",\n    \"actor\": { \"type\": \"user\", \"id\": \"usr_42\", \"email\": \"demo@example.com\" },\n    \"target\": { \"type\": \"invoice\", \"id\": \"inv_889\" },\n    \"outcome\": \"success\",\n    \"reason\": \"Customer requested refund\",\n    \"version\": 1,\n    \"idempotencyKey\": \"ak_8f3c4b2a1e5d6f7c\",\n    \"context\": {\n      \"requestId\": \"a566ef91-7765-4f59-b6f0-b9f40ce71599\",\n      \"ip\": \"203.0.113.7\",\n      \"userAgent\": \"Mozilla\u002F5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit\u002F537.36\"\n    }\n  }\n}\n","Output — wide event",[449,2360,2361,2365,2388,2408,2428,2448,2465,2485,2505,2517,2537,2601,2646,2665,2684,2700,2720,2733,2752,2772,2791,2797,2803],{"__ignoreMap":541},[545,2362,2363],{"class":547,"line":548},[545,2364,1039],{"class":620},[545,2366,2367,2370,2373,2376,2378,2381,2384,2386],{"class":547,"line":654},[545,2368,2369],{"class":620},"  \"",[545,2371,2372],{"class":728},"level",[545,2374,2375],{"class":620},"\"",[545,2377,844],{"class":620},[545,2379,2380],{"class":620}," \"",[545,2382,2383],{"class":555},"info",[545,2385,2375],{"class":620},[545,2387,878],{"class":620},[545,2389,2390,2392,2395,2397,2399,2401,2404,2406],{"class":547,"line":675},[545,2391,2369],{"class":620},[545,2393,2394],{"class":728},"service",[545,2396,2375],{"class":620},[545,2398,844],{"class":620},[545,2400,2380],{"class":620},[545,2402,2403],{"class":555},"billing-api",[545,2405,2375],{"class":620},[545,2407,878],{"class":620},[545,2409,2410,2412,2415,2417,2419,2421,2424,2426],{"class":547,"line":696},[545,2411,2369],{"class":620},[545,2413,2414],{"class":728},"method",[545,2416,2375],{"class":620},[545,2418,844],{"class":620},[545,2420,2380],{"class":620},[545,2422,2423],{"class":555},"POST",[545,2425,2375],{"class":620},[545,2427,878],{"class":620},[545,2429,2430,2432,2435,2437,2439,2441,2444,2446],{"class":547,"line":703},[545,2431,2369],{"class":620},[545,2433,2434],{"class":728},"path",[545,2436,2375],{"class":620},[545,2438,844],{"class":620},[545,2440,2380],{"class":620},[545,2442,2443],{"class":555},"\u002Fapi\u002Finvoices\u002Finv_889\u002Frefund",[545,2445,2375],{"class":620},[545,2447,878],{"class":620},[545,2449,2450,2452,2455,2457,2459,2463],{"class":547,"line":735},[545,2451,2369],{"class":620},[545,2453,2454],{"class":728},"status",[545,2456,2375],{"class":620},[545,2458,844],{"class":620},[545,2460,2462],{"class":2461},"sbssI"," 200",[545,2464,878],{"class":620},[545,2466,2467,2469,2472,2474,2476,2478,2481,2483],{"class":547,"line":769},[545,2468,2369],{"class":620},[545,2470,2471],{"class":728},"duration",[545,2473,2375],{"class":620},[545,2475,844],{"class":620},[545,2477,2380],{"class":620},[545,2479,2480],{"class":555},"84ms",[545,2482,2375],{"class":620},[545,2484,878],{"class":620},[545,2486,2487,2489,2492,2494,2496,2498,2501,2503],{"class":547,"line":797},[545,2488,2369],{"class":620},[545,2490,2491],{"class":728},"requestId",[545,2493,2375],{"class":620},[545,2495,844],{"class":620},[545,2497,2380],{"class":620},[545,2499,2500],{"class":555},"a566ef91-7765-4f59-b6f0-b9f40ce71599",[545,2502,2375],{"class":620},[545,2504,878],{"class":620},[545,2506,2507,2509,2511,2513,2515],{"class":547,"line":825},[545,2508,2369],{"class":620},[545,2510,451],{"class":728},[545,2512,2375],{"class":620},[545,2514,844],{"class":620},[545,2516,732],{"class":620},[545,2518,2519,2522,2525,2527,2529,2531,2533,2535],{"class":547,"line":881},[545,2520,2521],{"class":620},"    \"",[545,2523,2524],{"class":551},"action",[545,2526,2375],{"class":620},[545,2528,844],{"class":620},[545,2530,2380],{"class":620},[545,2532,1051],{"class":555},[545,2534,2375],{"class":620},[545,2536,878],{"class":620},[545,2538,2539,2541,2544,2546,2548,2550,2552,2555,2557,2559,2561,2563,2565,2567,2569,2571,2573,2575,2577,2580,2582,2584,2586,2588,2590,2592,2594,2597,2599],{"class":547,"line":899},[545,2540,2521],{"class":620},[545,2542,2543],{"class":551},"actor",[545,2545,2375],{"class":620},[545,2547,844],{"class":620},[545,2549,621],{"class":620},[545,2551,2380],{"class":620},[545,2553,2554],{"class":2461},"type",[545,2556,2375],{"class":620},[545,2558,844],{"class":620},[545,2560,2380],{"class":620},[545,2562,1074],{"class":555},[545,2564,2375],{"class":620},[545,2566,628],{"class":620},[545,2568,2380],{"class":620},[545,2570,1016],{"class":2461},[545,2572,2375],{"class":620},[545,2574,844],{"class":620},[545,2576,2380],{"class":620},[545,2578,2579],{"class":555},"usr_42",[545,2581,2375],{"class":620},[545,2583,628],{"class":620},[545,2585,2380],{"class":620},[545,2587,1103],{"class":2461},[545,2589,2375],{"class":620},[545,2591,844],{"class":620},[545,2593,2380],{"class":620},[545,2595,2596],{"class":555},"demo@example.com",[545,2598,2375],{"class":620},[545,2600,896],{"class":620},[545,2602,2603,2605,2608,2610,2612,2614,2616,2618,2620,2622,2624,2626,2628,2630,2632,2634,2636,2638,2640,2642,2644],{"class":547,"line":905},[545,2604,2521],{"class":620},[545,2606,2607],{"class":551},"target",[545,2609,2375],{"class":620},[545,2611,844],{"class":620},[545,2613,621],{"class":620},[545,2615,2380],{"class":620},[545,2617,2554],{"class":2461},[545,2619,2375],{"class":620},[545,2621,844],{"class":620},[545,2623,2380],{"class":620},[545,2625,1123],{"class":555},[545,2627,2375],{"class":620},[545,2629,628],{"class":620},[545,2631,2380],{"class":620},[545,2633,1016],{"class":2461},[545,2635,2375],{"class":620},[545,2637,844],{"class":620},[545,2639,2380],{"class":620},[545,2641,2312],{"class":555},[545,2643,2375],{"class":620},[545,2645,896],{"class":620},[545,2647,2648,2650,2653,2655,2657,2659,2661,2663],{"class":547,"line":1181},[545,2649,2521],{"class":620},[545,2651,2652],{"class":551},"outcome",[545,2654,2375],{"class":620},[545,2656,844],{"class":620},[545,2658,2380],{"class":620},[545,2660,1151],{"class":555},[545,2662,2375],{"class":620},[545,2664,878],{"class":620},[545,2666,2667,2669,2672,2674,2676,2678,2680,2682],{"class":547,"line":1186},[545,2668,2521],{"class":620},[545,2670,2671],{"class":551},"reason",[545,2673,2375],{"class":620},[545,2675,844],{"class":620},[545,2677,2380],{"class":620},[545,2679,1167],{"class":555},[545,2681,2375],{"class":620},[545,2683,878],{"class":620},[545,2685,2686,2688,2691,2693,2695,2698],{"class":547,"line":1204},[545,2687,2521],{"class":620},[545,2689,2690],{"class":551},"version",[545,2692,2375],{"class":620},[545,2694,844],{"class":620},[545,2696,2697],{"class":2461}," 1",[545,2699,878],{"class":620},[545,2701,2702,2704,2707,2709,2711,2713,2716,2718],{"class":547,"line":1480},[545,2703,2521],{"class":620},[545,2705,2706],{"class":551},"idempotencyKey",[545,2708,2375],{"class":620},[545,2710,844],{"class":620},[545,2712,2380],{"class":620},[545,2714,2715],{"class":555},"ak_8f3c4b2a1e5d6f7c",[545,2717,2375],{"class":620},[545,2719,878],{"class":620},[545,2721,2722,2724,2727,2729,2731],{"class":547,"line":1507},[545,2723,2521],{"class":620},[545,2725,2726],{"class":551},"context",[545,2728,2375],{"class":620},[545,2730,844],{"class":620},[545,2732,732],{"class":620},[545,2734,2735,2738,2740,2742,2744,2746,2748,2750],{"class":547,"line":1850},[545,2736,2737],{"class":620},"      \"",[545,2739,2491],{"class":2461},[545,2741,2375],{"class":620},[545,2743,844],{"class":620},[545,2745,2380],{"class":620},[545,2747,2500],{"class":555},[545,2749,2375],{"class":620},[545,2751,878],{"class":620},[545,2753,2754,2756,2759,2761,2763,2765,2768,2770],{"class":547,"line":1855},[545,2755,2737],{"class":620},[545,2757,2758],{"class":2461},"ip",[545,2760,2375],{"class":620},[545,2762,844],{"class":620},[545,2764,2380],{"class":620},[545,2766,2767],{"class":555},"203.0.113.7",[545,2769,2375],{"class":620},[545,2771,878],{"class":620},[545,2773,2774,2776,2779,2781,2783,2785,2788],{"class":547,"line":1880},[545,2775,2737],{"class":620},[545,2777,2778],{"class":2461},"userAgent",[545,2780,2375],{"class":620},[545,2782,844],{"class":620},[545,2784,2380],{"class":620},[545,2786,2787],{"class":555},"Mozilla\u002F5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit\u002F537.36",[545,2789,2790],{"class":620},"\"\n",[545,2792,2794],{"class":547,"line":2793},21,[545,2795,2796],{"class":620},"    }\n",[545,2798,2800],{"class":547,"line":2799},22,[545,2801,2802],{"class":620},"  }\n",[545,2804,2806],{"class":547,"line":2805},23,[545,2807,2808],{"class":620},"}\n",[440,2810,2811],{},"That's it. The audit event:",[466,2813,2814,2817,2824,2831],{},[469,2815,2816],{},"Travels through the same wide-event pipeline as the rest of your logs.",[469,2818,2819,2820,2823],{},"Is ",[444,2821,2822],{},"always kept"," past tail sampling.",[469,2825,2826,2827,2830],{},"Goes to your main drain (Axiom) ",[444,2828,2829],{},"and"," to a dedicated, signed, append-only sink (FS journal).",[469,2832,2833,2834,572,2836,572,2839,2841,2842,2844,2845,456],{},"Carries ",[449,2835,2491],{},[449,2837,2838],{},"traceId",[449,2840,2758],{},", and ",[449,2843,2778],{}," automatically via ",[449,2846,2847],{},"auditEnricher",[588,2849,2850,2853,2854,2857],{},[444,2851,2852],{},"Why two drains?"," The main drain (Axiom, Datadog, ...) keeps audits next to the rest of your telemetry so dashboards and queries still work. The signed sink is your insurance: if the main drain has an outage, gets purged, or an admin quietly removes a row, the FS journal still holds the chain. Auditors want both — fast querying ",[2855,2856,2829],"em",{}," a tamper-evident artefact.",[2859,2860],"audit-dual-sink",{},[505,2862,2864],{"id":2863},"composition","Composition",[440,2866,2867,2868,2871,2872,572,2874,2841,2876,520,2879,2882],{},"Each layer is ",[444,2869,2870],{},"opt-in and replaceable",". Every node except ",[449,2873,523],{},[449,2875,2847],{},[449,2877,2878],{},"auditOnly",[449,2880,2881],{},"signed"," is shared with regular wide events.",[2884,2885],"audit-composition-flow",{},[505,2887,2889],{"id":2888},"where-to-next","Where to next",[2891,2892,2893,2901,2924,2934,2937],"card-group",{},[2894,2895,2896,2897,2900],"card",{"icon":324,"title":321,"to":322},"The ",[449,2898,2899],{},"AuditFields"," type, action naming conventions, actor types, and idempotency.",[2894,2902,2904,572,2906,2909,2910,572,2913,572,2915,572,2918,2841,2921,456],{"icon":329,"title":2903,"to":327},"Recording Events",[449,2905,523],{},[449,2907,2908],{},"log.audit.deny",", standalone ",[449,2911,2912],{},"audit()",[449,2914,519],{},[449,2916,2917],{},"defineAuditAction",[449,2919,2920],{},"defineAuditCatalog",[449,2922,2923],{},"auditDiff",[2894,2925,2927,572,2929,2841,2931,2933],{"icon":334,"title":2926,"to":332},"Drains & Integrity",[449,2928,2847],{},[449,2930,2878],{},[449,2932,2881],{}," (HMAC and hash-chain) drain wrappers.",[2894,2935,2936],{"icon":313,"title":336,"to":337},"Integrity, redact presets, GDPR vs append-only, retention, and common pitfalls.",[2894,2938,2939,2940,2943],{"icon":79,"title":340,"to":341},"FS, Axiom, and Postgres recipes — plus testing with ",[449,2941,2942],{},"mockAudit"," and the API reference.",[2945,2946,2947],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":541,"searchDepth":654,"depth":654,"links":2949},[2950,2951,2952,2953,2954],{"id":507,"depth":654,"text":431},{"id":578,"depth":654,"text":579},{"id":599,"depth":654,"text":600},{"id":2863,"depth":654,"text":2864},{"id":2888,"depth":654,"text":2889},"First-class audit logs as a thin layer on top of evlog's wide events. Add tamper-evident audit trails to any app with one enricher, one drain wrapper, and one helper.","md",[2958,2961,2962,2963,2964],{"label":321,"icon":324,"to":322,"color":2959,"variant":2960},"neutral","subtle",{"label":326,"icon":329,"to":327,"color":2959,"variant":2960},{"label":2926,"icon":334,"to":332,"color":2959,"variant":2960},{"label":336,"icon":313,"to":337,"color":2959,"variant":2960},{"label":340,"icon":79,"to":341,"color":2959,"variant":2960},{},{"title":36,"icon":39},{"title":312,"description":2955},"JLGs0YoesF9LkFtpzlirO4LnOGIPHDAWhICeu3lIeew",[2970,2972],{"title":307,"path":308,"stem":309,"description":2971,"icon":310,"children":-1},"Watch session resolution time, enable session caching, wire the standalone Nitro hook, and combine with the AI SDK integration.",{"title":321,"path":322,"stem":323,"description":2973,"icon":324,"children":-1},"The AuditFields type, action naming conventions, actor types, idempotency, and how the schema sits inside a regular wide event.",1778446106056]