[{"data":1,"prerenderedAt":1769},["ShallowReactive",2],{"navigation_docs":3,"-enrichers-custom":301,"-enrichers-custom-surround":1764},[4,30,75,119,207,271,287],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F4.agent-skills","i-lucide-sparkles",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Logging","\u002Flogging","2.logging",[35,40,45,50,55,60,65,70],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F4.client-logging","i-lucide-monitor",{"title":61,"path":62,"stem":63,"icon":64},"AI SDK Integration","\u002Flogging\u002Fai-sdk","2.logging\u002F5.ai-sdk","i-simple-icons-vercel",{"title":66,"path":67,"stem":68,"icon":69},"Better Auth Integration","\u002Flogging\u002Fbetter-auth","2.logging\u002F6.better-auth","i-simple-icons-betterauth",{"title":71,"path":72,"stem":73,"icon":74},"Audit Logs","\u002Flogging\u002Faudit","2.logging\u002F7.audit","i-lucide-shield-check",{"title":76,"path":77,"stem":78,"children":79,"page":29},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[80,85,90,95,100,104,109,114],{"title":81,"path":82,"stem":83,"icon":84},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":86,"path":87,"stem":88,"icon":89},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":91,"path":92,"stem":93,"icon":94},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":96,"path":97,"stem":98,"icon":99},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":101,"path":102,"stem":103,"icon":74},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices",{"title":105,"path":106,"stem":107,"icon":108},"Performance","\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance","i-lucide-gauge",{"title":110,"path":111,"stem":112,"icon":113},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":115,"path":116,"stem":117,"icon":118},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":120,"path":121,"stem":122,"children":123,"page":29},"Frameworks","\u002Fframeworks","4.frameworks",[124,128,133,138,143,148,153,158,163,168,173,178,183,188,192,197,202],{"title":36,"path":125,"stem":126,"icon":127},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":129,"path":130,"stem":131,"icon":132},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":134,"path":135,"stem":136,"icon":137},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":139,"path":140,"stem":141,"icon":142},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":144,"path":145,"stem":146,"icon":147},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":149,"path":150,"stem":151,"icon":152},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":154,"path":155,"stem":156,"icon":157},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":159,"path":160,"stem":161,"icon":162},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":164,"path":165,"stem":166,"icon":167},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":169,"path":170,"stem":171,"icon":172},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":174,"path":175,"stem":176,"icon":177},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":179,"path":180,"stem":181,"icon":182},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":184,"path":185,"stem":186,"icon":187},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":189,"path":190,"stem":191,"icon":99},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":193,"path":194,"stem":195,"icon":196},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":198,"path":199,"stem":200,"icon":201},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F15.custom-integration","i-lucide-puzzle",{"title":203,"path":204,"stem":205,"icon":206},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":208,"path":209,"stem":210,"children":211,"page":29},"Adapters","\u002Fadapters","5.adapters",[212,216,221,226,231,236,241,246,251,256,261,266],{"title":36,"path":213,"stem":214,"icon":215},"\u002Fadapters\u002Foverview","5.adapters\u002F1.overview","i-custom-plug",{"title":217,"path":218,"stem":219,"icon":220},"Custom Adapters","\u002Fadapters\u002Fcustom","5.adapters\u002F10.custom","i-lucide-code",{"title":222,"path":223,"stem":224,"icon":225},"Pipeline","\u002Fadapters\u002Fpipeline","5.adapters\u002F11.pipeline","i-lucide-workflow",{"title":227,"path":228,"stem":229,"icon":230},"HTTP","\u002Fadapters\u002Fhttp","5.adapters\u002F12.http","i-lucide-globe",{"title":232,"path":233,"stem":234,"icon":235},"Axiom","\u002Fadapters\u002Faxiom","5.adapters\u002F2.axiom","i-custom-axiom",{"title":237,"path":238,"stem":239,"icon":240},"OTLP","\u002Fadapters\u002Fotlp","5.adapters\u002F3.otlp","i-simple-icons-opentelemetry",{"title":242,"path":243,"stem":244,"icon":245},"PostHog","\u002Fadapters\u002Fposthog","5.adapters\u002F4.posthog","i-simple-icons-posthog",{"title":247,"path":248,"stem":249,"icon":250},"Sentry","\u002Fadapters\u002Fsentry","5.adapters\u002F5.sentry","i-simple-icons-sentry",{"title":252,"path":253,"stem":254,"icon":255},"Better Stack","\u002Fadapters\u002Fbetter-stack","5.adapters\u002F6.better-stack","i-simple-icons-betterstack",{"title":257,"path":258,"stem":259,"icon":260},"File System","\u002Fadapters\u002Ffs","5.adapters\u002F7.fs","i-lucide-hard-drive",{"title":262,"path":263,"stem":264,"icon":265},"Datadog","\u002Fadapters\u002Fdatadog","5.adapters\u002F8.datadog","i-simple-icons-datadog",{"title":267,"path":268,"stem":269,"icon":270},"HyperDX","\u002Fadapters\u002Fhyperdx","5.adapters\u002F9.hyperdx","i-custom-hyperdx",{"title":272,"path":273,"stem":274,"children":275,"page":29},"Enrichers","\u002Fenrichers","6.enrichers",[276,279,283],{"title":36,"path":277,"stem":278,"icon":28},"\u002Fenrichers\u002Foverview","6.enrichers\u002F1.overview",{"title":280,"path":281,"stem":282,"icon":201},"Built-in","\u002Fenrichers\u002Fbuilt-in","6.enrichers\u002F2.built-in",{"title":284,"path":285,"stem":286,"icon":220},"Custom","\u002Fenrichers\u002Fcustom","6.enrichers\u002F3.custom",{"title":288,"path":289,"stem":290,"children":291,"page":29},"NuxtHub","\u002Fnuxthub","7.nuxthub",[292,296],{"title":36,"path":293,"stem":294,"icon":295},"\u002Fnuxthub\u002Foverview","7.nuxthub\u002F1.overview","i-lucide-database",{"title":297,"path":298,"stem":299,"icon":300},"Retention","\u002Fnuxthub\u002Fretention","7.nuxthub\u002F2.retention","i-lucide-clock",{"id":302,"title":303,"body":304,"description":1752,"extension":1753,"links":1754,"meta":1760,"navigation":1761,"path":285,"seo":1762,"stem":286,"__hash__":1763},"docs\u002F6.enrichers\u002F3.custom.md","Custom Enrichers",{"type":305,"value":306,"toc":1741},"minimark",[307,316,321,324,491,494,503,676,680,683,958,1096,1100,1103,1363,1367,1372,1482,1486,1717,1721,1737],[308,309,310,311,315],"p",{},"Write custom enrichers to add any derived context to your wide events. An enricher is a function that receives an ",[312,313,314],"code",{},"EnrichContext"," and mutates the event.",[317,318,320],"h2",{"id":319},"basic-example","Basic Example",[308,322,323],{},"Add deployment metadata to every event:",[325,326,332],"pre",{"className":327,"code":328,"filename":329,"language":330,"meta":331,"style":331},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:enrich', (ctx) => {\n    ctx.event.deploymentId = process.env.DEPLOYMENT_ID\n    ctx.event.deployedBy = process.env.DEPLOYED_BY\n  })\n})\n","server\u002Fplugins\u002Fevlog-enrich.ts","typescript","",[312,333,334,371,415,447,474,483],{"__ignoreMap":331},[335,336,339,343,346,350,354,357,361,364,368],"span",{"class":337,"line":338},"line",1,[335,340,342],{"class":341},"s7zQu","export",[335,344,345],{"class":341}," default",[335,347,349],{"class":348},"s2Zo4"," defineNitroPlugin",[335,351,353],{"class":352},"sTEyZ","(",[335,355,353],{"class":356},"sMK4o",[335,358,360],{"class":359},"sHdIc","nitroApp",[335,362,363],{"class":356},")",[335,365,367],{"class":366},"spNyl"," =>",[335,369,370],{"class":356}," {\n",[335,372,374,377,380,383,385,388,391,394,398,400,403,406,409,411,413],{"class":337,"line":373},2,[335,375,376],{"class":352},"  nitroApp",[335,378,379],{"class":356},".",[335,381,382],{"class":352},"hooks",[335,384,379],{"class":356},[335,386,387],{"class":348},"hook",[335,389,353],{"class":390},"swJcz",[335,392,393],{"class":356},"'",[335,395,397],{"class":396},"sfazB","evlog:enrich",[335,399,393],{"class":356},[335,401,402],{"class":356},",",[335,404,405],{"class":356}," (",[335,407,408],{"class":359},"ctx",[335,410,363],{"class":356},[335,412,367],{"class":366},[335,414,370],{"class":356},[335,416,418,421,423,426,428,431,434,437,439,442,444],{"class":337,"line":417},3,[335,419,420],{"class":352},"    ctx",[335,422,379],{"class":356},[335,424,425],{"class":352},"event",[335,427,379],{"class":356},[335,429,430],{"class":352},"deploymentId",[335,432,433],{"class":356}," =",[335,435,436],{"class":352}," process",[335,438,379],{"class":356},[335,440,441],{"class":352},"env",[335,443,379],{"class":356},[335,445,446],{"class":352},"DEPLOYMENT_ID\n",[335,448,450,452,454,456,458,461,463,465,467,469,471],{"class":337,"line":449},4,[335,451,420],{"class":352},[335,453,379],{"class":356},[335,455,425],{"class":352},[335,457,379],{"class":356},[335,459,460],{"class":352},"deployedBy",[335,462,433],{"class":356},[335,464,436],{"class":352},[335,466,379],{"class":356},[335,468,441],{"class":352},[335,470,379],{"class":356},[335,472,473],{"class":352},"DEPLOYED_BY\n",[335,475,477,480],{"class":337,"line":476},5,[335,478,479],{"class":356},"  }",[335,481,482],{"class":390},")\n",[335,484,486,489],{"class":337,"line":485},6,[335,487,488],{"class":356},"}",[335,490,482],{"class":352},[317,492,314],{"id":493},"enrichcontext",[308,495,496,497,499,500,502],{},"The ",[312,498,397],{}," hook receives an ",[312,501,314],{},":",[325,504,507],{"className":327,"code":505,"filename":506,"language":330,"meta":331,"style":331},"interface EnrichContext {\n  \u002F** The emitted wide event (mutable) *\u002F\n  event: WideEvent\n  \u002F** Request metadata *\u002F\n  request?: {\n    method?: string\n    path?: string\n    requestId?: string\n  }\n  \u002F** Safe HTTP request headers (sensitive headers filtered out) *\u002F\n  headers?: Record\u003Cstring, string>\n  \u002F** Response metadata *\u002F\n  response?: {\n    status?: number\n    headers?: Record\u003Cstring, string>\n  }\n}\n","enrich-context.ts",[312,508,509,520,526,536,541,551,561,571,581,587,593,618,624,634,645,665,670],{"__ignoreMap":331},[335,510,511,514,518],{"class":337,"line":338},[335,512,513],{"class":366},"interface",[335,515,517],{"class":516},"sBMFI"," EnrichContext",[335,519,370],{"class":356},[335,521,522],{"class":337,"line":373},[335,523,525],{"class":524},"sHwdD","  \u002F** The emitted wide event (mutable) *\u002F\n",[335,527,528,531,533],{"class":337,"line":417},[335,529,530],{"class":390},"  event",[335,532,502],{"class":356},[335,534,535],{"class":516}," WideEvent\n",[335,537,538],{"class":337,"line":449},[335,539,540],{"class":524},"  \u002F** Request metadata *\u002F\n",[335,542,543,546,549],{"class":337,"line":476},[335,544,545],{"class":390},"  request",[335,547,548],{"class":356},"?:",[335,550,370],{"class":356},[335,552,553,556,558],{"class":337,"line":485},[335,554,555],{"class":390},"    method",[335,557,548],{"class":356},[335,559,560],{"class":516}," string\n",[335,562,564,567,569],{"class":337,"line":563},7,[335,565,566],{"class":390},"    path",[335,568,548],{"class":356},[335,570,560],{"class":516},[335,572,574,577,579],{"class":337,"line":573},8,[335,575,576],{"class":390},"    requestId",[335,578,548],{"class":356},[335,580,560],{"class":516},[335,582,584],{"class":337,"line":583},9,[335,585,586],{"class":356},"  }\n",[335,588,590],{"class":337,"line":589},10,[335,591,592],{"class":524},"  \u002F** Safe HTTP request headers (sensitive headers filtered out) *\u002F\n",[335,594,596,599,601,604,607,610,612,615],{"class":337,"line":595},11,[335,597,598],{"class":390},"  headers",[335,600,548],{"class":356},[335,602,603],{"class":516}," Record",[335,605,606],{"class":356},"\u003C",[335,608,609],{"class":516},"string",[335,611,402],{"class":356},[335,613,614],{"class":516}," string",[335,616,617],{"class":356},">\n",[335,619,621],{"class":337,"line":620},12,[335,622,623],{"class":524},"  \u002F** Response metadata *\u002F\n",[335,625,627,630,632],{"class":337,"line":626},13,[335,628,629],{"class":390},"  response",[335,631,548],{"class":356},[335,633,370],{"class":356},[335,635,637,640,642],{"class":337,"line":636},14,[335,638,639],{"class":390},"    status",[335,641,548],{"class":356},[335,643,644],{"class":516}," number\n",[335,646,648,651,653,655,657,659,661,663],{"class":337,"line":647},15,[335,649,650],{"class":390},"    headers",[335,652,548],{"class":356},[335,654,603],{"class":516},[335,656,606],{"class":356},[335,658,609],{"class":516},[335,660,402],{"class":356},[335,662,614],{"class":516},[335,664,617],{"class":356},[335,666,668],{"class":337,"line":667},16,[335,669,586],{"class":356},[335,671,673],{"class":337,"line":672},17,[335,674,675],{"class":356},"}\n",[317,677,679],{"id":678},"factory-pattern","Factory Pattern",[308,681,682],{},"For reusable enrichers with options, use the factory pattern (same as built-in enrichers):",[325,684,687],{"className":327,"code":685,"filename":686,"language":330,"meta":331,"style":331},"import type { EnrichContext } from 'evlog'\n\ninterface TenantEnricherOptions {\n  headerName?: string\n  overwrite?: boolean\n}\n\nexport function createTenantEnricher(options: TenantEnricherOptions = {}) {\n  const headerName = options.headerName ?? 'x-tenant-id'\n\n  return (ctx: EnrichContext) => {\n    if (!options.overwrite && ctx.event.tenantId !== undefined) return\n\n    const tenantId = ctx.headers?.[headerName]\n    if (tenantId) {\n      ctx.event.tenantId = tenantId\n    }\n  }\n}\n","server\u002Futils\u002Fenrichers.ts",[312,688,689,717,723,732,741,751,755,759,785,813,817,836,880,884,912,925,943,948,953],{"__ignoreMap":331},[335,690,691,694,697,700,702,705,708,711,714],{"class":337,"line":338},[335,692,693],{"class":341},"import",[335,695,696],{"class":341}," type",[335,698,699],{"class":356}," {",[335,701,517],{"class":352},[335,703,704],{"class":356}," }",[335,706,707],{"class":341}," from",[335,709,710],{"class":356}," '",[335,712,713],{"class":396},"evlog",[335,715,716],{"class":356},"'\n",[335,718,719],{"class":337,"line":373},[335,720,722],{"emptyLinePlaceholder":721},true,"\n",[335,724,725,727,730],{"class":337,"line":417},[335,726,513],{"class":366},[335,728,729],{"class":516}," TenantEnricherOptions",[335,731,370],{"class":356},[335,733,734,737,739],{"class":337,"line":449},[335,735,736],{"class":390},"  headerName",[335,738,548],{"class":356},[335,740,560],{"class":516},[335,742,743,746,748],{"class":337,"line":476},[335,744,745],{"class":390},"  overwrite",[335,747,548],{"class":356},[335,749,750],{"class":516}," boolean\n",[335,752,753],{"class":337,"line":485},[335,754,675],{"class":356},[335,756,757],{"class":337,"line":563},[335,758,722],{"emptyLinePlaceholder":721},[335,760,761,763,766,769,771,774,776,778,780,783],{"class":337,"line":573},[335,762,342],{"class":341},[335,764,765],{"class":366}," function",[335,767,768],{"class":348}," createTenantEnricher",[335,770,353],{"class":356},[335,772,773],{"class":359},"options",[335,775,502],{"class":356},[335,777,729],{"class":516},[335,779,433],{"class":356},[335,781,782],{"class":356}," {})",[335,784,370],{"class":356},[335,786,787,790,793,795,798,800,803,806,808,811],{"class":337,"line":583},[335,788,789],{"class":366},"  const",[335,791,792],{"class":352}," headerName",[335,794,433],{"class":356},[335,796,797],{"class":352}," options",[335,799,379],{"class":356},[335,801,802],{"class":352},"headerName",[335,804,805],{"class":356}," ??",[335,807,710],{"class":356},[335,809,810],{"class":396},"x-tenant-id",[335,812,716],{"class":356},[335,814,815],{"class":337,"line":589},[335,816,722],{"emptyLinePlaceholder":721},[335,818,819,822,824,826,828,830,832,834],{"class":337,"line":595},[335,820,821],{"class":341},"  return",[335,823,405],{"class":356},[335,825,408],{"class":359},[335,827,502],{"class":356},[335,829,517],{"class":516},[335,831,363],{"class":356},[335,833,367],{"class":366},[335,835,370],{"class":356},[335,837,838,841,843,846,848,850,853,856,859,861,863,865,868,871,874,877],{"class":337,"line":620},[335,839,840],{"class":341},"    if",[335,842,405],{"class":390},[335,844,845],{"class":356},"!",[335,847,773],{"class":352},[335,849,379],{"class":356},[335,851,852],{"class":352},"overwrite",[335,854,855],{"class":356}," &&",[335,857,858],{"class":352}," ctx",[335,860,379],{"class":356},[335,862,425],{"class":352},[335,864,379],{"class":356},[335,866,867],{"class":352},"tenantId",[335,869,870],{"class":356}," !==",[335,872,873],{"class":356}," undefined",[335,875,876],{"class":390},") ",[335,878,879],{"class":341},"return\n",[335,881,882],{"class":337,"line":626},[335,883,722],{"emptyLinePlaceholder":721},[335,885,886,889,892,894,896,898,901,904,907,909],{"class":337,"line":636},[335,887,888],{"class":366},"    const",[335,890,891],{"class":352}," tenantId",[335,893,433],{"class":356},[335,895,858],{"class":352},[335,897,379],{"class":356},[335,899,900],{"class":352},"headers",[335,902,903],{"class":356},"?.",[335,905,906],{"class":390},"[",[335,908,802],{"class":352},[335,910,911],{"class":390},"]\n",[335,913,914,916,918,920,922],{"class":337,"line":647},[335,915,840],{"class":341},[335,917,405],{"class":390},[335,919,867],{"class":352},[335,921,876],{"class":390},[335,923,924],{"class":356},"{\n",[335,926,927,930,932,934,936,938,940],{"class":337,"line":667},[335,928,929],{"class":352},"      ctx",[335,931,379],{"class":356},[335,933,425],{"class":352},[335,935,379],{"class":356},[335,937,867],{"class":352},[335,939,433],{"class":356},[335,941,942],{"class":352}," tenantId\n",[335,944,945],{"class":337,"line":672},[335,946,947],{"class":356},"    }\n",[335,949,951],{"class":337,"line":950},18,[335,952,586],{"class":356},[335,954,956],{"class":337,"line":955},19,[335,957,675],{"class":356},[325,959,961],{"className":327,"code":960,"filename":329,"language":330,"meta":331,"style":331},"import { createTenantEnricher } from '~\u002Fserver\u002Futils\u002Fenrichers'\n\nexport default defineNitroPlugin((nitroApp) => {\n  const enrichTenant = createTenantEnricher({ headerName: 'x-org-id' })\n\n  nitroApp.hooks.hook('evlog:enrich', (ctx) => {\n    enrichTenant(ctx)\n  })\n})\n",[312,962,963,982,986,1006,1037,1041,1073,1084,1090],{"__ignoreMap":331},[335,964,965,967,969,971,973,975,977,980],{"class":337,"line":338},[335,966,693],{"class":341},[335,968,699],{"class":356},[335,970,768],{"class":352},[335,972,704],{"class":356},[335,974,707],{"class":341},[335,976,710],{"class":356},[335,978,979],{"class":396},"~\u002Fserver\u002Futils\u002Fenrichers",[335,981,716],{"class":356},[335,983,984],{"class":337,"line":373},[335,985,722],{"emptyLinePlaceholder":721},[335,987,988,990,992,994,996,998,1000,1002,1004],{"class":337,"line":417},[335,989,342],{"class":341},[335,991,345],{"class":341},[335,993,349],{"class":348},[335,995,353],{"class":352},[335,997,353],{"class":356},[335,999,360],{"class":359},[335,1001,363],{"class":356},[335,1003,367],{"class":366},[335,1005,370],{"class":356},[335,1007,1008,1010,1013,1015,1017,1019,1022,1024,1026,1028,1031,1033,1035],{"class":337,"line":449},[335,1009,789],{"class":366},[335,1011,1012],{"class":352}," enrichTenant",[335,1014,433],{"class":356},[335,1016,768],{"class":348},[335,1018,353],{"class":390},[335,1020,1021],{"class":356},"{",[335,1023,792],{"class":390},[335,1025,502],{"class":356},[335,1027,710],{"class":356},[335,1029,1030],{"class":396},"x-org-id",[335,1032,393],{"class":356},[335,1034,704],{"class":356},[335,1036,482],{"class":390},[335,1038,1039],{"class":337,"line":476},[335,1040,722],{"emptyLinePlaceholder":721},[335,1042,1043,1045,1047,1049,1051,1053,1055,1057,1059,1061,1063,1065,1067,1069,1071],{"class":337,"line":485},[335,1044,376],{"class":352},[335,1046,379],{"class":356},[335,1048,382],{"class":352},[335,1050,379],{"class":356},[335,1052,387],{"class":348},[335,1054,353],{"class":390},[335,1056,393],{"class":356},[335,1058,397],{"class":396},[335,1060,393],{"class":356},[335,1062,402],{"class":356},[335,1064,405],{"class":356},[335,1066,408],{"class":359},[335,1068,363],{"class":356},[335,1070,367],{"class":366},[335,1072,370],{"class":356},[335,1074,1075,1078,1080,1082],{"class":337,"line":563},[335,1076,1077],{"class":348},"    enrichTenant",[335,1079,353],{"class":390},[335,1081,408],{"class":352},[335,1083,482],{"class":390},[335,1085,1086,1088],{"class":337,"line":573},[335,1087,479],{"class":356},[335,1089,482],{"class":390},[335,1091,1092,1094],{"class":337,"line":583},[335,1093,488],{"class":356},[335,1095,482],{"class":352},[317,1097,1099],{"id":1098},"combining-with-built-in-enrichers","Combining with Built-in Enrichers",[308,1101,1102],{},"Mix custom enrichers with built-in ones:",[325,1104,1106],{"className":327,"code":1105,"filename":329,"language":330,"meta":331,"style":331},"import { createUserAgentEnricher, createGeoEnricher } from 'evlog\u002Fenrichers'\n\nexport default defineNitroPlugin((nitroApp) => {\n  const builtIn = [\n    createUserAgentEnricher(),\n    createGeoEnricher(),\n  ]\n\n  nitroApp.hooks.hook('evlog:enrich', (ctx) => {\n    \u002F\u002F Run built-in enrichers\n    for (const enricher of builtIn) enricher(ctx)\n\n    \u002F\u002F Add custom context\n    ctx.event.region = process.env.FLY_REGION ?? process.env.AWS_REGION\n    ctx.event.instance = process.env.FLY_ALLOC_ID ?? process.env.HOSTNAME\n  })\n})\n",[312,1107,1108,1133,1137,1157,1169,1180,1189,1194,1198,1230,1235,1264,1268,1273,1312,1351,1357],{"__ignoreMap":331},[335,1109,1110,1112,1114,1117,1119,1122,1124,1126,1128,1131],{"class":337,"line":338},[335,1111,693],{"class":341},[335,1113,699],{"class":356},[335,1115,1116],{"class":352}," createUserAgentEnricher",[335,1118,402],{"class":356},[335,1120,1121],{"class":352}," createGeoEnricher",[335,1123,704],{"class":356},[335,1125,707],{"class":341},[335,1127,710],{"class":356},[335,1129,1130],{"class":396},"evlog\u002Fenrichers",[335,1132,716],{"class":356},[335,1134,1135],{"class":337,"line":373},[335,1136,722],{"emptyLinePlaceholder":721},[335,1138,1139,1141,1143,1145,1147,1149,1151,1153,1155],{"class":337,"line":417},[335,1140,342],{"class":341},[335,1142,345],{"class":341},[335,1144,349],{"class":348},[335,1146,353],{"class":352},[335,1148,353],{"class":356},[335,1150,360],{"class":359},[335,1152,363],{"class":356},[335,1154,367],{"class":366},[335,1156,370],{"class":356},[335,1158,1159,1161,1164,1166],{"class":337,"line":449},[335,1160,789],{"class":366},[335,1162,1163],{"class":352}," builtIn",[335,1165,433],{"class":356},[335,1167,1168],{"class":390}," [\n",[335,1170,1171,1174,1177],{"class":337,"line":476},[335,1172,1173],{"class":348},"    createUserAgentEnricher",[335,1175,1176],{"class":390},"()",[335,1178,1179],{"class":356},",\n",[335,1181,1182,1185,1187],{"class":337,"line":485},[335,1183,1184],{"class":348},"    createGeoEnricher",[335,1186,1176],{"class":390},[335,1188,1179],{"class":356},[335,1190,1191],{"class":337,"line":563},[335,1192,1193],{"class":390},"  ]\n",[335,1195,1196],{"class":337,"line":573},[335,1197,722],{"emptyLinePlaceholder":721},[335,1199,1200,1202,1204,1206,1208,1210,1212,1214,1216,1218,1220,1222,1224,1226,1228],{"class":337,"line":583},[335,1201,376],{"class":352},[335,1203,379],{"class":356},[335,1205,382],{"class":352},[335,1207,379],{"class":356},[335,1209,387],{"class":348},[335,1211,353],{"class":390},[335,1213,393],{"class":356},[335,1215,397],{"class":396},[335,1217,393],{"class":356},[335,1219,402],{"class":356},[335,1221,405],{"class":356},[335,1223,408],{"class":359},[335,1225,363],{"class":356},[335,1227,367],{"class":366},[335,1229,370],{"class":356},[335,1231,1232],{"class":337,"line":589},[335,1233,1234],{"class":524},"    \u002F\u002F Run built-in enrichers\n",[335,1236,1237,1240,1242,1245,1248,1251,1253,1255,1258,1260,1262],{"class":337,"line":595},[335,1238,1239],{"class":341},"    for",[335,1241,405],{"class":390},[335,1243,1244],{"class":366},"const",[335,1246,1247],{"class":352}," enricher",[335,1249,1250],{"class":356}," of",[335,1252,1163],{"class":352},[335,1254,876],{"class":390},[335,1256,1257],{"class":348},"enricher",[335,1259,353],{"class":390},[335,1261,408],{"class":352},[335,1263,482],{"class":390},[335,1265,1266],{"class":337,"line":620},[335,1267,722],{"emptyLinePlaceholder":721},[335,1269,1270],{"class":337,"line":626},[335,1271,1272],{"class":524},"    \u002F\u002F Add custom context\n",[335,1274,1275,1277,1279,1281,1283,1286,1288,1290,1292,1294,1296,1299,1301,1303,1305,1307,1309],{"class":337,"line":636},[335,1276,420],{"class":352},[335,1278,379],{"class":356},[335,1280,425],{"class":352},[335,1282,379],{"class":356},[335,1284,1285],{"class":352},"region",[335,1287,433],{"class":356},[335,1289,436],{"class":352},[335,1291,379],{"class":356},[335,1293,441],{"class":352},[335,1295,379],{"class":356},[335,1297,1298],{"class":352},"FLY_REGION",[335,1300,805],{"class":356},[335,1302,436],{"class":352},[335,1304,379],{"class":356},[335,1306,441],{"class":352},[335,1308,379],{"class":356},[335,1310,1311],{"class":352},"AWS_REGION\n",[335,1313,1314,1316,1318,1320,1322,1325,1327,1329,1331,1333,1335,1338,1340,1342,1344,1346,1348],{"class":337,"line":647},[335,1315,420],{"class":352},[335,1317,379],{"class":356},[335,1319,425],{"class":352},[335,1321,379],{"class":356},[335,1323,1324],{"class":352},"instance",[335,1326,433],{"class":356},[335,1328,436],{"class":352},[335,1330,379],{"class":356},[335,1332,441],{"class":352},[335,1334,379],{"class":356},[335,1336,1337],{"class":352},"FLY_ALLOC_ID",[335,1339,805],{"class":356},[335,1341,436],{"class":352},[335,1343,379],{"class":356},[335,1345,441],{"class":352},[335,1347,379],{"class":356},[335,1349,1350],{"class":352},"HOSTNAME\n",[335,1352,1353,1355],{"class":337,"line":667},[335,1354,479],{"class":356},[335,1356,482],{"class":390},[335,1358,1359,1361],{"class":337,"line":672},[335,1360,488],{"class":356},[335,1362,482],{"class":352},[317,1364,1366],{"id":1365},"more-examples","More Examples",[1368,1369,1371],"h3",{"id":1370},"feature-flags","Feature Flags",[325,1373,1375],{"className":327,"code":1374,"filename":329,"language":330,"meta":331,"style":331},"nitroApp.hooks.hook('evlog:enrich', (ctx) => {\n  ctx.event.featureFlags = {\n    newCheckout: isEnabled('new-checkout'),\n    betaApi: isEnabled('beta-api'),\n  }\n})\n",[312,1376,1377,1409,1427,1450,1472,1476],{"__ignoreMap":331},[335,1378,1379,1381,1383,1385,1387,1389,1391,1393,1395,1397,1399,1401,1403,1405,1407],{"class":337,"line":338},[335,1380,360],{"class":352},[335,1382,379],{"class":356},[335,1384,382],{"class":352},[335,1386,379],{"class":356},[335,1388,387],{"class":348},[335,1390,353],{"class":352},[335,1392,393],{"class":356},[335,1394,397],{"class":396},[335,1396,393],{"class":356},[335,1398,402],{"class":356},[335,1400,405],{"class":356},[335,1402,408],{"class":359},[335,1404,363],{"class":356},[335,1406,367],{"class":366},[335,1408,370],{"class":356},[335,1410,1411,1414,1416,1418,1420,1423,1425],{"class":337,"line":373},[335,1412,1413],{"class":352},"  ctx",[335,1415,379],{"class":356},[335,1417,425],{"class":352},[335,1419,379],{"class":356},[335,1421,1422],{"class":352},"featureFlags",[335,1424,433],{"class":356},[335,1426,370],{"class":356},[335,1428,1429,1432,1434,1437,1439,1441,1444,1446,1448],{"class":337,"line":417},[335,1430,1431],{"class":390},"    newCheckout",[335,1433,502],{"class":356},[335,1435,1436],{"class":348}," isEnabled",[335,1438,353],{"class":390},[335,1440,393],{"class":356},[335,1442,1443],{"class":396},"new-checkout",[335,1445,393],{"class":356},[335,1447,363],{"class":390},[335,1449,1179],{"class":356},[335,1451,1452,1455,1457,1459,1461,1463,1466,1468,1470],{"class":337,"line":449},[335,1453,1454],{"class":390},"    betaApi",[335,1456,502],{"class":356},[335,1458,1436],{"class":348},[335,1460,353],{"class":390},[335,1462,393],{"class":356},[335,1464,1465],{"class":396},"beta-api",[335,1467,393],{"class":356},[335,1469,363],{"class":390},[335,1471,1179],{"class":356},[335,1473,1474],{"class":337,"line":476},[335,1475,586],{"class":356},[335,1477,1478,1480],{"class":337,"line":485},[335,1479,488],{"class":356},[335,1481,482],{"class":352},[1368,1483,1485],{"id":1484},"response-time-classification","Response Time Classification",[325,1487,1489],{"className":327,"code":1488,"filename":329,"language":330,"meta":331,"style":331},"nitroApp.hooks.hook('evlog:enrich', (ctx) => {\n  const duration = ctx.event.duration as number | undefined\n  if (duration === undefined) return\n\n  if (duration \u003C 100) ctx.event.performanceTier = 'fast'\n  else if (duration \u003C 500) ctx.event.performanceTier = 'normal'\n  else if (duration \u003C 2000) ctx.event.performanceTier = 'slow'\n  else ctx.event.performanceTier = 'critical'\n})\n",[312,1490,1491,1523,1555,1573,1577,1614,1652,1688,1711],{"__ignoreMap":331},[335,1492,1493,1495,1497,1499,1501,1503,1505,1507,1509,1511,1513,1515,1517,1519,1521],{"class":337,"line":338},[335,1494,360],{"class":352},[335,1496,379],{"class":356},[335,1498,382],{"class":352},[335,1500,379],{"class":356},[335,1502,387],{"class":348},[335,1504,353],{"class":352},[335,1506,393],{"class":356},[335,1508,397],{"class":396},[335,1510,393],{"class":356},[335,1512,402],{"class":356},[335,1514,405],{"class":356},[335,1516,408],{"class":359},[335,1518,363],{"class":356},[335,1520,367],{"class":366},[335,1522,370],{"class":356},[335,1524,1525,1527,1530,1532,1534,1536,1538,1540,1543,1546,1549,1552],{"class":337,"line":373},[335,1526,789],{"class":366},[335,1528,1529],{"class":352}," duration",[335,1531,433],{"class":356},[335,1533,858],{"class":352},[335,1535,379],{"class":356},[335,1537,425],{"class":352},[335,1539,379],{"class":356},[335,1541,1542],{"class":352},"duration",[335,1544,1545],{"class":341}," as",[335,1547,1548],{"class":516}," number",[335,1550,1551],{"class":356}," |",[335,1553,1554],{"class":516}," undefined\n",[335,1556,1557,1560,1562,1564,1567,1569,1571],{"class":337,"line":417},[335,1558,1559],{"class":341},"  if",[335,1561,405],{"class":390},[335,1563,1542],{"class":352},[335,1565,1566],{"class":356}," ===",[335,1568,873],{"class":356},[335,1570,876],{"class":390},[335,1572,879],{"class":341},[335,1574,1575],{"class":337,"line":449},[335,1576,722],{"emptyLinePlaceholder":721},[335,1578,1579,1581,1583,1585,1588,1592,1594,1596,1598,1600,1602,1605,1607,1609,1612],{"class":337,"line":476},[335,1580,1559],{"class":341},[335,1582,405],{"class":390},[335,1584,1542],{"class":352},[335,1586,1587],{"class":356}," \u003C",[335,1589,1591],{"class":1590},"sbssI"," 100",[335,1593,876],{"class":390},[335,1595,408],{"class":352},[335,1597,379],{"class":356},[335,1599,425],{"class":352},[335,1601,379],{"class":356},[335,1603,1604],{"class":352},"performanceTier",[335,1606,433],{"class":356},[335,1608,710],{"class":356},[335,1610,1611],{"class":396},"fast",[335,1613,716],{"class":356},[335,1615,1616,1619,1622,1624,1626,1628,1631,1633,1635,1637,1639,1641,1643,1645,1647,1650],{"class":337,"line":485},[335,1617,1618],{"class":341},"  else",[335,1620,1621],{"class":341}," if",[335,1623,405],{"class":390},[335,1625,1542],{"class":352},[335,1627,1587],{"class":356},[335,1629,1630],{"class":1590}," 500",[335,1632,876],{"class":390},[335,1634,408],{"class":352},[335,1636,379],{"class":356},[335,1638,425],{"class":352},[335,1640,379],{"class":356},[335,1642,1604],{"class":352},[335,1644,433],{"class":356},[335,1646,710],{"class":356},[335,1648,1649],{"class":396},"normal",[335,1651,716],{"class":356},[335,1653,1654,1656,1658,1660,1662,1664,1667,1669,1671,1673,1675,1677,1679,1681,1683,1686],{"class":337,"line":563},[335,1655,1618],{"class":341},[335,1657,1621],{"class":341},[335,1659,405],{"class":390},[335,1661,1542],{"class":352},[335,1663,1587],{"class":356},[335,1665,1666],{"class":1590}," 2000",[335,1668,876],{"class":390},[335,1670,408],{"class":352},[335,1672,379],{"class":356},[335,1674,425],{"class":352},[335,1676,379],{"class":356},[335,1678,1604],{"class":352},[335,1680,433],{"class":356},[335,1682,710],{"class":356},[335,1684,1685],{"class":396},"slow",[335,1687,716],{"class":356},[335,1689,1690,1692,1694,1696,1698,1700,1702,1704,1706,1709],{"class":337,"line":573},[335,1691,1618],{"class":341},[335,1693,858],{"class":352},[335,1695,379],{"class":356},[335,1697,425],{"class":352},[335,1699,379],{"class":356},[335,1701,1604],{"class":352},[335,1703,433],{"class":356},[335,1705,710],{"class":356},[335,1707,1708],{"class":396},"critical",[335,1710,716],{"class":356},[335,1712,1713,1715],{"class":337,"line":583},[335,1714,488],{"class":356},[335,1716,482],{"class":352},[317,1718,1720],{"id":1719},"next-steps","Next Steps",[1722,1723,1724,1732],"ul",{},[1725,1726,1727,1731],"li",{},[1728,1729,1730],"a",{"href":281},"Built-in Enrichers"," - See all available built-in enrichers",[1725,1733,1734,1736],{},[1728,1735,208],{"href":213}," - Send enriched events to external services",[1738,1739,1740],"style",{},"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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}",{"title":331,"searchDepth":373,"depth":373,"links":1742},[1743,1744,1745,1746,1747,1751],{"id":319,"depth":373,"text":320},{"id":493,"depth":373,"text":314},{"id":678,"depth":373,"text":679},{"id":1098,"depth":373,"text":1099},{"id":1365,"depth":373,"text":1366,"children":1748},[1749,1750],{"id":1370,"depth":417,"text":1371},{"id":1484,"depth":417,"text":1485},{"id":1719,"depth":373,"text":1720},"Write custom enrichers to add derived context to your wide events. Add deployment metadata, tenant IDs, feature flags, or any computed data.","md",[1755,1758],{"label":1730,"icon":201,"to":281,"color":1756,"variant":1757},"neutral","subtle",{"label":1759,"icon":28,"to":277,"color":1756,"variant":1757},"Enrichers Overview",{},{"title":284,"icon":220},{"title":303,"description":1752},"nToRn37xcPhI6soTJJXKID7tz3A6NrSUEybNeItg8-8",[1765,1767],{"title":280,"path":281,"stem":282,"description":1766,"icon":201,"children":-1},"Reference for all built-in evlog enrichers. Parse user agents, extract geo data, measure request sizes, and capture trace context automatically.",{"title":36,"path":293,"stem":294,"description":1768,"icon":295,"children":-1},"Self-hosted log retention for evlog using NuxtHub database storage. Store, query, and automatically clean up your structured logs with zero external dependencies.",1777047261417]