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