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