[{"data":1,"prerenderedAt":3746},["ShallowReactive",2],{"navigation_docs":3,"-logging-audit-recording":388,"-logging-audit-recording-surround":3741},[4,35,155,197,285,372],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F4.agent-skills","i-lucide-sparkles",{"title":30,"path":31,"stem":32,"icon":33},"vs Other Loggers","\u002Fgetting-started\u002Fvs-other-loggers","1.getting-started\u002F5.vs-other-loggers","i-lucide-scale",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Logging","\u002Flogging","2.logging",[40,45,50,55,60,65,94,122],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F4.client-logging","i-lucide-monitor",{"title":66,"icon":67,"path":68,"stem":69,"children":70,"page":34},"AI SDK","i-simple-icons-vercel","\u002Flogging\u002Fai-sdk","2.logging\u002F5.ai-sdk",[71,74,79,84,89],{"title":41,"path":72,"stem":73,"icon":44},"\u002Flogging\u002Fai-sdk\u002Foverview","2.logging\u002F5.ai-sdk\u002F01.overview",{"title":75,"path":76,"stem":77,"icon":78},"Usage","\u002Flogging\u002Fai-sdk\u002Fusage","2.logging\u002F5.ai-sdk\u002F02.usage","i-lucide-code",{"title":80,"path":81,"stem":82,"icon":83},"Options","\u002Flogging\u002Fai-sdk\u002Foptions","2.logging\u002F5.ai-sdk\u002F03.options","i-lucide-sliders",{"title":85,"path":86,"stem":87,"icon":88},"Metadata","\u002Flogging\u002Fai-sdk\u002Fmetadata","2.logging\u002F5.ai-sdk\u002F04.metadata","i-lucide-database",{"title":90,"path":91,"stem":92,"icon":93},"Telemetry","\u002Flogging\u002Fai-sdk\u002Ftelemetry","2.logging\u002F5.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":95,"icon":96,"path":97,"stem":98,"children":99,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Flogging\u002Fbetter-auth","2.logging\u002F6.better-auth",[100,103,108,113,117],{"title":41,"path":101,"stem":102,"icon":44},"\u002Flogging\u002Fbetter-auth\u002Foverview","2.logging\u002F6.better-auth\u002F01.overview",{"title":104,"path":105,"stem":106,"icon":107},"Identify User","\u002Flogging\u002Fbetter-auth\u002Fidentify-user","2.logging\u002F6.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":109,"path":110,"stem":111,"icon":112},"Middleware","\u002Flogging\u002Fbetter-auth\u002Fmiddleware","2.logging\u002F6.better-auth\u002F03.middleware","i-lucide-shield",{"title":114,"path":115,"stem":116,"icon":64},"Client Sync","\u002Flogging\u002Fbetter-auth\u002Fclient-sync","2.logging\u002F6.better-auth\u002F04.client-sync",{"title":118,"path":119,"stem":120,"icon":121},"Performance","\u002Flogging\u002Fbetter-auth\u002Fperformance","2.logging\u002F6.better-auth\u002F05.performance","i-lucide-gauge",{"title":123,"icon":124,"path":125,"stem":126,"children":127,"page":34},"Audit Logs","i-lucide-shield-check","\u002Flogging\u002Faudit","2.logging\u002F7.audit",[128,131,136,141,146,150],{"title":41,"path":129,"stem":130,"icon":44},"\u002Flogging\u002Faudit\u002Foverview","2.logging\u002F7.audit\u002F01.overview",{"title":132,"path":133,"stem":134,"icon":135},"Schema","\u002Flogging\u002Faudit\u002Fschema","2.logging\u002F7.audit\u002F02.schema","i-lucide-file-text",{"title":137,"path":138,"stem":139,"icon":140},"Recording","\u002Flogging\u002Faudit\u002Frecording","2.logging\u002F7.audit\u002F03.recording","i-lucide-pen-line",{"title":142,"path":143,"stem":144,"icon":145},"Drains","\u002Flogging\u002Faudit\u002Fpipeline","2.logging\u002F7.audit\u002F04.pipeline","i-lucide-link",{"title":147,"path":148,"stem":149,"icon":124},"Compliance","\u002Flogging\u002Faudit\u002Fcompliance","2.logging\u002F7.audit\u002F05.compliance",{"title":151,"path":152,"stem":153,"icon":154},"Recipes","\u002Flogging\u002Faudit\u002Frecipes","2.logging\u002F7.audit\u002F06.recipes","i-lucide-book-open",{"title":156,"path":157,"stem":158,"children":159,"page":34},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[160,165,170,175,180,184,187,192],{"title":161,"path":162,"stem":163,"icon":164},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":166,"path":167,"stem":168,"icon":169},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":171,"path":172,"stem":173,"icon":174},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":176,"path":177,"stem":178,"icon":179},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":181,"path":182,"stem":183,"icon":124},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices",{"title":118,"path":185,"stem":186,"icon":121},"\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance",{"title":188,"path":189,"stem":190,"icon":191},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":193,"path":194,"stem":195,"icon":196},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":198,"path":199,"stem":200,"children":201,"page":34},"Frameworks","\u002Fframeworks","4.frameworks",[202,206,211,216,221,226,231,236,241,246,251,256,261,266,270,275,280],{"title":41,"path":203,"stem":204,"icon":205},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":207,"path":208,"stem":209,"icon":210},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":212,"path":213,"stem":214,"icon":215},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":217,"path":218,"stem":219,"icon":220},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":222,"path":223,"stem":224,"icon":225},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":227,"path":228,"stem":229,"icon":230},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":232,"path":233,"stem":234,"icon":235},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":237,"path":238,"stem":239,"icon":240},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":242,"path":243,"stem":244,"icon":245},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":247,"path":248,"stem":249,"icon":250},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":252,"path":253,"stem":254,"icon":255},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":257,"path":258,"stem":259,"icon":260},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":262,"path":263,"stem":264,"icon":265},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":267,"path":268,"stem":269,"icon":179},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":271,"path":272,"stem":273,"icon":274},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":276,"path":277,"stem":278,"icon":279},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":281,"path":282,"stem":283,"icon":284},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F17.custom-integration","i-lucide-puzzle",{"title":286,"path":287,"stem":288,"children":289,"page":34},"Adapters","\u002Fadapters","6.adapters",[290,293,333,348],{"title":41,"path":291,"stem":292,"icon":44},"\u002Fadapters\u002Foverview","6.adapters\u002F01.overview",{"title":294,"path":295,"stem":296,"children":297,"page":34},"Cloud destinations","\u002Fadapters\u002Fcloud","6.adapters\u002F02.cloud",[298,303,308,313,318,323,328],{"title":299,"path":300,"stem":301,"icon":302},"Axiom","\u002Fadapters\u002Fcloud\u002Faxiom","6.adapters\u002F02.cloud\u002F01.axiom","i-custom-axiom",{"title":304,"path":305,"stem":306,"icon":307},"OTLP","\u002Fadapters\u002Fcloud\u002Fotlp","6.adapters\u002F02.cloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":309,"path":310,"stem":311,"icon":312},"PostHog","\u002Fadapters\u002Fcloud\u002Fposthog","6.adapters\u002F02.cloud\u002F03.posthog","i-simple-icons-posthog",{"title":314,"path":315,"stem":316,"icon":317},"Sentry","\u002Fadapters\u002Fcloud\u002Fsentry","6.adapters\u002F02.cloud\u002F04.sentry","i-simple-icons-sentry",{"title":319,"path":320,"stem":321,"icon":322},"Better Stack","\u002Fadapters\u002Fcloud\u002Fbetter-stack","6.adapters\u002F02.cloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":324,"path":325,"stem":326,"icon":327},"Datadog","\u002Fadapters\u002Fcloud\u002Fdatadog","6.adapters\u002F02.cloud\u002F06.datadog","i-simple-icons-datadog",{"title":329,"path":330,"stem":331,"icon":332},"HyperDX","\u002Fadapters\u002Fcloud\u002Fhyperdx","6.adapters\u002F02.cloud\u002F07.hyperdx","i-custom-hyperdx",{"title":334,"path":335,"stem":336,"children":337,"page":34},"Self-hosted","\u002Fadapters\u002Fself-hosted","6.adapters\u002F03.self-hosted",[338,343],{"title":339,"path":340,"stem":341,"icon":342},"File System","\u002Fadapters\u002Fself-hosted\u002Ffs","6.adapters\u002F03.self-hosted\u002F01.fs","i-lucide-hard-drive",{"title":344,"path":345,"stem":346,"icon":347},"NuxtHub","\u002Fadapters\u002Fself-hosted\u002Fnuxthub","6.adapters\u002F03.self-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":349,"path":350,"stem":351,"children":352,"page":34},"Building blocks","\u002Fadapters\u002Fbuilding-blocks","6.adapters\u002F04.building-blocks",[353,358,363,367],{"title":354,"path":355,"stem":356,"icon":357},"Pipeline","\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline","6.adapters\u002F04.building-blocks\u002F01.pipeline","i-lucide-workflow",{"title":359,"path":360,"stem":361,"icon":362},"HTTP","\u002Fadapters\u002Fbuilding-blocks\u002Fhttp","6.adapters\u002F04.building-blocks\u002F02.http","i-lucide-globe",{"title":364,"path":365,"stem":366,"icon":78},"Custom Adapters","\u002Fadapters\u002Fbuilding-blocks\u002Fcustom","6.adapters\u002F04.building-blocks\u002F03.custom",{"title":368,"path":369,"stem":370,"icon":371},"Toolkit","\u002Fadapters\u002Fbuilding-blocks\u002Ftoolkit","6.adapters\u002F04.building-blocks\u002F04.toolkit","i-lucide-blocks",{"title":373,"path":374,"stem":375,"children":376,"page":34},"Enrichers","\u002Fenrichers","7.enrichers",[377,380,384],{"title":41,"path":378,"stem":379,"icon":28},"\u002Fenrichers\u002Foverview","7.enrichers\u002F1.overview",{"title":381,"path":382,"stem":383,"icon":284},"Built-in","\u002Fenrichers\u002Fbuilt-in","7.enrichers\u002F2.built-in",{"title":385,"path":386,"stem":387,"icon":78},"Custom","\u002Fenrichers\u002Fcustom","7.enrichers\u002F3.custom",{"id":389,"title":390,"body":391,"description":3729,"extension":3730,"links":3731,"meta":3737,"navigation":3738,"path":138,"seo":3739,"stem":139,"__hash__":3740},"docs\u002F2.logging\u002F7.audit\u002F03.recording.md","Recording Events",{"type":392,"value":393,"toc":3719},"minimark",[394,398,406,415,645,648,654,660,1282,1289,1294,1661,1681,1687,1692,1858,1866,1872,1878,1916,2587,2594,2600,2618,3673,3676,3715],[395,396,397],"p",{},"Five APIs cover every shape of audit recording: in-request, denied, standalone, auto-instrumented, and typed.",[399,400,402],"h2",{"id":401},"logaudit",[403,404,405],"code",{},"log.audit()",[395,407,408,410,411,414],{},[403,409,405],{}," is sugar over ",[403,412,413],{},"log.set({ audit: ... })"," plus tail-sample force-keep:",[416,417,422],"pre",{"className":418,"code":419,"language":420,"meta":421,"style":421},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","log.audit({\n  action: 'invoice.refund',\n  actor: { type: 'user', id: user.id },\n  target: { type: 'invoice', id: 'inv_889' },\n  outcome: 'success',\n})\n\n\u002F\u002F Strictly equivalent to:\nlog.set({ audit: { action: 'invoice.refund', \u002F* ... *\u002F, version: 1 } })\n","typescript","",[403,423,424,447,470,512,549,566,575,582,589],{"__ignoreMap":421},[425,426,429,433,437,441,444],"span",{"class":427,"line":428},"line",1,[425,430,432],{"class":431},"sTEyZ","log",[425,434,436],{"class":435},"sMK4o",".",[425,438,440],{"class":439},"s2Zo4","audit",[425,442,443],{"class":431},"(",[425,445,446],{"class":435},"{\n",[425,448,450,454,457,460,464,467],{"class":427,"line":449},2,[425,451,453],{"class":452},"swJcz","  action",[425,455,456],{"class":435},":",[425,458,459],{"class":435}," '",[425,461,463],{"class":462},"sfazB","invoice.refund",[425,465,466],{"class":435},"'",[425,468,469],{"class":435},",\n",[425,471,473,476,478,481,484,486,488,491,493,496,499,501,504,506,509],{"class":427,"line":472},3,[425,474,475],{"class":452},"  actor",[425,477,456],{"class":435},[425,479,480],{"class":435}," {",[425,482,483],{"class":452}," type",[425,485,456],{"class":435},[425,487,459],{"class":435},[425,489,490],{"class":462},"user",[425,492,466],{"class":435},[425,494,495],{"class":435},",",[425,497,498],{"class":452}," id",[425,500,456],{"class":435},[425,502,503],{"class":431}," user",[425,505,436],{"class":435},[425,507,508],{"class":431},"id ",[425,510,511],{"class":435},"},\n",[425,513,515,518,520,522,524,526,528,531,533,535,537,539,541,544,546],{"class":427,"line":514},4,[425,516,517],{"class":452},"  target",[425,519,456],{"class":435},[425,521,480],{"class":435},[425,523,483],{"class":452},[425,525,456],{"class":435},[425,527,459],{"class":435},[425,529,530],{"class":462},"invoice",[425,532,466],{"class":435},[425,534,495],{"class":435},[425,536,498],{"class":452},[425,538,456],{"class":435},[425,540,459],{"class":435},[425,542,543],{"class":462},"inv_889",[425,545,466],{"class":435},[425,547,548],{"class":435}," },\n",[425,550,552,555,557,559,562,564],{"class":427,"line":551},5,[425,553,554],{"class":452},"  outcome",[425,556,456],{"class":435},[425,558,459],{"class":435},[425,560,561],{"class":462},"success",[425,563,466],{"class":435},[425,565,469],{"class":435},[425,567,569,572],{"class":427,"line":568},6,[425,570,571],{"class":435},"}",[425,573,574],{"class":431},")\n",[425,576,578],{"class":427,"line":577},7,[425,579,581],{"emptyLinePlaceholder":580},true,"\n",[425,583,585],{"class":427,"line":584},8,[425,586,588],{"class":587},"sHwdD","\u002F\u002F Strictly equivalent to:\n",[425,590,592,594,596,599,601,604,607,609,611,614,616,618,620,622,624,627,629,632,634,638,641,643],{"class":427,"line":591},9,[425,593,432],{"class":431},[425,595,436],{"class":435},[425,597,598],{"class":439},"set",[425,600,443],{"class":431},[425,602,603],{"class":435},"{",[425,605,606],{"class":452}," audit",[425,608,456],{"class":435},[425,610,480],{"class":435},[425,612,613],{"class":452}," action",[425,615,456],{"class":435},[425,617,459],{"class":435},[425,619,463],{"class":462},[425,621,466],{"class":435},[425,623,495],{"class":435},[425,625,626],{"class":587}," \u002F* ... *\u002F",[425,628,495],{"class":435},[425,630,631],{"class":452}," version",[425,633,456],{"class":435},[425,635,637],{"class":636},"sbssI"," 1",[425,639,640],{"class":435}," }",[425,642,640],{"class":435},[425,644,574],{"class":431},[395,646,647],{},"This is the form you'll use most. The audit event lands on the same wide event as the rest of the request.",[399,649,651],{"id":650},"logauditdeny",[403,652,653],{},"log.audit.deny()",[395,655,656,659],{},[403,657,658],{},"log.audit.deny(reason, fields)"," records AuthZ-denied actions. Most teams forget to log denials, but they're exactly what auditors and security teams ask for:",[661,662,663,854],"code-group",{},[416,664,667],{"className":418,"code":665,"filename":666,"language":420,"meta":421,"style":421},"if (!user.canRefund(invoice)) {\n  log.audit.deny('Insufficient permissions', {\n    action: 'invoice.refund',\n    actor: { type: 'user', id: user.id },\n    target: { type: 'invoice', id: invoice.id },\n  })\n  throw createError({ status: 403, message: 'Forbidden' })\n}\n","Input",[403,668,669,693,721,736,770,804,811,849],{"__ignoreMap":421},[425,670,671,675,678,681,683,685,688,691],{"class":427,"line":428},[425,672,674],{"class":673},"s7zQu","if",[425,676,677],{"class":431}," (",[425,679,680],{"class":435},"!",[425,682,490],{"class":431},[425,684,436],{"class":435},[425,686,687],{"class":439},"canRefund",[425,689,690],{"class":431},"(invoice)) ",[425,692,446],{"class":435},[425,694,695,698,700,702,704,707,709,711,714,716,718],{"class":427,"line":449},[425,696,697],{"class":431},"  log",[425,699,436],{"class":435},[425,701,440],{"class":431},[425,703,436],{"class":435},[425,705,706],{"class":439},"deny",[425,708,443],{"class":452},[425,710,466],{"class":435},[425,712,713],{"class":462},"Insufficient permissions",[425,715,466],{"class":435},[425,717,495],{"class":435},[425,719,720],{"class":435}," {\n",[425,722,723,726,728,730,732,734],{"class":427,"line":472},[425,724,725],{"class":452},"    action",[425,727,456],{"class":435},[425,729,459],{"class":435},[425,731,463],{"class":462},[425,733,466],{"class":435},[425,735,469],{"class":435},[425,737,738,741,743,745,747,749,751,753,755,757,759,761,763,765,768],{"class":427,"line":514},[425,739,740],{"class":452},"    actor",[425,742,456],{"class":435},[425,744,480],{"class":435},[425,746,483],{"class":452},[425,748,456],{"class":435},[425,750,459],{"class":435},[425,752,490],{"class":462},[425,754,466],{"class":435},[425,756,495],{"class":435},[425,758,498],{"class":452},[425,760,456],{"class":435},[425,762,503],{"class":431},[425,764,436],{"class":435},[425,766,767],{"class":431},"id",[425,769,548],{"class":435},[425,771,772,775,777,779,781,783,785,787,789,791,793,795,798,800,802],{"class":427,"line":551},[425,773,774],{"class":452},"    target",[425,776,456],{"class":435},[425,778,480],{"class":435},[425,780,483],{"class":452},[425,782,456],{"class":435},[425,784,459],{"class":435},[425,786,530],{"class":462},[425,788,466],{"class":435},[425,790,495],{"class":435},[425,792,498],{"class":452},[425,794,456],{"class":435},[425,796,797],{"class":431}," invoice",[425,799,436],{"class":435},[425,801,767],{"class":431},[425,803,548],{"class":435},[425,805,806,809],{"class":427,"line":568},[425,807,808],{"class":435},"  }",[425,810,574],{"class":452},[425,812,813,816,819,821,823,826,828,831,833,836,838,840,843,845,847],{"class":427,"line":577},[425,814,815],{"class":673},"  throw",[425,817,818],{"class":439}," createError",[425,820,443],{"class":452},[425,822,603],{"class":435},[425,824,825],{"class":452}," status",[425,827,456],{"class":435},[425,829,830],{"class":636}," 403",[425,832,495],{"class":435},[425,834,835],{"class":452}," message",[425,837,456],{"class":435},[425,839,459],{"class":435},[425,841,842],{"class":462},"Forbidden",[425,844,466],{"class":435},[425,846,640],{"class":435},[425,848,574],{"class":452},[425,850,851],{"class":427,"line":584},[425,852,853],{"class":435},"}\n",[416,855,860],{"className":856,"code":857,"filename":858,"language":859,"meta":421,"style":421},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"level\": \"warn\",\n  \"service\": \"billing-api\",\n  \"method\": \"POST\",\n  \"path\": \"\u002Fapi\u002Finvoices\u002Finv_889\u002Frefund\",\n  \"status\": 403,\n  \"duration\": \"12ms\",\n  \"requestId\": \"9c3f7d12-8a45-4e60-b8a9-1f0d4c5e6e7d\",\n  \"audit\": {\n    \"action\": \"invoice.refund\",\n    \"actor\": { \"type\": \"user\", \"id\": \"usr_intruder\" },\n    \"target\": { \"type\": \"invoice\", \"id\": \"inv_889\" },\n    \"outcome\": \"denied\",\n    \"reason\": \"Insufficient permissions\",\n    \"version\": 1,\n    \"idempotencyKey\": \"ak_d12c3a4f5b6e7d8c\",\n    \"context\": {\n      \"requestId\": \"9c3f7d12-8a45-4e60-b8a9-1f0d4c5e6e7d\",\n      \"ip\": \"203.0.113.7\"\n    }\n  }\n}\n","Output — denied","json",[403,861,862,866,890,910,930,950,965,985,1005,1017,1039,1087,1133,1154,1174,1190,1211,1225,1245,1265,1271,1277],{"__ignoreMap":421},[425,863,864],{"class":427,"line":428},[425,865,446],{"class":435},[425,867,868,871,875,878,880,883,886,888],{"class":427,"line":449},[425,869,870],{"class":435},"  \"",[425,872,874],{"class":873},"spNyl","level",[425,876,877],{"class":435},"\"",[425,879,456],{"class":435},[425,881,882],{"class":435}," \"",[425,884,885],{"class":462},"warn",[425,887,877],{"class":435},[425,889,469],{"class":435},[425,891,892,894,897,899,901,903,906,908],{"class":427,"line":472},[425,893,870],{"class":435},[425,895,896],{"class":873},"service",[425,898,877],{"class":435},[425,900,456],{"class":435},[425,902,882],{"class":435},[425,904,905],{"class":462},"billing-api",[425,907,877],{"class":435},[425,909,469],{"class":435},[425,911,912,914,917,919,921,923,926,928],{"class":427,"line":514},[425,913,870],{"class":435},[425,915,916],{"class":873},"method",[425,918,877],{"class":435},[425,920,456],{"class":435},[425,922,882],{"class":435},[425,924,925],{"class":462},"POST",[425,927,877],{"class":435},[425,929,469],{"class":435},[425,931,932,934,937,939,941,943,946,948],{"class":427,"line":551},[425,933,870],{"class":435},[425,935,936],{"class":873},"path",[425,938,877],{"class":435},[425,940,456],{"class":435},[425,942,882],{"class":435},[425,944,945],{"class":462},"\u002Fapi\u002Finvoices\u002Finv_889\u002Frefund",[425,947,877],{"class":435},[425,949,469],{"class":435},[425,951,952,954,957,959,961,963],{"class":427,"line":568},[425,953,870],{"class":435},[425,955,956],{"class":873},"status",[425,958,877],{"class":435},[425,960,456],{"class":435},[425,962,830],{"class":636},[425,964,469],{"class":435},[425,966,967,969,972,974,976,978,981,983],{"class":427,"line":577},[425,968,870],{"class":435},[425,970,971],{"class":873},"duration",[425,973,877],{"class":435},[425,975,456],{"class":435},[425,977,882],{"class":435},[425,979,980],{"class":462},"12ms",[425,982,877],{"class":435},[425,984,469],{"class":435},[425,986,987,989,992,994,996,998,1001,1003],{"class":427,"line":584},[425,988,870],{"class":435},[425,990,991],{"class":873},"requestId",[425,993,877],{"class":435},[425,995,456],{"class":435},[425,997,882],{"class":435},[425,999,1000],{"class":462},"9c3f7d12-8a45-4e60-b8a9-1f0d4c5e6e7d",[425,1002,877],{"class":435},[425,1004,469],{"class":435},[425,1006,1007,1009,1011,1013,1015],{"class":427,"line":591},[425,1008,870],{"class":435},[425,1010,440],{"class":873},[425,1012,877],{"class":435},[425,1014,456],{"class":435},[425,1016,720],{"class":435},[425,1018,1020,1023,1027,1029,1031,1033,1035,1037],{"class":427,"line":1019},10,[425,1021,1022],{"class":435},"    \"",[425,1024,1026],{"class":1025},"sBMFI","action",[425,1028,877],{"class":435},[425,1030,456],{"class":435},[425,1032,882],{"class":435},[425,1034,463],{"class":462},[425,1036,877],{"class":435},[425,1038,469],{"class":435},[425,1040,1042,1044,1047,1049,1051,1053,1055,1058,1060,1062,1064,1066,1068,1070,1072,1074,1076,1078,1080,1083,1085],{"class":427,"line":1041},11,[425,1043,1022],{"class":435},[425,1045,1046],{"class":1025},"actor",[425,1048,877],{"class":435},[425,1050,456],{"class":435},[425,1052,480],{"class":435},[425,1054,882],{"class":435},[425,1056,1057],{"class":636},"type",[425,1059,877],{"class":435},[425,1061,456],{"class":435},[425,1063,882],{"class":435},[425,1065,490],{"class":462},[425,1067,877],{"class":435},[425,1069,495],{"class":435},[425,1071,882],{"class":435},[425,1073,767],{"class":636},[425,1075,877],{"class":435},[425,1077,456],{"class":435},[425,1079,882],{"class":435},[425,1081,1082],{"class":462},"usr_intruder",[425,1084,877],{"class":435},[425,1086,548],{"class":435},[425,1088,1090,1092,1095,1097,1099,1101,1103,1105,1107,1109,1111,1113,1115,1117,1119,1121,1123,1125,1127,1129,1131],{"class":427,"line":1089},12,[425,1091,1022],{"class":435},[425,1093,1094],{"class":1025},"target",[425,1096,877],{"class":435},[425,1098,456],{"class":435},[425,1100,480],{"class":435},[425,1102,882],{"class":435},[425,1104,1057],{"class":636},[425,1106,877],{"class":435},[425,1108,456],{"class":435},[425,1110,882],{"class":435},[425,1112,530],{"class":462},[425,1114,877],{"class":435},[425,1116,495],{"class":435},[425,1118,882],{"class":435},[425,1120,767],{"class":636},[425,1122,877],{"class":435},[425,1124,456],{"class":435},[425,1126,882],{"class":435},[425,1128,543],{"class":462},[425,1130,877],{"class":435},[425,1132,548],{"class":435},[425,1134,1136,1138,1141,1143,1145,1147,1150,1152],{"class":427,"line":1135},13,[425,1137,1022],{"class":435},[425,1139,1140],{"class":1025},"outcome",[425,1142,877],{"class":435},[425,1144,456],{"class":435},[425,1146,882],{"class":435},[425,1148,1149],{"class":462},"denied",[425,1151,877],{"class":435},[425,1153,469],{"class":435},[425,1155,1157,1159,1162,1164,1166,1168,1170,1172],{"class":427,"line":1156},14,[425,1158,1022],{"class":435},[425,1160,1161],{"class":1025},"reason",[425,1163,877],{"class":435},[425,1165,456],{"class":435},[425,1167,882],{"class":435},[425,1169,713],{"class":462},[425,1171,877],{"class":435},[425,1173,469],{"class":435},[425,1175,1177,1179,1182,1184,1186,1188],{"class":427,"line":1176},15,[425,1178,1022],{"class":435},[425,1180,1181],{"class":1025},"version",[425,1183,877],{"class":435},[425,1185,456],{"class":435},[425,1187,637],{"class":636},[425,1189,469],{"class":435},[425,1191,1193,1195,1198,1200,1202,1204,1207,1209],{"class":427,"line":1192},16,[425,1194,1022],{"class":435},[425,1196,1197],{"class":1025},"idempotencyKey",[425,1199,877],{"class":435},[425,1201,456],{"class":435},[425,1203,882],{"class":435},[425,1205,1206],{"class":462},"ak_d12c3a4f5b6e7d8c",[425,1208,877],{"class":435},[425,1210,469],{"class":435},[425,1212,1214,1216,1219,1221,1223],{"class":427,"line":1213},17,[425,1215,1022],{"class":435},[425,1217,1218],{"class":1025},"context",[425,1220,877],{"class":435},[425,1222,456],{"class":435},[425,1224,720],{"class":435},[425,1226,1228,1231,1233,1235,1237,1239,1241,1243],{"class":427,"line":1227},18,[425,1229,1230],{"class":435},"      \"",[425,1232,991],{"class":636},[425,1234,877],{"class":435},[425,1236,456],{"class":435},[425,1238,882],{"class":435},[425,1240,1000],{"class":462},[425,1242,877],{"class":435},[425,1244,469],{"class":435},[425,1246,1248,1250,1253,1255,1257,1259,1262],{"class":427,"line":1247},19,[425,1249,1230],{"class":435},[425,1251,1252],{"class":636},"ip",[425,1254,877],{"class":435},[425,1256,456],{"class":435},[425,1258,882],{"class":435},[425,1260,1261],{"class":462},"203.0.113.7",[425,1263,1264],{"class":435},"\"\n",[425,1266,1268],{"class":427,"line":1267},20,[425,1269,1270],{"class":435},"    }\n",[425,1272,1274],{"class":427,"line":1273},21,[425,1275,1276],{"class":435},"  }\n",[425,1278,1280],{"class":427,"line":1279},22,[425,1281,853],{"class":435},[399,1283,1285,1286],{"id":1284},"standalone-audit","Standalone ",[403,1287,1288],{},"audit()",[395,1290,1291,1292,456],{},"For non-request contexts (jobs, scripts, CLIs), use the standalone ",[403,1293,1288],{},[661,1295,1296,1439],{},[416,1297,1300],{"className":418,"code":1298,"filename":1299,"language":420,"meta":421,"style":421},"import { audit } from 'evlog'\n\naudit({\n  action: 'cron.cleanup',\n  actor: { type: 'system', id: 'cron' },\n  target: { type: 'job', id: 'cleanup-stale-sessions' },\n  outcome: 'success',\n})\n","scripts\u002Fcleanup.ts",[403,1301,1302,1324,1328,1336,1351,1385,1419,1433],{"__ignoreMap":421},[425,1303,1304,1307,1309,1311,1313,1316,1318,1321],{"class":427,"line":428},[425,1305,1306],{"class":673},"import",[425,1308,480],{"class":435},[425,1310,606],{"class":431},[425,1312,640],{"class":435},[425,1314,1315],{"class":673}," from",[425,1317,459],{"class":435},[425,1319,1320],{"class":462},"evlog",[425,1322,1323],{"class":435},"'\n",[425,1325,1326],{"class":427,"line":449},[425,1327,581],{"emptyLinePlaceholder":580},[425,1329,1330,1332,1334],{"class":427,"line":472},[425,1331,440],{"class":439},[425,1333,443],{"class":431},[425,1335,446],{"class":435},[425,1337,1338,1340,1342,1344,1347,1349],{"class":427,"line":514},[425,1339,453],{"class":452},[425,1341,456],{"class":435},[425,1343,459],{"class":435},[425,1345,1346],{"class":462},"cron.cleanup",[425,1348,466],{"class":435},[425,1350,469],{"class":435},[425,1352,1353,1355,1357,1359,1361,1363,1365,1368,1370,1372,1374,1376,1378,1381,1383],{"class":427,"line":551},[425,1354,475],{"class":452},[425,1356,456],{"class":435},[425,1358,480],{"class":435},[425,1360,483],{"class":452},[425,1362,456],{"class":435},[425,1364,459],{"class":435},[425,1366,1367],{"class":462},"system",[425,1369,466],{"class":435},[425,1371,495],{"class":435},[425,1373,498],{"class":452},[425,1375,456],{"class":435},[425,1377,459],{"class":435},[425,1379,1380],{"class":462},"cron",[425,1382,466],{"class":435},[425,1384,548],{"class":435},[425,1386,1387,1389,1391,1393,1395,1397,1399,1402,1404,1406,1408,1410,1412,1415,1417],{"class":427,"line":568},[425,1388,517],{"class":452},[425,1390,456],{"class":435},[425,1392,480],{"class":435},[425,1394,483],{"class":452},[425,1396,456],{"class":435},[425,1398,459],{"class":435},[425,1400,1401],{"class":462},"job",[425,1403,466],{"class":435},[425,1405,495],{"class":435},[425,1407,498],{"class":452},[425,1409,456],{"class":435},[425,1411,459],{"class":435},[425,1413,1414],{"class":462},"cleanup-stale-sessions",[425,1416,466],{"class":435},[425,1418,548],{"class":435},[425,1420,1421,1423,1425,1427,1429,1431],{"class":427,"line":577},[425,1422,554],{"class":452},[425,1424,456],{"class":435},[425,1426,459],{"class":435},[425,1428,561],{"class":462},[425,1430,466],{"class":435},[425,1432,469],{"class":435},[425,1434,1435,1437],{"class":427,"line":584},[425,1436,571],{"class":435},[425,1438,574],{"class":431},[416,1440,1443],{"className":856,"code":1441,"filename":1442,"language":859,"meta":421,"style":421},"{\n  \"level\": \"info\",\n  \"service\": \"billing-api\",\n  \"audit\": {\n    \"action\": \"cron.cleanup\",\n    \"actor\": { \"type\": \"system\", \"id\": \"cron\" },\n    \"target\": { \"type\": \"job\", \"id\": \"cleanup-stale-sessions\" },\n    \"outcome\": \"success\",\n    \"version\": 1,\n    \"idempotencyKey\": \"ak_2b8e1f9d4c6a7b3e\"\n  }\n}\n","Output — wide event",[403,1444,1445,1449,1468,1486,1498,1516,1560,1604,1622,1636,1653,1657],{"__ignoreMap":421},[425,1446,1447],{"class":427,"line":428},[425,1448,446],{"class":435},[425,1450,1451,1453,1455,1457,1459,1461,1464,1466],{"class":427,"line":449},[425,1452,870],{"class":435},[425,1454,874],{"class":873},[425,1456,877],{"class":435},[425,1458,456],{"class":435},[425,1460,882],{"class":435},[425,1462,1463],{"class":462},"info",[425,1465,877],{"class":435},[425,1467,469],{"class":435},[425,1469,1470,1472,1474,1476,1478,1480,1482,1484],{"class":427,"line":472},[425,1471,870],{"class":435},[425,1473,896],{"class":873},[425,1475,877],{"class":435},[425,1477,456],{"class":435},[425,1479,882],{"class":435},[425,1481,905],{"class":462},[425,1483,877],{"class":435},[425,1485,469],{"class":435},[425,1487,1488,1490,1492,1494,1496],{"class":427,"line":514},[425,1489,870],{"class":435},[425,1491,440],{"class":873},[425,1493,877],{"class":435},[425,1495,456],{"class":435},[425,1497,720],{"class":435},[425,1499,1500,1502,1504,1506,1508,1510,1512,1514],{"class":427,"line":551},[425,1501,1022],{"class":435},[425,1503,1026],{"class":1025},[425,1505,877],{"class":435},[425,1507,456],{"class":435},[425,1509,882],{"class":435},[425,1511,1346],{"class":462},[425,1513,877],{"class":435},[425,1515,469],{"class":435},[425,1517,1518,1520,1522,1524,1526,1528,1530,1532,1534,1536,1538,1540,1542,1544,1546,1548,1550,1552,1554,1556,1558],{"class":427,"line":568},[425,1519,1022],{"class":435},[425,1521,1046],{"class":1025},[425,1523,877],{"class":435},[425,1525,456],{"class":435},[425,1527,480],{"class":435},[425,1529,882],{"class":435},[425,1531,1057],{"class":636},[425,1533,877],{"class":435},[425,1535,456],{"class":435},[425,1537,882],{"class":435},[425,1539,1367],{"class":462},[425,1541,877],{"class":435},[425,1543,495],{"class":435},[425,1545,882],{"class":435},[425,1547,767],{"class":636},[425,1549,877],{"class":435},[425,1551,456],{"class":435},[425,1553,882],{"class":435},[425,1555,1380],{"class":462},[425,1557,877],{"class":435},[425,1559,548],{"class":435},[425,1561,1562,1564,1566,1568,1570,1572,1574,1576,1578,1580,1582,1584,1586,1588,1590,1592,1594,1596,1598,1600,1602],{"class":427,"line":577},[425,1563,1022],{"class":435},[425,1565,1094],{"class":1025},[425,1567,877],{"class":435},[425,1569,456],{"class":435},[425,1571,480],{"class":435},[425,1573,882],{"class":435},[425,1575,1057],{"class":636},[425,1577,877],{"class":435},[425,1579,456],{"class":435},[425,1581,882],{"class":435},[425,1583,1401],{"class":462},[425,1585,877],{"class":435},[425,1587,495],{"class":435},[425,1589,882],{"class":435},[425,1591,767],{"class":636},[425,1593,877],{"class":435},[425,1595,456],{"class":435},[425,1597,882],{"class":435},[425,1599,1414],{"class":462},[425,1601,877],{"class":435},[425,1603,548],{"class":435},[425,1605,1606,1608,1610,1612,1614,1616,1618,1620],{"class":427,"line":584},[425,1607,1022],{"class":435},[425,1609,1140],{"class":1025},[425,1611,877],{"class":435},[425,1613,456],{"class":435},[425,1615,882],{"class":435},[425,1617,561],{"class":462},[425,1619,877],{"class":435},[425,1621,469],{"class":435},[425,1623,1624,1626,1628,1630,1632,1634],{"class":427,"line":591},[425,1625,1022],{"class":435},[425,1627,1181],{"class":1025},[425,1629,877],{"class":435},[425,1631,456],{"class":435},[425,1633,637],{"class":636},[425,1635,469],{"class":435},[425,1637,1638,1640,1642,1644,1646,1648,1651],{"class":427,"line":1019},[425,1639,1022],{"class":435},[425,1641,1197],{"class":1025},[425,1643,877],{"class":435},[425,1645,456],{"class":435},[425,1647,882],{"class":435},[425,1649,1650],{"class":462},"ak_2b8e1f9d4c6a7b3e",[425,1652,1264],{"class":435},[425,1654,1655],{"class":427,"line":1041},[425,1656,1276],{"class":435},[425,1658,1659],{"class":427,"line":1089},[425,1660,853],{"class":435},[1662,1663,1285,1664,1666,1667,1669,1670,1669,1673,1676,1677,1680],"note",{},[403,1665,1288],{}," events have no ",[403,1668,991],{},", no ",[403,1671,1672],{},"context.ip",[403,1674,1675],{},"userAgent"," — there is no request to enrich from. Add your own context manually (",[403,1678,1679],{},"context: { jobId, queue, runId }",") when it matters for forensics.",[399,1682,1684],{"id":1683},"defineauditaction",[403,1685,1686],{},"defineAuditAction()",[395,1688,1689,1690,456],{},"Define audit actions in one place to avoid magic strings and get full type-safety on ",[403,1691,1094],{},[416,1693,1695],{"className":418,"code":1694,"language":420,"meta":421,"style":421},"import { defineAuditAction } from 'evlog'\n\nconst refund = defineAuditAction('invoice.refund', { target: 'invoice' })\n\nlog.audit(refund({\n  actor: { type: 'user', id: user.id },\n  target: { id: 'inv_889' }, \u002F\u002F type inferred as 'invoice'\n  outcome: 'success',\n}))\n",[403,1696,1697,1716,1720,1760,1764,1781,1813,1837,1851],{"__ignoreMap":421},[425,1698,1699,1701,1703,1706,1708,1710,1712,1714],{"class":427,"line":428},[425,1700,1306],{"class":673},[425,1702,480],{"class":435},[425,1704,1705],{"class":431}," defineAuditAction",[425,1707,640],{"class":435},[425,1709,1315],{"class":673},[425,1711,459],{"class":435},[425,1713,1320],{"class":462},[425,1715,1323],{"class":435},[425,1717,1718],{"class":427,"line":449},[425,1719,581],{"emptyLinePlaceholder":580},[425,1721,1722,1725,1728,1731,1733,1735,1737,1739,1741,1743,1745,1748,1750,1752,1754,1756,1758],{"class":427,"line":472},[425,1723,1724],{"class":873},"const",[425,1726,1727],{"class":431}," refund ",[425,1729,1730],{"class":435},"=",[425,1732,1705],{"class":439},[425,1734,443],{"class":431},[425,1736,466],{"class":435},[425,1738,463],{"class":462},[425,1740,466],{"class":435},[425,1742,495],{"class":435},[425,1744,480],{"class":435},[425,1746,1747],{"class":452}," target",[425,1749,456],{"class":435},[425,1751,459],{"class":435},[425,1753,530],{"class":462},[425,1755,466],{"class":435},[425,1757,640],{"class":435},[425,1759,574],{"class":431},[425,1761,1762],{"class":427,"line":514},[425,1763,581],{"emptyLinePlaceholder":580},[425,1765,1766,1768,1770,1772,1774,1777,1779],{"class":427,"line":551},[425,1767,432],{"class":431},[425,1769,436],{"class":435},[425,1771,440],{"class":439},[425,1773,443],{"class":431},[425,1775,1776],{"class":439},"refund",[425,1778,443],{"class":431},[425,1780,446],{"class":435},[425,1782,1783,1785,1787,1789,1791,1793,1795,1797,1799,1801,1803,1805,1807,1809,1811],{"class":427,"line":568},[425,1784,475],{"class":452},[425,1786,456],{"class":435},[425,1788,480],{"class":435},[425,1790,483],{"class":452},[425,1792,456],{"class":435},[425,1794,459],{"class":435},[425,1796,490],{"class":462},[425,1798,466],{"class":435},[425,1800,495],{"class":435},[425,1802,498],{"class":452},[425,1804,456],{"class":435},[425,1806,503],{"class":431},[425,1808,436],{"class":435},[425,1810,508],{"class":431},[425,1812,511],{"class":435},[425,1814,1815,1817,1819,1821,1823,1825,1827,1829,1831,1834],{"class":427,"line":577},[425,1816,517],{"class":452},[425,1818,456],{"class":435},[425,1820,480],{"class":435},[425,1822,498],{"class":452},[425,1824,456],{"class":435},[425,1826,459],{"class":435},[425,1828,543],{"class":462},[425,1830,466],{"class":435},[425,1832,1833],{"class":435}," },",[425,1835,1836],{"class":587}," \u002F\u002F type inferred as 'invoice'\n",[425,1838,1839,1841,1843,1845,1847,1849],{"class":427,"line":584},[425,1840,554],{"class":452},[425,1842,456],{"class":435},[425,1844,459],{"class":435},[425,1846,561],{"class":462},[425,1848,466],{"class":435},[425,1850,469],{"class":435},[425,1852,1853,1855],{"class":427,"line":591},[425,1854,571],{"class":435},[425,1856,1857],{"class":431},"))\n",[395,1859,1860,1861,436],{},"Pair this with the action dictionary from ",[1862,1863,1865],"a",{"href":1864},"\u002Flogging\u002Faudit\u002Fschema#action-naming","Schema → Action naming",[399,1867,1869],{"id":1868},"auditdiff",[403,1870,1871],{},"auditDiff()",[395,1873,1874,1875,1877],{},"For mutating actions, use ",[403,1876,1871],{}," to produce a compact, redact-aware JSON Patch:",[1879,1880,1881,1887,1888,1891,1892,1896,1897,1900,1901,1904,1905,1908,1909,1912,1913,1915],"warning",{},[1882,1883,1884,1885,436],"strong",{},"Don't feed entire DB rows into ",[403,1886,1871],{}," Strip computed columns, hashed passwords, internal flags, and large JSON blobs before diffing. The point of ",[403,1889,1890],{},"changes"," is ",[1893,1894,1895],"em",{},"what changed semantically"," (status went from ",[403,1898,1899],{},"paid"," → ",[403,1902,1903],{},"refunded","), not ",[1893,1906,1907],{},"what bytes changed"," (a ",[403,1910,1911],{},"lastModified"," timestamp ticked). A noisy ",[403,1914,1890],{}," field is the fastest way to make audit logs unreadable.",[661,1917,1918,2164],{},[416,1919,1921],{"className":418,"code":1920,"filename":666,"language":420,"meta":421,"style":421},"import { auditDiff } from 'evlog'\n\nconst before = await db.users.byId(id)\nconst after = await db.users.update(id, patch)\n\nlog.audit({\n  action: 'user.update',\n  actor: { type: 'user', id: actorId },\n  target: { type: 'user', id },\n  outcome: 'success',\n  changes: auditDiff(before, after, { redactPaths: ['password', 'token'] }),\n})\n",[403,1922,1923,1942,1946,1974,2004,2008,2020,2035,2064,2089,2103,2158],{"__ignoreMap":421},[425,1924,1925,1927,1929,1932,1934,1936,1938,1940],{"class":427,"line":428},[425,1926,1306],{"class":673},[425,1928,480],{"class":435},[425,1930,1931],{"class":431}," auditDiff",[425,1933,640],{"class":435},[425,1935,1315],{"class":673},[425,1937,459],{"class":435},[425,1939,1320],{"class":462},[425,1941,1323],{"class":435},[425,1943,1944],{"class":427,"line":449},[425,1945,581],{"emptyLinePlaceholder":580},[425,1947,1948,1950,1953,1955,1958,1961,1963,1966,1968,1971],{"class":427,"line":472},[425,1949,1724],{"class":873},[425,1951,1952],{"class":431}," before ",[425,1954,1730],{"class":435},[425,1956,1957],{"class":673}," await",[425,1959,1960],{"class":431}," db",[425,1962,436],{"class":435},[425,1964,1965],{"class":431},"users",[425,1967,436],{"class":435},[425,1969,1970],{"class":439},"byId",[425,1972,1973],{"class":431},"(id)\n",[425,1975,1976,1978,1981,1983,1985,1987,1989,1991,1993,1996,1999,2001],{"class":427,"line":514},[425,1977,1724],{"class":873},[425,1979,1980],{"class":431}," after ",[425,1982,1730],{"class":435},[425,1984,1957],{"class":673},[425,1986,1960],{"class":431},[425,1988,436],{"class":435},[425,1990,1965],{"class":431},[425,1992,436],{"class":435},[425,1994,1995],{"class":439},"update",[425,1997,1998],{"class":431},"(id",[425,2000,495],{"class":435},[425,2002,2003],{"class":431}," patch)\n",[425,2005,2006],{"class":427,"line":551},[425,2007,581],{"emptyLinePlaceholder":580},[425,2009,2010,2012,2014,2016,2018],{"class":427,"line":568},[425,2011,432],{"class":431},[425,2013,436],{"class":435},[425,2015,440],{"class":439},[425,2017,443],{"class":431},[425,2019,446],{"class":435},[425,2021,2022,2024,2026,2028,2031,2033],{"class":427,"line":577},[425,2023,453],{"class":452},[425,2025,456],{"class":435},[425,2027,459],{"class":435},[425,2029,2030],{"class":462},"user.update",[425,2032,466],{"class":435},[425,2034,469],{"class":435},[425,2036,2037,2039,2041,2043,2045,2047,2049,2051,2053,2055,2057,2059,2062],{"class":427,"line":584},[425,2038,475],{"class":452},[425,2040,456],{"class":435},[425,2042,480],{"class":435},[425,2044,483],{"class":452},[425,2046,456],{"class":435},[425,2048,459],{"class":435},[425,2050,490],{"class":462},[425,2052,466],{"class":435},[425,2054,495],{"class":435},[425,2056,498],{"class":452},[425,2058,456],{"class":435},[425,2060,2061],{"class":431}," actorId ",[425,2063,511],{"class":435},[425,2065,2066,2068,2070,2072,2074,2076,2078,2080,2082,2084,2087],{"class":427,"line":591},[425,2067,517],{"class":452},[425,2069,456],{"class":435},[425,2071,480],{"class":435},[425,2073,483],{"class":452},[425,2075,456],{"class":435},[425,2077,459],{"class":435},[425,2079,490],{"class":462},[425,2081,466],{"class":435},[425,2083,495],{"class":435},[425,2085,2086],{"class":431}," id ",[425,2088,511],{"class":435},[425,2090,2091,2093,2095,2097,2099,2101],{"class":427,"line":1019},[425,2092,554],{"class":452},[425,2094,456],{"class":435},[425,2096,459],{"class":435},[425,2098,561],{"class":462},[425,2100,466],{"class":435},[425,2102,469],{"class":435},[425,2104,2105,2108,2110,2112,2115,2117,2120,2122,2124,2127,2129,2132,2134,2137,2139,2141,2143,2146,2148,2151,2153,2156],{"class":427,"line":1041},[425,2106,2107],{"class":452},"  changes",[425,2109,456],{"class":435},[425,2111,1931],{"class":439},[425,2113,2114],{"class":431},"(before",[425,2116,495],{"class":435},[425,2118,2119],{"class":431}," after",[425,2121,495],{"class":435},[425,2123,480],{"class":435},[425,2125,2126],{"class":452}," redactPaths",[425,2128,456],{"class":435},[425,2130,2131],{"class":431}," [",[425,2133,466],{"class":435},[425,2135,2136],{"class":462},"password",[425,2138,466],{"class":435},[425,2140,495],{"class":435},[425,2142,459],{"class":435},[425,2144,2145],{"class":462},"token",[425,2147,466],{"class":435},[425,2149,2150],{"class":431},"] ",[425,2152,571],{"class":435},[425,2154,2155],{"class":431},")",[425,2157,469],{"class":435},[425,2159,2160,2162],{"class":427,"line":1089},[425,2161,571],{"class":435},[425,2163,574],{"class":431},[416,2165,2168],{"className":856,"code":2166,"filename":2167,"language":859,"meta":421,"style":421},"{\n  \"audit\": {\n    \"action\": \"user.update\",\n    \"actor\": { \"type\": \"user\", \"id\": \"usr_42\" },\n    \"target\": { \"type\": \"user\", \"id\": \"usr_99\" },\n    \"outcome\": \"success\",\n    \"changes\": [\n      { \"op\": \"replace\", \"path\": \"\u002Femail\", \"from\": \"old@example.com\", \"to\": \"new@example.com\" },\n      { \"op\": \"replace\", \"path\": \"\u002Frole\", \"from\": \"member\", \"to\": \"admin\" },\n      { \"op\": \"replace\", \"path\": \"\u002Fpassword\", \"from\": \"[REDACTED]\", \"to\": \"[REDACTED]\" }\n    ],\n    \"version\": 1,\n    \"idempotencyKey\": \"ak_5e7d8f9a0b1c2d3e\"\n  }\n}\n","Output — changes patch",[403,2169,2170,2174,2186,2204,2249,2294,2312,2325,2401,2472,2543,2548,2562,2579,2583],{"__ignoreMap":421},[425,2171,2172],{"class":427,"line":428},[425,2173,446],{"class":435},[425,2175,2176,2178,2180,2182,2184],{"class":427,"line":449},[425,2177,870],{"class":435},[425,2179,440],{"class":873},[425,2181,877],{"class":435},[425,2183,456],{"class":435},[425,2185,720],{"class":435},[425,2187,2188,2190,2192,2194,2196,2198,2200,2202],{"class":427,"line":472},[425,2189,1022],{"class":435},[425,2191,1026],{"class":1025},[425,2193,877],{"class":435},[425,2195,456],{"class":435},[425,2197,882],{"class":435},[425,2199,2030],{"class":462},[425,2201,877],{"class":435},[425,2203,469],{"class":435},[425,2205,2206,2208,2210,2212,2214,2216,2218,2220,2222,2224,2226,2228,2230,2232,2234,2236,2238,2240,2242,2245,2247],{"class":427,"line":514},[425,2207,1022],{"class":435},[425,2209,1046],{"class":1025},[425,2211,877],{"class":435},[425,2213,456],{"class":435},[425,2215,480],{"class":435},[425,2217,882],{"class":435},[425,2219,1057],{"class":636},[425,2221,877],{"class":435},[425,2223,456],{"class":435},[425,2225,882],{"class":435},[425,2227,490],{"class":462},[425,2229,877],{"class":435},[425,2231,495],{"class":435},[425,2233,882],{"class":435},[425,2235,767],{"class":636},[425,2237,877],{"class":435},[425,2239,456],{"class":435},[425,2241,882],{"class":435},[425,2243,2244],{"class":462},"usr_42",[425,2246,877],{"class":435},[425,2248,548],{"class":435},[425,2250,2251,2253,2255,2257,2259,2261,2263,2265,2267,2269,2271,2273,2275,2277,2279,2281,2283,2285,2287,2290,2292],{"class":427,"line":551},[425,2252,1022],{"class":435},[425,2254,1094],{"class":1025},[425,2256,877],{"class":435},[425,2258,456],{"class":435},[425,2260,480],{"class":435},[425,2262,882],{"class":435},[425,2264,1057],{"class":636},[425,2266,877],{"class":435},[425,2268,456],{"class":435},[425,2270,882],{"class":435},[425,2272,490],{"class":462},[425,2274,877],{"class":435},[425,2276,495],{"class":435},[425,2278,882],{"class":435},[425,2280,767],{"class":636},[425,2282,877],{"class":435},[425,2284,456],{"class":435},[425,2286,882],{"class":435},[425,2288,2289],{"class":462},"usr_99",[425,2291,877],{"class":435},[425,2293,548],{"class":435},[425,2295,2296,2298,2300,2302,2304,2306,2308,2310],{"class":427,"line":568},[425,2297,1022],{"class":435},[425,2299,1140],{"class":1025},[425,2301,877],{"class":435},[425,2303,456],{"class":435},[425,2305,882],{"class":435},[425,2307,561],{"class":462},[425,2309,877],{"class":435},[425,2311,469],{"class":435},[425,2313,2314,2316,2318,2320,2322],{"class":427,"line":577},[425,2315,1022],{"class":435},[425,2317,1890],{"class":1025},[425,2319,877],{"class":435},[425,2321,456],{"class":435},[425,2323,2324],{"class":435}," [\n",[425,2326,2327,2330,2332,2335,2337,2339,2341,2344,2346,2348,2350,2352,2354,2356,2358,2361,2363,2365,2367,2370,2372,2374,2376,2379,2381,2383,2385,2388,2390,2392,2394,2397,2399],{"class":427,"line":584},[425,2328,2329],{"class":435},"      {",[425,2331,882],{"class":435},[425,2333,2334],{"class":636},"op",[425,2336,877],{"class":435},[425,2338,456],{"class":435},[425,2340,882],{"class":435},[425,2342,2343],{"class":462},"replace",[425,2345,877],{"class":435},[425,2347,495],{"class":435},[425,2349,882],{"class":435},[425,2351,936],{"class":636},[425,2353,877],{"class":435},[425,2355,456],{"class":435},[425,2357,882],{"class":435},[425,2359,2360],{"class":462},"\u002Femail",[425,2362,877],{"class":435},[425,2364,495],{"class":435},[425,2366,882],{"class":435},[425,2368,2369],{"class":636},"from",[425,2371,877],{"class":435},[425,2373,456],{"class":435},[425,2375,882],{"class":435},[425,2377,2378],{"class":462},"old@example.com",[425,2380,877],{"class":435},[425,2382,495],{"class":435},[425,2384,882],{"class":435},[425,2386,2387],{"class":636},"to",[425,2389,877],{"class":435},[425,2391,456],{"class":435},[425,2393,882],{"class":435},[425,2395,2396],{"class":462},"new@example.com",[425,2398,877],{"class":435},[425,2400,548],{"class":435},[425,2402,2403,2405,2407,2409,2411,2413,2415,2417,2419,2421,2423,2425,2427,2429,2431,2434,2436,2438,2440,2442,2444,2446,2448,2451,2453,2455,2457,2459,2461,2463,2465,2468,2470],{"class":427,"line":591},[425,2404,2329],{"class":435},[425,2406,882],{"class":435},[425,2408,2334],{"class":636},[425,2410,877],{"class":435},[425,2412,456],{"class":435},[425,2414,882],{"class":435},[425,2416,2343],{"class":462},[425,2418,877],{"class":435},[425,2420,495],{"class":435},[425,2422,882],{"class":435},[425,2424,936],{"class":636},[425,2426,877],{"class":435},[425,2428,456],{"class":435},[425,2430,882],{"class":435},[425,2432,2433],{"class":462},"\u002Frole",[425,2435,877],{"class":435},[425,2437,495],{"class":435},[425,2439,882],{"class":435},[425,2441,2369],{"class":636},[425,2443,877],{"class":435},[425,2445,456],{"class":435},[425,2447,882],{"class":435},[425,2449,2450],{"class":462},"member",[425,2452,877],{"class":435},[425,2454,495],{"class":435},[425,2456,882],{"class":435},[425,2458,2387],{"class":636},[425,2460,877],{"class":435},[425,2462,456],{"class":435},[425,2464,882],{"class":435},[425,2466,2467],{"class":462},"admin",[425,2469,877],{"class":435},[425,2471,548],{"class":435},[425,2473,2474,2476,2478,2480,2482,2484,2486,2488,2490,2492,2494,2496,2498,2500,2502,2505,2507,2509,2511,2513,2515,2517,2519,2522,2524,2526,2528,2530,2532,2534,2536,2538,2540],{"class":427,"line":1019},[425,2475,2329],{"class":435},[425,2477,882],{"class":435},[425,2479,2334],{"class":636},[425,2481,877],{"class":435},[425,2483,456],{"class":435},[425,2485,882],{"class":435},[425,2487,2343],{"class":462},[425,2489,877],{"class":435},[425,2491,495],{"class":435},[425,2493,882],{"class":435},[425,2495,936],{"class":636},[425,2497,877],{"class":435},[425,2499,456],{"class":435},[425,2501,882],{"class":435},[425,2503,2504],{"class":462},"\u002Fpassword",[425,2506,877],{"class":435},[425,2508,495],{"class":435},[425,2510,882],{"class":435},[425,2512,2369],{"class":636},[425,2514,877],{"class":435},[425,2516,456],{"class":435},[425,2518,882],{"class":435},[425,2520,2521],{"class":462},"[REDACTED]",[425,2523,877],{"class":435},[425,2525,495],{"class":435},[425,2527,882],{"class":435},[425,2529,2387],{"class":636},[425,2531,877],{"class":435},[425,2533,456],{"class":435},[425,2535,882],{"class":435},[425,2537,2521],{"class":462},[425,2539,877],{"class":435},[425,2541,2542],{"class":435}," }\n",[425,2544,2545],{"class":427,"line":1041},[425,2546,2547],{"class":435},"    ],\n",[425,2549,2550,2552,2554,2556,2558,2560],{"class":427,"line":1089},[425,2551,1022],{"class":435},[425,2553,1181],{"class":1025},[425,2555,877],{"class":435},[425,2557,456],{"class":435},[425,2559,637],{"class":636},[425,2561,469],{"class":435},[425,2563,2564,2566,2568,2570,2572,2574,2577],{"class":427,"line":1135},[425,2565,1022],{"class":435},[425,2567,1197],{"class":1025},[425,2569,877],{"class":435},[425,2571,456],{"class":435},[425,2573,882],{"class":435},[425,2575,2576],{"class":462},"ak_5e7d8f9a0b1c2d3e",[425,2578,1264],{"class":435},[425,2580,2581],{"class":427,"line":1156},[425,2582,1276],{"class":435},[425,2584,2585],{"class":427,"line":1176},[425,2586,853],{"class":435},[399,2588,2590,2593],{"id":2589},"withaudit-auto-instrumentation",[403,2591,2592],{},"withAudit()"," — auto-instrumentation",[395,2595,2596,2597,2599],{},"Devs forget to call ",[403,2598,405],{},". Wrap the function and never miss a record:",[2601,2602,2603,2606,2607,2610,2611,2613,2614,2617],"tip",{},[1882,2604,2605],{},"When to wrap vs. call manually."," Wrap functions that are ",[1893,2608,2609],{},"pure audit-worthy actions"," (refund, delete, role change, password reset) — outcome resolution is automatic and you can't accidentally skip the call. Stick to manual ",[403,2612,405],{}," when the audit is one of several decisions inside a larger handler, or when you need to emit the audit ",[1893,2615,2616],{},"before"," the action completes (e.g. \"user requested deletion\").",[661,2619,2620,2914,3119,3435],{},[416,2621,2623],{"className":418,"code":2622,"filename":666,"language":420,"meta":421,"style":421},"import { withAudit, AuditDeniedError } from 'evlog'\n\nconst refundInvoice = withAudit(\n  { action: 'invoice.refund', target: input => ({ type: 'invoice', id: input.id }) },\n  async (input: { id: string }, ctx) => {\n    if (!ctx.actor) throw new AuditDeniedError('Anonymous refund denied')\n    return await db.invoices.refund(input.id)\n  },\n)\n\nawait refundInvoice({ id: 'inv_889' }, {\n  actor: { type: 'user', id: user.id },\n  correlationId: requestId,\n})\n",[403,2624,2625,2649,2653,2667,2728,2760,2797,2825,2830,2834,2838,2864,2896,2908],{"__ignoreMap":421},[425,2626,2627,2629,2631,2634,2636,2639,2641,2643,2645,2647],{"class":427,"line":428},[425,2628,1306],{"class":673},[425,2630,480],{"class":435},[425,2632,2633],{"class":431}," withAudit",[425,2635,495],{"class":435},[425,2637,2638],{"class":431}," AuditDeniedError",[425,2640,640],{"class":435},[425,2642,1315],{"class":673},[425,2644,459],{"class":435},[425,2646,1320],{"class":462},[425,2648,1323],{"class":435},[425,2650,2651],{"class":427,"line":449},[425,2652,581],{"emptyLinePlaceholder":580},[425,2654,2655,2657,2660,2662,2664],{"class":427,"line":472},[425,2656,1724],{"class":873},[425,2658,2659],{"class":431}," refundInvoice ",[425,2661,1730],{"class":435},[425,2663,2633],{"class":439},[425,2665,2666],{"class":431},"(\n",[425,2668,2669,2672,2674,2676,2678,2680,2682,2684,2686,2688,2692,2695,2697,2699,2701,2703,2705,2707,2709,2711,2713,2715,2717,2719,2721,2723,2726],{"class":427,"line":514},[425,2670,2671],{"class":435},"  {",[425,2673,613],{"class":452},[425,2675,456],{"class":435},[425,2677,459],{"class":435},[425,2679,463],{"class":462},[425,2681,466],{"class":435},[425,2683,495],{"class":435},[425,2685,1747],{"class":439},[425,2687,456],{"class":435},[425,2689,2691],{"class":2690},"sHdIc"," input",[425,2693,2694],{"class":873}," =>",[425,2696,677],{"class":431},[425,2698,603],{"class":435},[425,2700,483],{"class":452},[425,2702,456],{"class":435},[425,2704,459],{"class":435},[425,2706,530],{"class":462},[425,2708,466],{"class":435},[425,2710,495],{"class":435},[425,2712,498],{"class":452},[425,2714,456],{"class":435},[425,2716,2691],{"class":431},[425,2718,436],{"class":435},[425,2720,508],{"class":431},[425,2722,571],{"class":435},[425,2724,2725],{"class":431},") ",[425,2727,511],{"class":435},[425,2729,2730,2733,2735,2738,2740,2742,2744,2746,2749,2751,2754,2756,2758],{"class":427,"line":551},[425,2731,2732],{"class":873},"  async",[425,2734,677],{"class":435},[425,2736,2737],{"class":2690},"input",[425,2739,456],{"class":435},[425,2741,480],{"class":435},[425,2743,498],{"class":452},[425,2745,456],{"class":435},[425,2747,2748],{"class":1025}," string",[425,2750,1833],{"class":435},[425,2752,2753],{"class":2690}," ctx",[425,2755,2155],{"class":435},[425,2757,2694],{"class":873},[425,2759,720],{"class":435},[425,2761,2762,2765,2767,2769,2772,2774,2776,2778,2781,2784,2786,2788,2790,2793,2795],{"class":427,"line":568},[425,2763,2764],{"class":673},"    if",[425,2766,677],{"class":452},[425,2768,680],{"class":435},[425,2770,2771],{"class":431},"ctx",[425,2773,436],{"class":435},[425,2775,1046],{"class":431},[425,2777,2725],{"class":452},[425,2779,2780],{"class":673},"throw",[425,2782,2783],{"class":435}," new",[425,2785,2638],{"class":439},[425,2787,443],{"class":452},[425,2789,466],{"class":435},[425,2791,2792],{"class":462},"Anonymous refund denied",[425,2794,466],{"class":435},[425,2796,574],{"class":452},[425,2798,2799,2802,2804,2806,2808,2811,2813,2815,2817,2819,2821,2823],{"class":427,"line":577},[425,2800,2801],{"class":673},"    return",[425,2803,1957],{"class":673},[425,2805,1960],{"class":431},[425,2807,436],{"class":435},[425,2809,2810],{"class":431},"invoices",[425,2812,436],{"class":435},[425,2814,1776],{"class":439},[425,2816,443],{"class":452},[425,2818,2737],{"class":431},[425,2820,436],{"class":435},[425,2822,767],{"class":431},[425,2824,574],{"class":452},[425,2826,2827],{"class":427,"line":584},[425,2828,2829],{"class":435},"  },\n",[425,2831,2832],{"class":427,"line":591},[425,2833,574],{"class":431},[425,2835,2836],{"class":427,"line":1019},[425,2837,581],{"emptyLinePlaceholder":580},[425,2839,2840,2843,2846,2848,2850,2852,2854,2856,2858,2860,2862],{"class":427,"line":1041},[425,2841,2842],{"class":673},"await",[425,2844,2845],{"class":439}," refundInvoice",[425,2847,443],{"class":431},[425,2849,603],{"class":435},[425,2851,498],{"class":452},[425,2853,456],{"class":435},[425,2855,459],{"class":435},[425,2857,543],{"class":462},[425,2859,466],{"class":435},[425,2861,1833],{"class":435},[425,2863,720],{"class":435},[425,2865,2866,2868,2870,2872,2874,2876,2878,2880,2882,2884,2886,2888,2890,2892,2894],{"class":427,"line":1089},[425,2867,475],{"class":452},[425,2869,456],{"class":435},[425,2871,480],{"class":435},[425,2873,483],{"class":452},[425,2875,456],{"class":435},[425,2877,459],{"class":435},[425,2879,490],{"class":462},[425,2881,466],{"class":435},[425,2883,495],{"class":435},[425,2885,498],{"class":452},[425,2887,456],{"class":435},[425,2889,503],{"class":431},[425,2891,436],{"class":435},[425,2893,508],{"class":431},[425,2895,511],{"class":435},[425,2897,2898,2901,2903,2906],{"class":427,"line":1135},[425,2899,2900],{"class":452},"  correlationId",[425,2902,456],{"class":435},[425,2904,2905],{"class":431}," requestId",[425,2907,469],{"class":435},[425,2909,2910,2912],{"class":427,"line":1156},[425,2911,571],{"class":435},[425,2913,574],{"class":431},[416,2915,2918],{"className":856,"code":2916,"filename":2917,"language":859,"meta":421,"style":421},"{\n  \"audit\": {\n    \"action\": \"invoice.refund\",\n    \"actor\": { \"type\": \"user\", \"id\": \"usr_42\" },\n    \"target\": { \"type\": \"invoice\", \"id\": \"inv_889\" },\n    \"outcome\": \"success\",\n    \"version\": 1,\n    \"idempotencyKey\": \"ak_8f3c4b2a1e5d6f7c\",\n    \"correlationId\": \"a566ef91-7765-4f59-b6f0-b9f40ce71599\"\n  }\n}\n","Output — success",[403,2919,2920,2924,2936,2954,2998,3042,3060,3074,3093,3111,3115],{"__ignoreMap":421},[425,2921,2922],{"class":427,"line":428},[425,2923,446],{"class":435},[425,2925,2926,2928,2930,2932,2934],{"class":427,"line":449},[425,2927,870],{"class":435},[425,2929,440],{"class":873},[425,2931,877],{"class":435},[425,2933,456],{"class":435},[425,2935,720],{"class":435},[425,2937,2938,2940,2942,2944,2946,2948,2950,2952],{"class":427,"line":472},[425,2939,1022],{"class":435},[425,2941,1026],{"class":1025},[425,2943,877],{"class":435},[425,2945,456],{"class":435},[425,2947,882],{"class":435},[425,2949,463],{"class":462},[425,2951,877],{"class":435},[425,2953,469],{"class":435},[425,2955,2956,2958,2960,2962,2964,2966,2968,2970,2972,2974,2976,2978,2980,2982,2984,2986,2988,2990,2992,2994,2996],{"class":427,"line":514},[425,2957,1022],{"class":435},[425,2959,1046],{"class":1025},[425,2961,877],{"class":435},[425,2963,456],{"class":435},[425,2965,480],{"class":435},[425,2967,882],{"class":435},[425,2969,1057],{"class":636},[425,2971,877],{"class":435},[425,2973,456],{"class":435},[425,2975,882],{"class":435},[425,2977,490],{"class":462},[425,2979,877],{"class":435},[425,2981,495],{"class":435},[425,2983,882],{"class":435},[425,2985,767],{"class":636},[425,2987,877],{"class":435},[425,2989,456],{"class":435},[425,2991,882],{"class":435},[425,2993,2244],{"class":462},[425,2995,877],{"class":435},[425,2997,548],{"class":435},[425,2999,3000,3002,3004,3006,3008,3010,3012,3014,3016,3018,3020,3022,3024,3026,3028,3030,3032,3034,3036,3038,3040],{"class":427,"line":551},[425,3001,1022],{"class":435},[425,3003,1094],{"class":1025},[425,3005,877],{"class":435},[425,3007,456],{"class":435},[425,3009,480],{"class":435},[425,3011,882],{"class":435},[425,3013,1057],{"class":636},[425,3015,877],{"class":435},[425,3017,456],{"class":435},[425,3019,882],{"class":435},[425,3021,530],{"class":462},[425,3023,877],{"class":435},[425,3025,495],{"class":435},[425,3027,882],{"class":435},[425,3029,767],{"class":636},[425,3031,877],{"class":435},[425,3033,456],{"class":435},[425,3035,882],{"class":435},[425,3037,543],{"class":462},[425,3039,877],{"class":435},[425,3041,548],{"class":435},[425,3043,3044,3046,3048,3050,3052,3054,3056,3058],{"class":427,"line":568},[425,3045,1022],{"class":435},[425,3047,1140],{"class":1025},[425,3049,877],{"class":435},[425,3051,456],{"class":435},[425,3053,882],{"class":435},[425,3055,561],{"class":462},[425,3057,877],{"class":435},[425,3059,469],{"class":435},[425,3061,3062,3064,3066,3068,3070,3072],{"class":427,"line":577},[425,3063,1022],{"class":435},[425,3065,1181],{"class":1025},[425,3067,877],{"class":435},[425,3069,456],{"class":435},[425,3071,637],{"class":636},[425,3073,469],{"class":435},[425,3075,3076,3078,3080,3082,3084,3086,3089,3091],{"class":427,"line":584},[425,3077,1022],{"class":435},[425,3079,1197],{"class":1025},[425,3081,877],{"class":435},[425,3083,456],{"class":435},[425,3085,882],{"class":435},[425,3087,3088],{"class":462},"ak_8f3c4b2a1e5d6f7c",[425,3090,877],{"class":435},[425,3092,469],{"class":435},[425,3094,3095,3097,3100,3102,3104,3106,3109],{"class":427,"line":591},[425,3096,1022],{"class":435},[425,3098,3099],{"class":1025},"correlationId",[425,3101,877],{"class":435},[425,3103,456],{"class":435},[425,3105,882],{"class":435},[425,3107,3108],{"class":462},"a566ef91-7765-4f59-b6f0-b9f40ce71599",[425,3110,1264],{"class":435},[425,3112,3113],{"class":427,"line":1019},[425,3114,1276],{"class":435},[425,3116,3117],{"class":427,"line":1041},[425,3118,853],{"class":435},[416,3120,3123],{"className":856,"code":3121,"filename":3122,"language":859,"meta":421,"style":421},"{\n  \"level\": \"error\",\n  \"audit\": {\n    \"action\": \"invoice.refund\",\n    \"actor\": { \"type\": \"user\", \"id\": \"usr_42\" },\n    \"target\": { \"type\": \"invoice\", \"id\": \"inv_889\" },\n    \"outcome\": \"failure\",\n    \"reason\": \"Stripe error: charge already refunded\",\n    \"version\": 1,\n    \"idempotencyKey\": \"ak_4c5d6e7f8a9b0c1d\",\n    \"correlationId\": \"a566ef91-7765-4f59-b6f0-b9f40ce71599\"\n  },\n  \"error\": {\n    \"name\": \"StripeError\",\n    \"message\": \"charge already refunded\",\n    \"stack\": \"...\"\n  }\n}\n","Output — failure",[403,3124,3125,3129,3148,3160,3178,3222,3266,3285,3304,3318,3337,3353,3357,3369,3389,3409,3427,3431],{"__ignoreMap":421},[425,3126,3127],{"class":427,"line":428},[425,3128,446],{"class":435},[425,3130,3131,3133,3135,3137,3139,3141,3144,3146],{"class":427,"line":449},[425,3132,870],{"class":435},[425,3134,874],{"class":873},[425,3136,877],{"class":435},[425,3138,456],{"class":435},[425,3140,882],{"class":435},[425,3142,3143],{"class":462},"error",[425,3145,877],{"class":435},[425,3147,469],{"class":435},[425,3149,3150,3152,3154,3156,3158],{"class":427,"line":472},[425,3151,870],{"class":435},[425,3153,440],{"class":873},[425,3155,877],{"class":435},[425,3157,456],{"class":435},[425,3159,720],{"class":435},[425,3161,3162,3164,3166,3168,3170,3172,3174,3176],{"class":427,"line":514},[425,3163,1022],{"class":435},[425,3165,1026],{"class":1025},[425,3167,877],{"class":435},[425,3169,456],{"class":435},[425,3171,882],{"class":435},[425,3173,463],{"class":462},[425,3175,877],{"class":435},[425,3177,469],{"class":435},[425,3179,3180,3182,3184,3186,3188,3190,3192,3194,3196,3198,3200,3202,3204,3206,3208,3210,3212,3214,3216,3218,3220],{"class":427,"line":551},[425,3181,1022],{"class":435},[425,3183,1046],{"class":1025},[425,3185,877],{"class":435},[425,3187,456],{"class":435},[425,3189,480],{"class":435},[425,3191,882],{"class":435},[425,3193,1057],{"class":636},[425,3195,877],{"class":435},[425,3197,456],{"class":435},[425,3199,882],{"class":435},[425,3201,490],{"class":462},[425,3203,877],{"class":435},[425,3205,495],{"class":435},[425,3207,882],{"class":435},[425,3209,767],{"class":636},[425,3211,877],{"class":435},[425,3213,456],{"class":435},[425,3215,882],{"class":435},[425,3217,2244],{"class":462},[425,3219,877],{"class":435},[425,3221,548],{"class":435},[425,3223,3224,3226,3228,3230,3232,3234,3236,3238,3240,3242,3244,3246,3248,3250,3252,3254,3256,3258,3260,3262,3264],{"class":427,"line":568},[425,3225,1022],{"class":435},[425,3227,1094],{"class":1025},[425,3229,877],{"class":435},[425,3231,456],{"class":435},[425,3233,480],{"class":435},[425,3235,882],{"class":435},[425,3237,1057],{"class":636},[425,3239,877],{"class":435},[425,3241,456],{"class":435},[425,3243,882],{"class":435},[425,3245,530],{"class":462},[425,3247,877],{"class":435},[425,3249,495],{"class":435},[425,3251,882],{"class":435},[425,3253,767],{"class":636},[425,3255,877],{"class":435},[425,3257,456],{"class":435},[425,3259,882],{"class":435},[425,3261,543],{"class":462},[425,3263,877],{"class":435},[425,3265,548],{"class":435},[425,3267,3268,3270,3272,3274,3276,3278,3281,3283],{"class":427,"line":577},[425,3269,1022],{"class":435},[425,3271,1140],{"class":1025},[425,3273,877],{"class":435},[425,3275,456],{"class":435},[425,3277,882],{"class":435},[425,3279,3280],{"class":462},"failure",[425,3282,877],{"class":435},[425,3284,469],{"class":435},[425,3286,3287,3289,3291,3293,3295,3297,3300,3302],{"class":427,"line":584},[425,3288,1022],{"class":435},[425,3290,1161],{"class":1025},[425,3292,877],{"class":435},[425,3294,456],{"class":435},[425,3296,882],{"class":435},[425,3298,3299],{"class":462},"Stripe error: charge already refunded",[425,3301,877],{"class":435},[425,3303,469],{"class":435},[425,3305,3306,3308,3310,3312,3314,3316],{"class":427,"line":591},[425,3307,1022],{"class":435},[425,3309,1181],{"class":1025},[425,3311,877],{"class":435},[425,3313,456],{"class":435},[425,3315,637],{"class":636},[425,3317,469],{"class":435},[425,3319,3320,3322,3324,3326,3328,3330,3333,3335],{"class":427,"line":1019},[425,3321,1022],{"class":435},[425,3323,1197],{"class":1025},[425,3325,877],{"class":435},[425,3327,456],{"class":435},[425,3329,882],{"class":435},[425,3331,3332],{"class":462},"ak_4c5d6e7f8a9b0c1d",[425,3334,877],{"class":435},[425,3336,469],{"class":435},[425,3338,3339,3341,3343,3345,3347,3349,3351],{"class":427,"line":1041},[425,3340,1022],{"class":435},[425,3342,3099],{"class":1025},[425,3344,877],{"class":435},[425,3346,456],{"class":435},[425,3348,882],{"class":435},[425,3350,3108],{"class":462},[425,3352,1264],{"class":435},[425,3354,3355],{"class":427,"line":1089},[425,3356,2829],{"class":435},[425,3358,3359,3361,3363,3365,3367],{"class":427,"line":1135},[425,3360,870],{"class":435},[425,3362,3143],{"class":873},[425,3364,877],{"class":435},[425,3366,456],{"class":435},[425,3368,720],{"class":435},[425,3370,3371,3373,3376,3378,3380,3382,3385,3387],{"class":427,"line":1156},[425,3372,1022],{"class":435},[425,3374,3375],{"class":1025},"name",[425,3377,877],{"class":435},[425,3379,456],{"class":435},[425,3381,882],{"class":435},[425,3383,3384],{"class":462},"StripeError",[425,3386,877],{"class":435},[425,3388,469],{"class":435},[425,3390,3391,3393,3396,3398,3400,3402,3405,3407],{"class":427,"line":1176},[425,3392,1022],{"class":435},[425,3394,3395],{"class":1025},"message",[425,3397,877],{"class":435},[425,3399,456],{"class":435},[425,3401,882],{"class":435},[425,3403,3404],{"class":462},"charge already refunded",[425,3406,877],{"class":435},[425,3408,469],{"class":435},[425,3410,3411,3413,3416,3418,3420,3422,3425],{"class":427,"line":1192},[425,3412,1022],{"class":435},[425,3414,3415],{"class":1025},"stack",[425,3417,877],{"class":435},[425,3419,456],{"class":435},[425,3421,882],{"class":435},[425,3423,3424],{"class":462},"...",[425,3426,1264],{"class":435},[425,3428,3429],{"class":427,"line":1213},[425,3430,1276],{"class":435},[425,3432,3433],{"class":427,"line":1227},[425,3434,853],{"class":435},[416,3436,3438],{"className":856,"code":3437,"filename":858,"language":859,"meta":421,"style":421},"{\n  \"level\": \"warn\",\n  \"audit\": {\n    \"action\": \"invoice.refund\",\n    \"actor\": { \"type\": \"system\", \"id\": \"anonymous\" },\n    \"target\": { \"type\": \"invoice\", \"id\": \"inv_889\" },\n    \"outcome\": \"denied\",\n    \"reason\": \"Anonymous refund denied\",\n    \"version\": 1,\n    \"idempotencyKey\": \"ak_d12c3a4f5b6e7d8c\",\n    \"correlationId\": \"a566ef91-7765-4f59-b6f0-b9f40ce71599\"\n  }\n}\n",[403,3439,3440,3444,3462,3474,3492,3537,3581,3599,3617,3631,3649,3665,3669],{"__ignoreMap":421},[425,3441,3442],{"class":427,"line":428},[425,3443,446],{"class":435},[425,3445,3446,3448,3450,3452,3454,3456,3458,3460],{"class":427,"line":449},[425,3447,870],{"class":435},[425,3449,874],{"class":873},[425,3451,877],{"class":435},[425,3453,456],{"class":435},[425,3455,882],{"class":435},[425,3457,885],{"class":462},[425,3459,877],{"class":435},[425,3461,469],{"class":435},[425,3463,3464,3466,3468,3470,3472],{"class":427,"line":472},[425,3465,870],{"class":435},[425,3467,440],{"class":873},[425,3469,877],{"class":435},[425,3471,456],{"class":435},[425,3473,720],{"class":435},[425,3475,3476,3478,3480,3482,3484,3486,3488,3490],{"class":427,"line":514},[425,3477,1022],{"class":435},[425,3479,1026],{"class":1025},[425,3481,877],{"class":435},[425,3483,456],{"class":435},[425,3485,882],{"class":435},[425,3487,463],{"class":462},[425,3489,877],{"class":435},[425,3491,469],{"class":435},[425,3493,3494,3496,3498,3500,3502,3504,3506,3508,3510,3512,3514,3516,3518,3520,3522,3524,3526,3528,3530,3533,3535],{"class":427,"line":551},[425,3495,1022],{"class":435},[425,3497,1046],{"class":1025},[425,3499,877],{"class":435},[425,3501,456],{"class":435},[425,3503,480],{"class":435},[425,3505,882],{"class":435},[425,3507,1057],{"class":636},[425,3509,877],{"class":435},[425,3511,456],{"class":435},[425,3513,882],{"class":435},[425,3515,1367],{"class":462},[425,3517,877],{"class":435},[425,3519,495],{"class":435},[425,3521,882],{"class":435},[425,3523,767],{"class":636},[425,3525,877],{"class":435},[425,3527,456],{"class":435},[425,3529,882],{"class":435},[425,3531,3532],{"class":462},"anonymous",[425,3534,877],{"class":435},[425,3536,548],{"class":435},[425,3538,3539,3541,3543,3545,3547,3549,3551,3553,3555,3557,3559,3561,3563,3565,3567,3569,3571,3573,3575,3577,3579],{"class":427,"line":568},[425,3540,1022],{"class":435},[425,3542,1094],{"class":1025},[425,3544,877],{"class":435},[425,3546,456],{"class":435},[425,3548,480],{"class":435},[425,3550,882],{"class":435},[425,3552,1057],{"class":636},[425,3554,877],{"class":435},[425,3556,456],{"class":435},[425,3558,882],{"class":435},[425,3560,530],{"class":462},[425,3562,877],{"class":435},[425,3564,495],{"class":435},[425,3566,882],{"class":435},[425,3568,767],{"class":636},[425,3570,877],{"class":435},[425,3572,456],{"class":435},[425,3574,882],{"class":435},[425,3576,543],{"class":462},[425,3578,877],{"class":435},[425,3580,548],{"class":435},[425,3582,3583,3585,3587,3589,3591,3593,3595,3597],{"class":427,"line":577},[425,3584,1022],{"class":435},[425,3586,1140],{"class":1025},[425,3588,877],{"class":435},[425,3590,456],{"class":435},[425,3592,882],{"class":435},[425,3594,1149],{"class":462},[425,3596,877],{"class":435},[425,3598,469],{"class":435},[425,3600,3601,3603,3605,3607,3609,3611,3613,3615],{"class":427,"line":584},[425,3602,1022],{"class":435},[425,3604,1161],{"class":1025},[425,3606,877],{"class":435},[425,3608,456],{"class":435},[425,3610,882],{"class":435},[425,3612,2792],{"class":462},[425,3614,877],{"class":435},[425,3616,469],{"class":435},[425,3618,3619,3621,3623,3625,3627,3629],{"class":427,"line":591},[425,3620,1022],{"class":435},[425,3622,1181],{"class":1025},[425,3624,877],{"class":435},[425,3626,456],{"class":435},[425,3628,637],{"class":636},[425,3630,469],{"class":435},[425,3632,3633,3635,3637,3639,3641,3643,3645,3647],{"class":427,"line":1019},[425,3634,1022],{"class":435},[425,3636,1197],{"class":1025},[425,3638,877],{"class":435},[425,3640,456],{"class":435},[425,3642,882],{"class":435},[425,3644,1206],{"class":462},[425,3646,877],{"class":435},[425,3648,469],{"class":435},[425,3650,3651,3653,3655,3657,3659,3661,3663],{"class":427,"line":1041},[425,3652,1022],{"class":435},[425,3654,3099],{"class":1025},[425,3656,877],{"class":435},[425,3658,456],{"class":435},[425,3660,882],{"class":435},[425,3662,3108],{"class":462},[425,3664,1264],{"class":435},[425,3666,3667],{"class":427,"line":1089},[425,3668,1276],{"class":435},[425,3670,3671],{"class":427,"line":1135},[425,3672,853],{"class":435},[395,3674,3675],{},"Outcome resolution:",[3677,3678,3679,3689,3708],"ul",{},[3680,3681,3682,3685,3686,436],"li",{},[403,3683,3684],{},"fn"," resolves → ",[403,3687,3688],{},"outcome: 'success'",[3680,3690,3691,3693,3694,3697,3698,3701,3702,3705,3706,436],{},[403,3692,3684],{}," throws an ",[403,3695,3696],{},"AuditDeniedError"," (or any error with ",[403,3699,3700],{},"status === 403",") → ",[403,3703,3704],{},"outcome: 'denied'",", error message becomes ",[403,3707,1161],{},[3680,3709,3710,3711,3714],{},"Other thrown errors → ",[403,3712,3713],{},"outcome: 'failure'",", then re-thrown.",[3716,3717,3718],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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}",{"title":421,"searchDepth":449,"depth":449,"links":3720},[3721,3722,3723,3725,3726,3727],{"id":401,"depth":449,"text":405},{"id":650,"depth":449,"text":653},{"id":1284,"depth":449,"text":3724},"Standalone audit()",{"id":1683,"depth":449,"text":1686},{"id":1868,"depth":449,"text":1871},{"id":2589,"depth":449,"text":3728},"withAudit() — auto-instrumentation","log.audit, log.audit.deny, standalone audit(), withAudit auto-instrumentation, defineAuditAction registries, and auditDiff change patches.","md",[3732,3735],{"label":132,"icon":135,"to":133,"color":3733,"variant":3734},"neutral","subtle",{"label":3736,"icon":145,"to":143,"color":3733,"variant":3734},"Drains & Integrity",{},{"title":137,"icon":140},{"title":390,"description":3729},"Shh3jKvO-eMHfu8RhceBuLyZPNASeI-BEkwV6Rl0kps",[3742,3744],{"title":132,"path":133,"stem":134,"description":3743,"icon":135,"children":-1},"The AuditFields type, action naming conventions, actor types, idempotency, and how the schema sits inside a regular wide event.",{"title":142,"path":143,"stem":144,"description":3745,"icon":145,"children":-1},"auditEnricher to auto-fill request context, auditOnly to route audits to a dedicated sink, and signed for tamper-evident HMAC or hash-chain integrity.",1777924949018]