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