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