[{"data":1,"prerenderedAt":4338},["ShallowReactive",2],{"navigation_docs":3,"-use-cases-audit-recording":424,"-use-cases-audit-recording-surround":4333},[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":426,"body":427,"description":4321,"extension":4322,"links":4323,"meta":4329,"navigation":4330,"path":317,"seo":4331,"stem":318,"__hash__":4332},"docs\u002F4.use-cases\u002F4.audit\u002F03.recording.md","Recording Events",{"type":428,"value":429,"toc":4306},"minimark",[430,434,442,451,681,684,690,696,1318,1325,1330,1697,1717,1723,1728,1894,1902,1908,1934,2210,2223,2273,2284,2287,2338,2352,2356,2362,2439,2445,2458,2464,2470,2506,3176,3183,3189,3207,4262,4265,4302],[431,432,433],"p",{},"Five APIs cover every shape of audit recording: in-request, denied, standalone, auto-instrumented, and typed.",[435,436,438],"h2",{"id":437},"logaudit",[439,440,441],"code",{},"log.audit()",[431,443,444,446,447,450],{},[439,445,441],{}," is sugar over ",[439,448,449],{},"log.set({ audit: ... })"," plus tail-sample force-keep:",[452,453,458],"pre",{"className":454,"code":455,"language":456,"meta":457,"style":457},"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","",[439,459,460,483,506,548,585,602,611,618,625],{"__ignoreMap":457},[461,462,465,469,473,477,480],"span",{"class":463,"line":464},"line",1,[461,466,468],{"class":467},"sTEyZ","log",[461,470,472],{"class":471},"sMK4o",".",[461,474,476],{"class":475},"s2Zo4","audit",[461,478,479],{"class":467},"(",[461,481,482],{"class":471},"{\n",[461,484,486,490,493,496,500,503],{"class":463,"line":485},2,[461,487,489],{"class":488},"swJcz","  action",[461,491,492],{"class":471},":",[461,494,495],{"class":471}," '",[461,497,499],{"class":498},"sfazB","invoice.refund",[461,501,502],{"class":471},"'",[461,504,505],{"class":471},",\n",[461,507,509,512,514,517,520,522,524,527,529,532,535,537,540,542,545],{"class":463,"line":508},3,[461,510,511],{"class":488},"  actor",[461,513,492],{"class":471},[461,515,516],{"class":471}," {",[461,518,519],{"class":488}," type",[461,521,492],{"class":471},[461,523,495],{"class":471},[461,525,526],{"class":498},"user",[461,528,502],{"class":471},[461,530,531],{"class":471},",",[461,533,534],{"class":488}," id",[461,536,492],{"class":471},[461,538,539],{"class":467}," user",[461,541,472],{"class":471},[461,543,544],{"class":467},"id ",[461,546,547],{"class":471},"},\n",[461,549,551,554,556,558,560,562,564,567,569,571,573,575,577,580,582],{"class":463,"line":550},4,[461,552,553],{"class":488},"  target",[461,555,492],{"class":471},[461,557,516],{"class":471},[461,559,519],{"class":488},[461,561,492],{"class":471},[461,563,495],{"class":471},[461,565,566],{"class":498},"invoice",[461,568,502],{"class":471},[461,570,531],{"class":471},[461,572,534],{"class":488},[461,574,492],{"class":471},[461,576,495],{"class":471},[461,578,579],{"class":498},"inv_889",[461,581,502],{"class":471},[461,583,584],{"class":471}," },\n",[461,586,588,591,593,595,598,600],{"class":463,"line":587},5,[461,589,590],{"class":488},"  outcome",[461,592,492],{"class":471},[461,594,495],{"class":471},[461,596,597],{"class":498},"success",[461,599,502],{"class":471},[461,601,505],{"class":471},[461,603,605,608],{"class":463,"line":604},6,[461,606,607],{"class":471},"}",[461,609,610],{"class":467},")\n",[461,612,614],{"class":463,"line":613},7,[461,615,617],{"emptyLinePlaceholder":616},true,"\n",[461,619,621],{"class":463,"line":620},8,[461,622,624],{"class":623},"sHwdD","\u002F\u002F Strictly equivalent to:\n",[461,626,628,630,632,635,637,640,643,645,647,650,652,654,656,658,660,663,665,668,670,674,677,679],{"class":463,"line":627},9,[461,629,468],{"class":467},[461,631,472],{"class":471},[461,633,634],{"class":475},"set",[461,636,479],{"class":467},[461,638,639],{"class":471},"{",[461,641,642],{"class":488}," audit",[461,644,492],{"class":471},[461,646,516],{"class":471},[461,648,649],{"class":488}," action",[461,651,492],{"class":471},[461,653,495],{"class":471},[461,655,499],{"class":498},[461,657,502],{"class":471},[461,659,531],{"class":471},[461,661,662],{"class":623}," \u002F* ... *\u002F",[461,664,531],{"class":471},[461,666,667],{"class":488}," version",[461,669,492],{"class":471},[461,671,673],{"class":672},"sbssI"," 1",[461,675,676],{"class":471}," }",[461,678,676],{"class":471},[461,680,610],{"class":467},[431,682,683],{},"This is the form you'll use most. The audit event lands on the same wide event as the rest of the request.",[435,685,687],{"id":686},"logauditdeny",[439,688,689],{},"log.audit.deny()",[431,691,692,695],{},[439,693,694],{},"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:",[697,698,699,890],"code-group",{},[452,700,703],{"className":454,"code":701,"filename":702,"language":456,"meta":457,"style":457},"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",[439,704,705,729,757,772,806,840,847,885],{"__ignoreMap":457},[461,706,707,711,714,717,719,721,724,727],{"class":463,"line":464},[461,708,710],{"class":709},"s7zQu","if",[461,712,713],{"class":467}," (",[461,715,716],{"class":471},"!",[461,718,526],{"class":467},[461,720,472],{"class":471},[461,722,723],{"class":475},"canRefund",[461,725,726],{"class":467},"(invoice)) ",[461,728,482],{"class":471},[461,730,731,734,736,738,740,743,745,747,750,752,754],{"class":463,"line":485},[461,732,733],{"class":467},"  log",[461,735,472],{"class":471},[461,737,476],{"class":467},[461,739,472],{"class":471},[461,741,742],{"class":475},"deny",[461,744,479],{"class":488},[461,746,502],{"class":471},[461,748,749],{"class":498},"Insufficient permissions",[461,751,502],{"class":471},[461,753,531],{"class":471},[461,755,756],{"class":471}," {\n",[461,758,759,762,764,766,768,770],{"class":463,"line":508},[461,760,761],{"class":488},"    action",[461,763,492],{"class":471},[461,765,495],{"class":471},[461,767,499],{"class":498},[461,769,502],{"class":471},[461,771,505],{"class":471},[461,773,774,777,779,781,783,785,787,789,791,793,795,797,799,801,804],{"class":463,"line":550},[461,775,776],{"class":488},"    actor",[461,778,492],{"class":471},[461,780,516],{"class":471},[461,782,519],{"class":488},[461,784,492],{"class":471},[461,786,495],{"class":471},[461,788,526],{"class":498},[461,790,502],{"class":471},[461,792,531],{"class":471},[461,794,534],{"class":488},[461,796,492],{"class":471},[461,798,539],{"class":467},[461,800,472],{"class":471},[461,802,803],{"class":467},"id",[461,805,584],{"class":471},[461,807,808,811,813,815,817,819,821,823,825,827,829,831,834,836,838],{"class":463,"line":587},[461,809,810],{"class":488},"    target",[461,812,492],{"class":471},[461,814,516],{"class":471},[461,816,519],{"class":488},[461,818,492],{"class":471},[461,820,495],{"class":471},[461,822,566],{"class":498},[461,824,502],{"class":471},[461,826,531],{"class":471},[461,828,534],{"class":488},[461,830,492],{"class":471},[461,832,833],{"class":467}," invoice",[461,835,472],{"class":471},[461,837,803],{"class":467},[461,839,584],{"class":471},[461,841,842,845],{"class":463,"line":604},[461,843,844],{"class":471},"  }",[461,846,610],{"class":488},[461,848,849,852,855,857,859,862,864,867,869,872,874,876,879,881,883],{"class":463,"line":613},[461,850,851],{"class":709},"  throw",[461,853,854],{"class":475}," createError",[461,856,479],{"class":488},[461,858,639],{"class":471},[461,860,861],{"class":488}," status",[461,863,492],{"class":471},[461,865,866],{"class":672}," 403",[461,868,531],{"class":471},[461,870,871],{"class":488}," message",[461,873,492],{"class":471},[461,875,495],{"class":471},[461,877,878],{"class":498},"Forbidden",[461,880,502],{"class":471},[461,882,676],{"class":471},[461,884,610],{"class":488},[461,886,887],{"class":463,"line":620},[461,888,889],{"class":471},"}\n",[452,891,896],{"className":892,"code":893,"filename":894,"language":895,"meta":457,"style":457},"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",[439,897,898,902,926,946,966,986,1001,1021,1041,1053,1075,1123,1169,1190,1210,1226,1247,1261,1281,1301,1307,1313],{"__ignoreMap":457},[461,899,900],{"class":463,"line":464},[461,901,482],{"class":471},[461,903,904,907,911,914,916,919,922,924],{"class":463,"line":485},[461,905,906],{"class":471},"  \"",[461,908,910],{"class":909},"spNyl","level",[461,912,913],{"class":471},"\"",[461,915,492],{"class":471},[461,917,918],{"class":471}," \"",[461,920,921],{"class":498},"warn",[461,923,913],{"class":471},[461,925,505],{"class":471},[461,927,928,930,933,935,937,939,942,944],{"class":463,"line":508},[461,929,906],{"class":471},[461,931,932],{"class":909},"service",[461,934,913],{"class":471},[461,936,492],{"class":471},[461,938,918],{"class":471},[461,940,941],{"class":498},"billing-api",[461,943,913],{"class":471},[461,945,505],{"class":471},[461,947,948,950,953,955,957,959,962,964],{"class":463,"line":550},[461,949,906],{"class":471},[461,951,952],{"class":909},"method",[461,954,913],{"class":471},[461,956,492],{"class":471},[461,958,918],{"class":471},[461,960,961],{"class":498},"POST",[461,963,913],{"class":471},[461,965,505],{"class":471},[461,967,968,970,973,975,977,979,982,984],{"class":463,"line":587},[461,969,906],{"class":471},[461,971,972],{"class":909},"path",[461,974,913],{"class":471},[461,976,492],{"class":471},[461,978,918],{"class":471},[461,980,981],{"class":498},"\u002Fapi\u002Finvoices\u002Finv_889\u002Frefund",[461,983,913],{"class":471},[461,985,505],{"class":471},[461,987,988,990,993,995,997,999],{"class":463,"line":604},[461,989,906],{"class":471},[461,991,992],{"class":909},"status",[461,994,913],{"class":471},[461,996,492],{"class":471},[461,998,866],{"class":672},[461,1000,505],{"class":471},[461,1002,1003,1005,1008,1010,1012,1014,1017,1019],{"class":463,"line":613},[461,1004,906],{"class":471},[461,1006,1007],{"class":909},"duration",[461,1009,913],{"class":471},[461,1011,492],{"class":471},[461,1013,918],{"class":471},[461,1015,1016],{"class":498},"12ms",[461,1018,913],{"class":471},[461,1020,505],{"class":471},[461,1022,1023,1025,1028,1030,1032,1034,1037,1039],{"class":463,"line":620},[461,1024,906],{"class":471},[461,1026,1027],{"class":909},"requestId",[461,1029,913],{"class":471},[461,1031,492],{"class":471},[461,1033,918],{"class":471},[461,1035,1036],{"class":498},"9c3f7d12-8a45-4e60-b8a9-1f0d4c5e6e7d",[461,1038,913],{"class":471},[461,1040,505],{"class":471},[461,1042,1043,1045,1047,1049,1051],{"class":463,"line":627},[461,1044,906],{"class":471},[461,1046,476],{"class":909},[461,1048,913],{"class":471},[461,1050,492],{"class":471},[461,1052,756],{"class":471},[461,1054,1056,1059,1063,1065,1067,1069,1071,1073],{"class":463,"line":1055},10,[461,1057,1058],{"class":471},"    \"",[461,1060,1062],{"class":1061},"sBMFI","action",[461,1064,913],{"class":471},[461,1066,492],{"class":471},[461,1068,918],{"class":471},[461,1070,499],{"class":498},[461,1072,913],{"class":471},[461,1074,505],{"class":471},[461,1076,1078,1080,1083,1085,1087,1089,1091,1094,1096,1098,1100,1102,1104,1106,1108,1110,1112,1114,1116,1119,1121],{"class":463,"line":1077},11,[461,1079,1058],{"class":471},[461,1081,1082],{"class":1061},"actor",[461,1084,913],{"class":471},[461,1086,492],{"class":471},[461,1088,516],{"class":471},[461,1090,918],{"class":471},[461,1092,1093],{"class":672},"type",[461,1095,913],{"class":471},[461,1097,492],{"class":471},[461,1099,918],{"class":471},[461,1101,526],{"class":498},[461,1103,913],{"class":471},[461,1105,531],{"class":471},[461,1107,918],{"class":471},[461,1109,803],{"class":672},[461,1111,913],{"class":471},[461,1113,492],{"class":471},[461,1115,918],{"class":471},[461,1117,1118],{"class":498},"usr_intruder",[461,1120,913],{"class":471},[461,1122,584],{"class":471},[461,1124,1126,1128,1131,1133,1135,1137,1139,1141,1143,1145,1147,1149,1151,1153,1155,1157,1159,1161,1163,1165,1167],{"class":463,"line":1125},12,[461,1127,1058],{"class":471},[461,1129,1130],{"class":1061},"target",[461,1132,913],{"class":471},[461,1134,492],{"class":471},[461,1136,516],{"class":471},[461,1138,918],{"class":471},[461,1140,1093],{"class":672},[461,1142,913],{"class":471},[461,1144,492],{"class":471},[461,1146,918],{"class":471},[461,1148,566],{"class":498},[461,1150,913],{"class":471},[461,1152,531],{"class":471},[461,1154,918],{"class":471},[461,1156,803],{"class":672},[461,1158,913],{"class":471},[461,1160,492],{"class":471},[461,1162,918],{"class":471},[461,1164,579],{"class":498},[461,1166,913],{"class":471},[461,1168,584],{"class":471},[461,1170,1172,1174,1177,1179,1181,1183,1186,1188],{"class":463,"line":1171},13,[461,1173,1058],{"class":471},[461,1175,1176],{"class":1061},"outcome",[461,1178,913],{"class":471},[461,1180,492],{"class":471},[461,1182,918],{"class":471},[461,1184,1185],{"class":498},"denied",[461,1187,913],{"class":471},[461,1189,505],{"class":471},[461,1191,1193,1195,1198,1200,1202,1204,1206,1208],{"class":463,"line":1192},14,[461,1194,1058],{"class":471},[461,1196,1197],{"class":1061},"reason",[461,1199,913],{"class":471},[461,1201,492],{"class":471},[461,1203,918],{"class":471},[461,1205,749],{"class":498},[461,1207,913],{"class":471},[461,1209,505],{"class":471},[461,1211,1213,1215,1218,1220,1222,1224],{"class":463,"line":1212},15,[461,1214,1058],{"class":471},[461,1216,1217],{"class":1061},"version",[461,1219,913],{"class":471},[461,1221,492],{"class":471},[461,1223,673],{"class":672},[461,1225,505],{"class":471},[461,1227,1229,1231,1234,1236,1238,1240,1243,1245],{"class":463,"line":1228},16,[461,1230,1058],{"class":471},[461,1232,1233],{"class":1061},"idempotencyKey",[461,1235,913],{"class":471},[461,1237,492],{"class":471},[461,1239,918],{"class":471},[461,1241,1242],{"class":498},"ak_d12c3a4f5b6e7d8c",[461,1244,913],{"class":471},[461,1246,505],{"class":471},[461,1248,1250,1252,1255,1257,1259],{"class":463,"line":1249},17,[461,1251,1058],{"class":471},[461,1253,1254],{"class":1061},"context",[461,1256,913],{"class":471},[461,1258,492],{"class":471},[461,1260,756],{"class":471},[461,1262,1264,1267,1269,1271,1273,1275,1277,1279],{"class":463,"line":1263},18,[461,1265,1266],{"class":471},"      \"",[461,1268,1027],{"class":672},[461,1270,913],{"class":471},[461,1272,492],{"class":471},[461,1274,918],{"class":471},[461,1276,1036],{"class":498},[461,1278,913],{"class":471},[461,1280,505],{"class":471},[461,1282,1284,1286,1289,1291,1293,1295,1298],{"class":463,"line":1283},19,[461,1285,1266],{"class":471},[461,1287,1288],{"class":672},"ip",[461,1290,913],{"class":471},[461,1292,492],{"class":471},[461,1294,918],{"class":471},[461,1296,1297],{"class":498},"203.0.113.7",[461,1299,1300],{"class":471},"\"\n",[461,1302,1304],{"class":463,"line":1303},20,[461,1305,1306],{"class":471},"    }\n",[461,1308,1310],{"class":463,"line":1309},21,[461,1311,1312],{"class":471},"  }\n",[461,1314,1316],{"class":463,"line":1315},22,[461,1317,889],{"class":471},[435,1319,1321,1322],{"id":1320},"standalone-audit","Standalone ",[439,1323,1324],{},"audit()",[431,1326,1327,1328,492],{},"For non-request contexts (jobs, scripts, CLIs), use the standalone ",[439,1329,1324],{},[697,1331,1332,1475],{},[452,1333,1336],{"className":454,"code":1334,"filename":1335,"language":456,"meta":457,"style":457},"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",[439,1337,1338,1360,1364,1372,1387,1421,1455,1469],{"__ignoreMap":457},[461,1339,1340,1343,1345,1347,1349,1352,1354,1357],{"class":463,"line":464},[461,1341,1342],{"class":709},"import",[461,1344,516],{"class":471},[461,1346,642],{"class":467},[461,1348,676],{"class":471},[461,1350,1351],{"class":709}," from",[461,1353,495],{"class":471},[461,1355,1356],{"class":498},"evlog",[461,1358,1359],{"class":471},"'\n",[461,1361,1362],{"class":463,"line":485},[461,1363,617],{"emptyLinePlaceholder":616},[461,1365,1366,1368,1370],{"class":463,"line":508},[461,1367,476],{"class":475},[461,1369,479],{"class":467},[461,1371,482],{"class":471},[461,1373,1374,1376,1378,1380,1383,1385],{"class":463,"line":550},[461,1375,489],{"class":488},[461,1377,492],{"class":471},[461,1379,495],{"class":471},[461,1381,1382],{"class":498},"cron.cleanup",[461,1384,502],{"class":471},[461,1386,505],{"class":471},[461,1388,1389,1391,1393,1395,1397,1399,1401,1404,1406,1408,1410,1412,1414,1417,1419],{"class":463,"line":587},[461,1390,511],{"class":488},[461,1392,492],{"class":471},[461,1394,516],{"class":471},[461,1396,519],{"class":488},[461,1398,492],{"class":471},[461,1400,495],{"class":471},[461,1402,1403],{"class":498},"system",[461,1405,502],{"class":471},[461,1407,531],{"class":471},[461,1409,534],{"class":488},[461,1411,492],{"class":471},[461,1413,495],{"class":471},[461,1415,1416],{"class":498},"cron",[461,1418,502],{"class":471},[461,1420,584],{"class":471},[461,1422,1423,1425,1427,1429,1431,1433,1435,1438,1440,1442,1444,1446,1448,1451,1453],{"class":463,"line":604},[461,1424,553],{"class":488},[461,1426,492],{"class":471},[461,1428,516],{"class":471},[461,1430,519],{"class":488},[461,1432,492],{"class":471},[461,1434,495],{"class":471},[461,1436,1437],{"class":498},"job",[461,1439,502],{"class":471},[461,1441,531],{"class":471},[461,1443,534],{"class":488},[461,1445,492],{"class":471},[461,1447,495],{"class":471},[461,1449,1450],{"class":498},"cleanup-stale-sessions",[461,1452,502],{"class":471},[461,1454,584],{"class":471},[461,1456,1457,1459,1461,1463,1465,1467],{"class":463,"line":613},[461,1458,590],{"class":488},[461,1460,492],{"class":471},[461,1462,495],{"class":471},[461,1464,597],{"class":498},[461,1466,502],{"class":471},[461,1468,505],{"class":471},[461,1470,1471,1473],{"class":463,"line":620},[461,1472,607],{"class":471},[461,1474,610],{"class":467},[452,1476,1479],{"className":892,"code":1477,"filename":1478,"language":895,"meta":457,"style":457},"{\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",[439,1480,1481,1485,1504,1522,1534,1552,1596,1640,1658,1672,1689,1693],{"__ignoreMap":457},[461,1482,1483],{"class":463,"line":464},[461,1484,482],{"class":471},[461,1486,1487,1489,1491,1493,1495,1497,1500,1502],{"class":463,"line":485},[461,1488,906],{"class":471},[461,1490,910],{"class":909},[461,1492,913],{"class":471},[461,1494,492],{"class":471},[461,1496,918],{"class":471},[461,1498,1499],{"class":498},"info",[461,1501,913],{"class":471},[461,1503,505],{"class":471},[461,1505,1506,1508,1510,1512,1514,1516,1518,1520],{"class":463,"line":508},[461,1507,906],{"class":471},[461,1509,932],{"class":909},[461,1511,913],{"class":471},[461,1513,492],{"class":471},[461,1515,918],{"class":471},[461,1517,941],{"class":498},[461,1519,913],{"class":471},[461,1521,505],{"class":471},[461,1523,1524,1526,1528,1530,1532],{"class":463,"line":550},[461,1525,906],{"class":471},[461,1527,476],{"class":909},[461,1529,913],{"class":471},[461,1531,492],{"class":471},[461,1533,756],{"class":471},[461,1535,1536,1538,1540,1542,1544,1546,1548,1550],{"class":463,"line":587},[461,1537,1058],{"class":471},[461,1539,1062],{"class":1061},[461,1541,913],{"class":471},[461,1543,492],{"class":471},[461,1545,918],{"class":471},[461,1547,1382],{"class":498},[461,1549,913],{"class":471},[461,1551,505],{"class":471},[461,1553,1554,1556,1558,1560,1562,1564,1566,1568,1570,1572,1574,1576,1578,1580,1582,1584,1586,1588,1590,1592,1594],{"class":463,"line":604},[461,1555,1058],{"class":471},[461,1557,1082],{"class":1061},[461,1559,913],{"class":471},[461,1561,492],{"class":471},[461,1563,516],{"class":471},[461,1565,918],{"class":471},[461,1567,1093],{"class":672},[461,1569,913],{"class":471},[461,1571,492],{"class":471},[461,1573,918],{"class":471},[461,1575,1403],{"class":498},[461,1577,913],{"class":471},[461,1579,531],{"class":471},[461,1581,918],{"class":471},[461,1583,803],{"class":672},[461,1585,913],{"class":471},[461,1587,492],{"class":471},[461,1589,918],{"class":471},[461,1591,1416],{"class":498},[461,1593,913],{"class":471},[461,1595,584],{"class":471},[461,1597,1598,1600,1602,1604,1606,1608,1610,1612,1614,1616,1618,1620,1622,1624,1626,1628,1630,1632,1634,1636,1638],{"class":463,"line":613},[461,1599,1058],{"class":471},[461,1601,1130],{"class":1061},[461,1603,913],{"class":471},[461,1605,492],{"class":471},[461,1607,516],{"class":471},[461,1609,918],{"class":471},[461,1611,1093],{"class":672},[461,1613,913],{"class":471},[461,1615,492],{"class":471},[461,1617,918],{"class":471},[461,1619,1437],{"class":498},[461,1621,913],{"class":471},[461,1623,531],{"class":471},[461,1625,918],{"class":471},[461,1627,803],{"class":672},[461,1629,913],{"class":471},[461,1631,492],{"class":471},[461,1633,918],{"class":471},[461,1635,1450],{"class":498},[461,1637,913],{"class":471},[461,1639,584],{"class":471},[461,1641,1642,1644,1646,1648,1650,1652,1654,1656],{"class":463,"line":620},[461,1643,1058],{"class":471},[461,1645,1176],{"class":1061},[461,1647,913],{"class":471},[461,1649,492],{"class":471},[461,1651,918],{"class":471},[461,1653,597],{"class":498},[461,1655,913],{"class":471},[461,1657,505],{"class":471},[461,1659,1660,1662,1664,1666,1668,1670],{"class":463,"line":627},[461,1661,1058],{"class":471},[461,1663,1217],{"class":1061},[461,1665,913],{"class":471},[461,1667,492],{"class":471},[461,1669,673],{"class":672},[461,1671,505],{"class":471},[461,1673,1674,1676,1678,1680,1682,1684,1687],{"class":463,"line":1055},[461,1675,1058],{"class":471},[461,1677,1233],{"class":1061},[461,1679,913],{"class":471},[461,1681,492],{"class":471},[461,1683,918],{"class":471},[461,1685,1686],{"class":498},"ak_2b8e1f9d4c6a7b3e",[461,1688,1300],{"class":471},[461,1690,1691],{"class":463,"line":1077},[461,1692,1312],{"class":471},[461,1694,1695],{"class":463,"line":1125},[461,1696,889],{"class":471},[1698,1699,1321,1700,1702,1703,1705,1706,1705,1709,1712,1713,1716],"note",{},[439,1701,1324],{}," events have no ",[439,1704,1027],{},", no ",[439,1707,1708],{},"context.ip",[439,1710,1711],{},"userAgent"," — there is no request to enrich from. Add your own context manually (",[439,1714,1715],{},"context: { jobId, queue, runId }",") when it matters for forensics.",[435,1718,1720],{"id":1719},"defineauditaction",[439,1721,1722],{},"defineAuditAction()",[431,1724,1725,1726,492],{},"Define audit actions in one place to avoid magic strings and get full type-safety on ",[439,1727,1130],{},[452,1729,1731],{"className":454,"code":1730,"language":456,"meta":457,"style":457},"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",[439,1732,1733,1752,1756,1796,1800,1817,1849,1873,1887],{"__ignoreMap":457},[461,1734,1735,1737,1739,1742,1744,1746,1748,1750],{"class":463,"line":464},[461,1736,1342],{"class":709},[461,1738,516],{"class":471},[461,1740,1741],{"class":467}," defineAuditAction",[461,1743,676],{"class":471},[461,1745,1351],{"class":709},[461,1747,495],{"class":471},[461,1749,1356],{"class":498},[461,1751,1359],{"class":471},[461,1753,1754],{"class":463,"line":485},[461,1755,617],{"emptyLinePlaceholder":616},[461,1757,1758,1761,1764,1767,1769,1771,1773,1775,1777,1779,1781,1784,1786,1788,1790,1792,1794],{"class":463,"line":508},[461,1759,1760],{"class":909},"const",[461,1762,1763],{"class":467}," refund ",[461,1765,1766],{"class":471},"=",[461,1768,1741],{"class":475},[461,1770,479],{"class":467},[461,1772,502],{"class":471},[461,1774,499],{"class":498},[461,1776,502],{"class":471},[461,1778,531],{"class":471},[461,1780,516],{"class":471},[461,1782,1783],{"class":488}," target",[461,1785,492],{"class":471},[461,1787,495],{"class":471},[461,1789,566],{"class":498},[461,1791,502],{"class":471},[461,1793,676],{"class":471},[461,1795,610],{"class":467},[461,1797,1798],{"class":463,"line":550},[461,1799,617],{"emptyLinePlaceholder":616},[461,1801,1802,1804,1806,1808,1810,1813,1815],{"class":463,"line":587},[461,1803,468],{"class":467},[461,1805,472],{"class":471},[461,1807,476],{"class":475},[461,1809,479],{"class":467},[461,1811,1812],{"class":475},"refund",[461,1814,479],{"class":467},[461,1816,482],{"class":471},[461,1818,1819,1821,1823,1825,1827,1829,1831,1833,1835,1837,1839,1841,1843,1845,1847],{"class":463,"line":604},[461,1820,511],{"class":488},[461,1822,492],{"class":471},[461,1824,516],{"class":471},[461,1826,519],{"class":488},[461,1828,492],{"class":471},[461,1830,495],{"class":471},[461,1832,526],{"class":498},[461,1834,502],{"class":471},[461,1836,531],{"class":471},[461,1838,534],{"class":488},[461,1840,492],{"class":471},[461,1842,539],{"class":467},[461,1844,472],{"class":471},[461,1846,544],{"class":467},[461,1848,547],{"class":471},[461,1850,1851,1853,1855,1857,1859,1861,1863,1865,1867,1870],{"class":463,"line":613},[461,1852,553],{"class":488},[461,1854,492],{"class":471},[461,1856,516],{"class":471},[461,1858,534],{"class":488},[461,1860,492],{"class":471},[461,1862,495],{"class":471},[461,1864,579],{"class":498},[461,1866,502],{"class":471},[461,1868,1869],{"class":471}," },",[461,1871,1872],{"class":623}," \u002F\u002F type inferred as 'invoice'\n",[461,1874,1875,1877,1879,1881,1883,1885],{"class":463,"line":620},[461,1876,590],{"class":488},[461,1878,492],{"class":471},[461,1880,495],{"class":471},[461,1882,597],{"class":498},[461,1884,502],{"class":471},[461,1886,505],{"class":471},[461,1888,1889,1891],{"class":463,"line":627},[461,1890,607],{"class":471},[461,1892,1893],{"class":467},"))\n",[431,1895,1896,1897,472],{},"Pair this with the action dictionary from ",[1898,1899,1901],"a",{"href":1900},"\u002Fuse-cases\u002Faudit\u002Fschema#action-naming","Schema → Action naming",[435,1903,1905],{"id":1904},"defineauditcatalog",[439,1906,1907],{},"defineAuditCatalog()",[431,1909,1910,1911,1915,1916,1919,1920,1923,1924,1927,1928,1930,1931,472],{},"For more than a handful of actions, group them in a typed ",[1912,1913,1914],"strong",{},"catalog"," instead of declaring ",[439,1917,1918],{},"defineAuditAction"," one-by-one. Same convention as error catalogs: ",[439,1921,1922],{},"UPPER_SNAKE_CASE"," keys, ",[439,1925,1926],{},"lower.dot.case"," prefix, wire ",[439,1929,1062],{}," is ",[439,1932,1933],{},"${prefix}.${KEY}",[697,1935,1936,2086],{},[452,1937,1940],{"className":454,"code":1938,"filename":1939,"language":456,"meta":457,"style":457},"import { defineAuditCatalog } from 'evlog'\n\nexport const billingAudit = defineAuditCatalog('billing', {\n  INVOICE_REFUND:      { target: 'invoice' },\n  INVOICE_CREATE:      { target: 'invoice' },\n  INVOICE_VOID:        { target: 'invoice' },\n  SUBSCRIPTION_CANCEL: { target: 'subscription' },\n})\n","audit\u002Fbilling.ts",[439,1941,1942,1961,1965,1993,2015,2036,2058,2080],{"__ignoreMap":457},[461,1943,1944,1946,1948,1951,1953,1955,1957,1959],{"class":463,"line":464},[461,1945,1342],{"class":709},[461,1947,516],{"class":471},[461,1949,1950],{"class":467}," defineAuditCatalog",[461,1952,676],{"class":471},[461,1954,1351],{"class":709},[461,1956,495],{"class":471},[461,1958,1356],{"class":498},[461,1960,1359],{"class":471},[461,1962,1963],{"class":463,"line":485},[461,1964,617],{"emptyLinePlaceholder":616},[461,1966,1967,1970,1973,1976,1978,1980,1982,1984,1987,1989,1991],{"class":463,"line":508},[461,1968,1969],{"class":709},"export",[461,1971,1972],{"class":909}," const",[461,1974,1975],{"class":467}," billingAudit ",[461,1977,1766],{"class":471},[461,1979,1950],{"class":475},[461,1981,479],{"class":467},[461,1983,502],{"class":471},[461,1985,1986],{"class":498},"billing",[461,1988,502],{"class":471},[461,1990,531],{"class":471},[461,1992,756],{"class":471},[461,1994,1995,1998,2000,2003,2005,2007,2009,2011,2013],{"class":463,"line":550},[461,1996,1997],{"class":488},"  INVOICE_REFUND",[461,1999,492],{"class":471},[461,2001,2002],{"class":471},"      {",[461,2004,1783],{"class":488},[461,2006,492],{"class":471},[461,2008,495],{"class":471},[461,2010,566],{"class":498},[461,2012,502],{"class":471},[461,2014,584],{"class":471},[461,2016,2017,2020,2022,2024,2026,2028,2030,2032,2034],{"class":463,"line":587},[461,2018,2019],{"class":488},"  INVOICE_CREATE",[461,2021,492],{"class":471},[461,2023,2002],{"class":471},[461,2025,1783],{"class":488},[461,2027,492],{"class":471},[461,2029,495],{"class":471},[461,2031,566],{"class":498},[461,2033,502],{"class":471},[461,2035,584],{"class":471},[461,2037,2038,2041,2043,2046,2048,2050,2052,2054,2056],{"class":463,"line":604},[461,2039,2040],{"class":488},"  INVOICE_VOID",[461,2042,492],{"class":471},[461,2044,2045],{"class":471},"        {",[461,2047,1783],{"class":488},[461,2049,492],{"class":471},[461,2051,495],{"class":471},[461,2053,566],{"class":498},[461,2055,502],{"class":471},[461,2057,584],{"class":471},[461,2059,2060,2063,2065,2067,2069,2071,2073,2076,2078],{"class":463,"line":613},[461,2061,2062],{"class":488},"  SUBSCRIPTION_CANCEL",[461,2064,492],{"class":471},[461,2066,516],{"class":471},[461,2068,1783],{"class":488},[461,2070,492],{"class":471},[461,2072,495],{"class":471},[461,2074,2075],{"class":498},"subscription",[461,2077,502],{"class":471},[461,2079,584],{"class":471},[461,2081,2082,2084],{"class":463,"line":620},[461,2083,607],{"class":471},[461,2085,610],{"class":467},[452,2087,2090],{"className":454,"code":2088,"filename":2089,"language":456,"meta":457,"style":457},"import { billingAudit } from '~\u002Faudit\u002Fbilling'\n\nlog.audit(billingAudit.INVOICE_REFUND({\n  actor: { type: 'user', id: user.id },\n  target: { id: 'inv_889' }, \u002F\u002F type inferred as 'invoice'\n  outcome: 'success',\n}))\n","server\u002Fapi\u002Frefund.post.ts",[439,2091,2092,2112,2116,2136,2168,2190,2204],{"__ignoreMap":457},[461,2093,2094,2096,2098,2101,2103,2105,2107,2110],{"class":463,"line":464},[461,2095,1342],{"class":709},[461,2097,516],{"class":471},[461,2099,2100],{"class":467}," billingAudit",[461,2102,676],{"class":471},[461,2104,1351],{"class":709},[461,2106,495],{"class":471},[461,2108,2109],{"class":498},"~\u002Faudit\u002Fbilling",[461,2111,1359],{"class":471},[461,2113,2114],{"class":463,"line":485},[461,2115,617],{"emptyLinePlaceholder":616},[461,2117,2118,2120,2122,2124,2127,2129,2132,2134],{"class":463,"line":508},[461,2119,468],{"class":467},[461,2121,472],{"class":471},[461,2123,476],{"class":475},[461,2125,2126],{"class":467},"(billingAudit",[461,2128,472],{"class":471},[461,2130,2131],{"class":475},"INVOICE_REFUND",[461,2133,479],{"class":467},[461,2135,482],{"class":471},[461,2137,2138,2140,2142,2144,2146,2148,2150,2152,2154,2156,2158,2160,2162,2164,2166],{"class":463,"line":550},[461,2139,511],{"class":488},[461,2141,492],{"class":471},[461,2143,516],{"class":471},[461,2145,519],{"class":488},[461,2147,492],{"class":471},[461,2149,495],{"class":471},[461,2151,526],{"class":498},[461,2153,502],{"class":471},[461,2155,531],{"class":471},[461,2157,534],{"class":488},[461,2159,492],{"class":471},[461,2161,539],{"class":467},[461,2163,472],{"class":471},[461,2165,544],{"class":467},[461,2167,547],{"class":471},[461,2169,2170,2172,2174,2176,2178,2180,2182,2184,2186,2188],{"class":463,"line":587},[461,2171,553],{"class":488},[461,2173,492],{"class":471},[461,2175,516],{"class":471},[461,2177,534],{"class":488},[461,2179,492],{"class":471},[461,2181,495],{"class":471},[461,2183,579],{"class":498},[461,2185,502],{"class":471},[461,2187,1869],{"class":471},[461,2189,1872],{"class":623},[461,2191,2192,2194,2196,2198,2200,2202],{"class":463,"line":604},[461,2193,590],{"class":488},[461,2195,492],{"class":471},[461,2197,495],{"class":471},[461,2199,597],{"class":498},[461,2201,502],{"class":471},[461,2203,505],{"class":471},[461,2205,2206,2208],{"class":463,"line":613},[461,2207,607],{"class":471},[461,2209,1893],{"class":467},[431,2211,2212,2213,2215,2216,2219,2220,492],{},"Each entry produces a thin wrapper around ",[439,2214,1918],{}," (target type is fixed at definition time, action name is auto-prefixed). Catalog metadata is exposed on ",[439,2217,2218],{},"_actions"," and ",[439,2221,2222],{},"_prefix",[452,2224,2226],{"className":454,"code":2225,"language":456,"meta":457,"style":457},"billingAudit.INVOICE_REFUND.action \u002F\u002F 'billing.INVOICE_REFUND' (literal type)\nbillingAudit.INVOICE_REFUND.target \u002F\u002F 'invoice'\nbillingAudit._actions              \u002F\u002F readonly ['billing.INVOICE_REFUND', ...]\n",[439,2227,2228,2245,2261],{"__ignoreMap":457},[461,2229,2230,2233,2235,2237,2239,2242],{"class":463,"line":464},[461,2231,2232],{"class":467},"billingAudit",[461,2234,472],{"class":471},[461,2236,2131],{"class":467},[461,2238,472],{"class":471},[461,2240,2241],{"class":467},"action ",[461,2243,2244],{"class":623},"\u002F\u002F 'billing.INVOICE_REFUND' (literal type)\n",[461,2246,2247,2249,2251,2253,2255,2258],{"class":463,"line":485},[461,2248,2232],{"class":467},[461,2250,472],{"class":471},[461,2252,2131],{"class":467},[461,2254,472],{"class":471},[461,2256,2257],{"class":467},"target ",[461,2259,2260],{"class":623},"\u002F\u002F 'invoice'\n",[461,2262,2263,2265,2267,2270],{"class":463,"line":508},[461,2264,2232],{"class":467},[461,2266,472],{"class":471},[461,2268,2269],{"class":467},"_actions              ",[461,2271,2272],{"class":623},"\u002F\u002F readonly ['billing.INVOICE_REFUND', ...]\n",[2274,2275,2277,2279,2280,2283],"h3",{"id":2276},"defineauditaction-vs-defineauditcatalog-when-to-choose",[439,2278,1918],{}," vs ",[439,2281,2282],{},"defineAuditCatalog"," — when to choose",[431,2285,2286],{},"Both produce the same call-site factory shape. Pick by scale:",[2288,2289,2290,2306],"ul",{},[2291,2292,2293,2298,2299,2302,2303,2305],"li",{},[1912,2294,2295],{},[439,2296,2297],{},"defineAuditAction(action, opts?)"," — one-off actions, or per-file organisation in very large repos. Mirrors ",[439,2300,2301],{},"defineError",". Equivalent to a catalog with a single entry but with no prefix derivation: you write the full wire ",[439,2304,1062],{}," directly.",[2291,2307,2308,2313,2314,2317,2318,2320,2321,2323,2324,2326,2327,2329,2330,2333,2334,2337],{},[1912,2309,2310],{},[439,2311,2312],{},"defineAuditCatalog(prefix, map)"," — group anything beyond a handful of related actions under one prefix. Mirrors ",[439,2315,2316],{},"defineErrorCatalog",". The wire ",[439,2319,1062],{}," is auto-derived as ",[439,2322,1933],{},", catalog metadata (",[439,2325,2218],{},", ",[439,2328,2222],{},") is exposed for introspection, and a single ",[439,2331,2332],{},"declare module 'evlog'"," line surfaces the whole bundle in the typed ",[439,2335,2336],{},"AuditAction"," union.",[431,2339,2340,2341,2343,2344,2326,2346,2326,2349,2351],{},"You can mix the two in the same codebase — keep cross-cutting one-off actions as ",[439,2342,1918],{},", group bounded contexts (",[439,2345,1986],{},[439,2347,2348],{},"auth",[439,2350,2075],{},") as catalogs.",[2274,2353,2355],{"id":2354},"type-safe-actions-everywhere-opt-in","Type-safe actions everywhere (opt-in)",[431,2357,2358,2359,492],{},"Mirror the error catalog augmentation by augmenting ",[439,2360,2361],{},"RegisteredAuditCatalogs",[452,2363,2365],{"className":454,"code":2364,"language":456,"meta":457,"style":457},"import type { billingAudit } from '.\u002Faudit\u002Fbilling'\n\ndeclare module 'evlog' {\n  interface RegisteredAuditCatalogs {\n    billing: typeof billingAudit\n  }\n}\n",[439,2366,2367,2388,2392,2408,2418,2431,2435],{"__ignoreMap":457},[461,2368,2369,2371,2373,2375,2377,2379,2381,2383,2386],{"class":463,"line":464},[461,2370,1342],{"class":709},[461,2372,519],{"class":709},[461,2374,516],{"class":471},[461,2376,2100],{"class":467},[461,2378,676],{"class":471},[461,2380,1351],{"class":709},[461,2382,495],{"class":471},[461,2384,2385],{"class":498},".\u002Faudit\u002Fbilling",[461,2387,1359],{"class":471},[461,2389,2390],{"class":463,"line":485},[461,2391,617],{"emptyLinePlaceholder":616},[461,2393,2394,2397,2400,2402,2404,2406],{"class":463,"line":508},[461,2395,2396],{"class":909},"declare",[461,2398,2399],{"class":909}," module",[461,2401,495],{"class":471},[461,2403,1356],{"class":498},[461,2405,502],{"class":471},[461,2407,756],{"class":471},[461,2409,2410,2413,2416],{"class":463,"line":550},[461,2411,2412],{"class":909},"  interface",[461,2414,2415],{"class":1061}," RegisteredAuditCatalogs",[461,2417,756],{"class":471},[461,2419,2420,2423,2425,2428],{"class":463,"line":587},[461,2421,2422],{"class":488},"    billing",[461,2424,492],{"class":471},[461,2426,2427],{"class":471}," typeof",[461,2429,2430],{"class":467}," billingAudit\n",[461,2432,2433],{"class":463,"line":604},[461,2434,1312],{"class":471},[461,2436,2437],{"class":463,"line":613},[461,2438,889],{"class":471},[431,2440,2441,2442,2444],{},"This surfaces the union of all registered actions on the typed ",[439,2443,2336],{}," export, useful for shared helpers, dashboards, and refactor-safe comparisons.",[2446,2447,2450,2453,2454,2457],"callout",{"color":2448,"icon":2449,"to":72},"primary","i-lucide-arrow-right",[1912,2451,2452],{},"Going further."," The dedicated ",[1898,2455,2456],{"href":72},"Catalogs page"," covers the scaling story (single file → folder → feature → npm package) for both error and audit catalogs, plus npm packaging, composition patterns, and the type-augmentation deep dive.",[435,2459,2461],{"id":2460},"auditdiff",[439,2462,2463],{},"auditDiff()",[431,2465,2466,2467,2469],{},"For mutating actions, use ",[439,2468,2463],{}," to produce a compact, redact-aware JSON Patch:",[2471,2472,2473,2478,2479,1930,2482,2486,2487,2490,2491,2494,2495,2498,2499,2502,2503,2505],"warning",{},[1912,2474,2475,2476,472],{},"Don't feed entire DB rows into ",[439,2477,2463],{}," Strip computed columns, hashed passwords, internal flags, and large JSON blobs before diffing. The point of ",[439,2480,2481],{},"changes",[2483,2484,2485],"em",{},"what changed semantically"," (status went from ",[439,2488,2489],{},"paid"," → ",[439,2492,2493],{},"refunded","), not ",[2483,2496,2497],{},"what bytes changed"," (a ",[439,2500,2501],{},"lastModified"," timestamp ticked). A noisy ",[439,2504,2481],{}," field is the fastest way to make audit logs unreadable.",[697,2507,2508,2754],{},[452,2509,2511],{"className":454,"code":2510,"filename":702,"language":456,"meta":457,"style":457},"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",[439,2512,2513,2532,2536,2564,2594,2598,2610,2625,2654,2679,2693,2748],{"__ignoreMap":457},[461,2514,2515,2517,2519,2522,2524,2526,2528,2530],{"class":463,"line":464},[461,2516,1342],{"class":709},[461,2518,516],{"class":471},[461,2520,2521],{"class":467}," auditDiff",[461,2523,676],{"class":471},[461,2525,1351],{"class":709},[461,2527,495],{"class":471},[461,2529,1356],{"class":498},[461,2531,1359],{"class":471},[461,2533,2534],{"class":463,"line":485},[461,2535,617],{"emptyLinePlaceholder":616},[461,2537,2538,2540,2543,2545,2548,2551,2553,2556,2558,2561],{"class":463,"line":508},[461,2539,1760],{"class":909},[461,2541,2542],{"class":467}," before ",[461,2544,1766],{"class":471},[461,2546,2547],{"class":709}," await",[461,2549,2550],{"class":467}," db",[461,2552,472],{"class":471},[461,2554,2555],{"class":467},"users",[461,2557,472],{"class":471},[461,2559,2560],{"class":475},"byId",[461,2562,2563],{"class":467},"(id)\n",[461,2565,2566,2568,2571,2573,2575,2577,2579,2581,2583,2586,2589,2591],{"class":463,"line":550},[461,2567,1760],{"class":909},[461,2569,2570],{"class":467}," after ",[461,2572,1766],{"class":471},[461,2574,2547],{"class":709},[461,2576,2550],{"class":467},[461,2578,472],{"class":471},[461,2580,2555],{"class":467},[461,2582,472],{"class":471},[461,2584,2585],{"class":475},"update",[461,2587,2588],{"class":467},"(id",[461,2590,531],{"class":471},[461,2592,2593],{"class":467}," patch)\n",[461,2595,2596],{"class":463,"line":587},[461,2597,617],{"emptyLinePlaceholder":616},[461,2599,2600,2602,2604,2606,2608],{"class":463,"line":604},[461,2601,468],{"class":467},[461,2603,472],{"class":471},[461,2605,476],{"class":475},[461,2607,479],{"class":467},[461,2609,482],{"class":471},[461,2611,2612,2614,2616,2618,2621,2623],{"class":463,"line":613},[461,2613,489],{"class":488},[461,2615,492],{"class":471},[461,2617,495],{"class":471},[461,2619,2620],{"class":498},"user.update",[461,2622,502],{"class":471},[461,2624,505],{"class":471},[461,2626,2627,2629,2631,2633,2635,2637,2639,2641,2643,2645,2647,2649,2652],{"class":463,"line":620},[461,2628,511],{"class":488},[461,2630,492],{"class":471},[461,2632,516],{"class":471},[461,2634,519],{"class":488},[461,2636,492],{"class":471},[461,2638,495],{"class":471},[461,2640,526],{"class":498},[461,2642,502],{"class":471},[461,2644,531],{"class":471},[461,2646,534],{"class":488},[461,2648,492],{"class":471},[461,2650,2651],{"class":467}," actorId ",[461,2653,547],{"class":471},[461,2655,2656,2658,2660,2662,2664,2666,2668,2670,2672,2674,2677],{"class":463,"line":627},[461,2657,553],{"class":488},[461,2659,492],{"class":471},[461,2661,516],{"class":471},[461,2663,519],{"class":488},[461,2665,492],{"class":471},[461,2667,495],{"class":471},[461,2669,526],{"class":498},[461,2671,502],{"class":471},[461,2673,531],{"class":471},[461,2675,2676],{"class":467}," id ",[461,2678,547],{"class":471},[461,2680,2681,2683,2685,2687,2689,2691],{"class":463,"line":1055},[461,2682,590],{"class":488},[461,2684,492],{"class":471},[461,2686,495],{"class":471},[461,2688,597],{"class":498},[461,2690,502],{"class":471},[461,2692,505],{"class":471},[461,2694,2695,2698,2700,2702,2705,2707,2710,2712,2714,2717,2719,2722,2724,2727,2729,2731,2733,2736,2738,2741,2743,2746],{"class":463,"line":1077},[461,2696,2697],{"class":488},"  changes",[461,2699,492],{"class":471},[461,2701,2521],{"class":475},[461,2703,2704],{"class":467},"(before",[461,2706,531],{"class":471},[461,2708,2709],{"class":467}," after",[461,2711,531],{"class":471},[461,2713,516],{"class":471},[461,2715,2716],{"class":488}," redactPaths",[461,2718,492],{"class":471},[461,2720,2721],{"class":467}," [",[461,2723,502],{"class":471},[461,2725,2726],{"class":498},"password",[461,2728,502],{"class":471},[461,2730,531],{"class":471},[461,2732,495],{"class":471},[461,2734,2735],{"class":498},"token",[461,2737,502],{"class":471},[461,2739,2740],{"class":467},"] ",[461,2742,607],{"class":471},[461,2744,2745],{"class":467},")",[461,2747,505],{"class":471},[461,2749,2750,2752],{"class":463,"line":1125},[461,2751,607],{"class":471},[461,2753,610],{"class":467},[452,2755,2758],{"className":892,"code":2756,"filename":2757,"language":895,"meta":457,"style":457},"{\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",[439,2759,2760,2764,2776,2794,2839,2884,2902,2915,2990,3061,3132,3137,3151,3168,3172],{"__ignoreMap":457},[461,2761,2762],{"class":463,"line":464},[461,2763,482],{"class":471},[461,2765,2766,2768,2770,2772,2774],{"class":463,"line":485},[461,2767,906],{"class":471},[461,2769,476],{"class":909},[461,2771,913],{"class":471},[461,2773,492],{"class":471},[461,2775,756],{"class":471},[461,2777,2778,2780,2782,2784,2786,2788,2790,2792],{"class":463,"line":508},[461,2779,1058],{"class":471},[461,2781,1062],{"class":1061},[461,2783,913],{"class":471},[461,2785,492],{"class":471},[461,2787,918],{"class":471},[461,2789,2620],{"class":498},[461,2791,913],{"class":471},[461,2793,505],{"class":471},[461,2795,2796,2798,2800,2802,2804,2806,2808,2810,2812,2814,2816,2818,2820,2822,2824,2826,2828,2830,2832,2835,2837],{"class":463,"line":550},[461,2797,1058],{"class":471},[461,2799,1082],{"class":1061},[461,2801,913],{"class":471},[461,2803,492],{"class":471},[461,2805,516],{"class":471},[461,2807,918],{"class":471},[461,2809,1093],{"class":672},[461,2811,913],{"class":471},[461,2813,492],{"class":471},[461,2815,918],{"class":471},[461,2817,526],{"class":498},[461,2819,913],{"class":471},[461,2821,531],{"class":471},[461,2823,918],{"class":471},[461,2825,803],{"class":672},[461,2827,913],{"class":471},[461,2829,492],{"class":471},[461,2831,918],{"class":471},[461,2833,2834],{"class":498},"usr_42",[461,2836,913],{"class":471},[461,2838,584],{"class":471},[461,2840,2841,2843,2845,2847,2849,2851,2853,2855,2857,2859,2861,2863,2865,2867,2869,2871,2873,2875,2877,2880,2882],{"class":463,"line":587},[461,2842,1058],{"class":471},[461,2844,1130],{"class":1061},[461,2846,913],{"class":471},[461,2848,492],{"class":471},[461,2850,516],{"class":471},[461,2852,918],{"class":471},[461,2854,1093],{"class":672},[461,2856,913],{"class":471},[461,2858,492],{"class":471},[461,2860,918],{"class":471},[461,2862,526],{"class":498},[461,2864,913],{"class":471},[461,2866,531],{"class":471},[461,2868,918],{"class":471},[461,2870,803],{"class":672},[461,2872,913],{"class":471},[461,2874,492],{"class":471},[461,2876,918],{"class":471},[461,2878,2879],{"class":498},"usr_99",[461,2881,913],{"class":471},[461,2883,584],{"class":471},[461,2885,2886,2888,2890,2892,2894,2896,2898,2900],{"class":463,"line":604},[461,2887,1058],{"class":471},[461,2889,1176],{"class":1061},[461,2891,913],{"class":471},[461,2893,492],{"class":471},[461,2895,918],{"class":471},[461,2897,597],{"class":498},[461,2899,913],{"class":471},[461,2901,505],{"class":471},[461,2903,2904,2906,2908,2910,2912],{"class":463,"line":613},[461,2905,1058],{"class":471},[461,2907,2481],{"class":1061},[461,2909,913],{"class":471},[461,2911,492],{"class":471},[461,2913,2914],{"class":471}," [\n",[461,2916,2917,2919,2921,2924,2926,2928,2930,2933,2935,2937,2939,2941,2943,2945,2947,2950,2952,2954,2956,2959,2961,2963,2965,2968,2970,2972,2974,2977,2979,2981,2983,2986,2988],{"class":463,"line":620},[461,2918,2002],{"class":471},[461,2920,918],{"class":471},[461,2922,2923],{"class":672},"op",[461,2925,913],{"class":471},[461,2927,492],{"class":471},[461,2929,918],{"class":471},[461,2931,2932],{"class":498},"replace",[461,2934,913],{"class":471},[461,2936,531],{"class":471},[461,2938,918],{"class":471},[461,2940,972],{"class":672},[461,2942,913],{"class":471},[461,2944,492],{"class":471},[461,2946,918],{"class":471},[461,2948,2949],{"class":498},"\u002Femail",[461,2951,913],{"class":471},[461,2953,531],{"class":471},[461,2955,918],{"class":471},[461,2957,2958],{"class":672},"from",[461,2960,913],{"class":471},[461,2962,492],{"class":471},[461,2964,918],{"class":471},[461,2966,2967],{"class":498},"old@example.com",[461,2969,913],{"class":471},[461,2971,531],{"class":471},[461,2973,918],{"class":471},[461,2975,2976],{"class":672},"to",[461,2978,913],{"class":471},[461,2980,492],{"class":471},[461,2982,918],{"class":471},[461,2984,2985],{"class":498},"new@example.com",[461,2987,913],{"class":471},[461,2989,584],{"class":471},[461,2991,2992,2994,2996,2998,3000,3002,3004,3006,3008,3010,3012,3014,3016,3018,3020,3023,3025,3027,3029,3031,3033,3035,3037,3040,3042,3044,3046,3048,3050,3052,3054,3057,3059],{"class":463,"line":627},[461,2993,2002],{"class":471},[461,2995,918],{"class":471},[461,2997,2923],{"class":672},[461,2999,913],{"class":471},[461,3001,492],{"class":471},[461,3003,918],{"class":471},[461,3005,2932],{"class":498},[461,3007,913],{"class":471},[461,3009,531],{"class":471},[461,3011,918],{"class":471},[461,3013,972],{"class":672},[461,3015,913],{"class":471},[461,3017,492],{"class":471},[461,3019,918],{"class":471},[461,3021,3022],{"class":498},"\u002Frole",[461,3024,913],{"class":471},[461,3026,531],{"class":471},[461,3028,918],{"class":471},[461,3030,2958],{"class":672},[461,3032,913],{"class":471},[461,3034,492],{"class":471},[461,3036,918],{"class":471},[461,3038,3039],{"class":498},"member",[461,3041,913],{"class":471},[461,3043,531],{"class":471},[461,3045,918],{"class":471},[461,3047,2976],{"class":672},[461,3049,913],{"class":471},[461,3051,492],{"class":471},[461,3053,918],{"class":471},[461,3055,3056],{"class":498},"admin",[461,3058,913],{"class":471},[461,3060,584],{"class":471},[461,3062,3063,3065,3067,3069,3071,3073,3075,3077,3079,3081,3083,3085,3087,3089,3091,3094,3096,3098,3100,3102,3104,3106,3108,3111,3113,3115,3117,3119,3121,3123,3125,3127,3129],{"class":463,"line":1055},[461,3064,2002],{"class":471},[461,3066,918],{"class":471},[461,3068,2923],{"class":672},[461,3070,913],{"class":471},[461,3072,492],{"class":471},[461,3074,918],{"class":471},[461,3076,2932],{"class":498},[461,3078,913],{"class":471},[461,3080,531],{"class":471},[461,3082,918],{"class":471},[461,3084,972],{"class":672},[461,3086,913],{"class":471},[461,3088,492],{"class":471},[461,3090,918],{"class":471},[461,3092,3093],{"class":498},"\u002Fpassword",[461,3095,913],{"class":471},[461,3097,531],{"class":471},[461,3099,918],{"class":471},[461,3101,2958],{"class":672},[461,3103,913],{"class":471},[461,3105,492],{"class":471},[461,3107,918],{"class":471},[461,3109,3110],{"class":498},"[REDACTED]",[461,3112,913],{"class":471},[461,3114,531],{"class":471},[461,3116,918],{"class":471},[461,3118,2976],{"class":672},[461,3120,913],{"class":471},[461,3122,492],{"class":471},[461,3124,918],{"class":471},[461,3126,3110],{"class":498},[461,3128,913],{"class":471},[461,3130,3131],{"class":471}," }\n",[461,3133,3134],{"class":463,"line":1077},[461,3135,3136],{"class":471},"    ],\n",[461,3138,3139,3141,3143,3145,3147,3149],{"class":463,"line":1125},[461,3140,1058],{"class":471},[461,3142,1217],{"class":1061},[461,3144,913],{"class":471},[461,3146,492],{"class":471},[461,3148,673],{"class":672},[461,3150,505],{"class":471},[461,3152,3153,3155,3157,3159,3161,3163,3166],{"class":463,"line":1171},[461,3154,1058],{"class":471},[461,3156,1233],{"class":1061},[461,3158,913],{"class":471},[461,3160,492],{"class":471},[461,3162,918],{"class":471},[461,3164,3165],{"class":498},"ak_5e7d8f9a0b1c2d3e",[461,3167,1300],{"class":471},[461,3169,3170],{"class":463,"line":1192},[461,3171,1312],{"class":471},[461,3173,3174],{"class":463,"line":1212},[461,3175,889],{"class":471},[435,3177,3179,3182],{"id":3178},"withaudit-auto-instrumentation",[439,3180,3181],{},"withAudit()"," — auto-instrumentation",[431,3184,3185,3186,3188],{},"Devs forget to call ",[439,3187,441],{},". Wrap the function and never miss a record:",[3190,3191,3192,3195,3196,3199,3200,3202,3203,3206],"tip",{},[1912,3193,3194],{},"When to wrap vs. call manually."," Wrap functions that are ",[2483,3197,3198],{},"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 ",[439,3201,441],{}," when the audit is one of several decisions inside a larger handler, or when you need to emit the audit ",[2483,3204,3205],{},"before"," the action completes (e.g. \"user requested deletion\").",[697,3208,3209,3503,3708,4024],{},[452,3210,3212],{"className":454,"code":3211,"filename":702,"language":456,"meta":457,"style":457},"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",[439,3213,3214,3238,3242,3256,3317,3349,3386,3414,3419,3423,3427,3453,3485,3497],{"__ignoreMap":457},[461,3215,3216,3218,3220,3223,3225,3228,3230,3232,3234,3236],{"class":463,"line":464},[461,3217,1342],{"class":709},[461,3219,516],{"class":471},[461,3221,3222],{"class":467}," withAudit",[461,3224,531],{"class":471},[461,3226,3227],{"class":467}," AuditDeniedError",[461,3229,676],{"class":471},[461,3231,1351],{"class":709},[461,3233,495],{"class":471},[461,3235,1356],{"class":498},[461,3237,1359],{"class":471},[461,3239,3240],{"class":463,"line":485},[461,3241,617],{"emptyLinePlaceholder":616},[461,3243,3244,3246,3249,3251,3253],{"class":463,"line":508},[461,3245,1760],{"class":909},[461,3247,3248],{"class":467}," refundInvoice ",[461,3250,1766],{"class":471},[461,3252,3222],{"class":475},[461,3254,3255],{"class":467},"(\n",[461,3257,3258,3261,3263,3265,3267,3269,3271,3273,3275,3277,3281,3284,3286,3288,3290,3292,3294,3296,3298,3300,3302,3304,3306,3308,3310,3312,3315],{"class":463,"line":550},[461,3259,3260],{"class":471},"  {",[461,3262,649],{"class":488},[461,3264,492],{"class":471},[461,3266,495],{"class":471},[461,3268,499],{"class":498},[461,3270,502],{"class":471},[461,3272,531],{"class":471},[461,3274,1783],{"class":475},[461,3276,492],{"class":471},[461,3278,3280],{"class":3279},"sHdIc"," input",[461,3282,3283],{"class":909}," =>",[461,3285,713],{"class":467},[461,3287,639],{"class":471},[461,3289,519],{"class":488},[461,3291,492],{"class":471},[461,3293,495],{"class":471},[461,3295,566],{"class":498},[461,3297,502],{"class":471},[461,3299,531],{"class":471},[461,3301,534],{"class":488},[461,3303,492],{"class":471},[461,3305,3280],{"class":467},[461,3307,472],{"class":471},[461,3309,544],{"class":467},[461,3311,607],{"class":471},[461,3313,3314],{"class":467},") ",[461,3316,547],{"class":471},[461,3318,3319,3322,3324,3327,3329,3331,3333,3335,3338,3340,3343,3345,3347],{"class":463,"line":587},[461,3320,3321],{"class":909},"  async",[461,3323,713],{"class":471},[461,3325,3326],{"class":3279},"input",[461,3328,492],{"class":471},[461,3330,516],{"class":471},[461,3332,534],{"class":488},[461,3334,492],{"class":471},[461,3336,3337],{"class":1061}," string",[461,3339,1869],{"class":471},[461,3341,3342],{"class":3279}," ctx",[461,3344,2745],{"class":471},[461,3346,3283],{"class":909},[461,3348,756],{"class":471},[461,3350,3351,3354,3356,3358,3361,3363,3365,3367,3370,3373,3375,3377,3379,3382,3384],{"class":463,"line":604},[461,3352,3353],{"class":709},"    if",[461,3355,713],{"class":488},[461,3357,716],{"class":471},[461,3359,3360],{"class":467},"ctx",[461,3362,472],{"class":471},[461,3364,1082],{"class":467},[461,3366,3314],{"class":488},[461,3368,3369],{"class":709},"throw",[461,3371,3372],{"class":471}," new",[461,3374,3227],{"class":475},[461,3376,479],{"class":488},[461,3378,502],{"class":471},[461,3380,3381],{"class":498},"Anonymous refund denied",[461,3383,502],{"class":471},[461,3385,610],{"class":488},[461,3387,3388,3391,3393,3395,3397,3400,3402,3404,3406,3408,3410,3412],{"class":463,"line":613},[461,3389,3390],{"class":709},"    return",[461,3392,2547],{"class":709},[461,3394,2550],{"class":467},[461,3396,472],{"class":471},[461,3398,3399],{"class":467},"invoices",[461,3401,472],{"class":471},[461,3403,1812],{"class":475},[461,3405,479],{"class":488},[461,3407,3326],{"class":467},[461,3409,472],{"class":471},[461,3411,803],{"class":467},[461,3413,610],{"class":488},[461,3415,3416],{"class":463,"line":620},[461,3417,3418],{"class":471},"  },\n",[461,3420,3421],{"class":463,"line":627},[461,3422,610],{"class":467},[461,3424,3425],{"class":463,"line":1055},[461,3426,617],{"emptyLinePlaceholder":616},[461,3428,3429,3432,3435,3437,3439,3441,3443,3445,3447,3449,3451],{"class":463,"line":1077},[461,3430,3431],{"class":709},"await",[461,3433,3434],{"class":475}," refundInvoice",[461,3436,479],{"class":467},[461,3438,639],{"class":471},[461,3440,534],{"class":488},[461,3442,492],{"class":471},[461,3444,495],{"class":471},[461,3446,579],{"class":498},[461,3448,502],{"class":471},[461,3450,1869],{"class":471},[461,3452,756],{"class":471},[461,3454,3455,3457,3459,3461,3463,3465,3467,3469,3471,3473,3475,3477,3479,3481,3483],{"class":463,"line":1125},[461,3456,511],{"class":488},[461,3458,492],{"class":471},[461,3460,516],{"class":471},[461,3462,519],{"class":488},[461,3464,492],{"class":471},[461,3466,495],{"class":471},[461,3468,526],{"class":498},[461,3470,502],{"class":471},[461,3472,531],{"class":471},[461,3474,534],{"class":488},[461,3476,492],{"class":471},[461,3478,539],{"class":467},[461,3480,472],{"class":471},[461,3482,544],{"class":467},[461,3484,547],{"class":471},[461,3486,3487,3490,3492,3495],{"class":463,"line":1171},[461,3488,3489],{"class":488},"  correlationId",[461,3491,492],{"class":471},[461,3493,3494],{"class":467}," requestId",[461,3496,505],{"class":471},[461,3498,3499,3501],{"class":463,"line":1192},[461,3500,607],{"class":471},[461,3502,610],{"class":467},[452,3504,3507],{"className":892,"code":3505,"filename":3506,"language":895,"meta":457,"style":457},"{\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",[439,3508,3509,3513,3525,3543,3587,3631,3649,3663,3682,3700,3704],{"__ignoreMap":457},[461,3510,3511],{"class":463,"line":464},[461,3512,482],{"class":471},[461,3514,3515,3517,3519,3521,3523],{"class":463,"line":485},[461,3516,906],{"class":471},[461,3518,476],{"class":909},[461,3520,913],{"class":471},[461,3522,492],{"class":471},[461,3524,756],{"class":471},[461,3526,3527,3529,3531,3533,3535,3537,3539,3541],{"class":463,"line":508},[461,3528,1058],{"class":471},[461,3530,1062],{"class":1061},[461,3532,913],{"class":471},[461,3534,492],{"class":471},[461,3536,918],{"class":471},[461,3538,499],{"class":498},[461,3540,913],{"class":471},[461,3542,505],{"class":471},[461,3544,3545,3547,3549,3551,3553,3555,3557,3559,3561,3563,3565,3567,3569,3571,3573,3575,3577,3579,3581,3583,3585],{"class":463,"line":550},[461,3546,1058],{"class":471},[461,3548,1082],{"class":1061},[461,3550,913],{"class":471},[461,3552,492],{"class":471},[461,3554,516],{"class":471},[461,3556,918],{"class":471},[461,3558,1093],{"class":672},[461,3560,913],{"class":471},[461,3562,492],{"class":471},[461,3564,918],{"class":471},[461,3566,526],{"class":498},[461,3568,913],{"class":471},[461,3570,531],{"class":471},[461,3572,918],{"class":471},[461,3574,803],{"class":672},[461,3576,913],{"class":471},[461,3578,492],{"class":471},[461,3580,918],{"class":471},[461,3582,2834],{"class":498},[461,3584,913],{"class":471},[461,3586,584],{"class":471},[461,3588,3589,3591,3593,3595,3597,3599,3601,3603,3605,3607,3609,3611,3613,3615,3617,3619,3621,3623,3625,3627,3629],{"class":463,"line":587},[461,3590,1058],{"class":471},[461,3592,1130],{"class":1061},[461,3594,913],{"class":471},[461,3596,492],{"class":471},[461,3598,516],{"class":471},[461,3600,918],{"class":471},[461,3602,1093],{"class":672},[461,3604,913],{"class":471},[461,3606,492],{"class":471},[461,3608,918],{"class":471},[461,3610,566],{"class":498},[461,3612,913],{"class":471},[461,3614,531],{"class":471},[461,3616,918],{"class":471},[461,3618,803],{"class":672},[461,3620,913],{"class":471},[461,3622,492],{"class":471},[461,3624,918],{"class":471},[461,3626,579],{"class":498},[461,3628,913],{"class":471},[461,3630,584],{"class":471},[461,3632,3633,3635,3637,3639,3641,3643,3645,3647],{"class":463,"line":604},[461,3634,1058],{"class":471},[461,3636,1176],{"class":1061},[461,3638,913],{"class":471},[461,3640,492],{"class":471},[461,3642,918],{"class":471},[461,3644,597],{"class":498},[461,3646,913],{"class":471},[461,3648,505],{"class":471},[461,3650,3651,3653,3655,3657,3659,3661],{"class":463,"line":613},[461,3652,1058],{"class":471},[461,3654,1217],{"class":1061},[461,3656,913],{"class":471},[461,3658,492],{"class":471},[461,3660,673],{"class":672},[461,3662,505],{"class":471},[461,3664,3665,3667,3669,3671,3673,3675,3678,3680],{"class":463,"line":620},[461,3666,1058],{"class":471},[461,3668,1233],{"class":1061},[461,3670,913],{"class":471},[461,3672,492],{"class":471},[461,3674,918],{"class":471},[461,3676,3677],{"class":498},"ak_8f3c4b2a1e5d6f7c",[461,3679,913],{"class":471},[461,3681,505],{"class":471},[461,3683,3684,3686,3689,3691,3693,3695,3698],{"class":463,"line":627},[461,3685,1058],{"class":471},[461,3687,3688],{"class":1061},"correlationId",[461,3690,913],{"class":471},[461,3692,492],{"class":471},[461,3694,918],{"class":471},[461,3696,3697],{"class":498},"a566ef91-7765-4f59-b6f0-b9f40ce71599",[461,3699,1300],{"class":471},[461,3701,3702],{"class":463,"line":1055},[461,3703,1312],{"class":471},[461,3705,3706],{"class":463,"line":1077},[461,3707,889],{"class":471},[452,3709,3712],{"className":892,"code":3710,"filename":3711,"language":895,"meta":457,"style":457},"{\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",[439,3713,3714,3718,3737,3749,3767,3811,3855,3874,3893,3907,3926,3942,3946,3958,3978,3998,4016,4020],{"__ignoreMap":457},[461,3715,3716],{"class":463,"line":464},[461,3717,482],{"class":471},[461,3719,3720,3722,3724,3726,3728,3730,3733,3735],{"class":463,"line":485},[461,3721,906],{"class":471},[461,3723,910],{"class":909},[461,3725,913],{"class":471},[461,3727,492],{"class":471},[461,3729,918],{"class":471},[461,3731,3732],{"class":498},"error",[461,3734,913],{"class":471},[461,3736,505],{"class":471},[461,3738,3739,3741,3743,3745,3747],{"class":463,"line":508},[461,3740,906],{"class":471},[461,3742,476],{"class":909},[461,3744,913],{"class":471},[461,3746,492],{"class":471},[461,3748,756],{"class":471},[461,3750,3751,3753,3755,3757,3759,3761,3763,3765],{"class":463,"line":550},[461,3752,1058],{"class":471},[461,3754,1062],{"class":1061},[461,3756,913],{"class":471},[461,3758,492],{"class":471},[461,3760,918],{"class":471},[461,3762,499],{"class":498},[461,3764,913],{"class":471},[461,3766,505],{"class":471},[461,3768,3769,3771,3773,3775,3777,3779,3781,3783,3785,3787,3789,3791,3793,3795,3797,3799,3801,3803,3805,3807,3809],{"class":463,"line":587},[461,3770,1058],{"class":471},[461,3772,1082],{"class":1061},[461,3774,913],{"class":471},[461,3776,492],{"class":471},[461,3778,516],{"class":471},[461,3780,918],{"class":471},[461,3782,1093],{"class":672},[461,3784,913],{"class":471},[461,3786,492],{"class":471},[461,3788,918],{"class":471},[461,3790,526],{"class":498},[461,3792,913],{"class":471},[461,3794,531],{"class":471},[461,3796,918],{"class":471},[461,3798,803],{"class":672},[461,3800,913],{"class":471},[461,3802,492],{"class":471},[461,3804,918],{"class":471},[461,3806,2834],{"class":498},[461,3808,913],{"class":471},[461,3810,584],{"class":471},[461,3812,3813,3815,3817,3819,3821,3823,3825,3827,3829,3831,3833,3835,3837,3839,3841,3843,3845,3847,3849,3851,3853],{"class":463,"line":604},[461,3814,1058],{"class":471},[461,3816,1130],{"class":1061},[461,3818,913],{"class":471},[461,3820,492],{"class":471},[461,3822,516],{"class":471},[461,3824,918],{"class":471},[461,3826,1093],{"class":672},[461,3828,913],{"class":471},[461,3830,492],{"class":471},[461,3832,918],{"class":471},[461,3834,566],{"class":498},[461,3836,913],{"class":471},[461,3838,531],{"class":471},[461,3840,918],{"class":471},[461,3842,803],{"class":672},[461,3844,913],{"class":471},[461,3846,492],{"class":471},[461,3848,918],{"class":471},[461,3850,579],{"class":498},[461,3852,913],{"class":471},[461,3854,584],{"class":471},[461,3856,3857,3859,3861,3863,3865,3867,3870,3872],{"class":463,"line":613},[461,3858,1058],{"class":471},[461,3860,1176],{"class":1061},[461,3862,913],{"class":471},[461,3864,492],{"class":471},[461,3866,918],{"class":471},[461,3868,3869],{"class":498},"failure",[461,3871,913],{"class":471},[461,3873,505],{"class":471},[461,3875,3876,3878,3880,3882,3884,3886,3889,3891],{"class":463,"line":620},[461,3877,1058],{"class":471},[461,3879,1197],{"class":1061},[461,3881,913],{"class":471},[461,3883,492],{"class":471},[461,3885,918],{"class":471},[461,3887,3888],{"class":498},"Stripe error: charge already refunded",[461,3890,913],{"class":471},[461,3892,505],{"class":471},[461,3894,3895,3897,3899,3901,3903,3905],{"class":463,"line":627},[461,3896,1058],{"class":471},[461,3898,1217],{"class":1061},[461,3900,913],{"class":471},[461,3902,492],{"class":471},[461,3904,673],{"class":672},[461,3906,505],{"class":471},[461,3908,3909,3911,3913,3915,3917,3919,3922,3924],{"class":463,"line":1055},[461,3910,1058],{"class":471},[461,3912,1233],{"class":1061},[461,3914,913],{"class":471},[461,3916,492],{"class":471},[461,3918,918],{"class":471},[461,3920,3921],{"class":498},"ak_4c5d6e7f8a9b0c1d",[461,3923,913],{"class":471},[461,3925,505],{"class":471},[461,3927,3928,3930,3932,3934,3936,3938,3940],{"class":463,"line":1077},[461,3929,1058],{"class":471},[461,3931,3688],{"class":1061},[461,3933,913],{"class":471},[461,3935,492],{"class":471},[461,3937,918],{"class":471},[461,3939,3697],{"class":498},[461,3941,1300],{"class":471},[461,3943,3944],{"class":463,"line":1125},[461,3945,3418],{"class":471},[461,3947,3948,3950,3952,3954,3956],{"class":463,"line":1171},[461,3949,906],{"class":471},[461,3951,3732],{"class":909},[461,3953,913],{"class":471},[461,3955,492],{"class":471},[461,3957,756],{"class":471},[461,3959,3960,3962,3965,3967,3969,3971,3974,3976],{"class":463,"line":1192},[461,3961,1058],{"class":471},[461,3963,3964],{"class":1061},"name",[461,3966,913],{"class":471},[461,3968,492],{"class":471},[461,3970,918],{"class":471},[461,3972,3973],{"class":498},"StripeError",[461,3975,913],{"class":471},[461,3977,505],{"class":471},[461,3979,3980,3982,3985,3987,3989,3991,3994,3996],{"class":463,"line":1212},[461,3981,1058],{"class":471},[461,3983,3984],{"class":1061},"message",[461,3986,913],{"class":471},[461,3988,492],{"class":471},[461,3990,918],{"class":471},[461,3992,3993],{"class":498},"charge already refunded",[461,3995,913],{"class":471},[461,3997,505],{"class":471},[461,3999,4000,4002,4005,4007,4009,4011,4014],{"class":463,"line":1228},[461,4001,1058],{"class":471},[461,4003,4004],{"class":1061},"stack",[461,4006,913],{"class":471},[461,4008,492],{"class":471},[461,4010,918],{"class":471},[461,4012,4013],{"class":498},"...",[461,4015,1300],{"class":471},[461,4017,4018],{"class":463,"line":1249},[461,4019,1312],{"class":471},[461,4021,4022],{"class":463,"line":1263},[461,4023,889],{"class":471},[452,4025,4027],{"className":892,"code":4026,"filename":894,"language":895,"meta":457,"style":457},"{\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",[439,4028,4029,4033,4051,4063,4081,4126,4170,4188,4206,4220,4238,4254,4258],{"__ignoreMap":457},[461,4030,4031],{"class":463,"line":464},[461,4032,482],{"class":471},[461,4034,4035,4037,4039,4041,4043,4045,4047,4049],{"class":463,"line":485},[461,4036,906],{"class":471},[461,4038,910],{"class":909},[461,4040,913],{"class":471},[461,4042,492],{"class":471},[461,4044,918],{"class":471},[461,4046,921],{"class":498},[461,4048,913],{"class":471},[461,4050,505],{"class":471},[461,4052,4053,4055,4057,4059,4061],{"class":463,"line":508},[461,4054,906],{"class":471},[461,4056,476],{"class":909},[461,4058,913],{"class":471},[461,4060,492],{"class":471},[461,4062,756],{"class":471},[461,4064,4065,4067,4069,4071,4073,4075,4077,4079],{"class":463,"line":550},[461,4066,1058],{"class":471},[461,4068,1062],{"class":1061},[461,4070,913],{"class":471},[461,4072,492],{"class":471},[461,4074,918],{"class":471},[461,4076,499],{"class":498},[461,4078,913],{"class":471},[461,4080,505],{"class":471},[461,4082,4083,4085,4087,4089,4091,4093,4095,4097,4099,4101,4103,4105,4107,4109,4111,4113,4115,4117,4119,4122,4124],{"class":463,"line":587},[461,4084,1058],{"class":471},[461,4086,1082],{"class":1061},[461,4088,913],{"class":471},[461,4090,492],{"class":471},[461,4092,516],{"class":471},[461,4094,918],{"class":471},[461,4096,1093],{"class":672},[461,4098,913],{"class":471},[461,4100,492],{"class":471},[461,4102,918],{"class":471},[461,4104,1403],{"class":498},[461,4106,913],{"class":471},[461,4108,531],{"class":471},[461,4110,918],{"class":471},[461,4112,803],{"class":672},[461,4114,913],{"class":471},[461,4116,492],{"class":471},[461,4118,918],{"class":471},[461,4120,4121],{"class":498},"anonymous",[461,4123,913],{"class":471},[461,4125,584],{"class":471},[461,4127,4128,4130,4132,4134,4136,4138,4140,4142,4144,4146,4148,4150,4152,4154,4156,4158,4160,4162,4164,4166,4168],{"class":463,"line":604},[461,4129,1058],{"class":471},[461,4131,1130],{"class":1061},[461,4133,913],{"class":471},[461,4135,492],{"class":471},[461,4137,516],{"class":471},[461,4139,918],{"class":471},[461,4141,1093],{"class":672},[461,4143,913],{"class":471},[461,4145,492],{"class":471},[461,4147,918],{"class":471},[461,4149,566],{"class":498},[461,4151,913],{"class":471},[461,4153,531],{"class":471},[461,4155,918],{"class":471},[461,4157,803],{"class":672},[461,4159,913],{"class":471},[461,4161,492],{"class":471},[461,4163,918],{"class":471},[461,4165,579],{"class":498},[461,4167,913],{"class":471},[461,4169,584],{"class":471},[461,4171,4172,4174,4176,4178,4180,4182,4184,4186],{"class":463,"line":613},[461,4173,1058],{"class":471},[461,4175,1176],{"class":1061},[461,4177,913],{"class":471},[461,4179,492],{"class":471},[461,4181,918],{"class":471},[461,4183,1185],{"class":498},[461,4185,913],{"class":471},[461,4187,505],{"class":471},[461,4189,4190,4192,4194,4196,4198,4200,4202,4204],{"class":463,"line":620},[461,4191,1058],{"class":471},[461,4193,1197],{"class":1061},[461,4195,913],{"class":471},[461,4197,492],{"class":471},[461,4199,918],{"class":471},[461,4201,3381],{"class":498},[461,4203,913],{"class":471},[461,4205,505],{"class":471},[461,4207,4208,4210,4212,4214,4216,4218],{"class":463,"line":627},[461,4209,1058],{"class":471},[461,4211,1217],{"class":1061},[461,4213,913],{"class":471},[461,4215,492],{"class":471},[461,4217,673],{"class":672},[461,4219,505],{"class":471},[461,4221,4222,4224,4226,4228,4230,4232,4234,4236],{"class":463,"line":1055},[461,4223,1058],{"class":471},[461,4225,1233],{"class":1061},[461,4227,913],{"class":471},[461,4229,492],{"class":471},[461,4231,918],{"class":471},[461,4233,1242],{"class":498},[461,4235,913],{"class":471},[461,4237,505],{"class":471},[461,4239,4240,4242,4244,4246,4248,4250,4252],{"class":463,"line":1077},[461,4241,1058],{"class":471},[461,4243,3688],{"class":1061},[461,4245,913],{"class":471},[461,4247,492],{"class":471},[461,4249,918],{"class":471},[461,4251,3697],{"class":498},[461,4253,1300],{"class":471},[461,4255,4256],{"class":463,"line":1125},[461,4257,1312],{"class":471},[461,4259,4260],{"class":463,"line":1171},[461,4261,889],{"class":471},[431,4263,4264],{},"Outcome resolution:",[2288,4266,4267,4276,4295],{},[2291,4268,4269,4272,4273,472],{},[439,4270,4271],{},"fn"," resolves → ",[439,4274,4275],{},"outcome: 'success'",[2291,4277,4278,4280,4281,4284,4285,4288,4289,4292,4293,472],{},[439,4279,4271],{}," throws an ",[439,4282,4283],{},"AuditDeniedError"," (or any error with ",[439,4286,4287],{},"status === 403",") → ",[439,4290,4291],{},"outcome: 'denied'",", error message becomes ",[439,4294,1197],{},[2291,4296,4297,4298,4301],{},"Other thrown errors → ",[439,4299,4300],{},"outcome: 'failure'",", then re-thrown.",[4303,4304,4305],"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":457,"searchDepth":485,"depth":485,"links":4307},[4308,4309,4310,4312,4313,4318,4319],{"id":437,"depth":485,"text":441},{"id":686,"depth":485,"text":689},{"id":1320,"depth":485,"text":4311},"Standalone audit()",{"id":1719,"depth":485,"text":1722},{"id":1904,"depth":485,"text":1907,"children":4314},[4315,4317],{"id":2276,"depth":508,"text":4316},"defineAuditAction vs defineAuditCatalog — when to choose",{"id":2354,"depth":508,"text":2355},{"id":2460,"depth":485,"text":2463},{"id":3178,"depth":485,"text":4320},"withAudit() — auto-instrumentation","log.audit, log.audit.deny, standalone audit(), withAudit auto-instrumentation, defineAuditAction and defineAuditCatalog registries, and auditDiff change patches.","md",[4324,4327],{"label":311,"icon":314,"to":312,"color":4325,"variant":4326},"neutral","subtle",{"label":4328,"icon":324,"to":322,"color":4325,"variant":4326},"Drains & Integrity",{},{"title":316,"icon":319},{"title":426,"description":4321},"kGnwMGJGQzqO7fooGz4vi-OtN2YYQg02LjN_GAA0_cI",[4334,4336],{"title":311,"path":312,"stem":313,"description":4335,"icon":314,"children":-1},"The AuditFields type, action naming conventions, actor types, idempotency, and how the schema sits inside a regular wide event.",{"title":321,"path":322,"stem":323,"description":4337,"icon":324,"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.",1778365370141]