[{"data":1,"prerenderedAt":2075},["ShallowReactive",2],{"navigation_docs":3,"-adapters-browser":238,"-adapters-browser-surround":2070},[4,30,110,154,208,224],{"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,149],{"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,"icon":153},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F7.configuration","i-lucide-settings",{"title":155,"path":156,"stem":157,"children":158,"page":29},"Adapters","\u002Fadapters","4.adapters",[159,163,168,173,178,183,188,193,198,203],{"title":36,"path":160,"stem":161,"icon":162},"\u002Fadapters\u002Foverview","4.adapters\u002F1.overview","i-custom-plug",{"title":164,"path":165,"stem":166,"icon":167},"Browser","\u002Fadapters\u002Fbrowser","4.adapters\u002F10.browser","i-lucide-globe",{"title":169,"path":170,"stem":171,"icon":172},"Axiom","\u002Fadapters\u002Faxiom","4.adapters\u002F2.axiom","i-custom-axiom",{"title":174,"path":175,"stem":176,"icon":177},"OTLP","\u002Fadapters\u002Fotlp","4.adapters\u002F3.otlp","i-simple-icons-opentelemetry",{"title":179,"path":180,"stem":181,"icon":182},"PostHog","\u002Fadapters\u002Fposthog","4.adapters\u002F4.posthog","i-simple-icons-posthog",{"title":184,"path":185,"stem":186,"icon":187},"Sentry","\u002Fadapters\u002Fsentry","4.adapters\u002F5.sentry","i-simple-icons-sentry",{"title":189,"path":190,"stem":191,"icon":192},"Better Stack","\u002Fadapters\u002Fbetter-stack","4.adapters\u002F6.better-stack","i-simple-icons-betterstack",{"title":194,"path":195,"stem":196,"icon":197},"File System","\u002Fadapters\u002Ffs","4.adapters\u002F7.fs","i-lucide-hard-drive",{"title":199,"path":200,"stem":201,"icon":202},"Custom Adapters","\u002Fadapters\u002Fcustom","4.adapters\u002F8.custom","i-lucide-code",{"title":204,"path":205,"stem":206,"icon":207},"Pipeline","\u002Fadapters\u002Fpipeline","4.adapters\u002F9.pipeline","i-lucide-workflow",{"title":209,"path":210,"stem":211,"children":212,"page":29},"Enrichers","\u002Fenrichers","5.enrichers",[213,216,220],{"title":36,"path":214,"stem":215,"icon":28},"\u002Fenrichers\u002Foverview","5.enrichers\u002F1.overview",{"title":217,"path":218,"stem":219,"icon":109},"Built-in","\u002Fenrichers\u002Fbuilt-in","5.enrichers\u002F2.built-in",{"title":221,"path":222,"stem":223,"icon":202},"Custom","\u002Fenrichers\u002Fcustom","5.enrichers\u002F3.custom",{"title":225,"path":226,"stem":227,"children":228,"page":29},"NuxtHub","\u002Fnuxthub","6.nuxthub",[229,233],{"title":36,"path":230,"stem":231,"icon":232},"\u002Fnuxthub\u002Foverview","6.nuxthub\u002F1.overview","i-lucide-database",{"title":234,"path":235,"stem":236,"icon":237},"Retention","\u002Fnuxthub\u002Fretention","6.nuxthub\u002F2.retention","i-lucide-clock",{"id":239,"title":240,"body":241,"description":2060,"extension":2061,"links":2062,"meta":2066,"navigation":2067,"path":165,"seo":2068,"stem":166,"__hash__":2069},"docs\u002F4.adapters\u002F10.browser.md","Browser Drain",{"type":242,"value":243,"toc":2040},"minimark",[244,248,252,458,462,519,523,530,544,732,738,741,946,950,956,1052,1058,1121,1125,1139,1144,1148,1151,1245,1269,1273,1279,1282,1433,1436,1580,1584,1594,1993,2006,2013,2017,2036],[245,246,247],"p",{},"Most observability tools focus on server-side logs. The browser drain gives you a framework-agnostic way to send structured logs from the browser to any HTTP endpoint without any vendor SDK or framework coupling.",[249,250,20],"h2",{"id":251},"quick-start",[253,254,260],"pre",{"className":255,"code":256,"filename":257,"language":258,"meta":259,"style":259},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { initLogger, log } from 'evlog'\nimport { createBrowserLogDrain } from 'evlog\u002Fbrowser'\n\nconst drain = createBrowserLogDrain({\n  drain: { endpoint: 'https:\u002F\u002Flogs.example.com\u002Fv1\u002Fingest' },\n})\ninitLogger({ drain })\n\nlog.info({ action: 'page_view', path: location.pathname })\n","app.ts","typescript","",[261,262,263,302,323,330,352,380,389,406,411],"code",{"__ignoreMap":259},[264,265,268,272,276,280,283,286,289,292,295,299],"span",{"class":266,"line":267},"line",1,[264,269,271],{"class":270},"s7zQu","import",[264,273,275],{"class":274},"sMK4o"," {",[264,277,279],{"class":278},"sTEyZ"," initLogger",[264,281,282],{"class":274},",",[264,284,285],{"class":278}," log",[264,287,288],{"class":274}," }",[264,290,291],{"class":270}," from",[264,293,294],{"class":274}," '",[264,296,298],{"class":297},"sfazB","evlog",[264,300,301],{"class":274},"'\n",[264,303,305,307,309,312,314,316,318,321],{"class":266,"line":304},2,[264,306,271],{"class":270},[264,308,275],{"class":274},[264,310,311],{"class":278}," createBrowserLogDrain",[264,313,288],{"class":274},[264,315,291],{"class":270},[264,317,294],{"class":274},[264,319,320],{"class":297},"evlog\u002Fbrowser",[264,322,301],{"class":274},[264,324,326],{"class":266,"line":325},3,[264,327,329],{"emptyLinePlaceholder":328},true,"\n",[264,331,333,337,340,343,346,349],{"class":266,"line":332},4,[264,334,336],{"class":335},"spNyl","const",[264,338,339],{"class":278}," drain ",[264,341,342],{"class":274},"=",[264,344,311],{"class":345},"s2Zo4",[264,347,348],{"class":278},"(",[264,350,351],{"class":274},"{\n",[264,353,355,359,362,364,367,369,371,374,377],{"class":266,"line":354},5,[264,356,358],{"class":357},"swJcz","  drain",[264,360,361],{"class":274},":",[264,363,275],{"class":274},[264,365,366],{"class":357}," endpoint",[264,368,361],{"class":274},[264,370,294],{"class":274},[264,372,373],{"class":297},"https:\u002F\u002Flogs.example.com\u002Fv1\u002Fingest",[264,375,376],{"class":274},"'",[264,378,379],{"class":274}," },\n",[264,381,383,386],{"class":266,"line":382},6,[264,384,385],{"class":274},"}",[264,387,388],{"class":278},")\n",[264,390,392,395,397,400,402,404],{"class":266,"line":391},7,[264,393,394],{"class":345},"initLogger",[264,396,348],{"class":278},[264,398,399],{"class":274},"{",[264,401,339],{"class":278},[264,403,385],{"class":274},[264,405,388],{"class":278},[264,407,409],{"class":266,"line":408},8,[264,410,329],{"emptyLinePlaceholder":328},[264,412,414,417,420,423,425,427,430,432,434,437,439,441,444,446,449,451,454,456],{"class":266,"line":413},9,[264,415,416],{"class":278},"log",[264,418,419],{"class":274},".",[264,421,422],{"class":345},"info",[264,424,348],{"class":278},[264,426,399],{"class":274},[264,428,429],{"class":357}," action",[264,431,361],{"class":274},[264,433,294],{"class":274},[264,435,436],{"class":297},"page_view",[264,438,376],{"class":274},[264,440,282],{"class":274},[264,442,443],{"class":357}," path",[264,445,361],{"class":274},[264,447,448],{"class":278}," location",[264,450,419],{"class":274},[264,452,453],{"class":278},"pathname ",[264,455,385],{"class":274},[264,457,388],{"class":278},[249,459,461],{"id":460},"how-it-works","How It Works",[463,464,465,483,490,501,508],"ol",{},[466,467,468,471,472,471,475,478,479],"li",{},[261,469,470],{},"log.info()"," \u002F ",[261,473,474],{},"log.warn()",[261,476,477],{},"log.error()"," push events into a ",[480,481,482],"strong",{},"memory buffer",[466,484,485,486,489],{},"Events are ",[480,487,488],{},"batched"," by size (default 25) or time interval (default 2 s)",[466,491,492,493,496,497,500],{},"Batches are sent via ",[261,494,495],{},"fetch"," with ",[261,498,499],{},"keepalive: true"," so requests survive page navigation",[466,502,503,504,507],{},"When the page becomes hidden (tab switch, navigation), buffered events are flushed via ",[261,505,506],{},"navigator.sendBeacon"," as a fallback",[466,509,510,511,514,515,518],{},"Your ",[480,512,513],{},"server endpoint"," receives a ",[261,516,517],{},"DrainContext[]"," JSON array and processes it however you like",[249,520,522],{"id":521},"two-tier-api","Two-Tier API",[524,525,527],"h3",{"id":526},"createbrowserlogdrainoptions",[261,528,529],{},"createBrowserLogDrain(options)",[245,531,532,533,536,537,540,541,419],{},"High-level, pre-composed: creates a pipeline with batching, retry, and auto-flush on ",[261,534,535],{},"visibilitychange",". Returns a ",[261,538,539],{},"PipelineDrainFn\u003CDrainContext>"," directly usable with ",[261,542,543],{},"initLogger({ drain })",[253,545,547],{"className":255,"code":546,"language":258,"meta":259,"style":259},"import { initLogger, log } from 'evlog'\nimport { createBrowserLogDrain } from 'evlog\u002Fbrowser'\n\nconst drain = createBrowserLogDrain({\n  drain: { endpoint: 'https:\u002F\u002Flogs.example.com\u002Fv1\u002Fingest' },\n  pipeline: { batch: { size: 50, intervalMs: 5000 } },\n})\n\ninitLogger({ drain })\nlog.info({ action: 'click', target: 'buy-button' })\n",[261,548,549,571,589,593,607,627,666,672,676,690],{"__ignoreMap":259},[264,550,551,553,555,557,559,561,563,565,567,569],{"class":266,"line":267},[264,552,271],{"class":270},[264,554,275],{"class":274},[264,556,279],{"class":278},[264,558,282],{"class":274},[264,560,285],{"class":278},[264,562,288],{"class":274},[264,564,291],{"class":270},[264,566,294],{"class":274},[264,568,298],{"class":297},[264,570,301],{"class":274},[264,572,573,575,577,579,581,583,585,587],{"class":266,"line":304},[264,574,271],{"class":270},[264,576,275],{"class":274},[264,578,311],{"class":278},[264,580,288],{"class":274},[264,582,291],{"class":270},[264,584,294],{"class":274},[264,586,320],{"class":297},[264,588,301],{"class":274},[264,590,591],{"class":266,"line":325},[264,592,329],{"emptyLinePlaceholder":328},[264,594,595,597,599,601,603,605],{"class":266,"line":332},[264,596,336],{"class":335},[264,598,339],{"class":278},[264,600,342],{"class":274},[264,602,311],{"class":345},[264,604,348],{"class":278},[264,606,351],{"class":274},[264,608,609,611,613,615,617,619,621,623,625],{"class":266,"line":354},[264,610,358],{"class":357},[264,612,361],{"class":274},[264,614,275],{"class":274},[264,616,366],{"class":357},[264,618,361],{"class":274},[264,620,294],{"class":274},[264,622,373],{"class":297},[264,624,376],{"class":274},[264,626,379],{"class":274},[264,628,629,632,634,636,639,641,643,646,648,652,654,657,659,662,664],{"class":266,"line":382},[264,630,631],{"class":357},"  pipeline",[264,633,361],{"class":274},[264,635,275],{"class":274},[264,637,638],{"class":357}," batch",[264,640,361],{"class":274},[264,642,275],{"class":274},[264,644,645],{"class":357}," size",[264,647,361],{"class":274},[264,649,651],{"class":650},"sbssI"," 50",[264,653,282],{"class":274},[264,655,656],{"class":357}," intervalMs",[264,658,361],{"class":274},[264,660,661],{"class":650}," 5000",[264,663,288],{"class":274},[264,665,379],{"class":274},[264,667,668,670],{"class":266,"line":391},[264,669,385],{"class":274},[264,671,388],{"class":278},[264,673,674],{"class":266,"line":408},[264,675,329],{"emptyLinePlaceholder":328},[264,677,678,680,682,684,686,688],{"class":266,"line":413},[264,679,394],{"class":345},[264,681,348],{"class":278},[264,683,399],{"class":274},[264,685,339],{"class":278},[264,687,385],{"class":274},[264,689,388],{"class":278},[264,691,693,695,697,699,701,703,705,707,709,712,714,716,719,721,723,726,728,730],{"class":266,"line":692},10,[264,694,416],{"class":278},[264,696,419],{"class":274},[264,698,422],{"class":345},[264,700,348],{"class":278},[264,702,399],{"class":274},[264,704,429],{"class":357},[264,706,361],{"class":274},[264,708,294],{"class":274},[264,710,711],{"class":297},"click",[264,713,376],{"class":274},[264,715,282],{"class":274},[264,717,718],{"class":357}," target",[264,720,361],{"class":274},[264,722,294],{"class":274},[264,724,725],{"class":297},"buy-button",[264,727,376],{"class":274},[264,729,288],{"class":274},[264,731,388],{"class":278},[524,733,735],{"id":734},"createbrowserdrainconfig",[261,736,737],{},"createBrowserDrain(config)",[245,739,740],{},"Low-level transport function. Use this when you want full control over the pipeline configuration:",[253,742,744],{"className":255,"code":743,"language":258,"meta":259,"style":259},"import { createBrowserDrain } from 'evlog\u002Fbrowser'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport type { DrainContext } from 'evlog'\n\nconst transport = createBrowserDrain({\n  endpoint: 'https:\u002F\u002Flogs.example.com\u002Fv1\u002Fingest',\n})\nconst pipeline = createDrainPipeline\u003CDrainContext>({\n  batch: { size: 100, intervalMs: 10000 },\n  retry: { maxAttempts: 5 },\n})\n\nconst drain = pipeline(transport)\n",[261,745,746,765,785,807,811,826,842,848,873,900,919,926,931],{"__ignoreMap":259},[264,747,748,750,752,755,757,759,761,763],{"class":266,"line":267},[264,749,271],{"class":270},[264,751,275],{"class":274},[264,753,754],{"class":278}," createBrowserDrain",[264,756,288],{"class":274},[264,758,291],{"class":270},[264,760,294],{"class":274},[264,762,320],{"class":297},[264,764,301],{"class":274},[264,766,767,769,771,774,776,778,780,783],{"class":266,"line":304},[264,768,271],{"class":270},[264,770,275],{"class":274},[264,772,773],{"class":278}," createDrainPipeline",[264,775,288],{"class":274},[264,777,291],{"class":270},[264,779,294],{"class":274},[264,781,782],{"class":297},"evlog\u002Fpipeline",[264,784,301],{"class":274},[264,786,787,789,792,794,797,799,801,803,805],{"class":266,"line":325},[264,788,271],{"class":270},[264,790,791],{"class":270}," type",[264,793,275],{"class":274},[264,795,796],{"class":278}," DrainContext",[264,798,288],{"class":274},[264,800,291],{"class":270},[264,802,294],{"class":274},[264,804,298],{"class":297},[264,806,301],{"class":274},[264,808,809],{"class":266,"line":332},[264,810,329],{"emptyLinePlaceholder":328},[264,812,813,815,818,820,822,824],{"class":266,"line":354},[264,814,336],{"class":335},[264,816,817],{"class":278}," transport ",[264,819,342],{"class":274},[264,821,754],{"class":345},[264,823,348],{"class":278},[264,825,351],{"class":274},[264,827,828,831,833,835,837,839],{"class":266,"line":382},[264,829,830],{"class":357},"  endpoint",[264,832,361],{"class":274},[264,834,294],{"class":274},[264,836,373],{"class":297},[264,838,376],{"class":274},[264,840,841],{"class":274},",\n",[264,843,844,846],{"class":266,"line":391},[264,845,385],{"class":274},[264,847,388],{"class":278},[264,849,850,852,855,857,859,862,866,869,871],{"class":266,"line":408},[264,851,336],{"class":335},[264,853,854],{"class":278}," pipeline ",[264,856,342],{"class":274},[264,858,773],{"class":345},[264,860,861],{"class":274},"\u003C",[264,863,865],{"class":864},"sBMFI","DrainContext",[264,867,868],{"class":274},">",[264,870,348],{"class":278},[264,872,351],{"class":274},[264,874,875,878,880,882,884,886,889,891,893,895,898],{"class":266,"line":413},[264,876,877],{"class":357},"  batch",[264,879,361],{"class":274},[264,881,275],{"class":274},[264,883,645],{"class":357},[264,885,361],{"class":274},[264,887,888],{"class":650}," 100",[264,890,282],{"class":274},[264,892,656],{"class":357},[264,894,361],{"class":274},[264,896,897],{"class":650}," 10000",[264,899,379],{"class":274},[264,901,902,905,907,909,912,914,917],{"class":266,"line":692},[264,903,904],{"class":357},"  retry",[264,906,361],{"class":274},[264,908,275],{"class":274},[264,910,911],{"class":357}," maxAttempts",[264,913,361],{"class":274},[264,915,916],{"class":650}," 5",[264,918,379],{"class":274},[264,920,922,924],{"class":266,"line":921},11,[264,923,385],{"class":274},[264,925,388],{"class":278},[264,927,929],{"class":266,"line":928},12,[264,930,329],{"emptyLinePlaceholder":328},[264,932,934,936,938,940,943],{"class":266,"line":933},13,[264,935,336],{"class":335},[264,937,339],{"class":278},[264,939,342],{"class":274},[264,941,942],{"class":345}," pipeline",[264,944,945],{"class":278},"(transport)\n",[249,947,949],{"id":948},"configuration-reference","Configuration Reference",[524,951,953],{"id":952},"browserdrainconfig",[261,954,955],{},"BrowserDrainConfig",[957,958,959,975],"table",{},[960,961,962],"thead",{},[963,964,965,969,972],"tr",{},[966,967,968],"th",{},"Option",[966,970,971],{},"Default",[966,973,974],{},"Description",[976,977,978,995,1018,1033],"tbody",{},[963,979,980,986,989],{},[981,982,983],"td",{},[261,984,985],{},"endpoint",[981,987,988],{},"-",[981,990,991,994],{},[480,992,993],{},"(required)"," Full URL of the server ingest endpoint",[963,996,997,1002,1004],{},[981,998,999],{},[261,1000,1001],{},"headers",[981,1003,988],{},[981,1005,1006,1007,1009,1010,1013,1014,1017],{},"Custom headers sent with each ",[261,1008,495],{}," request (e.g. ",[261,1011,1012],{},"Authorization",", ",[261,1015,1016],{},"X-API-Key",")",[963,1019,1020,1025,1030],{},[981,1021,1022],{},[261,1023,1024],{},"timeout",[981,1026,1027],{},[261,1028,1029],{},"5000",[981,1031,1032],{},"Request timeout in milliseconds",[963,1034,1035,1040,1045],{},[981,1036,1037],{},[261,1038,1039],{},"useBeacon",[981,1041,1042],{},[261,1043,1044],{},"true",[981,1046,1047,1048,1051],{},"Use ",[261,1049,1050],{},"sendBeacon"," when the page is hidden",[524,1053,1055],{"id":1054},"browserlogdrainoptions",[261,1056,1057],{},"BrowserLogDrainOptions",[957,1059,1060,1070],{},[960,1061,1062],{},[963,1063,1064,1066,1068],{},[966,1065,968],{},[966,1067,971],{},[966,1069,974],{},[976,1071,1072,1089,1104],{},[963,1073,1074,1079,1081],{},[981,1075,1076],{},[261,1077,1078],{},"drain",[981,1080,988],{},[981,1082,1083,1085,1086,1088],{},[480,1084,993],{}," ",[261,1087,955],{}," object",[963,1090,1091,1096,1101],{},[981,1092,1093],{},[261,1094,1095],{},"pipeline",[981,1097,1098],{},[261,1099,1100],{},"{ batch: { size: 25, intervalMs: 2000 }, retry: { maxAttempts: 2 } }",[981,1102,1103],{},"Pipeline configuration overrides",[963,1105,1106,1111,1115],{},[981,1107,1108],{},[261,1109,1110],{},"autoFlush",[981,1112,1113],{},[261,1114,1044],{},[981,1116,1117,1118,1120],{},"Auto-register ",[261,1119,535],{}," flush listener",[249,1122,1124],{"id":1123},"sendbeacon-fallback","sendBeacon Fallback",[1126,1127,1129,1130,1132,1133,1135,1136,1138],"callout",{"color":422,"icon":1128},"i-lucide-radio","When ",[261,1131,1039],{}," is enabled (the default) and the page becomes hidden, the drain automatically switches from ",[261,1134,495],{}," to ",[261,1137,506],{},". This ensures logs are delivered even when the user closes the tab or navigates away, preventing data loss on page exit.",[245,1140,1141,1143],{},[261,1142,1050],{}," has a browser-imposed payload limit (~64 KB). If the payload exceeds this, the drain throws an error. Keep batch sizes reasonable (the default of 25 is well within limits).",[249,1145,1147],{"id":1146},"authentication","Authentication",[245,1149,1150],{},"Pass custom headers to protect your ingest endpoint:",[253,1152,1154],{"className":255,"code":1153,"language":258,"meta":259,"style":259},"const drain = createBrowserLogDrain({\n  drain: {\n    endpoint: 'https:\u002F\u002Flogs.example.com\u002Fv1\u002Fingest',\n    headers: {\n      'Authorization': 'Bearer ' + token,\n    },\n  },\n})\n",[261,1155,1156,1170,1179,1194,1203,1229,1234,1239],{"__ignoreMap":259},[264,1157,1158,1160,1162,1164,1166,1168],{"class":266,"line":267},[264,1159,336],{"class":335},[264,1161,339],{"class":278},[264,1163,342],{"class":274},[264,1165,311],{"class":345},[264,1167,348],{"class":278},[264,1169,351],{"class":274},[264,1171,1172,1174,1176],{"class":266,"line":304},[264,1173,358],{"class":357},[264,1175,361],{"class":274},[264,1177,1178],{"class":274}," {\n",[264,1180,1181,1184,1186,1188,1190,1192],{"class":266,"line":325},[264,1182,1183],{"class":357},"    endpoint",[264,1185,361],{"class":274},[264,1187,294],{"class":274},[264,1189,373],{"class":297},[264,1191,376],{"class":274},[264,1193,841],{"class":274},[264,1195,1196,1199,1201],{"class":266,"line":332},[264,1197,1198],{"class":357},"    headers",[264,1200,361],{"class":274},[264,1202,1178],{"class":274},[264,1204,1205,1208,1210,1212,1214,1216,1219,1221,1224,1227],{"class":266,"line":354},[264,1206,1207],{"class":274},"      '",[264,1209,1012],{"class":357},[264,1211,376],{"class":274},[264,1213,361],{"class":274},[264,1215,294],{"class":274},[264,1217,1218],{"class":297},"Bearer ",[264,1220,376],{"class":274},[264,1222,1223],{"class":274}," +",[264,1225,1226],{"class":278}," token",[264,1228,841],{"class":274},[264,1230,1231],{"class":266,"line":382},[264,1232,1233],{"class":274},"    },\n",[264,1235,1236],{"class":266,"line":391},[264,1237,1238],{"class":274},"  },\n",[264,1240,1241,1243],{"class":266,"line":408},[264,1242,385],{"class":274},[264,1244,388],{"class":278},[1126,1246,1248,1250,1251,1253,1254,1256,1257,1259,1260,1263,1264,496,1266,419],{"color":1247,"icon":129},"warning",[261,1249,1001],{}," are applied to ",[261,1252,495],{}," requests only. The ",[261,1255,1050],{}," API does not support custom headers, so when the page is hidden and ",[261,1258,1050],{}," is used, headers are not sent. If your endpoint requires authentication, consider validating via a session cookie (",[261,1261,1262],{},"credentials: 'same-origin'"," is set by default) or disable ",[261,1265,1050],{},[261,1267,1268],{},"useBeacon: false",[249,1270,1272],{"id":1271},"server-endpoint","Server Endpoint",[245,1274,1275,1276,1278],{},"Your server needs a POST endpoint that accepts a ",[261,1277,517],{}," JSON body. Here are examples for common frameworks:",[524,1280,71],{"id":1281},"express",[253,1283,1286],{"className":255,"code":1284,"filename":1285,"language":258,"meta":259,"style":259},"app.post('\u002Fv1\u002Fingest', express.json(), (req, res) => {\n  for (const entry of req.body) {\n    console.log('[BROWSER]', JSON.stringify(entry))\n  }\n  res.sendStatus(204)\n})\n","server.ts",[261,1287,1288,1341,1369,1405,1410,1427],{"__ignoreMap":259},[264,1289,1290,1293,1295,1298,1300,1302,1305,1307,1309,1312,1314,1317,1320,1322,1325,1329,1331,1334,1336,1339],{"class":266,"line":267},[264,1291,1292],{"class":278},"app",[264,1294,419],{"class":274},[264,1296,1297],{"class":345},"post",[264,1299,348],{"class":278},[264,1301,376],{"class":274},[264,1303,1304],{"class":297},"\u002Fv1\u002Fingest",[264,1306,376],{"class":274},[264,1308,282],{"class":274},[264,1310,1311],{"class":278}," express",[264,1313,419],{"class":274},[264,1315,1316],{"class":345},"json",[264,1318,1319],{"class":278},"()",[264,1321,282],{"class":274},[264,1323,1324],{"class":274}," (",[264,1326,1328],{"class":1327},"sHdIc","req",[264,1330,282],{"class":274},[264,1332,1333],{"class":1327}," res",[264,1335,1017],{"class":274},[264,1337,1338],{"class":335}," =>",[264,1340,1178],{"class":274},[264,1342,1343,1346,1348,1350,1353,1356,1359,1361,1364,1367],{"class":266,"line":304},[264,1344,1345],{"class":270},"  for",[264,1347,1324],{"class":357},[264,1349,336],{"class":335},[264,1351,1352],{"class":278}," entry",[264,1354,1355],{"class":274}," of",[264,1357,1358],{"class":278}," req",[264,1360,419],{"class":274},[264,1362,1363],{"class":278},"body",[264,1365,1366],{"class":357},") ",[264,1368,351],{"class":274},[264,1370,1371,1374,1376,1378,1380,1382,1385,1387,1389,1392,1394,1397,1399,1402],{"class":266,"line":325},[264,1372,1373],{"class":278},"    console",[264,1375,419],{"class":274},[264,1377,416],{"class":345},[264,1379,348],{"class":357},[264,1381,376],{"class":274},[264,1383,1384],{"class":297},"[BROWSER]",[264,1386,376],{"class":274},[264,1388,282],{"class":274},[264,1390,1391],{"class":278}," JSON",[264,1393,419],{"class":274},[264,1395,1396],{"class":345},"stringify",[264,1398,348],{"class":357},[264,1400,1401],{"class":278},"entry",[264,1403,1404],{"class":357},"))\n",[264,1406,1407],{"class":266,"line":332},[264,1408,1409],{"class":274},"  }\n",[264,1411,1412,1415,1417,1420,1422,1425],{"class":266,"line":354},[264,1413,1414],{"class":278},"  res",[264,1416,419],{"class":274},[264,1418,1419],{"class":345},"sendStatus",[264,1421,348],{"class":357},[264,1423,1424],{"class":650},"204",[264,1426,388],{"class":357},[264,1428,1429,1431],{"class":266,"line":382},[264,1430,385],{"class":274},[264,1432,388],{"class":278},[524,1434,76],{"id":1435},"hono",[253,1437,1439],{"className":255,"code":1438,"filename":1285,"language":258,"meta":259,"style":259},"app.post('\u002Fv1\u002Fingest', async (c) => {\n  const body = await c.req.json()\n  for (const entry of body) {\n    console.log('[BROWSER]', JSON.stringify(entry))\n  }\n  return c.body(null, 204)\n})\n",[261,1440,1441,1473,1501,1519,1549,1553,1574],{"__ignoreMap":259},[264,1442,1443,1445,1447,1449,1451,1453,1455,1457,1459,1462,1464,1467,1469,1471],{"class":266,"line":267},[264,1444,1292],{"class":278},[264,1446,419],{"class":274},[264,1448,1297],{"class":345},[264,1450,348],{"class":278},[264,1452,376],{"class":274},[264,1454,1304],{"class":297},[264,1456,376],{"class":274},[264,1458,282],{"class":274},[264,1460,1461],{"class":335}," async",[264,1463,1324],{"class":274},[264,1465,1466],{"class":1327},"c",[264,1468,1017],{"class":274},[264,1470,1338],{"class":335},[264,1472,1178],{"class":274},[264,1474,1475,1478,1481,1484,1487,1490,1492,1494,1496,1498],{"class":266,"line":304},[264,1476,1477],{"class":335},"  const",[264,1479,1480],{"class":278}," body",[264,1482,1483],{"class":274}," =",[264,1485,1486],{"class":270}," await",[264,1488,1489],{"class":278}," c",[264,1491,419],{"class":274},[264,1493,1328],{"class":278},[264,1495,419],{"class":274},[264,1497,1316],{"class":345},[264,1499,1500],{"class":357},"()\n",[264,1502,1503,1505,1507,1509,1511,1513,1515,1517],{"class":266,"line":325},[264,1504,1345],{"class":270},[264,1506,1324],{"class":357},[264,1508,336],{"class":335},[264,1510,1352],{"class":278},[264,1512,1355],{"class":274},[264,1514,1480],{"class":278},[264,1516,1366],{"class":357},[264,1518,351],{"class":274},[264,1520,1521,1523,1525,1527,1529,1531,1533,1535,1537,1539,1541,1543,1545,1547],{"class":266,"line":332},[264,1522,1373],{"class":278},[264,1524,419],{"class":274},[264,1526,416],{"class":345},[264,1528,348],{"class":357},[264,1530,376],{"class":274},[264,1532,1384],{"class":297},[264,1534,376],{"class":274},[264,1536,282],{"class":274},[264,1538,1391],{"class":278},[264,1540,419],{"class":274},[264,1542,1396],{"class":345},[264,1544,348],{"class":357},[264,1546,1401],{"class":278},[264,1548,1404],{"class":357},[264,1550,1551],{"class":266,"line":354},[264,1552,1409],{"class":274},[264,1554,1555,1558,1560,1562,1564,1566,1569,1572],{"class":266,"line":382},[264,1556,1557],{"class":270},"  return",[264,1559,1489],{"class":278},[264,1561,419],{"class":274},[264,1563,1363],{"class":345},[264,1565,348],{"class":357},[264,1567,1568],{"class":274},"null,",[264,1570,1571],{"class":650}," 204",[264,1573,388],{"class":357},[264,1575,1576,1578],{"class":266,"line":391},[264,1577,385],{"class":274},[264,1579,388],{"class":278},[249,1581,1583],{"id":1582},"full-control","Full Control",[245,1585,1586,1587,496,1590,1593],{},"Combine ",[261,1588,1589],{},"createBrowserDrain",[261,1591,1592],{},"createDrainPipeline"," for maximum flexibility:",[253,1595,1597],{"className":255,"code":1596,"filename":257,"language":258,"meta":259,"style":259},"import { initLogger, log } from 'evlog'\nimport type { DrainContext } from 'evlog'\nimport { createBrowserDrain } from 'evlog\u002Fbrowser'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({\n  batch: { size: 100, intervalMs: 10000 },\n  retry: { maxAttempts: 5, backoff: 'exponential' },\n  maxBufferSize: 500,\n  onDropped: (events) => {\n    console.warn(`Dropped ${events.length} browser events`)\n  },\n})\n\nconst drain = pipeline(createBrowserDrain({\n  endpoint: 'https:\u002F\u002Flogs.example.com\u002Fv1\u002Fingest',\n  timeout: 3000,\n}))\n\ninitLogger({ drain })\n\nlog.info({ action: 'app_init' })\n\n\u002F\u002F Flush on page unload\nwindow.addEventListener('beforeunload', () => drain.flush())\n",[261,1598,1599,1621,1641,1659,1677,1681,1701,1725,1755,1767,1785,1821,1825,1831,1836,1855,1870,1883,1890,1895,1910,1915,1943,1948,1955],{"__ignoreMap":259},[264,1600,1601,1603,1605,1607,1609,1611,1613,1615,1617,1619],{"class":266,"line":267},[264,1602,271],{"class":270},[264,1604,275],{"class":274},[264,1606,279],{"class":278},[264,1608,282],{"class":274},[264,1610,285],{"class":278},[264,1612,288],{"class":274},[264,1614,291],{"class":270},[264,1616,294],{"class":274},[264,1618,298],{"class":297},[264,1620,301],{"class":274},[264,1622,1623,1625,1627,1629,1631,1633,1635,1637,1639],{"class":266,"line":304},[264,1624,271],{"class":270},[264,1626,791],{"class":270},[264,1628,275],{"class":274},[264,1630,796],{"class":278},[264,1632,288],{"class":274},[264,1634,291],{"class":270},[264,1636,294],{"class":274},[264,1638,298],{"class":297},[264,1640,301],{"class":274},[264,1642,1643,1645,1647,1649,1651,1653,1655,1657],{"class":266,"line":325},[264,1644,271],{"class":270},[264,1646,275],{"class":274},[264,1648,754],{"class":278},[264,1650,288],{"class":274},[264,1652,291],{"class":270},[264,1654,294],{"class":274},[264,1656,320],{"class":297},[264,1658,301],{"class":274},[264,1660,1661,1663,1665,1667,1669,1671,1673,1675],{"class":266,"line":332},[264,1662,271],{"class":270},[264,1664,275],{"class":274},[264,1666,773],{"class":278},[264,1668,288],{"class":274},[264,1670,291],{"class":270},[264,1672,294],{"class":274},[264,1674,782],{"class":297},[264,1676,301],{"class":274},[264,1678,1679],{"class":266,"line":354},[264,1680,329],{"emptyLinePlaceholder":328},[264,1682,1683,1685,1687,1689,1691,1693,1695,1697,1699],{"class":266,"line":382},[264,1684,336],{"class":335},[264,1686,854],{"class":278},[264,1688,342],{"class":274},[264,1690,773],{"class":345},[264,1692,861],{"class":274},[264,1694,865],{"class":864},[264,1696,868],{"class":274},[264,1698,348],{"class":278},[264,1700,351],{"class":274},[264,1702,1703,1705,1707,1709,1711,1713,1715,1717,1719,1721,1723],{"class":266,"line":391},[264,1704,877],{"class":357},[264,1706,361],{"class":274},[264,1708,275],{"class":274},[264,1710,645],{"class":357},[264,1712,361],{"class":274},[264,1714,888],{"class":650},[264,1716,282],{"class":274},[264,1718,656],{"class":357},[264,1720,361],{"class":274},[264,1722,897],{"class":650},[264,1724,379],{"class":274},[264,1726,1727,1729,1731,1733,1735,1737,1739,1741,1744,1746,1748,1751,1753],{"class":266,"line":408},[264,1728,904],{"class":357},[264,1730,361],{"class":274},[264,1732,275],{"class":274},[264,1734,911],{"class":357},[264,1736,361],{"class":274},[264,1738,916],{"class":650},[264,1740,282],{"class":274},[264,1742,1743],{"class":357}," backoff",[264,1745,361],{"class":274},[264,1747,294],{"class":274},[264,1749,1750],{"class":297},"exponential",[264,1752,376],{"class":274},[264,1754,379],{"class":274},[264,1756,1757,1760,1762,1765],{"class":266,"line":413},[264,1758,1759],{"class":357},"  maxBufferSize",[264,1761,361],{"class":274},[264,1763,1764],{"class":650}," 500",[264,1766,841],{"class":274},[264,1768,1769,1772,1774,1776,1779,1781,1783],{"class":266,"line":692},[264,1770,1771],{"class":345},"  onDropped",[264,1773,361],{"class":274},[264,1775,1324],{"class":274},[264,1777,1778],{"class":1327},"events",[264,1780,1017],{"class":274},[264,1782,1338],{"class":335},[264,1784,1178],{"class":274},[264,1786,1787,1789,1791,1794,1796,1799,1802,1805,1807,1809,1812,1814,1817,1819],{"class":266,"line":921},[264,1788,1373],{"class":278},[264,1790,419],{"class":274},[264,1792,1793],{"class":345},"warn",[264,1795,348],{"class":357},[264,1797,1798],{"class":274},"`",[264,1800,1801],{"class":297},"Dropped ",[264,1803,1804],{"class":274},"${",[264,1806,1778],{"class":278},[264,1808,419],{"class":274},[264,1810,1811],{"class":278},"length",[264,1813,385],{"class":274},[264,1815,1816],{"class":297}," browser events",[264,1818,1798],{"class":274},[264,1820,388],{"class":357},[264,1822,1823],{"class":266,"line":928},[264,1824,1238],{"class":274},[264,1826,1827,1829],{"class":266,"line":933},[264,1828,385],{"class":274},[264,1830,388],{"class":278},[264,1832,1834],{"class":266,"line":1833},14,[264,1835,329],{"emptyLinePlaceholder":328},[264,1837,1839,1841,1843,1845,1847,1849,1851,1853],{"class":266,"line":1838},15,[264,1840,336],{"class":335},[264,1842,339],{"class":278},[264,1844,342],{"class":274},[264,1846,942],{"class":345},[264,1848,348],{"class":278},[264,1850,1589],{"class":345},[264,1852,348],{"class":278},[264,1854,351],{"class":274},[264,1856,1858,1860,1862,1864,1866,1868],{"class":266,"line":1857},16,[264,1859,830],{"class":357},[264,1861,361],{"class":274},[264,1863,294],{"class":274},[264,1865,373],{"class":297},[264,1867,376],{"class":274},[264,1869,841],{"class":274},[264,1871,1873,1876,1878,1881],{"class":266,"line":1872},17,[264,1874,1875],{"class":357},"  timeout",[264,1877,361],{"class":274},[264,1879,1880],{"class":650}," 3000",[264,1882,841],{"class":274},[264,1884,1886,1888],{"class":266,"line":1885},18,[264,1887,385],{"class":274},[264,1889,1404],{"class":278},[264,1891,1893],{"class":266,"line":1892},19,[264,1894,329],{"emptyLinePlaceholder":328},[264,1896,1898,1900,1902,1904,1906,1908],{"class":266,"line":1897},20,[264,1899,394],{"class":345},[264,1901,348],{"class":278},[264,1903,399],{"class":274},[264,1905,339],{"class":278},[264,1907,385],{"class":274},[264,1909,388],{"class":278},[264,1911,1913],{"class":266,"line":1912},21,[264,1914,329],{"emptyLinePlaceholder":328},[264,1916,1918,1920,1922,1924,1926,1928,1930,1932,1934,1937,1939,1941],{"class":266,"line":1917},22,[264,1919,416],{"class":278},[264,1921,419],{"class":274},[264,1923,422],{"class":345},[264,1925,348],{"class":278},[264,1927,399],{"class":274},[264,1929,429],{"class":357},[264,1931,361],{"class":274},[264,1933,294],{"class":274},[264,1935,1936],{"class":297},"app_init",[264,1938,376],{"class":274},[264,1940,288],{"class":274},[264,1942,388],{"class":278},[264,1944,1946],{"class":266,"line":1945},23,[264,1947,329],{"emptyLinePlaceholder":328},[264,1949,1951],{"class":266,"line":1950},24,[264,1952,1954],{"class":1953},"sHwdD","\u002F\u002F Flush on page unload\n",[264,1956,1958,1961,1963,1966,1968,1970,1973,1975,1977,1980,1982,1985,1987,1990],{"class":266,"line":1957},25,[264,1959,1960],{"class":278},"window",[264,1962,419],{"class":274},[264,1964,1965],{"class":345},"addEventListener",[264,1967,348],{"class":278},[264,1969,376],{"class":274},[264,1971,1972],{"class":297},"beforeunload",[264,1974,376],{"class":274},[264,1976,282],{"class":274},[264,1978,1979],{"class":274}," ()",[264,1981,1338],{"class":335},[264,1983,1984],{"class":278}," drain",[264,1986,419],{"class":274},[264,1988,1989],{"class":345},"flush",[264,1991,1992],{"class":278},"())\n",[1126,1994,1997,1998,2005],{"color":1995,"icon":1996},"neutral","i-lucide-arrow-right","See the full ",[1999,2000,2004],"a",{"href":2001,"rel":2002},"https:\u002F\u002Fgithub.com\u002FHugoRCD\u002Fevlog\u002Ftree\u002Fmain\u002Fexamples\u002Fbrowser",[2003],"nofollow","browser example"," for a working Hono server + browser page that demonstrates the complete flow end to end.",[1126,2007,2008,2009,2012],{"color":1995,"icon":202},"See the ",[1999,2010,2011],{"href":47},"Next.js guide"," for a working implementation.",[249,2014,2016],{"id":2015},"next-steps","Next Steps",[2018,2019,2020,2026,2031],"ul",{},[466,2021,2022,2025],{},[1999,2023,2024],{"href":160},"Adapters Overview"," - Available built-in adapters",[466,2027,2028,2030],{},[1999,2029,204],{"href":205}," - Batching, retry, and buffer overflow handling",[466,2032,2033,2035],{},[1999,2034,199],{"href":200}," - Build your own drain function",[2037,2038,2039],"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 .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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}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}",{"title":259,"searchDepth":304,"depth":304,"links":2041},[2042,2043,2044,2048,2052,2053,2054,2058,2059],{"id":251,"depth":304,"text":20},{"id":460,"depth":304,"text":461},{"id":521,"depth":304,"text":522,"children":2045},[2046,2047],{"id":526,"depth":325,"text":529},{"id":734,"depth":325,"text":737},{"id":948,"depth":304,"text":949,"children":2049},[2050,2051],{"id":952,"depth":325,"text":955},{"id":1054,"depth":325,"text":1057},{"id":1123,"depth":304,"text":1124},{"id":1146,"depth":304,"text":1147},{"id":1271,"depth":304,"text":1272,"children":2055},[2056,2057],{"id":1281,"depth":325,"text":71},{"id":1435,"depth":325,"text":76},{"id":1582,"depth":304,"text":1583},{"id":2015,"depth":304,"text":2016},"Framework-agnostic browser log transport for sending client-side logs to your server via fetch or sendBeacon. Works with any frontend stack.","md",[2063,2065],{"label":2024,"icon":162,"to":160,"color":1995,"variant":2064},"subtle",{"label":204,"icon":207,"to":205,"color":1995,"variant":2064},{},{"title":164,"icon":167},{"title":240,"description":2060},"o62fqVvgikimixCAXxp8Rpx8vgP4XSPoqanA2_5SJ1I",[2071,2073],{"title":36,"path":160,"stem":161,"description":2072,"icon":162,"children":-1},"Send your logs to external services with evlog adapters. Built-in support for popular observability platforms and custom destinations.",{"title":169,"path":170,"stem":171,"description":2074,"icon":172,"children":-1},"Send wide events to Axiom for powerful querying, dashboards, and alerting. Zero-config setup with environment variables and automatic batching.",1773504120779]