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