[{"data":1,"prerenderedAt":1761},["ShallowReactive",2],{"navigation_docs":3,"-enrichers-built-in":253,"-enrichers-built-in-surround":1756},[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":1744,"extension":1745,"links":1746,"meta":1752,"navigation":1753,"path":233,"seo":1754,"stem":234,"__hash__":1755},"docs\u002F5.enrichers\u002F2.built-in.md","Built-in Enrichers",{"type":257,"value":258,"toc":1736},"minimark",[259,272,347,411,416,423,433,457,462,623,628,815,821,827,831,834,841,859,863,954,959,1021,1058,1062,1069,1076,1094,1098,1140,1144,1204,1214,1218,1228,1241,1259,1263,1329,1333,1456,1463,1476,1480,1483,1713,1717,1732],[260,261,262,263,267,268,271],"p",{},"All built-in enrichers are exported from ",[264,265,266],"code",{},"evlog\u002Fenrichers",". Each enricher is a factory function that returns an ",[264,269,270],{},"(ctx: EnrichContext) => void"," callback.",[273,274,275],"code-collapse",{},[276,277,283],"pre",{"className":278,"code":279,"filename":280,"language":281,"meta":282,"style":282},"language-txt shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Add all built-in enrichers to my evlog setup.\n\n1. Identify which framework I'm using and follow its evlog integration pattern\n2. Import createUserAgentEnricher, createGeoEnricher, createRequestSizeEnricher, and createTraceContextEnricher from 'evlog\u002Fenrichers'\n3. Wire the enrichers into my framework's enrich configuration\n4. Enrichers add userAgent, geo, requestSize, and traceContext fields to wide events\n5. All enrichers accept { overwrite?: boolean } - defaults to false to preserve user-set data\n\nEnricher docs: https:\u002F\u002Fwww.evlog.dev\u002Fenrichers\u002Fbuilt-in\nFramework setup: https:\u002F\u002Fwww.evlog.dev\u002Fframeworks\n","Prompt","txt","",[264,284,285,293,300,306,312,318,324,330,335,341],{"__ignoreMap":282},[286,287,290],"span",{"class":288,"line":289},"line",1,[286,291,292],{},"Add all built-in enrichers to my evlog setup.\n",[286,294,296],{"class":288,"line":295},2,[286,297,299],{"emptyLinePlaceholder":298},true,"\n",[286,301,303],{"class":288,"line":302},3,[286,304,305],{},"1. Identify which framework I'm using and follow its evlog integration pattern\n",[286,307,309],{"class":288,"line":308},4,[286,310,311],{},"2. Import createUserAgentEnricher, createGeoEnricher, createRequestSizeEnricher, and createTraceContextEnricher from 'evlog\u002Fenrichers'\n",[286,313,315],{"class":288,"line":314},5,[286,316,317],{},"3. Wire the enrichers into my framework's enrich configuration\n",[286,319,321],{"class":288,"line":320},6,[286,322,323],{},"4. Enrichers add userAgent, geo, requestSize, and traceContext fields to wide events\n",[286,325,327],{"class":288,"line":326},7,[286,328,329],{},"5. All enrichers accept { overwrite?: boolean } - defaults to false to preserve user-set data\n",[286,331,333],{"class":288,"line":332},8,[286,334,299],{"emptyLinePlaceholder":298},[286,336,338],{"class":288,"line":337},9,[286,339,340],{},"Enricher docs: https:\u002F\u002Fwww.evlog.dev\u002Fenrichers\u002Fbuilt-in\n",[286,342,344],{"class":288,"line":343},10,[286,345,346],{},"Framework setup: https:\u002F\u002Fwww.evlog.dev\u002Fframeworks\n",[276,348,352],{"className":349,"code":350,"language":351,"meta":282,"style":282},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import {\n  createUserAgentEnricher,\n  createGeoEnricher,\n  createRequestSizeEnricher,\n  createTraceContextEnricher,\n} from 'evlog\u002Fenrichers'\n","typescript",[264,353,354,364,373,380,387,394],{"__ignoreMap":282},[286,355,356,360],{"class":288,"line":289},[286,357,359],{"class":358},"s7zQu","import",[286,361,363],{"class":362},"sMK4o"," {\n",[286,365,366,370],{"class":288,"line":295},[286,367,369],{"class":368},"sTEyZ","  createUserAgentEnricher",[286,371,372],{"class":362},",\n",[286,374,375,378],{"class":288,"line":302},[286,376,377],{"class":368},"  createGeoEnricher",[286,379,372],{"class":362},[286,381,382,385],{"class":288,"line":308},[286,383,384],{"class":368},"  createRequestSizeEnricher",[286,386,372],{"class":362},[286,388,389,392],{"class":288,"line":314},[286,390,391],{"class":368},"  createTraceContextEnricher",[286,393,372],{"class":362},[286,395,396,399,402,405,408],{"class":288,"line":320},[286,397,398],{"class":362},"}",[286,400,401],{"class":358}," from",[286,403,404],{"class":362}," '",[286,406,266],{"class":407},"sfazB",[286,409,410],{"class":362},"'\n",[412,413,415],"h2",{"id":414},"user-agent","User Agent",[260,417,418,419,422],{},"Parse browser, OS, and device type from the ",[264,420,421],{},"User-Agent"," header.",[260,424,425,429,430],{},[426,427,428],"strong",{},"Sets:"," ",[264,431,432],{},"event.userAgent",[276,434,436],{"className":349,"code":435,"language":351,"meta":282,"style":282},"const enrich = createUserAgentEnricher()\n",[264,437,438],{"__ignoreMap":282},[286,439,440,444,447,450,454],{"class":288,"line":289},[286,441,443],{"class":442},"spNyl","const",[286,445,446],{"class":368}," enrich ",[286,448,449],{"class":362},"=",[286,451,453],{"class":452},"s2Zo4"," createUserAgentEnricher",[286,455,456],{"class":368},"()\n",[260,458,459],{},[426,460,461],{},"Output shape:",[276,463,465],{"className":349,"code":464,"language":351,"meta":282,"style":282},"interface UserAgentInfo {\n  raw: string                                      \u002F\u002F Original User-Agent string\n  browser?: { name: string; version?: string }     \u002F\u002F Chrome, Firefox, Safari, Edge\n  os?: { name: string; version?: string }          \u002F\u002F Windows, macOS, iOS, Android, Linux\n  device?: { type: 'mobile' | 'tablet' | 'desktop' | 'bot' | 'unknown' }\n}\n",[264,466,467,478,494,528,556,618],{"__ignoreMap":282},[286,468,469,472,476],{"class":288,"line":289},[286,470,471],{"class":442},"interface",[286,473,475],{"class":474},"sBMFI"," UserAgentInfo",[286,477,363],{"class":362},[286,479,480,484,487,490],{"class":288,"line":295},[286,481,483],{"class":482},"swJcz","  raw",[286,485,486],{"class":362},":",[286,488,489],{"class":474}," string",[286,491,493],{"class":492},"sHwdD","                                      \u002F\u002F Original User-Agent string\n",[286,495,496,499,502,505,508,510,512,515,518,520,522,525],{"class":288,"line":302},[286,497,498],{"class":482},"  browser",[286,500,501],{"class":362},"?:",[286,503,504],{"class":362}," {",[286,506,507],{"class":482}," name",[286,509,486],{"class":362},[286,511,489],{"class":474},[286,513,514],{"class":362},";",[286,516,517],{"class":482}," version",[286,519,501],{"class":362},[286,521,489],{"class":474},[286,523,524],{"class":362}," }",[286,526,527],{"class":492},"     \u002F\u002F Chrome, Firefox, Safari, Edge\n",[286,529,530,533,535,537,539,541,543,545,547,549,551,553],{"class":288,"line":308},[286,531,532],{"class":482},"  os",[286,534,501],{"class":362},[286,536,504],{"class":362},[286,538,507],{"class":482},[286,540,486],{"class":362},[286,542,489],{"class":474},[286,544,514],{"class":362},[286,546,517],{"class":482},[286,548,501],{"class":362},[286,550,489],{"class":474},[286,552,524],{"class":362},[286,554,555],{"class":492},"          \u002F\u002F Windows, macOS, iOS, Android, Linux\n",[286,557,558,561,563,565,568,570,572,575,578,581,583,586,588,590,592,595,597,599,601,604,606,608,610,613,615],{"class":288,"line":314},[286,559,560],{"class":482},"  device",[286,562,501],{"class":362},[286,564,504],{"class":362},[286,566,567],{"class":482}," type",[286,569,486],{"class":362},[286,571,404],{"class":362},[286,573,574],{"class":407},"mobile",[286,576,577],{"class":362},"'",[286,579,580],{"class":362}," |",[286,582,404],{"class":362},[286,584,585],{"class":407},"tablet",[286,587,577],{"class":362},[286,589,580],{"class":362},[286,591,404],{"class":362},[286,593,594],{"class":407},"desktop",[286,596,577],{"class":362},[286,598,580],{"class":362},[286,600,404],{"class":362},[286,602,603],{"class":407},"bot",[286,605,577],{"class":362},[286,607,580],{"class":362},[286,609,404],{"class":362},[286,611,612],{"class":407},"unknown",[286,614,577],{"class":362},[286,616,617],{"class":362}," }\n",[286,619,620],{"class":288,"line":320},[286,621,622],{"class":362},"}\n",[260,624,625],{},[426,626,627],{},"Example output:",[276,629,633],{"className":630,"code":631,"language":632,"meta":282,"style":282},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"userAgent\": {\n    \"raw\": \"Mozilla\u002F5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit\u002F537.36 Chrome\u002F120.0.0.0\",\n    \"browser\": { \"name\": \"Chrome\", \"version\": \"120.0.0.0\" },\n    \"os\": { \"name\": \"macOS\", \"version\": \"10.15.7\" },\n    \"device\": { \"type\": \"desktop\" }\n  }\n}\n","json",[264,634,635,640,655,677,729,776,806,811],{"__ignoreMap":282},[286,636,637],{"class":288,"line":289},[286,638,639],{"class":362},"{\n",[286,641,642,645,648,651,653],{"class":288,"line":295},[286,643,644],{"class":362},"  \"",[286,646,647],{"class":442},"userAgent",[286,649,650],{"class":362},"\"",[286,652,486],{"class":362},[286,654,363],{"class":362},[286,656,657,660,663,665,667,670,673,675],{"class":288,"line":302},[286,658,659],{"class":362},"    \"",[286,661,662],{"class":474},"raw",[286,664,650],{"class":362},[286,666,486],{"class":362},[286,668,669],{"class":362}," \"",[286,671,672],{"class":407},"Mozilla\u002F5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit\u002F537.36 Chrome\u002F120.0.0.0",[286,674,650],{"class":362},[286,676,372],{"class":362},[286,678,679,681,684,686,688,690,692,696,698,700,702,705,707,710,712,715,717,719,721,724,726],{"class":288,"line":308},[286,680,659],{"class":362},[286,682,683],{"class":474},"browser",[286,685,650],{"class":362},[286,687,486],{"class":362},[286,689,504],{"class":362},[286,691,669],{"class":362},[286,693,695],{"class":694},"sbssI","name",[286,697,650],{"class":362},[286,699,486],{"class":362},[286,701,669],{"class":362},[286,703,704],{"class":407},"Chrome",[286,706,650],{"class":362},[286,708,709],{"class":362},",",[286,711,669],{"class":362},[286,713,714],{"class":694},"version",[286,716,650],{"class":362},[286,718,486],{"class":362},[286,720,669],{"class":362},[286,722,723],{"class":407},"120.0.0.0",[286,725,650],{"class":362},[286,727,728],{"class":362}," },\n",[286,730,731,733,736,738,740,742,744,746,748,750,752,755,757,759,761,763,765,767,769,772,774],{"class":288,"line":314},[286,732,659],{"class":362},[286,734,735],{"class":474},"os",[286,737,650],{"class":362},[286,739,486],{"class":362},[286,741,504],{"class":362},[286,743,669],{"class":362},[286,745,695],{"class":694},[286,747,650],{"class":362},[286,749,486],{"class":362},[286,751,669],{"class":362},[286,753,754],{"class":407},"macOS",[286,756,650],{"class":362},[286,758,709],{"class":362},[286,760,669],{"class":362},[286,762,714],{"class":694},[286,764,650],{"class":362},[286,766,486],{"class":362},[286,768,669],{"class":362},[286,770,771],{"class":407},"10.15.7",[286,773,650],{"class":362},[286,775,728],{"class":362},[286,777,778,780,783,785,787,789,791,794,796,798,800,802,804],{"class":288,"line":320},[286,779,659],{"class":362},[286,781,782],{"class":474},"device",[286,784,650],{"class":362},[286,786,486],{"class":362},[286,788,504],{"class":362},[286,790,669],{"class":362},[286,792,793],{"class":694},"type",[286,795,650],{"class":362},[286,797,486],{"class":362},[286,799,669],{"class":362},[286,801,594],{"class":407},[286,803,650],{"class":362},[286,805,617],{"class":362},[286,807,808],{"class":288,"line":326},[286,809,810],{"class":362},"  }\n",[286,812,813],{"class":288,"line":332},[286,814,622],{"class":362},[260,816,817,820],{},[426,818,819],{},"Detected browsers:"," Edge, Chrome, Firefox, Safari (checked in order, Edge before Chrome to avoid false matches).",[260,822,823,826],{},[426,824,825],{},"Detected devices:"," Bot (crawlers, spiders), Tablet (iPad), Mobile (iPhone, Android phones), Desktop (fallback).",[412,828,830],{"id":829},"geo","Geo",[260,832,833],{},"Extract geographic data from platform-injected headers.",[260,835,836,429,838],{},[426,837,428],{},[264,839,840],{},"event.geo",[276,842,844],{"className":349,"code":843,"language":351,"meta":282,"style":282},"const enrich = createGeoEnricher()\n",[264,845,846],{"__ignoreMap":282},[286,847,848,850,852,854,857],{"class":288,"line":289},[286,849,443],{"class":442},[286,851,446],{"class":368},[286,853,449],{"class":362},[286,855,856],{"class":452}," createGeoEnricher",[286,858,456],{"class":368},[260,860,861],{},[426,862,461],{},[276,864,866],{"className":349,"code":865,"language":351,"meta":282,"style":282},"interface GeoInfo {\n  country?: string      \u002F\u002F ISO country code (e.g., \"US\", \"FR\")\n  region?: string       \u002F\u002F Region\u002Fstate name\n  regionCode?: string   \u002F\u002F Region code\n  city?: string         \u002F\u002F City name\n  latitude?: number     \u002F\u002F Decimal latitude\n  longitude?: number    \u002F\u002F Decimal longitude\n}\n",[264,867,868,877,889,901,913,925,938,950],{"__ignoreMap":282},[286,869,870,872,875],{"class":288,"line":289},[286,871,471],{"class":442},[286,873,874],{"class":474}," GeoInfo",[286,876,363],{"class":362},[286,878,879,882,884,886],{"class":288,"line":295},[286,880,881],{"class":482},"  country",[286,883,501],{"class":362},[286,885,489],{"class":474},[286,887,888],{"class":492},"      \u002F\u002F ISO country code (e.g., \"US\", \"FR\")\n",[286,890,891,894,896,898],{"class":288,"line":302},[286,892,893],{"class":482},"  region",[286,895,501],{"class":362},[286,897,489],{"class":474},[286,899,900],{"class":492},"       \u002F\u002F Region\u002Fstate name\n",[286,902,903,906,908,910],{"class":288,"line":308},[286,904,905],{"class":482},"  regionCode",[286,907,501],{"class":362},[286,909,489],{"class":474},[286,911,912],{"class":492},"   \u002F\u002F Region code\n",[286,914,915,918,920,922],{"class":288,"line":314},[286,916,917],{"class":482},"  city",[286,919,501],{"class":362},[286,921,489],{"class":474},[286,923,924],{"class":492},"         \u002F\u002F City name\n",[286,926,927,930,932,935],{"class":288,"line":320},[286,928,929],{"class":482},"  latitude",[286,931,501],{"class":362},[286,933,934],{"class":474}," number",[286,936,937],{"class":492},"     \u002F\u002F Decimal latitude\n",[286,939,940,943,945,947],{"class":288,"line":326},[286,941,942],{"class":482},"  longitude",[286,944,501],{"class":362},[286,946,934],{"class":474},[286,948,949],{"class":492},"    \u002F\u002F Decimal longitude\n",[286,951,952],{"class":288,"line":332},[286,953,622],{"class":362},[260,955,956],{},[426,957,958],{},"Supported platforms:",[960,961,962,978],"table",{},[963,964,965],"thead",{},[966,967,968,972,975],"tr",{},[969,970,971],"th",{},"Platform",[969,973,974],{},"Headers",[969,976,977],{},"Coverage",[979,980,981,1008],"tbody",{},[966,982,983,987,1005],{},[984,985,986],"td",{},"Vercel",[984,988,989,992,993,992,996,992,999,992,1002],{},[264,990,991],{},"x-vercel-ip-country",", ",[264,994,995],{},"x-vercel-ip-country-region",[264,997,998],{},"x-vercel-ip-city",[264,1000,1001],{},"x-vercel-ip-latitude",[264,1003,1004],{},"x-vercel-ip-longitude",[984,1006,1007],{},"Full",[966,1009,1010,1013,1018],{},[984,1011,1012],{},"Cloudflare",[984,1014,1015],{},[264,1016,1017],{},"cf-ipcountry",[984,1019,1020],{},"Country only",[1022,1023,1025,1028,1029,1031,1032,992,1035,992,1038,1041,1042,1045,1046,1050,1051,1053,1054,1057],"callout",{"color":1024,"icon":13},"info",[426,1026,1027],{},"Cloudflare note:"," Only ",[264,1030,1017],{}," is a standard Cloudflare HTTP header. Other geo fields (",[264,1033,1034],{},"city",[264,1036,1037],{},"region",[264,1039,1040],{},"latitude",", etc.) are properties of ",[264,1043,1044],{},"request.cf",", which is not exposed as headers. For full Cloudflare geo data, write a ",[1047,1048,1049],"a",{"href":237},"custom enricher"," that reads ",[264,1052,1044],{},", or use a Workers middleware to copy ",[264,1055,1056],{},"cf"," properties into custom headers.",[412,1059,1061],{"id":1060},"request-size","Request Size",[260,1063,1064,1065,1068],{},"Capture request and response payload sizes from ",[264,1066,1067],{},"Content-Length"," headers.",[260,1070,1071,429,1073],{},[426,1072,428],{},[264,1074,1075],{},"event.requestSize",[276,1077,1079],{"className":349,"code":1078,"language":351,"meta":282,"style":282},"const enrich = createRequestSizeEnricher()\n",[264,1080,1081],{"__ignoreMap":282},[286,1082,1083,1085,1087,1089,1092],{"class":288,"line":289},[286,1084,443],{"class":442},[286,1086,446],{"class":368},[286,1088,449],{"class":362},[286,1090,1091],{"class":452}," createRequestSizeEnricher",[286,1093,456],{"class":368},[260,1095,1096],{},[426,1097,461],{},[276,1099,1101],{"className":349,"code":1100,"language":351,"meta":282,"style":282},"interface RequestSizeInfo {\n  requestBytes?: number    \u002F\u002F Request Content-Length\n  responseBytes?: number   \u002F\u002F Response Content-Length\n}\n",[264,1102,1103,1112,1124,1136],{"__ignoreMap":282},[286,1104,1105,1107,1110],{"class":288,"line":289},[286,1106,471],{"class":442},[286,1108,1109],{"class":474}," RequestSizeInfo",[286,1111,363],{"class":362},[286,1113,1114,1117,1119,1121],{"class":288,"line":295},[286,1115,1116],{"class":482},"  requestBytes",[286,1118,501],{"class":362},[286,1120,934],{"class":474},[286,1122,1123],{"class":492},"    \u002F\u002F Request Content-Length\n",[286,1125,1126,1129,1131,1133],{"class":288,"line":302},[286,1127,1128],{"class":482},"  responseBytes",[286,1130,501],{"class":362},[286,1132,934],{"class":474},[286,1134,1135],{"class":492},"   \u002F\u002F Response Content-Length\n",[286,1137,1138],{"class":288,"line":308},[286,1139,622],{"class":362},[260,1141,1142],{},[426,1143,627],{},[276,1145,1147],{"className":630,"code":1146,"language":632,"meta":282,"style":282},"{\n  \"requestSize\": {\n    \"requestBytes\": 1234,\n    \"responseBytes\": 5678\n  }\n}\n",[264,1148,1149,1153,1166,1182,1196,1200],{"__ignoreMap":282},[286,1150,1151],{"class":288,"line":289},[286,1152,639],{"class":362},[286,1154,1155,1157,1160,1162,1164],{"class":288,"line":295},[286,1156,644],{"class":362},[286,1158,1159],{"class":442},"requestSize",[286,1161,650],{"class":362},[286,1163,486],{"class":362},[286,1165,363],{"class":362},[286,1167,1168,1170,1173,1175,1177,1180],{"class":288,"line":302},[286,1169,659],{"class":362},[286,1171,1172],{"class":474},"requestBytes",[286,1174,650],{"class":362},[286,1176,486],{"class":362},[286,1178,1179],{"class":694}," 1234",[286,1181,372],{"class":362},[286,1183,1184,1186,1189,1191,1193],{"class":288,"line":308},[286,1185,659],{"class":362},[286,1187,1188],{"class":474},"responseBytes",[286,1190,650],{"class":362},[286,1192,486],{"class":362},[286,1194,1195],{"class":694}," 5678\n",[286,1197,1198],{"class":288,"line":314},[286,1199,810],{"class":362},[286,1201,1202],{"class":288,"line":320},[286,1203,622],{"class":362},[1022,1205,1206,1207,1209,1210,1213],{"color":1024,"icon":13},"This enricher reads the ",[264,1208,1067],{}," header from both the request and response. If the header is missing (e.g., for chunked transfer encoding), the corresponding field will be ",[264,1211,1212],{},"undefined",".",[412,1215,1217],{"id":1216},"trace-context","Trace Context",[260,1219,1220,1221,1224,1225,1068],{},"Extract W3C trace context from the ",[264,1222,1223],{},"traceparent"," and ",[264,1226,1227],{},"tracestate",[260,1229,1230,429,1232,992,1235,992,1238],{},[426,1231,428],{},[264,1233,1234],{},"event.traceContext",[264,1236,1237],{},"event.traceId",[264,1239,1240],{},"event.spanId",[276,1242,1244],{"className":349,"code":1243,"language":351,"meta":282,"style":282},"const enrich = createTraceContextEnricher()\n",[264,1245,1246],{"__ignoreMap":282},[286,1247,1248,1250,1252,1254,1257],{"class":288,"line":289},[286,1249,443],{"class":442},[286,1251,446],{"class":368},[286,1253,449],{"class":362},[286,1255,1256],{"class":452}," createTraceContextEnricher",[286,1258,456],{"class":368},[260,1260,1261],{},[426,1262,461],{},[276,1264,1266],{"className":349,"code":1265,"language":351,"meta":282,"style":282},"interface TraceContextInfo {\n  traceparent?: string   \u002F\u002F Full traceparent header value\n  tracestate?: string    \u002F\u002F Full tracestate header value\n  traceId?: string       \u002F\u002F 32-char hex trace ID (parsed from traceparent)\n  spanId?: string        \u002F\u002F 16-char hex span ID (parsed from traceparent)\n}\n",[264,1267,1268,1277,1289,1301,1313,1325],{"__ignoreMap":282},[286,1269,1270,1272,1275],{"class":288,"line":289},[286,1271,471],{"class":442},[286,1273,1274],{"class":474}," TraceContextInfo",[286,1276,363],{"class":362},[286,1278,1279,1282,1284,1286],{"class":288,"line":295},[286,1280,1281],{"class":482},"  traceparent",[286,1283,501],{"class":362},[286,1285,489],{"class":474},[286,1287,1288],{"class":492},"   \u002F\u002F Full traceparent header value\n",[286,1290,1291,1294,1296,1298],{"class":288,"line":302},[286,1292,1293],{"class":482},"  tracestate",[286,1295,501],{"class":362},[286,1297,489],{"class":474},[286,1299,1300],{"class":492},"    \u002F\u002F Full tracestate header value\n",[286,1302,1303,1306,1308,1310],{"class":288,"line":308},[286,1304,1305],{"class":482},"  traceId",[286,1307,501],{"class":362},[286,1309,489],{"class":474},[286,1311,1312],{"class":492},"       \u002F\u002F 32-char hex trace ID (parsed from traceparent)\n",[286,1314,1315,1318,1320,1322],{"class":288,"line":314},[286,1316,1317],{"class":482},"  spanId",[286,1319,501],{"class":362},[286,1321,489],{"class":474},[286,1323,1324],{"class":492},"        \u002F\u002F 16-char hex span ID (parsed from traceparent)\n",[286,1326,1327],{"class":288,"line":320},[286,1328,622],{"class":362},[260,1330,1331],{},[426,1332,627],{},[276,1334,1336],{"className":630,"code":1335,"language":632,"meta":282,"style":282},"{\n  \"traceContext\": {\n    \"traceparent\": \"00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01\",\n    \"traceId\": \"4bf92f3577b34da6a3ce929d0e0e4736\",\n    \"spanId\": \"00f067aa0ba902b7\"\n  },\n  \"traceId\": \"4bf92f3577b34da6a3ce929d0e0e4736\",\n  \"spanId\": \"00f067aa0ba902b7\"\n}\n",[264,1337,1338,1342,1355,1374,1394,1413,1418,1436,1452],{"__ignoreMap":282},[286,1339,1340],{"class":288,"line":289},[286,1341,639],{"class":362},[286,1343,1344,1346,1349,1351,1353],{"class":288,"line":295},[286,1345,644],{"class":362},[286,1347,1348],{"class":442},"traceContext",[286,1350,650],{"class":362},[286,1352,486],{"class":362},[286,1354,363],{"class":362},[286,1356,1357,1359,1361,1363,1365,1367,1370,1372],{"class":288,"line":302},[286,1358,659],{"class":362},[286,1360,1223],{"class":474},[286,1362,650],{"class":362},[286,1364,486],{"class":362},[286,1366,669],{"class":362},[286,1368,1369],{"class":407},"00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01",[286,1371,650],{"class":362},[286,1373,372],{"class":362},[286,1375,1376,1378,1381,1383,1385,1387,1390,1392],{"class":288,"line":308},[286,1377,659],{"class":362},[286,1379,1380],{"class":474},"traceId",[286,1382,650],{"class":362},[286,1384,486],{"class":362},[286,1386,669],{"class":362},[286,1388,1389],{"class":407},"4bf92f3577b34da6a3ce929d0e0e4736",[286,1391,650],{"class":362},[286,1393,372],{"class":362},[286,1395,1396,1398,1401,1403,1405,1407,1410],{"class":288,"line":314},[286,1397,659],{"class":362},[286,1399,1400],{"class":474},"spanId",[286,1402,650],{"class":362},[286,1404,486],{"class":362},[286,1406,669],{"class":362},[286,1408,1409],{"class":407},"00f067aa0ba902b7",[286,1411,1412],{"class":362},"\"\n",[286,1414,1415],{"class":288,"line":320},[286,1416,1417],{"class":362},"  },\n",[286,1419,1420,1422,1424,1426,1428,1430,1432,1434],{"class":288,"line":326},[286,1421,644],{"class":362},[286,1423,1380],{"class":442},[286,1425,650],{"class":362},[286,1427,486],{"class":362},[286,1429,669],{"class":362},[286,1431,1389],{"class":407},[286,1433,650],{"class":362},[286,1435,372],{"class":362},[286,1437,1438,1440,1442,1444,1446,1448,1450],{"class":288,"line":332},[286,1439,644],{"class":362},[286,1441,1400],{"class":442},[286,1443,650],{"class":362},[286,1445,486],{"class":362},[286,1447,669],{"class":362},[286,1449,1409],{"class":407},[286,1451,1412],{"class":362},[286,1453,1454],{"class":288,"line":337},[286,1455,622],{"class":362},[260,1457,1458,1224,1460,1462],{},[264,1459,1380],{},[264,1461,1400],{}," are also set at the top level of the event for easy querying and correlation.",[1022,1464,1465,1466,1472,1473,1213],{"color":1024,"icon":13},"The traceparent format follows the ",[1047,1467,1471],{"href":1468,"rel":1469},"https:\u002F\u002Fwww.w3.org\u002FTR\u002Ftrace-context\u002F",[1470],"nofollow","W3C Trace Context"," specification: ",[264,1474,1475],{},"{version}-{traceId}-{spanId}-{flags}",[412,1477,1479],{"id":1478},"full-setup-example","Full Setup Example",[260,1481,1482],{},"Use all built-in enrichers together:",[276,1484,1487],{"className":349,"code":1485,"filename":1486,"language":351,"meta":282,"style":282},"import {\n  createUserAgentEnricher,\n  createGeoEnricher,\n  createRequestSizeEnricher,\n  createTraceContextEnricher,\n} from 'evlog\u002Fenrichers'\n\nexport default defineNitroPlugin((nitroApp) => {\n  const enrichers = [\n    createUserAgentEnricher(),\n    createGeoEnricher(),\n    createRequestSizeEnricher(),\n    createTraceContextEnricher(),\n  ]\n\n  nitroApp.hooks.hook('evlog:enrich', (ctx) => {\n    for (const enricher of enrichers) enricher(ctx)\n  })\n})\n","server\u002Fplugins\u002Fevlog-enrich.ts",[264,1488,1489,1495,1501,1507,1513,1519,1531,1535,1563,1577,1587,1597,1607,1617,1623,1628,1667,1698,1706],{"__ignoreMap":282},[286,1490,1491,1493],{"class":288,"line":289},[286,1492,359],{"class":358},[286,1494,363],{"class":362},[286,1496,1497,1499],{"class":288,"line":295},[286,1498,369],{"class":368},[286,1500,372],{"class":362},[286,1502,1503,1505],{"class":288,"line":302},[286,1504,377],{"class":368},[286,1506,372],{"class":362},[286,1508,1509,1511],{"class":288,"line":308},[286,1510,384],{"class":368},[286,1512,372],{"class":362},[286,1514,1515,1517],{"class":288,"line":314},[286,1516,391],{"class":368},[286,1518,372],{"class":362},[286,1520,1521,1523,1525,1527,1529],{"class":288,"line":320},[286,1522,398],{"class":362},[286,1524,401],{"class":358},[286,1526,404],{"class":362},[286,1528,266],{"class":407},[286,1530,410],{"class":362},[286,1532,1533],{"class":288,"line":326},[286,1534,299],{"emptyLinePlaceholder":298},[286,1536,1537,1540,1543,1546,1549,1551,1555,1558,1561],{"class":288,"line":332},[286,1538,1539],{"class":358},"export",[286,1541,1542],{"class":358}," default",[286,1544,1545],{"class":452}," defineNitroPlugin",[286,1547,1548],{"class":368},"(",[286,1550,1548],{"class":362},[286,1552,1554],{"class":1553},"sHdIc","nitroApp",[286,1556,1557],{"class":362},")",[286,1559,1560],{"class":442}," =>",[286,1562,363],{"class":362},[286,1564,1565,1568,1571,1574],{"class":288,"line":337},[286,1566,1567],{"class":442},"  const",[286,1569,1570],{"class":368}," enrichers",[286,1572,1573],{"class":362}," =",[286,1575,1576],{"class":482}," [\n",[286,1578,1579,1582,1585],{"class":288,"line":343},[286,1580,1581],{"class":452},"    createUserAgentEnricher",[286,1583,1584],{"class":482},"()",[286,1586,372],{"class":362},[286,1588,1590,1593,1595],{"class":288,"line":1589},11,[286,1591,1592],{"class":452},"    createGeoEnricher",[286,1594,1584],{"class":482},[286,1596,372],{"class":362},[286,1598,1600,1603,1605],{"class":288,"line":1599},12,[286,1601,1602],{"class":452},"    createRequestSizeEnricher",[286,1604,1584],{"class":482},[286,1606,372],{"class":362},[286,1608,1610,1613,1615],{"class":288,"line":1609},13,[286,1611,1612],{"class":452},"    createTraceContextEnricher",[286,1614,1584],{"class":482},[286,1616,372],{"class":362},[286,1618,1620],{"class":288,"line":1619},14,[286,1621,1622],{"class":482},"  ]\n",[286,1624,1626],{"class":288,"line":1625},15,[286,1627,299],{"emptyLinePlaceholder":298},[286,1629,1631,1634,1636,1639,1641,1644,1646,1648,1651,1653,1655,1658,1661,1663,1665],{"class":288,"line":1630},16,[286,1632,1633],{"class":368},"  nitroApp",[286,1635,1213],{"class":362},[286,1637,1638],{"class":368},"hooks",[286,1640,1213],{"class":362},[286,1642,1643],{"class":452},"hook",[286,1645,1548],{"class":482},[286,1647,577],{"class":362},[286,1649,1650],{"class":407},"evlog:enrich",[286,1652,577],{"class":362},[286,1654,709],{"class":362},[286,1656,1657],{"class":362}," (",[286,1659,1660],{"class":1553},"ctx",[286,1662,1557],{"class":362},[286,1664,1560],{"class":442},[286,1666,363],{"class":362},[286,1668,1670,1673,1675,1677,1680,1683,1685,1688,1691,1693,1695],{"class":288,"line":1669},17,[286,1671,1672],{"class":358},"    for",[286,1674,1657],{"class":482},[286,1676,443],{"class":442},[286,1678,1679],{"class":368}," enricher",[286,1681,1682],{"class":362}," of",[286,1684,1570],{"class":368},[286,1686,1687],{"class":482},") ",[286,1689,1690],{"class":452},"enricher",[286,1692,1548],{"class":482},[286,1694,1660],{"class":368},[286,1696,1697],{"class":482},")\n",[286,1699,1701,1704],{"class":288,"line":1700},18,[286,1702,1703],{"class":362},"  }",[286,1705,1697],{"class":482},[286,1707,1709,1711],{"class":288,"line":1708},19,[286,1710,398],{"class":362},[286,1712,1697],{"class":368},[412,1714,1716],{"id":1715},"next-steps","Next Steps",[1718,1719,1720,1727],"ul",{},[1721,1722,1723,1726],"li",{},[1047,1724,1725],{"href":237},"Custom Enrichers"," - Write your own enricher",[1721,1728,1729,1731],{},[1047,1730,170],{"href":175}," - Send enriched events to external services",[1733,1734,1735],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 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":282,"searchDepth":295,"depth":295,"links":1737},[1738,1739,1740,1741,1742,1743],{"id":414,"depth":295,"text":415},{"id":829,"depth":295,"text":830},{"id":1060,"depth":295,"text":1061},{"id":1216,"depth":295,"text":1217},{"id":1478,"depth":295,"text":1479},{"id":1715,"depth":295,"text":1716},"Reference for all built-in evlog enrichers. Parse user agents, extract geo data, measure request sizes, and capture trace context automatically.","md",[1747,1750],{"label":1725,"icon":217,"to":237,"color":1748,"variant":1749},"neutral","subtle",{"label":1751,"icon":28,"to":229,"color":1748,"variant":1749},"Enrichers Overview",{},{"title":232,"icon":109},{"title":255,"description":1744},"ASm2uQJG9hfTaFWtNZsmWpsD7Op2NNh1JJWDodNl04A",[1757,1759],{"title":36,"path":229,"stem":230,"description":1758,"icon":28,"children":-1},"Enrich your wide events with derived context like user agent, geo data, request size, and trace context. Built-in enrichers and custom enricher support.",{"title":236,"path":237,"stem":238,"description":1760,"icon":217,"children":-1},"Write custom enrichers to add derived context to your wide events. Add deployment metadata, tenant IDs, feature flags, or any computed data.",1773605731992]