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