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