[{"data":1,"prerenderedAt":6731},["ShallowReactive",2],{"navigation_docs":3,"-extend-drain-pipeline":602,"-extend-drain-pipeline-surround":6726},[4,35,85,138,318,479,538,577],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Start","\u002Fstart","1.start",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",{"title":30,"path":31,"stem":32,"icon":33},"Choose your logger","\u002Fstart\u002Ftypescript-logging-library","1.start\u002F5.typescript-logging-library","i-lucide-file-code",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Learn","\u002Flearn","2.learn",[40,45,50,55,60,65,70,75,80],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":66,"path":67,"stem":68,"icon":69},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":71,"path":72,"stem":73,"icon":74},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":76,"path":77,"stem":78,"icon":79},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":81,"path":82,"stem":83,"icon":84},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":86,"path":87,"stem":88,"children":89,"page":34},"CLI","\u002Fcli","3.cli",[90,93,98,103,108,113,118,123,128,133],{"title":41,"path":91,"stem":92,"icon":49},"\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":94,"path":95,"stem":96,"icon":97},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":99,"path":100,"stem":101,"icon":102},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":104,"path":105,"stem":106,"icon":107},"Rules","\u002Fcli\u002Frules","3.cli\u002F3.rules","i-lucide-list-checks",{"title":109,"path":110,"stem":111,"icon":112},"Scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring","i-lucide-gauge",{"title":114,"path":115,"stem":116,"icon":117},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":119,"path":120,"stem":121,"icon":122},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":124,"path":125,"stem":126,"icon":127},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":129,"path":130,"stem":131,"icon":132},"agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents","i-lucide-bot",{"title":134,"path":135,"stem":136,"icon":137},"Observability Score","\u002Fcli\u002Fobservability-score","3.cli\u002F9.observability-score","i-lucide-activity",{"title":139,"path":140,"stem":141,"children":142,"page":34},"Integrate","\u002Fintegrate","4.integrate",[143,147,230],{"title":41,"path":144,"stem":145,"icon":146},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":148,"path":149,"stem":150,"children":151,"page":34},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[152,155,185,210],{"title":41,"path":153,"stem":154,"icon":44},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":156,"path":157,"stem":158,"children":159,"page":34},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[160,165,170,175,180],{"title":161,"path":162,"stem":163,"icon":164},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":166,"path":167,"stem":168,"icon":169},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":171,"path":172,"stem":173,"icon":174},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":176,"path":177,"stem":178,"icon":179},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":181,"path":182,"stem":183,"icon":184},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":186,"path":187,"stem":188,"children":189,"page":34},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[190,195,200,205],{"title":191,"path":192,"stem":193,"icon":194},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":196,"path":197,"stem":198,"icon":199},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":201,"path":202,"stem":203,"icon":204},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":206,"path":207,"stem":208,"icon":209},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":211,"path":212,"stem":213,"children":214,"page":34},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[215,220,225],{"title":216,"path":217,"stem":218,"icon":219},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":221,"path":222,"stem":223,"icon":224},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":226,"path":227,"stem":228,"icon":229},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":231,"path":232,"stem":233,"children":234,"page":34},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[235,239,244,249,254,259,264,269,274,279,284,289,294,299,303,308,313],{"title":41,"path":236,"stem":237,"icon":238},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":240,"path":241,"stem":242,"icon":243},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":245,"path":246,"stem":247,"icon":248},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":250,"path":251,"stem":252,"icon":253},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":255,"path":256,"stem":257,"icon":258},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":260,"path":261,"stem":262,"icon":263},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":265,"path":266,"stem":267,"icon":268},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":270,"path":271,"stem":272,"icon":273},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":275,"path":276,"stem":277,"icon":278},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":280,"path":281,"stem":282,"icon":283},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":285,"path":286,"stem":287,"icon":288},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":290,"path":291,"stem":292,"icon":293},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":295,"path":296,"stem":297,"icon":298},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":300,"path":301,"stem":302,"icon":79},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":304,"path":305,"stem":306,"icon":307},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":309,"path":310,"stem":311,"icon":312},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":314,"path":315,"stem":316,"icon":317},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":319,"path":320,"stem":321,"children":322,"page":34},"Use Cases","\u002Fuse-cases","5.use-cases",[323,326,331,359,386,418,439,444,449,453],{"title":41,"path":324,"stem":325,"icon":107},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":327,"path":328,"stem":329,"icon":330},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":332,"icon":333,"path":334,"stem":335,"children":336,"page":34},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[337,340,345,350,355],{"title":41,"path":338,"stem":339,"icon":44},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":341,"path":342,"stem":343,"icon":344},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":346,"path":347,"stem":348,"icon":349},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":351,"path":352,"stem":353,"icon":354},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":356,"path":357,"stem":358,"icon":137},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry",{"title":360,"icon":361,"path":362,"stem":363,"children":364,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[365,368,373,378,382],{"title":41,"path":366,"stem":367,"icon":44},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":369,"path":370,"stem":371,"icon":372},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":374,"path":375,"stem":376,"icon":377},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":379,"path":380,"stem":381,"icon":330},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":383,"path":384,"stem":385,"icon":112},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":387,"icon":388,"path":389,"stem":390,"children":391,"page":34},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[392,395,400,405,410,414],{"title":41,"path":393,"stem":394,"icon":44},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":396,"path":397,"stem":398,"icon":399},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":401,"path":402,"stem":403,"icon":404},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":406,"path":407,"stem":408,"icon":409},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":411,"path":412,"stem":413,"icon":388},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":415,"path":416,"stem":417,"icon":84},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":356,"icon":112,"path":419,"stem":420,"children":421,"page":34},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[422,425,430,435],{"title":41,"path":423,"stem":424,"icon":44},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":426,"path":427,"stem":428,"icon":429},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":431,"path":432,"stem":433,"icon":434},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":436,"path":437,"stem":438,"icon":84},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":440,"path":441,"stem":442,"icon":443},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":445,"path":446,"stem":447,"icon":448},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":450,"path":451,"stem":452,"icon":434},"Node.js request logging","\u002Fuse-cases\u002Fstructured-logging-nodejs","5.use-cases\u002F6.structured-logging-nodejs",{"title":454,"icon":455,"path":456,"stem":457,"children":458,"page":34},"Signals","i-lucide-scan-search","\u002Fuse-cases\u002Fsignals","5.use-cases\u002F7.signals",[459,462,467,472,475],{"title":41,"path":460,"stem":461,"icon":44},"\u002Fuse-cases\u002Fsignals\u002Foverview","5.use-cases\u002F7.signals\u002F01.overview",{"title":463,"path":464,"stem":465,"icon":466},"What You Can Ask","\u002Fuse-cases\u002Fsignals\u002Fask","5.use-cases\u002F7.signals\u002F02.ask","i-lucide-message-circle-question",{"title":468,"path":469,"stem":470,"icon":471},"What It Costs","\u002Fuse-cases\u002Fsignals\u002Fcost","5.use-cases\u002F7.signals\u002F03.cost","i-lucide-coins",{"title":436,"path":473,"stem":474,"icon":84},"\u002Fuse-cases\u002Fsignals\u002Freference","5.use-cases\u002F7.signals\u002F04.reference",{"title":415,"path":476,"stem":477,"icon":478},"\u002Fuse-cases\u002Fsignals\u002Frecipes","5.use-cases\u002F7.signals\u002F05.recipes","i-lucide-lightbulb",{"title":480,"path":481,"stem":482,"children":483,"page":34},"Extend","\u002Fextend","6.extend",[484,488,493,498,502,507,511,515,519,523,528,533],{"title":41,"path":485,"stem":486,"icon":487},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":489,"path":490,"stem":491,"icon":492},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":494,"path":495,"stem":496,"icon":497},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":499,"path":500,"stem":501,"icon":492},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":503,"path":504,"stem":505,"icon":506},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":415,"path":508,"stem":509,"icon":510},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":512,"path":513,"stem":514,"icon":487},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":516,"path":517,"stem":518,"icon":443},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":520,"path":521,"stem":522,"icon":69},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":524,"path":525,"stem":526,"icon":527},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":529,"path":530,"stem":531,"icon":532},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":534,"path":535,"stem":536,"icon":537},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":436,"path":539,"stem":540,"children":541,"page":34},"\u002Freference","7.reference",[542,546,551,554,559,563,568,572],{"title":41,"path":543,"stem":544,"icon":545},"\u002Freference\u002Foverview","7.reference\u002F0.overview","i-lucide-book-marked",{"title":547,"path":548,"stem":549,"icon":550},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":383,"path":552,"stem":553,"icon":112},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":555,"path":556,"stem":557,"icon":558},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":560,"path":561,"stem":562,"icon":388},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":564,"path":565,"stem":566,"icon":567},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":569,"path":570,"stem":571,"icon":443},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":573,"path":574,"stem":575,"icon":576},"Cost","\u002Freference\u002Fcost","7.reference\u002F7.cost","i-lucide-receipt",{"title":578,"path":579,"stem":580,"children":581,"page":34},"Compare","\u002Fcompare","8.compare",[582,586,590,594,598],{"title":583,"path":584,"stem":585,"icon":567},"evlog vs Pino","\u002Fcompare\u002Fpino","8.compare\u002F1.pino",{"title":587,"path":588,"stem":589,"icon":204},"evlog vs OpenTelemetry","\u002Fcompare\u002Fopentelemetry","8.compare\u002F2.opentelemetry",{"title":591,"path":592,"stem":593,"icon":567},"evlog vs LogTape","\u002Fcompare\u002Flogtape","8.compare\u002F3.logtape",{"title":595,"path":596,"stem":597,"icon":567},"evlog vs Winston: formats and request events","\u002Fcompare\u002Fwinston","8.compare\u002F4.winston",{"title":599,"path":600,"stem":601,"icon":567},"evlog vs Consola: reporters and request context","\u002Fcompare\u002Fconsola","8.compare\u002F5.consola",{"id":603,"title":604,"body":605,"description":6715,"extension":6716,"links":6717,"meta":6722,"navigation":6723,"path":535,"seo":6724,"stem":536,"__hash__":6725},"docs\u002F6.extend\u002F9.drain-pipeline.md","Drain Pipeline",{"type":606,"value":607,"toc":6686},"minimark",[608,618,621,683,783,787,790,3472,3491,3495,3520,3525,3550,3553,3871,3875,4012,4016,4071,4075,4082,4155,4158,4189,4204,4207,4210,4217,4286,4290,4711,4715,4738,4742,4745,5015,5021,5025,5028,5263,5272,5275,5290,5313,5374,5377,5533,5537,5579,5583,5590,5602,5783,5789,5792,5979,5983,5989,6098,6104,6166,6170,6183,6188,6192,6195,6286,6309,6313,6319,6601,6610,6614,6648,6652,6682],[609,610,611,612,617],"p",{},"In production, sending one HTTP request per emitted event doesn't scale. The drain pipeline buffers events and sends them in batches, retries on transient failures, drops the oldest events when the buffer overflows, and lets a single drain function fan out to several destinations in parallel. The same pipeline powers the ",[613,614,616],"a",{"href":615},"#http-drain-browser-to-server","HTTP browser drain"," used for client-side logs.",[619,620],"drain-pipeline-batching",{},[622,623,624,637],"table",{},[625,626,627],"thead",{},[628,629,630,634],"tr",{},[631,632,633],"th",{},"You want to…",[631,635,636],{},"See",[638,639,640,652,663,673],"tbody",{},[628,641,642,646],{},[643,644,645],"td",{},"Wrap any drain in batch + retry + buffer",[643,647,648],{},[613,649,651],{"href":650},"#quick-start","Quick start",[628,653,654,657],{},[643,655,656],{},"Send each event to several destinations in parallel",[643,658,659],{},[613,660,662],{"href":661},"#fanout","Fanout",[628,664,665,668],{},[643,666,667],{},"Ship browser logs to your server endpoint",[643,669,670],{},[613,671,672],{"href":615},"HTTP drain (browser to server)",[628,674,675,678],{},[643,676,677],{},"Tune batch size, retry strategy, buffer size",[643,679,680],{},[613,681,547],{"href":682},"#configuration",[684,685,688,691,770],"prompt",{":actions":686,"description":687,"icon":537},"[\"copy\",\"cursor\",\"claude\"]","Add the drain pipeline (batch + retry + fanout)",[609,689,690],{},"Wrap my evlog drain in the shared pipeline so it batches, retries, and survives transient failures.",[692,693,694,706,712,730,741,767],"ul",{},[695,696,697,698,702,703],"li",{},"Import ",[699,700,701],"code",{},"createDrainPipeline"," from ",[699,704,705],{},"evlog\u002Fpipeline",[695,707,708,709],{},"Wrap the underlying drain: ",[699,710,711],{},"const drain = createDrainPipeline\u003CDrainContext>()(createAxiomDrain())",[695,713,714,715,718,719,722,723,726,727],{},"Configure ",[699,716,717],{},"batch"," (size + intervalMs), ",[699,720,721],{},"retry"," (maxAttempts + backoff), and ",[699,724,725],{},"maxBufferSize"," (oldest events drop on overflow). Sane defaults: ",[699,728,729],{},"{ batch: { size: 50, intervalMs: 5000 }, retry: { maxAttempts: 3 } }",[695,731,732,733,736,737,740],{},"For multiple destinations, write a single drain function that fans out internally with ",[699,734,735],{},"Promise.allSettled([drainA(batch), drainB(batch)])"," and pass that to ",[699,738,739],{},"pipeline(...)",". One shared buffer, one shared retry budget",[695,742,743,744,747,748,751,752,755,756,759,760,763,764],{},"On shutdown, call ",[699,745,746],{},"drain.flush()"," to push buffered events (Nitro ",[699,749,750],{},"close"," hook, Standalone before ",[699,753,754],{},"process.exit","). On serverless, passing the pipeline as the ",[699,757,758],{},"drain"," option is enough: the middleware registers ",[699,761,762],{},"drain.settled()"," with the runtime's ",[699,765,766],{},"waitUntil",[695,768,769],{},"Always use the pipeline in production. Direct drains make one HTTP call per event and fall over fast",[609,771,772,773,778,779],{},"Docs: ",[613,774,775],{"href":775,"rel":776},"https:\u002F\u002Fwww.evlog.dev\u002Fextend\u002Fdrain-pipeline",[777],"nofollow","\nAdapters: ",[613,780,781],{"href":781,"rel":782},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fadapters\u002Foverview",[777],[784,785,651],"h2",{"id":786},"quick-start",[609,788,789],{},"The pipeline wraps any drain. The wiring depends on your framework, so pick the tab that matches yours; every other example below uses the same shape.",[791,792,793,1052,1240,1467,1661,1870,2077,2259,2437,2619,2797,2975,3164,3308],"framework-tabs",{},[794,795,801],"pre",{"className":796,"code":797,"filename":240,"language":798,"meta":799,"style":800},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nexport default defineNitroPlugin((nitroApp) => {\n  const pipeline = createDrainPipeline\u003CDrainContext>()\n  const drain = pipeline(createAxiomDrain())\n\n  nitroApp.hooks.hook('evlog:drain', drain)\n  nitroApp.hooks.hook('close', () => drain.flush())\n})\n","typescript","server\u002Fplugins\u002Fevlog-drain.ts","",[699,802,803,839,859,880,887,919,947,967,972,1007,1044],{"__ignoreMap":800},[804,805,808,812,815,819,823,826,829,832,836],"span",{"class":806,"line":807},"line",1,[804,809,811],{"class":810},"s7zQu","import",[804,813,814],{"class":810}," type",[804,816,818],{"class":817},"sMK4o"," {",[804,820,822],{"class":821},"sTEyZ"," DrainContext",[804,824,825],{"class":817}," }",[804,827,828],{"class":810}," from",[804,830,831],{"class":817}," '",[804,833,835],{"class":834},"sfazB","evlog",[804,837,838],{"class":817},"'\n",[804,840,842,844,846,849,851,853,855,857],{"class":806,"line":841},2,[804,843,811],{"class":810},[804,845,818],{"class":817},[804,847,848],{"class":821}," createDrainPipeline",[804,850,825],{"class":817},[804,852,828],{"class":810},[804,854,831],{"class":817},[804,856,705],{"class":834},[804,858,838],{"class":817},[804,860,862,864,866,869,871,873,875,878],{"class":806,"line":861},3,[804,863,811],{"class":810},[804,865,818],{"class":817},[804,867,868],{"class":821}," createAxiomDrain",[804,870,825],{"class":817},[804,872,828],{"class":810},[804,874,831],{"class":817},[804,876,877],{"class":834},"evlog\u002Faxiom",[804,879,838],{"class":817},[804,881,883],{"class":806,"line":882},4,[804,884,886],{"emptyLinePlaceholder":885},true,"\n",[804,888,890,893,896,900,903,905,909,912,916],{"class":806,"line":889},5,[804,891,892],{"class":810},"export",[804,894,895],{"class":810}," default",[804,897,899],{"class":898},"s2Zo4"," defineNitroPlugin",[804,901,902],{"class":821},"(",[804,904,902],{"class":817},[804,906,908],{"class":907},"sHdIc","nitroApp",[804,910,911],{"class":817},")",[804,913,915],{"class":914},"spNyl"," =>",[804,917,918],{"class":817}," {\n",[804,920,922,925,928,931,933,936,940,943],{"class":806,"line":921},6,[804,923,924],{"class":914},"  const",[804,926,927],{"class":821}," pipeline",[804,929,930],{"class":817}," =",[804,932,848],{"class":898},[804,934,935],{"class":817},"\u003C",[804,937,939],{"class":938},"sBMFI","DrainContext",[804,941,942],{"class":817},">",[804,944,946],{"class":945},"swJcz","()\n",[804,948,950,952,955,957,959,961,964],{"class":806,"line":949},7,[804,951,924],{"class":914},[804,953,954],{"class":821}," drain",[804,956,930],{"class":817},[804,958,927],{"class":898},[804,960,902],{"class":945},[804,962,963],{"class":898},"createAxiomDrain",[804,965,966],{"class":945},"())\n",[804,968,970],{"class":806,"line":969},8,[804,971,886],{"emptyLinePlaceholder":885},[804,973,975,978,981,984,986,989,991,994,997,999,1002,1004],{"class":806,"line":974},9,[804,976,977],{"class":821},"  nitroApp",[804,979,980],{"class":817},".",[804,982,983],{"class":821},"hooks",[804,985,980],{"class":817},[804,987,988],{"class":898},"hook",[804,990,902],{"class":945},[804,992,993],{"class":817},"'",[804,995,996],{"class":834},"evlog:drain",[804,998,993],{"class":817},[804,1000,1001],{"class":817},",",[804,1003,954],{"class":821},[804,1005,1006],{"class":945},")\n",[804,1008,1010,1012,1014,1016,1018,1020,1022,1024,1026,1028,1030,1033,1035,1037,1039,1042],{"class":806,"line":1009},10,[804,1011,977],{"class":821},[804,1013,980],{"class":817},[804,1015,983],{"class":821},[804,1017,980],{"class":817},[804,1019,988],{"class":898},[804,1021,902],{"class":945},[804,1023,993],{"class":817},[804,1025,750],{"class":834},[804,1027,993],{"class":817},[804,1029,1001],{"class":817},[804,1031,1032],{"class":817}," ()",[804,1034,915],{"class":914},[804,1036,954],{"class":821},[804,1038,980],{"class":817},[804,1040,1041],{"class":898},"flush",[804,1043,966],{"class":945},[804,1045,1047,1050],{"class":806,"line":1046},11,[804,1048,1049],{"class":817},"}",[804,1051,1006],{"class":821},[794,1053,1054],{"className":796,"code":797,"filename":255,"language":798,"meta":799,"style":800},[699,1055,1056,1076,1094,1112,1116,1136,1154,1170,1174,1200,1234],{"__ignoreMap":800},[804,1057,1058,1060,1062,1064,1066,1068,1070,1072,1074],{"class":806,"line":807},[804,1059,811],{"class":810},[804,1061,814],{"class":810},[804,1063,818],{"class":817},[804,1065,822],{"class":821},[804,1067,825],{"class":817},[804,1069,828],{"class":810},[804,1071,831],{"class":817},[804,1073,835],{"class":834},[804,1075,838],{"class":817},[804,1077,1078,1080,1082,1084,1086,1088,1090,1092],{"class":806,"line":841},[804,1079,811],{"class":810},[804,1081,818],{"class":817},[804,1083,848],{"class":821},[804,1085,825],{"class":817},[804,1087,828],{"class":810},[804,1089,831],{"class":817},[804,1091,705],{"class":834},[804,1093,838],{"class":817},[804,1095,1096,1098,1100,1102,1104,1106,1108,1110],{"class":806,"line":861},[804,1097,811],{"class":810},[804,1099,818],{"class":817},[804,1101,868],{"class":821},[804,1103,825],{"class":817},[804,1105,828],{"class":810},[804,1107,831],{"class":817},[804,1109,877],{"class":834},[804,1111,838],{"class":817},[804,1113,1114],{"class":806,"line":882},[804,1115,886],{"emptyLinePlaceholder":885},[804,1117,1118,1120,1122,1124,1126,1128,1130,1132,1134],{"class":806,"line":889},[804,1119,892],{"class":810},[804,1121,895],{"class":810},[804,1123,899],{"class":898},[804,1125,902],{"class":821},[804,1127,902],{"class":817},[804,1129,908],{"class":907},[804,1131,911],{"class":817},[804,1133,915],{"class":914},[804,1135,918],{"class":817},[804,1137,1138,1140,1142,1144,1146,1148,1150,1152],{"class":806,"line":921},[804,1139,924],{"class":914},[804,1141,927],{"class":821},[804,1143,930],{"class":817},[804,1145,848],{"class":898},[804,1147,935],{"class":817},[804,1149,939],{"class":938},[804,1151,942],{"class":817},[804,1153,946],{"class":945},[804,1155,1156,1158,1160,1162,1164,1166,1168],{"class":806,"line":949},[804,1157,924],{"class":914},[804,1159,954],{"class":821},[804,1161,930],{"class":817},[804,1163,927],{"class":898},[804,1165,902],{"class":945},[804,1167,963],{"class":898},[804,1169,966],{"class":945},[804,1171,1172],{"class":806,"line":969},[804,1173,886],{"emptyLinePlaceholder":885},[804,1175,1176,1178,1180,1182,1184,1186,1188,1190,1192,1194,1196,1198],{"class":806,"line":974},[804,1177,977],{"class":821},[804,1179,980],{"class":817},[804,1181,983],{"class":821},[804,1183,980],{"class":817},[804,1185,988],{"class":898},[804,1187,902],{"class":945},[804,1189,993],{"class":817},[804,1191,996],{"class":834},[804,1193,993],{"class":817},[804,1195,1001],{"class":817},[804,1197,954],{"class":821},[804,1199,1006],{"class":945},[804,1201,1202,1204,1206,1208,1210,1212,1214,1216,1218,1220,1222,1224,1226,1228,1230,1232],{"class":806,"line":1009},[804,1203,977],{"class":821},[804,1205,980],{"class":817},[804,1207,983],{"class":821},[804,1209,980],{"class":817},[804,1211,988],{"class":898},[804,1213,902],{"class":945},[804,1215,993],{"class":817},[804,1217,750],{"class":834},[804,1219,993],{"class":817},[804,1221,1001],{"class":817},[804,1223,1032],{"class":817},[804,1225,915],{"class":914},[804,1227,954],{"class":821},[804,1229,980],{"class":817},[804,1231,1041],{"class":898},[804,1233,966],{"class":945},[804,1235,1236,1238],{"class":806,"line":1046},[804,1237,1049],{"class":817},[804,1239,1006],{"class":821},[794,1241,1244],{"className":796,"code":1242,"filename":245,"language":798,"meta":1243,"style":800},"import type { DrainContext } from 'evlog'\nimport { createEvlog } from 'evlog\u002Fnext'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>()\nconst drain = pipeline(createAxiomDrain())\n\nexport const { withEvlog, useLogger, log, createError } = createEvlog({\n  service: 'my-app',\n  drain,\n})\n\nexport const flushEvlog = () => drain.flush()\n","lib\u002Fevlog.ts",[699,1245,1246,1266,1286,1304,1322,1326,1347,1364,1368,1406,1424,1431,1438,1443],{"__ignoreMap":800},[804,1247,1248,1250,1252,1254,1256,1258,1260,1262,1264],{"class":806,"line":807},[804,1249,811],{"class":810},[804,1251,814],{"class":810},[804,1253,818],{"class":817},[804,1255,822],{"class":821},[804,1257,825],{"class":817},[804,1259,828],{"class":810},[804,1261,831],{"class":817},[804,1263,835],{"class":834},[804,1265,838],{"class":817},[804,1267,1268,1270,1272,1275,1277,1279,1281,1284],{"class":806,"line":841},[804,1269,811],{"class":810},[804,1271,818],{"class":817},[804,1273,1274],{"class":821}," createEvlog",[804,1276,825],{"class":817},[804,1278,828],{"class":810},[804,1280,831],{"class":817},[804,1282,1283],{"class":834},"evlog\u002Fnext",[804,1285,838],{"class":817},[804,1287,1288,1290,1292,1294,1296,1298,1300,1302],{"class":806,"line":861},[804,1289,811],{"class":810},[804,1291,818],{"class":817},[804,1293,848],{"class":821},[804,1295,825],{"class":817},[804,1297,828],{"class":810},[804,1299,831],{"class":817},[804,1301,705],{"class":834},[804,1303,838],{"class":817},[804,1305,1306,1308,1310,1312,1314,1316,1318,1320],{"class":806,"line":882},[804,1307,811],{"class":810},[804,1309,818],{"class":817},[804,1311,868],{"class":821},[804,1313,825],{"class":817},[804,1315,828],{"class":810},[804,1317,831],{"class":817},[804,1319,877],{"class":834},[804,1321,838],{"class":817},[804,1323,1324],{"class":806,"line":889},[804,1325,886],{"emptyLinePlaceholder":885},[804,1327,1328,1331,1334,1337,1339,1341,1343,1345],{"class":806,"line":921},[804,1329,1330],{"class":914},"const",[804,1332,1333],{"class":821}," pipeline ",[804,1335,1336],{"class":817},"=",[804,1338,848],{"class":898},[804,1340,935],{"class":817},[804,1342,939],{"class":938},[804,1344,942],{"class":817},[804,1346,946],{"class":821},[804,1348,1349,1351,1354,1356,1358,1360,1362],{"class":806,"line":949},[804,1350,1330],{"class":914},[804,1352,1353],{"class":821}," drain ",[804,1355,1336],{"class":817},[804,1357,927],{"class":898},[804,1359,902],{"class":821},[804,1361,963],{"class":898},[804,1363,966],{"class":821},[804,1365,1366],{"class":806,"line":969},[804,1367,886],{"emptyLinePlaceholder":885},[804,1369,1370,1372,1375,1377,1380,1382,1385,1387,1390,1392,1395,1397,1399,1401,1403],{"class":806,"line":974},[804,1371,892],{"class":810},[804,1373,1374],{"class":914}," const",[804,1376,818],{"class":817},[804,1378,1379],{"class":821}," withEvlog",[804,1381,1001],{"class":817},[804,1383,1384],{"class":821}," useLogger",[804,1386,1001],{"class":817},[804,1388,1389],{"class":821}," log",[804,1391,1001],{"class":817},[804,1393,1394],{"class":821}," createError ",[804,1396,1049],{"class":817},[804,1398,930],{"class":817},[804,1400,1274],{"class":898},[804,1402,902],{"class":821},[804,1404,1405],{"class":817},"{\n",[804,1407,1408,1411,1414,1416,1419,1421],{"class":806,"line":1009},[804,1409,1410],{"class":945},"  service",[804,1412,1413],{"class":817},":",[804,1415,831],{"class":817},[804,1417,1418],{"class":834},"my-app",[804,1420,993],{"class":817},[804,1422,1423],{"class":817},",\n",[804,1425,1426,1429],{"class":806,"line":1046},[804,1427,1428],{"class":821},"  drain",[804,1430,1423],{"class":817},[804,1432,1434,1436],{"class":806,"line":1433},12,[804,1435,1049],{"class":817},[804,1437,1006],{"class":821},[804,1439,1441],{"class":806,"line":1440},13,[804,1442,886],{"emptyLinePlaceholder":885},[804,1444,1446,1448,1450,1453,1455,1457,1459,1461,1463,1465],{"class":806,"line":1445},14,[804,1447,892],{"class":810},[804,1449,1374],{"class":914},[804,1451,1452],{"class":821}," flushEvlog ",[804,1454,1336],{"class":817},[804,1456,1032],{"class":817},[804,1458,915],{"class":914},[804,1460,954],{"class":821},[804,1462,980],{"class":817},[804,1464,1041],{"class":898},[804,1466,946],{"class":821},[794,1468,1471],{"className":796,"code":1469,"filename":250,"language":798,"meta":1470,"style":800},"import { createEvlogHooks } from 'evlog\u002Fsveltekit'\nimport type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>()\nconst drain = pipeline(createAxiomDrain())\n\nexport const { handle, handleError } = createEvlogHooks({ drain })\n\nprocess.on('SIGTERM', () => drain.flush())\n","src\u002Fhooks.server.ts",[699,1472,1473,1493,1513,1531,1549,1553,1571,1587,1591,1624,1628],{"__ignoreMap":800},[804,1474,1475,1477,1479,1482,1484,1486,1488,1491],{"class":806,"line":807},[804,1476,811],{"class":810},[804,1478,818],{"class":817},[804,1480,1481],{"class":821}," createEvlogHooks",[804,1483,825],{"class":817},[804,1485,828],{"class":810},[804,1487,831],{"class":817},[804,1489,1490],{"class":834},"evlog\u002Fsveltekit",[804,1492,838],{"class":817},[804,1494,1495,1497,1499,1501,1503,1505,1507,1509,1511],{"class":806,"line":841},[804,1496,811],{"class":810},[804,1498,814],{"class":810},[804,1500,818],{"class":817},[804,1502,822],{"class":821},[804,1504,825],{"class":817},[804,1506,828],{"class":810},[804,1508,831],{"class":817},[804,1510,835],{"class":834},[804,1512,838],{"class":817},[804,1514,1515,1517,1519,1521,1523,1525,1527,1529],{"class":806,"line":861},[804,1516,811],{"class":810},[804,1518,818],{"class":817},[804,1520,848],{"class":821},[804,1522,825],{"class":817},[804,1524,828],{"class":810},[804,1526,831],{"class":817},[804,1528,705],{"class":834},[804,1530,838],{"class":817},[804,1532,1533,1535,1537,1539,1541,1543,1545,1547],{"class":806,"line":882},[804,1534,811],{"class":810},[804,1536,818],{"class":817},[804,1538,868],{"class":821},[804,1540,825],{"class":817},[804,1542,828],{"class":810},[804,1544,831],{"class":817},[804,1546,877],{"class":834},[804,1548,838],{"class":817},[804,1550,1551],{"class":806,"line":889},[804,1552,886],{"emptyLinePlaceholder":885},[804,1554,1555,1557,1559,1561,1563,1565,1567,1569],{"class":806,"line":921},[804,1556,1330],{"class":914},[804,1558,1333],{"class":821},[804,1560,1336],{"class":817},[804,1562,848],{"class":898},[804,1564,935],{"class":817},[804,1566,939],{"class":938},[804,1568,942],{"class":817},[804,1570,946],{"class":821},[804,1572,1573,1575,1577,1579,1581,1583,1585],{"class":806,"line":949},[804,1574,1330],{"class":914},[804,1576,1353],{"class":821},[804,1578,1336],{"class":817},[804,1580,927],{"class":898},[804,1582,902],{"class":821},[804,1584,963],{"class":898},[804,1586,966],{"class":821},[804,1588,1589],{"class":806,"line":969},[804,1590,886],{"emptyLinePlaceholder":885},[804,1592,1593,1595,1597,1599,1602,1604,1607,1609,1611,1613,1615,1618,1620,1622],{"class":806,"line":974},[804,1594,892],{"class":810},[804,1596,1374],{"class":914},[804,1598,818],{"class":817},[804,1600,1601],{"class":821}," handle",[804,1603,1001],{"class":817},[804,1605,1606],{"class":821}," handleError ",[804,1608,1049],{"class":817},[804,1610,930],{"class":817},[804,1612,1481],{"class":898},[804,1614,902],{"class":821},[804,1616,1617],{"class":817},"{",[804,1619,1353],{"class":821},[804,1621,1049],{"class":817},[804,1623,1006],{"class":821},[804,1625,1626],{"class":806,"line":1009},[804,1627,886],{"emptyLinePlaceholder":885},[804,1629,1630,1633,1635,1638,1640,1642,1645,1647,1649,1651,1653,1655,1657,1659],{"class":806,"line":1046},[804,1631,1632],{"class":821},"process",[804,1634,980],{"class":817},[804,1636,1637],{"class":898},"on",[804,1639,902],{"class":821},[804,1641,993],{"class":817},[804,1643,1644],{"class":834},"SIGTERM",[804,1646,993],{"class":817},[804,1648,1001],{"class":817},[804,1650,1032],{"class":817},[804,1652,915],{"class":914},[804,1654,954],{"class":821},[804,1656,980],{"class":817},[804,1658,1041],{"class":898},[804,1660,966],{"class":821},[794,1662,1664],{"className":796,"code":1663,"filename":260,"language":798,"meta":799,"style":800},"import { definePlugin } from 'nitro'\nimport type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nexport default definePlugin((nitroApp) => {\n  const pipeline = createDrainPipeline\u003CDrainContext>()\n  const drain = pipeline(createAxiomDrain())\n\n  nitroApp.hooks.hook('evlog:drain', drain)\n  nitroApp.hooks.hook('close', () => drain.flush())\n})\n",[699,1665,1666,1686,1706,1724,1742,1746,1766,1784,1800,1804,1830,1864],{"__ignoreMap":800},[804,1667,1668,1670,1672,1675,1677,1679,1681,1684],{"class":806,"line":807},[804,1669,811],{"class":810},[804,1671,818],{"class":817},[804,1673,1674],{"class":821}," definePlugin",[804,1676,825],{"class":817},[804,1678,828],{"class":810},[804,1680,831],{"class":817},[804,1682,1683],{"class":834},"nitro",[804,1685,838],{"class":817},[804,1687,1688,1690,1692,1694,1696,1698,1700,1702,1704],{"class":806,"line":841},[804,1689,811],{"class":810},[804,1691,814],{"class":810},[804,1693,818],{"class":817},[804,1695,822],{"class":821},[804,1697,825],{"class":817},[804,1699,828],{"class":810},[804,1701,831],{"class":817},[804,1703,835],{"class":834},[804,1705,838],{"class":817},[804,1707,1708,1710,1712,1714,1716,1718,1720,1722],{"class":806,"line":861},[804,1709,811],{"class":810},[804,1711,818],{"class":817},[804,1713,848],{"class":821},[804,1715,825],{"class":817},[804,1717,828],{"class":810},[804,1719,831],{"class":817},[804,1721,705],{"class":834},[804,1723,838],{"class":817},[804,1725,1726,1728,1730,1732,1734,1736,1738,1740],{"class":806,"line":882},[804,1727,811],{"class":810},[804,1729,818],{"class":817},[804,1731,868],{"class":821},[804,1733,825],{"class":817},[804,1735,828],{"class":810},[804,1737,831],{"class":817},[804,1739,877],{"class":834},[804,1741,838],{"class":817},[804,1743,1744],{"class":806,"line":889},[804,1745,886],{"emptyLinePlaceholder":885},[804,1747,1748,1750,1752,1754,1756,1758,1760,1762,1764],{"class":806,"line":921},[804,1749,892],{"class":810},[804,1751,895],{"class":810},[804,1753,1674],{"class":898},[804,1755,902],{"class":821},[804,1757,902],{"class":817},[804,1759,908],{"class":907},[804,1761,911],{"class":817},[804,1763,915],{"class":914},[804,1765,918],{"class":817},[804,1767,1768,1770,1772,1774,1776,1778,1780,1782],{"class":806,"line":949},[804,1769,924],{"class":914},[804,1771,927],{"class":821},[804,1773,930],{"class":817},[804,1775,848],{"class":898},[804,1777,935],{"class":817},[804,1779,939],{"class":938},[804,1781,942],{"class":817},[804,1783,946],{"class":945},[804,1785,1786,1788,1790,1792,1794,1796,1798],{"class":806,"line":969},[804,1787,924],{"class":914},[804,1789,954],{"class":821},[804,1791,930],{"class":817},[804,1793,927],{"class":898},[804,1795,902],{"class":945},[804,1797,963],{"class":898},[804,1799,966],{"class":945},[804,1801,1802],{"class":806,"line":974},[804,1803,886],{"emptyLinePlaceholder":885},[804,1805,1806,1808,1810,1812,1814,1816,1818,1820,1822,1824,1826,1828],{"class":806,"line":1009},[804,1807,977],{"class":821},[804,1809,980],{"class":817},[804,1811,983],{"class":821},[804,1813,980],{"class":817},[804,1815,988],{"class":898},[804,1817,902],{"class":945},[804,1819,993],{"class":817},[804,1821,996],{"class":834},[804,1823,993],{"class":817},[804,1825,1001],{"class":817},[804,1827,954],{"class":821},[804,1829,1006],{"class":945},[804,1831,1832,1834,1836,1838,1840,1842,1844,1846,1848,1850,1852,1854,1856,1858,1860,1862],{"class":806,"line":1046},[804,1833,977],{"class":821},[804,1835,980],{"class":817},[804,1837,983],{"class":821},[804,1839,980],{"class":817},[804,1841,988],{"class":898},[804,1843,902],{"class":945},[804,1845,993],{"class":817},[804,1847,750],{"class":834},[804,1849,993],{"class":817},[804,1851,1001],{"class":817},[804,1853,1032],{"class":817},[804,1855,915],{"class":914},[804,1857,954],{"class":821},[804,1859,980],{"class":817},[804,1861,1041],{"class":898},[804,1863,966],{"class":945},[804,1865,1866,1868],{"class":806,"line":1433},[804,1867,1049],{"class":817},[804,1869,1006],{"class":821},[794,1871,1874],{"className":796,"code":1872,"filename":290,"language":798,"meta":1873,"style":800},"import { evlog } from 'evlog\u002Freact-router'\nimport type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>()\nconst drain = pipeline(createAxiomDrain())\n\nexport const middleware: Route.MiddlewareFunction[] = [\n  evlog({ drain }),\n]\n\nprocess.on('SIGTERM', () => drain.flush())\n","app\u002Froot.tsx",[699,1875,1876,1896,1916,1934,1952,1956,1974,1990,1994,2021,2038,2043,2047],{"__ignoreMap":800},[804,1877,1878,1880,1882,1885,1887,1889,1891,1894],{"class":806,"line":807},[804,1879,811],{"class":810},[804,1881,818],{"class":817},[804,1883,1884],{"class":821}," evlog",[804,1886,825],{"class":817},[804,1888,828],{"class":810},[804,1890,831],{"class":817},[804,1892,1893],{"class":834},"evlog\u002Freact-router",[804,1895,838],{"class":817},[804,1897,1898,1900,1902,1904,1906,1908,1910,1912,1914],{"class":806,"line":841},[804,1899,811],{"class":810},[804,1901,814],{"class":810},[804,1903,818],{"class":817},[804,1905,822],{"class":821},[804,1907,825],{"class":817},[804,1909,828],{"class":810},[804,1911,831],{"class":817},[804,1913,835],{"class":834},[804,1915,838],{"class":817},[804,1917,1918,1920,1922,1924,1926,1928,1930,1932],{"class":806,"line":861},[804,1919,811],{"class":810},[804,1921,818],{"class":817},[804,1923,848],{"class":821},[804,1925,825],{"class":817},[804,1927,828],{"class":810},[804,1929,831],{"class":817},[804,1931,705],{"class":834},[804,1933,838],{"class":817},[804,1935,1936,1938,1940,1942,1944,1946,1948,1950],{"class":806,"line":882},[804,1937,811],{"class":810},[804,1939,818],{"class":817},[804,1941,868],{"class":821},[804,1943,825],{"class":817},[804,1945,828],{"class":810},[804,1947,831],{"class":817},[804,1949,877],{"class":834},[804,1951,838],{"class":817},[804,1953,1954],{"class":806,"line":889},[804,1955,886],{"emptyLinePlaceholder":885},[804,1957,1958,1960,1962,1964,1966,1968,1970,1972],{"class":806,"line":921},[804,1959,1330],{"class":914},[804,1961,1333],{"class":821},[804,1963,1336],{"class":817},[804,1965,848],{"class":898},[804,1967,935],{"class":817},[804,1969,939],{"class":938},[804,1971,942],{"class":817},[804,1973,946],{"class":821},[804,1975,1976,1978,1980,1982,1984,1986,1988],{"class":806,"line":949},[804,1977,1330],{"class":914},[804,1979,1353],{"class":821},[804,1981,1336],{"class":817},[804,1983,927],{"class":898},[804,1985,902],{"class":821},[804,1987,963],{"class":898},[804,1989,966],{"class":821},[804,1991,1992],{"class":806,"line":969},[804,1993,886],{"emptyLinePlaceholder":885},[804,1995,1996,1998,2000,2003,2005,2008,2010,2013,2016,2018],{"class":806,"line":974},[804,1997,892],{"class":810},[804,1999,1374],{"class":914},[804,2001,2002],{"class":821}," middleware",[804,2004,1413],{"class":817},[804,2006,2007],{"class":938}," Route",[804,2009,980],{"class":817},[804,2011,2012],{"class":938},"MiddlewareFunction",[804,2014,2015],{"class":821},"[] ",[804,2017,1336],{"class":817},[804,2019,2020],{"class":821}," [\n",[804,2022,2023,2026,2028,2030,2032,2034,2036],{"class":806,"line":1009},[804,2024,2025],{"class":898},"  evlog",[804,2027,902],{"class":821},[804,2029,1617],{"class":817},[804,2031,1353],{"class":821},[804,2033,1049],{"class":817},[804,2035,911],{"class":821},[804,2037,1423],{"class":817},[804,2039,2040],{"class":806,"line":1046},[804,2041,2042],{"class":821},"]\n",[804,2044,2045],{"class":806,"line":1433},[804,2046,886],{"emptyLinePlaceholder":885},[804,2048,2049,2051,2053,2055,2057,2059,2061,2063,2065,2067,2069,2071,2073,2075],{"class":806,"line":1440},[804,2050,1632],{"class":821},[804,2052,980],{"class":817},[804,2054,1637],{"class":898},[804,2056,902],{"class":821},[804,2058,993],{"class":817},[804,2060,1644],{"class":834},[804,2062,993],{"class":817},[804,2064,1001],{"class":817},[804,2066,1032],{"class":817},[804,2068,915],{"class":914},[804,2070,954],{"class":821},[804,2072,980],{"class":817},[804,2074,1041],{"class":898},[804,2076,966],{"class":821},[794,2078,2081],{"className":796,"code":2079,"filename":275,"language":798,"meta":2080,"style":800},"import { evlog } from 'evlog\u002Fhono'\nimport type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>()\nconst drain = pipeline(createAxiomDrain())\n\napp.use(evlog({ drain }))\n\nprocess.on('SIGTERM', () => drain.flush())\n","src\u002Findex.ts",[699,2082,2083,2102,2122,2140,2158,2162,2180,2196,2200,2225,2229],{"__ignoreMap":800},[804,2084,2085,2087,2089,2091,2093,2095,2097,2100],{"class":806,"line":807},[804,2086,811],{"class":810},[804,2088,818],{"class":817},[804,2090,1884],{"class":821},[804,2092,825],{"class":817},[804,2094,828],{"class":810},[804,2096,831],{"class":817},[804,2098,2099],{"class":834},"evlog\u002Fhono",[804,2101,838],{"class":817},[804,2103,2104,2106,2108,2110,2112,2114,2116,2118,2120],{"class":806,"line":841},[804,2105,811],{"class":810},[804,2107,814],{"class":810},[804,2109,818],{"class":817},[804,2111,822],{"class":821},[804,2113,825],{"class":817},[804,2115,828],{"class":810},[804,2117,831],{"class":817},[804,2119,835],{"class":834},[804,2121,838],{"class":817},[804,2123,2124,2126,2128,2130,2132,2134,2136,2138],{"class":806,"line":861},[804,2125,811],{"class":810},[804,2127,818],{"class":817},[804,2129,848],{"class":821},[804,2131,825],{"class":817},[804,2133,828],{"class":810},[804,2135,831],{"class":817},[804,2137,705],{"class":834},[804,2139,838],{"class":817},[804,2141,2142,2144,2146,2148,2150,2152,2154,2156],{"class":806,"line":882},[804,2143,811],{"class":810},[804,2145,818],{"class":817},[804,2147,868],{"class":821},[804,2149,825],{"class":817},[804,2151,828],{"class":810},[804,2153,831],{"class":817},[804,2155,877],{"class":834},[804,2157,838],{"class":817},[804,2159,2160],{"class":806,"line":889},[804,2161,886],{"emptyLinePlaceholder":885},[804,2163,2164,2166,2168,2170,2172,2174,2176,2178],{"class":806,"line":921},[804,2165,1330],{"class":914},[804,2167,1333],{"class":821},[804,2169,1336],{"class":817},[804,2171,848],{"class":898},[804,2173,935],{"class":817},[804,2175,939],{"class":938},[804,2177,942],{"class":817},[804,2179,946],{"class":821},[804,2181,2182,2184,2186,2188,2190,2192,2194],{"class":806,"line":949},[804,2183,1330],{"class":914},[804,2185,1353],{"class":821},[804,2187,1336],{"class":817},[804,2189,927],{"class":898},[804,2191,902],{"class":821},[804,2193,963],{"class":898},[804,2195,966],{"class":821},[804,2197,2198],{"class":806,"line":969},[804,2199,886],{"emptyLinePlaceholder":885},[804,2201,2202,2205,2207,2210,2212,2214,2216,2218,2220,2222],{"class":806,"line":974},[804,2203,2204],{"class":821},"app",[804,2206,980],{"class":817},[804,2208,2209],{"class":898},"use",[804,2211,902],{"class":821},[804,2213,835],{"class":898},[804,2215,902],{"class":821},[804,2217,1617],{"class":817},[804,2219,1353],{"class":821},[804,2221,1049],{"class":817},[804,2223,2224],{"class":821},"))\n",[804,2226,2227],{"class":806,"line":1009},[804,2228,886],{"emptyLinePlaceholder":885},[804,2230,2231,2233,2235,2237,2239,2241,2243,2245,2247,2249,2251,2253,2255,2257],{"class":806,"line":1046},[804,2232,1632],{"class":821},[804,2234,980],{"class":817},[804,2236,1637],{"class":898},[804,2238,902],{"class":821},[804,2240,993],{"class":817},[804,2242,1644],{"class":834},[804,2244,993],{"class":817},[804,2246,1001],{"class":817},[804,2248,1032],{"class":817},[804,2250,915],{"class":914},[804,2252,954],{"class":821},[804,2254,980],{"class":817},[804,2256,1041],{"class":898},[804,2258,966],{"class":821},[794,2260,2262],{"className":796,"code":2261,"filename":270,"language":798,"meta":2080,"style":800},"import { evlog } from 'evlog\u002Fexpress'\nimport type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>()\nconst drain = pipeline(createAxiomDrain())\n\napp.use(evlog({ drain }))\n\nprocess.on('SIGTERM', () => drain.flush())\n",[699,2263,2264,2283,2303,2321,2339,2343,2361,2377,2381,2403,2407],{"__ignoreMap":800},[804,2265,2266,2268,2270,2272,2274,2276,2278,2281],{"class":806,"line":807},[804,2267,811],{"class":810},[804,2269,818],{"class":817},[804,2271,1884],{"class":821},[804,2273,825],{"class":817},[804,2275,828],{"class":810},[804,2277,831],{"class":817},[804,2279,2280],{"class":834},"evlog\u002Fexpress",[804,2282,838],{"class":817},[804,2284,2285,2287,2289,2291,2293,2295,2297,2299,2301],{"class":806,"line":841},[804,2286,811],{"class":810},[804,2288,814],{"class":810},[804,2290,818],{"class":817},[804,2292,822],{"class":821},[804,2294,825],{"class":817},[804,2296,828],{"class":810},[804,2298,831],{"class":817},[804,2300,835],{"class":834},[804,2302,838],{"class":817},[804,2304,2305,2307,2309,2311,2313,2315,2317,2319],{"class":806,"line":861},[804,2306,811],{"class":810},[804,2308,818],{"class":817},[804,2310,848],{"class":821},[804,2312,825],{"class":817},[804,2314,828],{"class":810},[804,2316,831],{"class":817},[804,2318,705],{"class":834},[804,2320,838],{"class":817},[804,2322,2323,2325,2327,2329,2331,2333,2335,2337],{"class":806,"line":882},[804,2324,811],{"class":810},[804,2326,818],{"class":817},[804,2328,868],{"class":821},[804,2330,825],{"class":817},[804,2332,828],{"class":810},[804,2334,831],{"class":817},[804,2336,877],{"class":834},[804,2338,838],{"class":817},[804,2340,2341],{"class":806,"line":889},[804,2342,886],{"emptyLinePlaceholder":885},[804,2344,2345,2347,2349,2351,2353,2355,2357,2359],{"class":806,"line":921},[804,2346,1330],{"class":914},[804,2348,1333],{"class":821},[804,2350,1336],{"class":817},[804,2352,848],{"class":898},[804,2354,935],{"class":817},[804,2356,939],{"class":938},[804,2358,942],{"class":817},[804,2360,946],{"class":821},[804,2362,2363,2365,2367,2369,2371,2373,2375],{"class":806,"line":949},[804,2364,1330],{"class":914},[804,2366,1353],{"class":821},[804,2368,1336],{"class":817},[804,2370,927],{"class":898},[804,2372,902],{"class":821},[804,2374,963],{"class":898},[804,2376,966],{"class":821},[804,2378,2379],{"class":806,"line":969},[804,2380,886],{"emptyLinePlaceholder":885},[804,2382,2383,2385,2387,2389,2391,2393,2395,2397,2399,2401],{"class":806,"line":974},[804,2384,2204],{"class":821},[804,2386,980],{"class":817},[804,2388,2209],{"class":898},[804,2390,902],{"class":821},[804,2392,835],{"class":898},[804,2394,902],{"class":821},[804,2396,1617],{"class":817},[804,2398,1353],{"class":821},[804,2400,1049],{"class":817},[804,2402,2224],{"class":821},[804,2404,2405],{"class":806,"line":1009},[804,2406,886],{"emptyLinePlaceholder":885},[804,2408,2409,2411,2413,2415,2417,2419,2421,2423,2425,2427,2429,2431,2433,2435],{"class":806,"line":1046},[804,2410,1632],{"class":821},[804,2412,980],{"class":817},[804,2414,1637],{"class":898},[804,2416,902],{"class":821},[804,2418,993],{"class":817},[804,2420,1644],{"class":834},[804,2422,993],{"class":817},[804,2424,1001],{"class":817},[804,2426,1032],{"class":817},[804,2428,915],{"class":914},[804,2430,954],{"class":821},[804,2432,980],{"class":817},[804,2434,1041],{"class":898},[804,2436,966],{"class":821},[794,2438,2440],{"className":796,"code":2439,"filename":280,"language":798,"meta":2080,"style":800},"import { evlog } from 'evlog\u002Ffastify'\nimport type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>()\nconst drain = pipeline(createAxiomDrain())\n\nawait app.register(evlog, { drain })\n\nprocess.on('SIGTERM', () => drain.flush())\n",[699,2441,2442,2461,2481,2499,2517,2521,2539,2555,2559,2585,2589],{"__ignoreMap":800},[804,2443,2444,2446,2448,2450,2452,2454,2456,2459],{"class":806,"line":807},[804,2445,811],{"class":810},[804,2447,818],{"class":817},[804,2449,1884],{"class":821},[804,2451,825],{"class":817},[804,2453,828],{"class":810},[804,2455,831],{"class":817},[804,2457,2458],{"class":834},"evlog\u002Ffastify",[804,2460,838],{"class":817},[804,2462,2463,2465,2467,2469,2471,2473,2475,2477,2479],{"class":806,"line":841},[804,2464,811],{"class":810},[804,2466,814],{"class":810},[804,2468,818],{"class":817},[804,2470,822],{"class":821},[804,2472,825],{"class":817},[804,2474,828],{"class":810},[804,2476,831],{"class":817},[804,2478,835],{"class":834},[804,2480,838],{"class":817},[804,2482,2483,2485,2487,2489,2491,2493,2495,2497],{"class":806,"line":861},[804,2484,811],{"class":810},[804,2486,818],{"class":817},[804,2488,848],{"class":821},[804,2490,825],{"class":817},[804,2492,828],{"class":810},[804,2494,831],{"class":817},[804,2496,705],{"class":834},[804,2498,838],{"class":817},[804,2500,2501,2503,2505,2507,2509,2511,2513,2515],{"class":806,"line":882},[804,2502,811],{"class":810},[804,2504,818],{"class":817},[804,2506,868],{"class":821},[804,2508,825],{"class":817},[804,2510,828],{"class":810},[804,2512,831],{"class":817},[804,2514,877],{"class":834},[804,2516,838],{"class":817},[804,2518,2519],{"class":806,"line":889},[804,2520,886],{"emptyLinePlaceholder":885},[804,2522,2523,2525,2527,2529,2531,2533,2535,2537],{"class":806,"line":921},[804,2524,1330],{"class":914},[804,2526,1333],{"class":821},[804,2528,1336],{"class":817},[804,2530,848],{"class":898},[804,2532,935],{"class":817},[804,2534,939],{"class":938},[804,2536,942],{"class":817},[804,2538,946],{"class":821},[804,2540,2541,2543,2545,2547,2549,2551,2553],{"class":806,"line":949},[804,2542,1330],{"class":914},[804,2544,1353],{"class":821},[804,2546,1336],{"class":817},[804,2548,927],{"class":898},[804,2550,902],{"class":821},[804,2552,963],{"class":898},[804,2554,966],{"class":821},[804,2556,2557],{"class":806,"line":969},[804,2558,886],{"emptyLinePlaceholder":885},[804,2560,2561,2564,2567,2569,2572,2575,2577,2579,2581,2583],{"class":806,"line":974},[804,2562,2563],{"class":810},"await",[804,2565,2566],{"class":821}," app",[804,2568,980],{"class":817},[804,2570,2571],{"class":898},"register",[804,2573,2574],{"class":821},"(evlog",[804,2576,1001],{"class":817},[804,2578,818],{"class":817},[804,2580,1353],{"class":821},[804,2582,1049],{"class":817},[804,2584,1006],{"class":821},[804,2586,2587],{"class":806,"line":1009},[804,2588,886],{"emptyLinePlaceholder":885},[804,2590,2591,2593,2595,2597,2599,2601,2603,2605,2607,2609,2611,2613,2615,2617],{"class":806,"line":1046},[804,2592,1632],{"class":821},[804,2594,980],{"class":817},[804,2596,1637],{"class":898},[804,2598,902],{"class":821},[804,2600,993],{"class":817},[804,2602,1644],{"class":834},[804,2604,993],{"class":817},[804,2606,1001],{"class":817},[804,2608,1032],{"class":817},[804,2610,915],{"class":914},[804,2612,954],{"class":821},[804,2614,980],{"class":817},[804,2616,1041],{"class":898},[804,2618,966],{"class":821},[794,2620,2622],{"className":796,"code":2621,"filename":285,"language":798,"meta":2080,"style":800},"import { evlog } from 'evlog\u002Felysia'\nimport type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>()\nconst drain = pipeline(createAxiomDrain())\n\napp.use(evlog({ drain }))\n\nprocess.on('SIGTERM', () => drain.flush())\n",[699,2623,2624,2643,2663,2681,2699,2703,2721,2737,2741,2763,2767],{"__ignoreMap":800},[804,2625,2626,2628,2630,2632,2634,2636,2638,2641],{"class":806,"line":807},[804,2627,811],{"class":810},[804,2629,818],{"class":817},[804,2631,1884],{"class":821},[804,2633,825],{"class":817},[804,2635,828],{"class":810},[804,2637,831],{"class":817},[804,2639,2640],{"class":834},"evlog\u002Felysia",[804,2642,838],{"class":817},[804,2644,2645,2647,2649,2651,2653,2655,2657,2659,2661],{"class":806,"line":841},[804,2646,811],{"class":810},[804,2648,814],{"class":810},[804,2650,818],{"class":817},[804,2652,822],{"class":821},[804,2654,825],{"class":817},[804,2656,828],{"class":810},[804,2658,831],{"class":817},[804,2660,835],{"class":834},[804,2662,838],{"class":817},[804,2664,2665,2667,2669,2671,2673,2675,2677,2679],{"class":806,"line":861},[804,2666,811],{"class":810},[804,2668,818],{"class":817},[804,2670,848],{"class":821},[804,2672,825],{"class":817},[804,2674,828],{"class":810},[804,2676,831],{"class":817},[804,2678,705],{"class":834},[804,2680,838],{"class":817},[804,2682,2683,2685,2687,2689,2691,2693,2695,2697],{"class":806,"line":882},[804,2684,811],{"class":810},[804,2686,818],{"class":817},[804,2688,868],{"class":821},[804,2690,825],{"class":817},[804,2692,828],{"class":810},[804,2694,831],{"class":817},[804,2696,877],{"class":834},[804,2698,838],{"class":817},[804,2700,2701],{"class":806,"line":889},[804,2702,886],{"emptyLinePlaceholder":885},[804,2704,2705,2707,2709,2711,2713,2715,2717,2719],{"class":806,"line":921},[804,2706,1330],{"class":914},[804,2708,1333],{"class":821},[804,2710,1336],{"class":817},[804,2712,848],{"class":898},[804,2714,935],{"class":817},[804,2716,939],{"class":938},[804,2718,942],{"class":817},[804,2720,946],{"class":821},[804,2722,2723,2725,2727,2729,2731,2733,2735],{"class":806,"line":949},[804,2724,1330],{"class":914},[804,2726,1353],{"class":821},[804,2728,1336],{"class":817},[804,2730,927],{"class":898},[804,2732,902],{"class":821},[804,2734,963],{"class":898},[804,2736,966],{"class":821},[804,2738,2739],{"class":806,"line":969},[804,2740,886],{"emptyLinePlaceholder":885},[804,2742,2743,2745,2747,2749,2751,2753,2755,2757,2759,2761],{"class":806,"line":974},[804,2744,2204],{"class":821},[804,2746,980],{"class":817},[804,2748,2209],{"class":898},[804,2750,902],{"class":821},[804,2752,835],{"class":898},[804,2754,902],{"class":821},[804,2756,1617],{"class":817},[804,2758,1353],{"class":821},[804,2760,1049],{"class":817},[804,2762,2224],{"class":821},[804,2764,2765],{"class":806,"line":1009},[804,2766,886],{"emptyLinePlaceholder":885},[804,2768,2769,2771,2773,2775,2777,2779,2781,2783,2785,2787,2789,2791,2793,2795],{"class":806,"line":1046},[804,2770,1632],{"class":821},[804,2772,980],{"class":817},[804,2774,1637],{"class":898},[804,2776,902],{"class":821},[804,2778,993],{"class":817},[804,2780,1644],{"class":834},[804,2782,993],{"class":817},[804,2784,1001],{"class":817},[804,2786,1032],{"class":817},[804,2788,915],{"class":914},[804,2790,954],{"class":821},[804,2792,980],{"class":817},[804,2794,1041],{"class":898},[804,2796,966],{"class":821},[794,2798,2801],{"className":796,"code":2799,"filename":265,"language":798,"meta":2800,"style":800},"import { EvlogModule } from 'evlog\u002Fnestjs'\nimport type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>()\nconst drain = pipeline(createAxiomDrain())\n\nEvlogModule.forRoot({ drain })\n\nprocess.on('SIGTERM', () => drain.flush())\n","src\u002Fapp.module.ts",[699,2802,2803,2823,2843,2861,2879,2883,2901,2917,2921,2941,2945],{"__ignoreMap":800},[804,2804,2805,2807,2809,2812,2814,2816,2818,2821],{"class":806,"line":807},[804,2806,811],{"class":810},[804,2808,818],{"class":817},[804,2810,2811],{"class":821}," EvlogModule",[804,2813,825],{"class":817},[804,2815,828],{"class":810},[804,2817,831],{"class":817},[804,2819,2820],{"class":834},"evlog\u002Fnestjs",[804,2822,838],{"class":817},[804,2824,2825,2827,2829,2831,2833,2835,2837,2839,2841],{"class":806,"line":841},[804,2826,811],{"class":810},[804,2828,814],{"class":810},[804,2830,818],{"class":817},[804,2832,822],{"class":821},[804,2834,825],{"class":817},[804,2836,828],{"class":810},[804,2838,831],{"class":817},[804,2840,835],{"class":834},[804,2842,838],{"class":817},[804,2844,2845,2847,2849,2851,2853,2855,2857,2859],{"class":806,"line":861},[804,2846,811],{"class":810},[804,2848,818],{"class":817},[804,2850,848],{"class":821},[804,2852,825],{"class":817},[804,2854,828],{"class":810},[804,2856,831],{"class":817},[804,2858,705],{"class":834},[804,2860,838],{"class":817},[804,2862,2863,2865,2867,2869,2871,2873,2875,2877],{"class":806,"line":882},[804,2864,811],{"class":810},[804,2866,818],{"class":817},[804,2868,868],{"class":821},[804,2870,825],{"class":817},[804,2872,828],{"class":810},[804,2874,831],{"class":817},[804,2876,877],{"class":834},[804,2878,838],{"class":817},[804,2880,2881],{"class":806,"line":889},[804,2882,886],{"emptyLinePlaceholder":885},[804,2884,2885,2887,2889,2891,2893,2895,2897,2899],{"class":806,"line":921},[804,2886,1330],{"class":914},[804,2888,1333],{"class":821},[804,2890,1336],{"class":817},[804,2892,848],{"class":898},[804,2894,935],{"class":817},[804,2896,939],{"class":938},[804,2898,942],{"class":817},[804,2900,946],{"class":821},[804,2902,2903,2905,2907,2909,2911,2913,2915],{"class":806,"line":949},[804,2904,1330],{"class":914},[804,2906,1353],{"class":821},[804,2908,1336],{"class":817},[804,2910,927],{"class":898},[804,2912,902],{"class":821},[804,2914,963],{"class":898},[804,2916,966],{"class":821},[804,2918,2919],{"class":806,"line":969},[804,2920,886],{"emptyLinePlaceholder":885},[804,2922,2923,2926,2928,2931,2933,2935,2937,2939],{"class":806,"line":974},[804,2924,2925],{"class":821},"EvlogModule",[804,2927,980],{"class":817},[804,2929,2930],{"class":898},"forRoot",[804,2932,902],{"class":821},[804,2934,1617],{"class":817},[804,2936,1353],{"class":821},[804,2938,1049],{"class":817},[804,2940,1006],{"class":821},[804,2942,2943],{"class":806,"line":1009},[804,2944,886],{"emptyLinePlaceholder":885},[804,2946,2947,2949,2951,2953,2955,2957,2959,2961,2963,2965,2967,2969,2971,2973],{"class":806,"line":1046},[804,2948,1632],{"class":821},[804,2950,980],{"class":817},[804,2952,1637],{"class":898},[804,2954,902],{"class":821},[804,2956,993],{"class":817},[804,2958,1644],{"class":834},[804,2960,993],{"class":817},[804,2962,1001],{"class":817},[804,2964,1032],{"class":817},[804,2966,915],{"class":914},[804,2968,954],{"class":821},[804,2970,980],{"class":817},[804,2972,1041],{"class":898},[804,2974,966],{"class":821},[794,2976,2979],{"className":796,"code":2977,"filename":309,"language":798,"meta":2978,"style":800},"import { withEvlog } from 'evlog\u002Forpc'\nimport type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>()\nconst drain = pipeline(createAxiomDrain())\n\nconst handler = withEvlog(new RPCHandler(router), { drain })\n\nprocess.on('SIGTERM', () => drain.flush())\n","server\u002Forpc.ts",[699,2980,2981,3000,3020,3038,3056,3060,3078,3094,3098,3130,3134],{"__ignoreMap":800},[804,2982,2983,2985,2987,2989,2991,2993,2995,2998],{"class":806,"line":807},[804,2984,811],{"class":810},[804,2986,818],{"class":817},[804,2988,1379],{"class":821},[804,2990,825],{"class":817},[804,2992,828],{"class":810},[804,2994,831],{"class":817},[804,2996,2997],{"class":834},"evlog\u002Forpc",[804,2999,838],{"class":817},[804,3001,3002,3004,3006,3008,3010,3012,3014,3016,3018],{"class":806,"line":841},[804,3003,811],{"class":810},[804,3005,814],{"class":810},[804,3007,818],{"class":817},[804,3009,822],{"class":821},[804,3011,825],{"class":817},[804,3013,828],{"class":810},[804,3015,831],{"class":817},[804,3017,835],{"class":834},[804,3019,838],{"class":817},[804,3021,3022,3024,3026,3028,3030,3032,3034,3036],{"class":806,"line":861},[804,3023,811],{"class":810},[804,3025,818],{"class":817},[804,3027,848],{"class":821},[804,3029,825],{"class":817},[804,3031,828],{"class":810},[804,3033,831],{"class":817},[804,3035,705],{"class":834},[804,3037,838],{"class":817},[804,3039,3040,3042,3044,3046,3048,3050,3052,3054],{"class":806,"line":882},[804,3041,811],{"class":810},[804,3043,818],{"class":817},[804,3045,868],{"class":821},[804,3047,825],{"class":817},[804,3049,828],{"class":810},[804,3051,831],{"class":817},[804,3053,877],{"class":834},[804,3055,838],{"class":817},[804,3057,3058],{"class":806,"line":889},[804,3059,886],{"emptyLinePlaceholder":885},[804,3061,3062,3064,3066,3068,3070,3072,3074,3076],{"class":806,"line":921},[804,3063,1330],{"class":914},[804,3065,1333],{"class":821},[804,3067,1336],{"class":817},[804,3069,848],{"class":898},[804,3071,935],{"class":817},[804,3073,939],{"class":938},[804,3075,942],{"class":817},[804,3077,946],{"class":821},[804,3079,3080,3082,3084,3086,3088,3090,3092],{"class":806,"line":949},[804,3081,1330],{"class":914},[804,3083,1353],{"class":821},[804,3085,1336],{"class":817},[804,3087,927],{"class":898},[804,3089,902],{"class":821},[804,3091,963],{"class":898},[804,3093,966],{"class":821},[804,3095,3096],{"class":806,"line":969},[804,3097,886],{"emptyLinePlaceholder":885},[804,3099,3100,3102,3105,3107,3109,3111,3114,3117,3120,3122,3124,3126,3128],{"class":806,"line":974},[804,3101,1330],{"class":914},[804,3103,3104],{"class":821}," handler ",[804,3106,1336],{"class":817},[804,3108,1379],{"class":898},[804,3110,902],{"class":821},[804,3112,3113],{"class":817},"new",[804,3115,3116],{"class":898}," RPCHandler",[804,3118,3119],{"class":821},"(router)",[804,3121,1001],{"class":817},[804,3123,818],{"class":817},[804,3125,1353],{"class":821},[804,3127,1049],{"class":817},[804,3129,1006],{"class":821},[804,3131,3132],{"class":806,"line":1009},[804,3133,886],{"emptyLinePlaceholder":885},[804,3135,3136,3138,3140,3142,3144,3146,3148,3150,3152,3154,3156,3158,3160,3162],{"class":806,"line":1046},[804,3137,1632],{"class":821},[804,3139,980],{"class":817},[804,3141,1637],{"class":898},[804,3143,902],{"class":821},[804,3145,993],{"class":817},[804,3147,1644],{"class":834},[804,3149,993],{"class":817},[804,3151,1001],{"class":817},[804,3153,1032],{"class":817},[804,3155,915],{"class":914},[804,3157,954],{"class":821},[804,3159,980],{"class":817},[804,3161,1041],{"class":898},[804,3163,966],{"class":821},[794,3165,3168],{"className":796,"code":3166,"filename":295,"language":798,"meta":3167,"style":800},"import { withEvlog } from 'evlog\u002Fworkers'\nimport type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>()\nconst drain = pipeline(createAxiomDrain())\n\nexport default withEvlog(handler, { drain })\n","src\u002Fworker.ts",[699,3169,3170,3189,3209,3227,3245,3249,3267,3283,3287],{"__ignoreMap":800},[804,3171,3172,3174,3176,3178,3180,3182,3184,3187],{"class":806,"line":807},[804,3173,811],{"class":810},[804,3175,818],{"class":817},[804,3177,1379],{"class":821},[804,3179,825],{"class":817},[804,3181,828],{"class":810},[804,3183,831],{"class":817},[804,3185,3186],{"class":834},"evlog\u002Fworkers",[804,3188,838],{"class":817},[804,3190,3191,3193,3195,3197,3199,3201,3203,3205,3207],{"class":806,"line":841},[804,3192,811],{"class":810},[804,3194,814],{"class":810},[804,3196,818],{"class":817},[804,3198,822],{"class":821},[804,3200,825],{"class":817},[804,3202,828],{"class":810},[804,3204,831],{"class":817},[804,3206,835],{"class":834},[804,3208,838],{"class":817},[804,3210,3211,3213,3215,3217,3219,3221,3223,3225],{"class":806,"line":861},[804,3212,811],{"class":810},[804,3214,818],{"class":817},[804,3216,848],{"class":821},[804,3218,825],{"class":817},[804,3220,828],{"class":810},[804,3222,831],{"class":817},[804,3224,705],{"class":834},[804,3226,838],{"class":817},[804,3228,3229,3231,3233,3235,3237,3239,3241,3243],{"class":806,"line":882},[804,3230,811],{"class":810},[804,3232,818],{"class":817},[804,3234,868],{"class":821},[804,3236,825],{"class":817},[804,3238,828],{"class":810},[804,3240,831],{"class":817},[804,3242,877],{"class":834},[804,3244,838],{"class":817},[804,3246,3247],{"class":806,"line":889},[804,3248,886],{"emptyLinePlaceholder":885},[804,3250,3251,3253,3255,3257,3259,3261,3263,3265],{"class":806,"line":921},[804,3252,1330],{"class":914},[804,3254,1333],{"class":821},[804,3256,1336],{"class":817},[804,3258,848],{"class":898},[804,3260,935],{"class":817},[804,3262,939],{"class":938},[804,3264,942],{"class":817},[804,3266,946],{"class":821},[804,3268,3269,3271,3273,3275,3277,3279,3281],{"class":806,"line":949},[804,3270,1330],{"class":914},[804,3272,1353],{"class":821},[804,3274,1336],{"class":817},[804,3276,927],{"class":898},[804,3278,902],{"class":821},[804,3280,963],{"class":898},[804,3282,966],{"class":821},[804,3284,3285],{"class":806,"line":969},[804,3286,886],{"emptyLinePlaceholder":885},[804,3288,3289,3291,3293,3295,3298,3300,3302,3304,3306],{"class":806,"line":974},[804,3290,892],{"class":810},[804,3292,895],{"class":810},[804,3294,1379],{"class":898},[804,3296,3297],{"class":821},"(handler",[804,3299,1001],{"class":817},[804,3301,818],{"class":817},[804,3303,1353],{"class":821},[804,3305,1049],{"class":817},[804,3307,1006],{"class":821},[794,3309,3312],{"className":796,"code":3310,"filename":300,"language":798,"meta":3311,"style":800},"\u002F\u002F Plain TypeScript \u002F Bun \u002F Node script\nimport type { DrainContext } from 'evlog'\nimport { initLogger } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>()\nconst drain = pipeline(createAxiomDrain())\n\ninitLogger({ drain })\n\nawait drain.flush() \u002F\u002F before exit\n","index.ts",[699,3313,3314,3320,3340,3359,3377,3395,3399,3417,3433,3437,3452,3456],{"__ignoreMap":800},[804,3315,3316],{"class":806,"line":807},[804,3317,3319],{"class":3318},"sHwdD","\u002F\u002F Plain TypeScript \u002F Bun \u002F Node script\n",[804,3321,3322,3324,3326,3328,3330,3332,3334,3336,3338],{"class":806,"line":841},[804,3323,811],{"class":810},[804,3325,814],{"class":810},[804,3327,818],{"class":817},[804,3329,822],{"class":821},[804,3331,825],{"class":817},[804,3333,828],{"class":810},[804,3335,831],{"class":817},[804,3337,835],{"class":834},[804,3339,838],{"class":817},[804,3341,3342,3344,3346,3349,3351,3353,3355,3357],{"class":806,"line":861},[804,3343,811],{"class":810},[804,3345,818],{"class":817},[804,3347,3348],{"class":821}," initLogger",[804,3350,825],{"class":817},[804,3352,828],{"class":810},[804,3354,831],{"class":817},[804,3356,835],{"class":834},[804,3358,838],{"class":817},[804,3360,3361,3363,3365,3367,3369,3371,3373,3375],{"class":806,"line":882},[804,3362,811],{"class":810},[804,3364,818],{"class":817},[804,3366,848],{"class":821},[804,3368,825],{"class":817},[804,3370,828],{"class":810},[804,3372,831],{"class":817},[804,3374,705],{"class":834},[804,3376,838],{"class":817},[804,3378,3379,3381,3383,3385,3387,3389,3391,3393],{"class":806,"line":889},[804,3380,811],{"class":810},[804,3382,818],{"class":817},[804,3384,868],{"class":821},[804,3386,825],{"class":817},[804,3388,828],{"class":810},[804,3390,831],{"class":817},[804,3392,877],{"class":834},[804,3394,838],{"class":817},[804,3396,3397],{"class":806,"line":921},[804,3398,886],{"emptyLinePlaceholder":885},[804,3400,3401,3403,3405,3407,3409,3411,3413,3415],{"class":806,"line":949},[804,3402,1330],{"class":914},[804,3404,1333],{"class":821},[804,3406,1336],{"class":817},[804,3408,848],{"class":898},[804,3410,935],{"class":817},[804,3412,939],{"class":938},[804,3414,942],{"class":817},[804,3416,946],{"class":821},[804,3418,3419,3421,3423,3425,3427,3429,3431],{"class":806,"line":969},[804,3420,1330],{"class":914},[804,3422,1353],{"class":821},[804,3424,1336],{"class":817},[804,3426,927],{"class":898},[804,3428,902],{"class":821},[804,3430,963],{"class":898},[804,3432,966],{"class":821},[804,3434,3435],{"class":806,"line":974},[804,3436,886],{"emptyLinePlaceholder":885},[804,3438,3439,3442,3444,3446,3448,3450],{"class":806,"line":1009},[804,3440,3441],{"class":898},"initLogger",[804,3443,902],{"class":821},[804,3445,1617],{"class":817},[804,3447,1353],{"class":821},[804,3449,1049],{"class":817},[804,3451,1006],{"class":821},[804,3453,3454],{"class":806,"line":1046},[804,3455,886],{"emptyLinePlaceholder":885},[804,3457,3458,3460,3462,3464,3466,3469],{"class":806,"line":1433},[804,3459,2563],{"class":810},[804,3461,954],{"class":821},[804,3463,980],{"class":817},[804,3465,1041],{"class":898},[804,3467,3468],{"class":821},"() ",[804,3470,3471],{"class":3318},"\u002F\u002F before exit\n",[3473,3474,3477,3478,3480,3481,3483,3484,3486,3487,980],"callout",{"color":3475,"icon":3476},"warning","i-lucide-alert-triangle","Always flush the pipeline before the process exits (",[699,3479,746],{},"). On Nitro use the ",[699,3482,750],{}," hook; on standalone scripts call it before ",[699,3485,754],{},". On serverless runtimes the middleware extends the instance's lifetime for you, see ",[613,3488,3490],{"href":3489},"#serverless","Serverless",[784,3492,3494],{"id":3493},"what-the-pipeline-does-to-an-event","What the pipeline does to an event",[609,3496,3497,3498,3500,3501,3504,3505,3508,3509,3512,3513,3516,3517,3519],{},"Events are buffered as they arrive on ",[699,3499,996],{},". A batch flushes when either ",[699,3502,3503],{},"batch.size"," is reached or ",[699,3506,3507],{},"batch.intervalMs"," expires (whichever comes first). On failure, the same batch is retried with the configured backoff; once ",[699,3510,3511],{},"retry.maxAttempts"," is exhausted, ",[699,3514,3515],{},"onDropped"," is called with the lost events (or the drop is logged when you didn't configure one). The buffer is bounded by ",[699,3518,725],{},". Once full, the oldest events are dropped to keep memory flat.",[3521,3522,3524],"h3",{"id":3523},"the-pipeline-owns-retries","The pipeline owns retries",[609,3526,3527,3528,3531,3532,3535,3536,3538,3539,3541,3542,3545,3546,3549],{},"Adapter drains (",[699,3529,3530],{},"createAxiomDrain()",", ",[699,3533,3534],{},"createDatadogDrain()",", …) swallow delivery failures when called directly, so a failing backend never breaks a request. Inside the pipeline that would make ",[699,3537,721],{}," and ",[699,3540,3515],{}," dead code, so the pipeline unwraps the adapter to its throwing ",[699,3543,3544],{},"raw"," variant: failures reach the retry loop, and raw delivery defaults to a single HTTP attempt so the batch isn't retried twice. Set ",[699,3547,3548],{},"retries"," on the adapter config only if you explicitly want extra HTTP attempts inside each pipeline attempt.",[784,3551,547],{"id":3552},"configuration",[794,3554,3557],{"className":796,"code":3555,"filename":3556,"language":798,"meta":800,"style":800},"import type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({\n  batch: {\n    size: 50,          \u002F\u002F Flush every 50 events\n    intervalMs: 5000,  \u002F\u002F Or every 5 seconds, whichever comes first\n  },\n  retry: {\n    maxAttempts: 3,\n    backoff: 'exponential',\n    initialDelayMs: 1000,\n    maxDelayMs: 30000,\n  },\n  maxBufferSize: 1000,\n  onDropped: (events, error) => {\n    console.error(`[evlog] Dropped ${events.length} events:`, error?.message)\n  },\n})\n\nexport const drain = pipeline(createAxiomDrain())\n","pipeline-config.ts",[699,3558,3559,3579,3597,3615,3619,3639,3648,3664,3679,3684,3693,3705,3721,3733,3745,3750,3762,3787,3835,3840,3847,3852],{"__ignoreMap":800},[804,3560,3561,3563,3565,3567,3569,3571,3573,3575,3577],{"class":806,"line":807},[804,3562,811],{"class":810},[804,3564,814],{"class":810},[804,3566,818],{"class":817},[804,3568,822],{"class":821},[804,3570,825],{"class":817},[804,3572,828],{"class":810},[804,3574,831],{"class":817},[804,3576,835],{"class":834},[804,3578,838],{"class":817},[804,3580,3581,3583,3585,3587,3589,3591,3593,3595],{"class":806,"line":841},[804,3582,811],{"class":810},[804,3584,818],{"class":817},[804,3586,848],{"class":821},[804,3588,825],{"class":817},[804,3590,828],{"class":810},[804,3592,831],{"class":817},[804,3594,705],{"class":834},[804,3596,838],{"class":817},[804,3598,3599,3601,3603,3605,3607,3609,3611,3613],{"class":806,"line":861},[804,3600,811],{"class":810},[804,3602,818],{"class":817},[804,3604,868],{"class":821},[804,3606,825],{"class":817},[804,3608,828],{"class":810},[804,3610,831],{"class":817},[804,3612,877],{"class":834},[804,3614,838],{"class":817},[804,3616,3617],{"class":806,"line":882},[804,3618,886],{"emptyLinePlaceholder":885},[804,3620,3621,3623,3625,3627,3629,3631,3633,3635,3637],{"class":806,"line":889},[804,3622,1330],{"class":914},[804,3624,1333],{"class":821},[804,3626,1336],{"class":817},[804,3628,848],{"class":898},[804,3630,935],{"class":817},[804,3632,939],{"class":938},[804,3634,942],{"class":817},[804,3636,902],{"class":821},[804,3638,1405],{"class":817},[804,3640,3641,3644,3646],{"class":806,"line":921},[804,3642,3643],{"class":945},"  batch",[804,3645,1413],{"class":817},[804,3647,918],{"class":817},[804,3649,3650,3653,3655,3659,3661],{"class":806,"line":949},[804,3651,3652],{"class":945},"    size",[804,3654,1413],{"class":817},[804,3656,3658],{"class":3657},"sbssI"," 50",[804,3660,1001],{"class":817},[804,3662,3663],{"class":3318},"          \u002F\u002F Flush every 50 events\n",[804,3665,3666,3669,3671,3674,3676],{"class":806,"line":969},[804,3667,3668],{"class":945},"    intervalMs",[804,3670,1413],{"class":817},[804,3672,3673],{"class":3657}," 5000",[804,3675,1001],{"class":817},[804,3677,3678],{"class":3318},"  \u002F\u002F Or every 5 seconds, whichever comes first\n",[804,3680,3681],{"class":806,"line":974},[804,3682,3683],{"class":817},"  },\n",[804,3685,3686,3689,3691],{"class":806,"line":1009},[804,3687,3688],{"class":945},"  retry",[804,3690,1413],{"class":817},[804,3692,918],{"class":817},[804,3694,3695,3698,3700,3703],{"class":806,"line":1046},[804,3696,3697],{"class":945},"    maxAttempts",[804,3699,1413],{"class":817},[804,3701,3702],{"class":3657}," 3",[804,3704,1423],{"class":817},[804,3706,3707,3710,3712,3714,3717,3719],{"class":806,"line":1433},[804,3708,3709],{"class":945},"    backoff",[804,3711,1413],{"class":817},[804,3713,831],{"class":817},[804,3715,3716],{"class":834},"exponential",[804,3718,993],{"class":817},[804,3720,1423],{"class":817},[804,3722,3723,3726,3728,3731],{"class":806,"line":1440},[804,3724,3725],{"class":945},"    initialDelayMs",[804,3727,1413],{"class":817},[804,3729,3730],{"class":3657}," 1000",[804,3732,1423],{"class":817},[804,3734,3735,3738,3740,3743],{"class":806,"line":1445},[804,3736,3737],{"class":945},"    maxDelayMs",[804,3739,1413],{"class":817},[804,3741,3742],{"class":3657}," 30000",[804,3744,1423],{"class":817},[804,3746,3748],{"class":806,"line":3747},15,[804,3749,3683],{"class":817},[804,3751,3753,3756,3758,3760],{"class":806,"line":3752},16,[804,3754,3755],{"class":945},"  maxBufferSize",[804,3757,1413],{"class":817},[804,3759,3730],{"class":3657},[804,3761,1423],{"class":817},[804,3763,3765,3768,3770,3773,3776,3778,3781,3783,3785],{"class":806,"line":3764},17,[804,3766,3767],{"class":898},"  onDropped",[804,3769,1413],{"class":817},[804,3771,3772],{"class":817}," (",[804,3774,3775],{"class":907},"events",[804,3777,1001],{"class":817},[804,3779,3780],{"class":907}," error",[804,3782,911],{"class":817},[804,3784,915],{"class":914},[804,3786,918],{"class":817},[804,3788,3790,3793,3795,3798,3800,3803,3806,3809,3811,3813,3816,3818,3821,3823,3825,3827,3830,3833],{"class":806,"line":3789},18,[804,3791,3792],{"class":821},"    console",[804,3794,980],{"class":817},[804,3796,3797],{"class":898},"error",[804,3799,902],{"class":945},[804,3801,3802],{"class":817},"`",[804,3804,3805],{"class":834},"[evlog] Dropped ",[804,3807,3808],{"class":817},"${",[804,3810,3775],{"class":821},[804,3812,980],{"class":817},[804,3814,3815],{"class":821},"length",[804,3817,1049],{"class":817},[804,3819,3820],{"class":834}," events:",[804,3822,3802],{"class":817},[804,3824,1001],{"class":817},[804,3826,3780],{"class":821},[804,3828,3829],{"class":817},"?.",[804,3831,3832],{"class":821},"message",[804,3834,1006],{"class":945},[804,3836,3838],{"class":806,"line":3837},19,[804,3839,3683],{"class":817},[804,3841,3843,3845],{"class":806,"line":3842},20,[804,3844,1049],{"class":817},[804,3846,1006],{"class":821},[804,3848,3850],{"class":806,"line":3849},21,[804,3851,886],{"emptyLinePlaceholder":885},[804,3853,3855,3857,3859,3861,3863,3865,3867,3869],{"class":806,"line":3854},22,[804,3856,892],{"class":810},[804,3858,1374],{"class":914},[804,3860,1353],{"class":821},[804,3862,1336],{"class":817},[804,3864,927],{"class":898},[804,3866,902],{"class":821},[804,3868,963],{"class":898},[804,3870,966],{"class":821},[3521,3872,3874],{"id":3873},"every-option-and-its-default","Every option, and its default",[622,3876,3877,3890],{},[625,3878,3879],{},[628,3880,3881,3884,3887],{},[631,3882,3883],{},"Option",[631,3885,3886],{},"Default",[631,3888,3889],{},"Description",[638,3891,3892,3906,3920,3934,3957,3972,3987,4000],{},[628,3893,3894,3898,3903],{},[643,3895,3896],{},[699,3897,3503],{},[643,3899,3900],{},[699,3901,3902],{},"50",[643,3904,3905],{},"Maximum events per batch",[628,3907,3908,3912,3917],{},[643,3909,3910],{},[699,3911,3507],{},[643,3913,3914],{},[699,3915,3916],{},"5000",[643,3918,3919],{},"Max time (ms) before flushing a partial batch",[628,3921,3922,3926,3931],{},[643,3923,3924],{},[699,3925,3511],{},[643,3927,3928],{},[699,3929,3930],{},"3",[643,3932,3933],{},"Total attempts including the initial one",[628,3935,3936,3941,3946],{},[643,3937,3938],{},[699,3939,3940],{},"retry.backoff",[643,3942,3943],{},[699,3944,3945],{},"'exponential'",[643,3947,3948,3950,3951,3950,3954],{},[699,3949,3945],{}," | ",[699,3952,3953],{},"'linear'",[699,3955,3956],{},"'fixed'",[628,3958,3959,3964,3969],{},[643,3960,3961],{},[699,3962,3963],{},"retry.initialDelayMs",[643,3965,3966],{},[699,3967,3968],{},"1000",[643,3970,3971],{},"Base delay for the first retry",[628,3973,3974,3979,3984],{},[643,3975,3976],{},[699,3977,3978],{},"retry.maxDelayMs",[643,3980,3981],{},[699,3982,3983],{},"30000",[643,3985,3986],{},"Upper bound for any retry delay",[628,3988,3989,3993,3997],{},[643,3990,3991],{},[699,3992,725],{},[643,3994,3995],{},[699,3996,3968],{},[643,3998,3999],{},"Max buffered events before dropping oldest",[628,4001,4002,4006,4009],{},[643,4003,4004],{},[699,4005,3515],{},[643,4007,4008],{},"-",[643,4010,4011],{},"Callback when events are dropped (overflow or retry exhaustion)",[3521,4013,4015],{"id":4014},"choose-how-retries-space-out","Choose how retries space out",[622,4017,4018,4031],{},[625,4019,4020],{},[628,4021,4022,4025,4028],{},[631,4023,4024],{},"Strategy",[631,4026,4027],{},"Delay pattern",[631,4029,4030],{},"Use case",[638,4032,4033,4045,4058],{},[628,4034,4035,4039,4042],{},[643,4036,4037],{},[699,4038,3716],{},[643,4040,4041],{},"1s, 2s, 4s, 8s…",[643,4043,4044],{},"Default. Best for transient failures that may need time to recover",[628,4046,4047,4052,4055],{},[643,4048,4049],{},[699,4050,4051],{},"linear",[643,4053,4054],{},"1s, 2s, 3s, 4s…",[643,4056,4057],{},"Predictable delay growth",[628,4059,4060,4065,4068],{},[643,4061,4062],{},[699,4063,4064],{},"fixed",[643,4066,4067],{},"1s, 1s, 1s, 1s…",[643,4069,4070],{},"Same delay every time. Useful for rate-limited APIs",[3521,4072,4074],{"id":4073},"what-the-wrapper-hands-back","What the wrapper hands back",[609,4076,4077,4078,4081],{},"The function returned by ",[699,4079,4080],{},"pipeline(drain)"," is hook-compatible and exposes:",[622,4083,4084,4096],{},[625,4085,4086],{},[628,4087,4088,4091,4094],{},[631,4089,4090],{},"Property",[631,4092,4093],{},"Type",[631,4095,3889],{},[638,4097,4098,4113,4127,4140],{},[628,4099,4100,4105,4110],{},[643,4101,4102],{},[699,4103,4104],{},"drain(ctx)",[643,4106,4107],{},[699,4108,4109],{},"(ctx: T) => void",[643,4111,4112],{},"Push a single event into the buffer",[628,4114,4115,4119,4124],{},[643,4116,4117],{},[699,4118,746],{},[643,4120,4121],{},[699,4122,4123],{},"() => Promise\u003Cvoid>",[643,4125,4126],{},"Force-flush all buffered events",[628,4128,4129,4133,4137],{},[643,4130,4131],{},[699,4132,762],{},[643,4134,4135],{},[699,4136,4123],{},[643,4138,4139],{},"Resolves once everything buffered so far is delivered or dropped, without forcing a flush",[628,4141,4142,4147,4152],{},[643,4143,4144],{},[699,4145,4146],{},"drain.pending",[643,4148,4149],{},[699,4150,4151],{},"number",[643,4153,4154],{},"Number of events currently buffered",[784,4156,3490],{"id":4157},"serverless",[609,4159,4160,4162,4163,4165,4166,763,4168,4170,4171,4174,4175,4178,4179,4181,4182,4184,4185,4188],{},[699,4161,4104],{}," returns after buffering, so on a serverless runtime the interesting question is what keeps the instance alive until the batch actually ships. When you pass the pipeline as the ",[699,4164,758],{}," option of a framework integration, the middleware registers ",[699,4167,762],{},[699,4169,766],{}," (Next's ",[699,4172,4173],{},"after()",", Workers' ",[699,4176,4177],{},"ctx.waitUntil","): the instance stays alive until the buffered batch is delivered or dropped. ",[699,4180,3507],{}," bounds when the first delivery attempt starts; retry backoff can extend the lifetime past it until delivery succeeds or ",[699,4183,3511],{}," is exhausted. Lower ",[699,4186,4187],{},"intervalMs"," on serverless if you'd rather trade batching for shorter post-response lifetimes.",[609,4190,4191,4192,4194,4195,4197,4198,4200,4201,4203],{},"Nitro is the exception: drains registered on the ",[699,4193,996],{}," hook are opaque to the plugin, so it can't extend the lifetime for you. On Node the ",[699,4196,750],{}," hook flush from the quick start covers shutdown; on Cloudflare register ",[699,4199,762],{}," with the execution context's ",[699,4202,766],{}," yourself where you handle the request.",[784,4205,662],{"id":4206},"fanout",[4208,4209],"drain-fan-out",{},[609,4211,4212,4213,4216],{},"In production, the same wide event often needs to reach more than one destination: a long-term store (Axiom), a metrics tool (Datadog), an error tracker (Sentry), and a local fs drain for incident replay. The pipeline batches once, then your drain fans out the batch to every destination in parallel via ",[699,4214,4215],{},"Promise.allSettled"," so a single slow \u002F failing destination cannot block the others.",[684,4218,4220,4223,4281],{":actions":686,"description":4219,"icon":532},"Fan out evlog events to multiple destinations",[609,4221,4222],{},"Send each wide event to several destinations in parallel through a single drain pipeline.",[692,4224,4225,4241,4251,4264,4275],{},[695,4226,4227,4228,702,4230,4232,4233,4236,4237,4240],{},"Wrap a single ",[699,4229,701],{},[699,4231,705],{}," around a fan-out function that calls every destination drain inside ",[699,4234,4235],{},"Promise.allSettled([drainA(batch), drainB(batch), …])",". Use ",[699,4238,4239],{},"allSettled"," so one failing drain doesn't reject the whole batch",[695,4242,4243,4244,4247,4248,911],{},"Pick destinations by purpose: long-term store (Axiom \u002F Better Stack \u002F Datadog), error tracker (Sentry, typically ",[699,4245,4246],{},"{ minLevel: 'error' }"," so it doesn't get all events), local replay (",[699,4249,4250],{},"createFsDrain",[695,4252,4253,4254,3531,4256,3531,4258,4260,4261,4263],{},"Tune ",[699,4255,3503],{},[699,4257,3507],{},[699,4259,3511],{},", and ",[699,4262,725],{}," once at the pipeline level, which applies to all destinations",[695,4265,4266,4267,4270,4271,4274],{},"For destinations that need different filtering, prefer per-drain ",[699,4268,4269],{},"minLevel"," \u002F ",[699,4272,4273],{},"filter"," options over wrapping",[695,4276,4277,4278,4280],{},"Don't forget ",[699,4279,746],{}," on shutdown. Events buffered for fanout are lost on abrupt exit",[609,4282,772,4283],{},[613,4284,775],{"href":775,"rel":4285},[777],[3521,4287,4289],{"id":4288},"wire-the-fan-out","Wire the fan-out",[794,4291,4295],{"className":4292,"code":4293,"language":4294,"meta":800,"style":800},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createDatadogDrain } from 'evlog\u002Fdatadog'\nimport { createSentryDrain } from 'evlog\u002Fsentry'\nimport { createFsDrain } from 'evlog\u002Ffs'\nimport type { DrainContext } from 'evlog'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({\n  batch: { size: 50, intervalMs: 5000 },\n  retry: { maxAttempts: 3 },\n  maxBufferSize: 1000,\n})\n\nconst axiom = createAxiomDrain()\nconst datadog = createDatadogDrain()\nconst sentry = createSentryDrain({ minLevel: 'error' })\nconst fs = createFsDrain({ dir: '.evlog\u002Flogs', maxFiles: 14 })\n\nexport const drain = pipeline(async (batch) => {\n  await Promise.allSettled([\n    axiom(batch),\n    datadog(batch),\n    sentry(batch),\n    fs(batch),\n  ])\n})\n","ts",[699,4296,4297,4315,4333,4353,4373,4393,4413,4417,4437,4464,4481,4491,4497,4501,4514,4527,4557,4598,4602,4629,4644,4657,4670,4684,4698,4704],{"__ignoreMap":800},[804,4298,4299,4301,4303,4305,4307,4309,4311,4313],{"class":806,"line":807},[804,4300,811],{"class":810},[804,4302,818],{"class":817},[804,4304,848],{"class":821},[804,4306,825],{"class":817},[804,4308,828],{"class":810},[804,4310,831],{"class":817},[804,4312,705],{"class":834},[804,4314,838],{"class":817},[804,4316,4317,4319,4321,4323,4325,4327,4329,4331],{"class":806,"line":841},[804,4318,811],{"class":810},[804,4320,818],{"class":817},[804,4322,868],{"class":821},[804,4324,825],{"class":817},[804,4326,828],{"class":810},[804,4328,831],{"class":817},[804,4330,877],{"class":834},[804,4332,838],{"class":817},[804,4334,4335,4337,4339,4342,4344,4346,4348,4351],{"class":806,"line":861},[804,4336,811],{"class":810},[804,4338,818],{"class":817},[804,4340,4341],{"class":821}," createDatadogDrain",[804,4343,825],{"class":817},[804,4345,828],{"class":810},[804,4347,831],{"class":817},[804,4349,4350],{"class":834},"evlog\u002Fdatadog",[804,4352,838],{"class":817},[804,4354,4355,4357,4359,4362,4364,4366,4368,4371],{"class":806,"line":882},[804,4356,811],{"class":810},[804,4358,818],{"class":817},[804,4360,4361],{"class":821}," createSentryDrain",[804,4363,825],{"class":817},[804,4365,828],{"class":810},[804,4367,831],{"class":817},[804,4369,4370],{"class":834},"evlog\u002Fsentry",[804,4372,838],{"class":817},[804,4374,4375,4377,4379,4382,4384,4386,4388,4391],{"class":806,"line":889},[804,4376,811],{"class":810},[804,4378,818],{"class":817},[804,4380,4381],{"class":821}," createFsDrain",[804,4383,825],{"class":817},[804,4385,828],{"class":810},[804,4387,831],{"class":817},[804,4389,4390],{"class":834},"evlog\u002Ffs",[804,4392,838],{"class":817},[804,4394,4395,4397,4399,4401,4403,4405,4407,4409,4411],{"class":806,"line":921},[804,4396,811],{"class":810},[804,4398,814],{"class":810},[804,4400,818],{"class":817},[804,4402,822],{"class":821},[804,4404,825],{"class":817},[804,4406,828],{"class":810},[804,4408,831],{"class":817},[804,4410,835],{"class":834},[804,4412,838],{"class":817},[804,4414,4415],{"class":806,"line":949},[804,4416,886],{"emptyLinePlaceholder":885},[804,4418,4419,4421,4423,4425,4427,4429,4431,4433,4435],{"class":806,"line":969},[804,4420,1330],{"class":914},[804,4422,1333],{"class":821},[804,4424,1336],{"class":817},[804,4426,848],{"class":898},[804,4428,935],{"class":817},[804,4430,939],{"class":938},[804,4432,942],{"class":817},[804,4434,902],{"class":821},[804,4436,1405],{"class":817},[804,4438,4439,4441,4443,4445,4448,4450,4452,4454,4457,4459,4461],{"class":806,"line":974},[804,4440,3643],{"class":945},[804,4442,1413],{"class":817},[804,4444,818],{"class":817},[804,4446,4447],{"class":945}," size",[804,4449,1413],{"class":817},[804,4451,3658],{"class":3657},[804,4453,1001],{"class":817},[804,4455,4456],{"class":945}," intervalMs",[804,4458,1413],{"class":817},[804,4460,3673],{"class":3657},[804,4462,4463],{"class":817}," },\n",[804,4465,4466,4468,4470,4472,4475,4477,4479],{"class":806,"line":1009},[804,4467,3688],{"class":945},[804,4469,1413],{"class":817},[804,4471,818],{"class":817},[804,4473,4474],{"class":945}," maxAttempts",[804,4476,1413],{"class":817},[804,4478,3702],{"class":3657},[804,4480,4463],{"class":817},[804,4482,4483,4485,4487,4489],{"class":806,"line":1046},[804,4484,3755],{"class":945},[804,4486,1413],{"class":817},[804,4488,3730],{"class":3657},[804,4490,1423],{"class":817},[804,4492,4493,4495],{"class":806,"line":1433},[804,4494,1049],{"class":817},[804,4496,1006],{"class":821},[804,4498,4499],{"class":806,"line":1440},[804,4500,886],{"emptyLinePlaceholder":885},[804,4502,4503,4505,4508,4510,4512],{"class":806,"line":1445},[804,4504,1330],{"class":914},[804,4506,4507],{"class":821}," axiom ",[804,4509,1336],{"class":817},[804,4511,868],{"class":898},[804,4513,946],{"class":821},[804,4515,4516,4518,4521,4523,4525],{"class":806,"line":3747},[804,4517,1330],{"class":914},[804,4519,4520],{"class":821}," datadog ",[804,4522,1336],{"class":817},[804,4524,4341],{"class":898},[804,4526,946],{"class":821},[804,4528,4529,4531,4534,4536,4538,4540,4542,4545,4547,4549,4551,4553,4555],{"class":806,"line":3752},[804,4530,1330],{"class":914},[804,4532,4533],{"class":821}," sentry ",[804,4535,1336],{"class":817},[804,4537,4361],{"class":898},[804,4539,902],{"class":821},[804,4541,1617],{"class":817},[804,4543,4544],{"class":945}," minLevel",[804,4546,1413],{"class":817},[804,4548,831],{"class":817},[804,4550,3797],{"class":834},[804,4552,993],{"class":817},[804,4554,825],{"class":817},[804,4556,1006],{"class":821},[804,4558,4559,4561,4564,4566,4568,4570,4572,4575,4577,4579,4582,4584,4586,4589,4591,4594,4596],{"class":806,"line":3764},[804,4560,1330],{"class":914},[804,4562,4563],{"class":821}," fs ",[804,4565,1336],{"class":817},[804,4567,4381],{"class":898},[804,4569,902],{"class":821},[804,4571,1617],{"class":817},[804,4573,4574],{"class":945}," dir",[804,4576,1413],{"class":817},[804,4578,831],{"class":817},[804,4580,4581],{"class":834},".evlog\u002Flogs",[804,4583,993],{"class":817},[804,4585,1001],{"class":817},[804,4587,4588],{"class":945}," maxFiles",[804,4590,1413],{"class":817},[804,4592,4593],{"class":3657}," 14",[804,4595,825],{"class":817},[804,4597,1006],{"class":821},[804,4599,4600],{"class":806,"line":3789},[804,4601,886],{"emptyLinePlaceholder":885},[804,4603,4604,4606,4608,4610,4612,4614,4616,4619,4621,4623,4625,4627],{"class":806,"line":3837},[804,4605,892],{"class":810},[804,4607,1374],{"class":914},[804,4609,1353],{"class":821},[804,4611,1336],{"class":817},[804,4613,927],{"class":898},[804,4615,902],{"class":821},[804,4617,4618],{"class":914},"async",[804,4620,3772],{"class":817},[804,4622,717],{"class":907},[804,4624,911],{"class":817},[804,4626,915],{"class":914},[804,4628,918],{"class":817},[804,4630,4631,4634,4637,4639,4641],{"class":806,"line":3842},[804,4632,4633],{"class":810},"  await",[804,4635,4636],{"class":938}," Promise",[804,4638,980],{"class":817},[804,4640,4239],{"class":898},[804,4642,4643],{"class":945},"([\n",[804,4645,4646,4649,4651,4653,4655],{"class":806,"line":3849},[804,4647,4648],{"class":898},"    axiom",[804,4650,902],{"class":945},[804,4652,717],{"class":821},[804,4654,911],{"class":945},[804,4656,1423],{"class":817},[804,4658,4659,4662,4664,4666,4668],{"class":806,"line":3854},[804,4660,4661],{"class":898},"    datadog",[804,4663,902],{"class":945},[804,4665,717],{"class":821},[804,4667,911],{"class":945},[804,4669,1423],{"class":817},[804,4671,4673,4676,4678,4680,4682],{"class":806,"line":4672},23,[804,4674,4675],{"class":898},"    sentry",[804,4677,902],{"class":945},[804,4679,717],{"class":821},[804,4681,911],{"class":945},[804,4683,1423],{"class":817},[804,4685,4687,4690,4692,4694,4696],{"class":806,"line":4686},24,[804,4688,4689],{"class":898},"    fs",[804,4691,902],{"class":945},[804,4693,717],{"class":821},[804,4695,911],{"class":945},[804,4697,1423],{"class":817},[804,4699,4701],{"class":806,"line":4700},25,[804,4702,4703],{"class":945},"  ])\n",[804,4705,4707,4709],{"class":806,"line":4706},26,[804,4708,1049],{"class":817},[804,4710,1006],{"class":821},[3521,4712,4714],{"id":4713},"what-fan-out-guarantees","What fan-out guarantees",[692,4716,4717,4726,4732],{},[695,4718,4719,4723,4724],{},[4720,4721,4722],"strong",{},"Parallel dispatch",": every destination receives the batch concurrently via ",[699,4725,4215],{},[695,4727,4728,4731],{},[4720,4729,4730],{},"Tolerant fanout",": if Datadog's API throws, Axiom \u002F Sentry \u002F fs still complete; the pipeline only retries the whole batch when the wrapping function rejects",[695,4733,4734,4737],{},[4720,4735,4736],{},"Shared backpressure",": the buffer is sized once for the whole pipeline; if the wrapping drain falls behind, the oldest events are dropped consistently for every destination",[3521,4739,4741],{"id":4740},"send-different-events-to-each-drain","Send different events to each drain",[609,4743,4744],{},"Wrap a destination drain so it only sees events you care about:",[794,4746,4748],{"className":4292,"code":4747,"language":4294,"meta":800,"style":800},"import type { DrainContext } from 'evlog'\n\nconst sentry = createSentryDrain({ dsn: process.env.SENTRY_DSN! })\n\nasync function sentryErrorsOnly(batch: DrainContext[]): Promise\u003Cvoid> {\n  const errors = batch.filter(c => c.event?.level === 'error')\n  if (errors.length > 0) await sentry(errors)\n}\n\nexport const drain = pipeline(async (batch) => {\n  await Promise.allSettled([\n    axiom(batch),\n    sentryErrorsOnly(batch),\n  ])\n})\n",[699,4749,4750,4770,4774,4813,4817,4852,4899,4933,4938,4942,4968,4980,4992,5005,5009],{"__ignoreMap":800},[804,4751,4752,4754,4756,4758,4760,4762,4764,4766,4768],{"class":806,"line":807},[804,4753,811],{"class":810},[804,4755,814],{"class":810},[804,4757,818],{"class":817},[804,4759,822],{"class":821},[804,4761,825],{"class":817},[804,4763,828],{"class":810},[804,4765,831],{"class":817},[804,4767,835],{"class":834},[804,4769,838],{"class":817},[804,4771,4772],{"class":806,"line":841},[804,4773,886],{"emptyLinePlaceholder":885},[804,4775,4776,4778,4780,4782,4784,4786,4788,4791,4793,4796,4798,4801,4803,4806,4809,4811],{"class":806,"line":861},[804,4777,1330],{"class":914},[804,4779,4533],{"class":821},[804,4781,1336],{"class":817},[804,4783,4361],{"class":898},[804,4785,902],{"class":821},[804,4787,1617],{"class":817},[804,4789,4790],{"class":945}," dsn",[804,4792,1413],{"class":817},[804,4794,4795],{"class":821}," process",[804,4797,980],{"class":817},[804,4799,4800],{"class":821},"env",[804,4802,980],{"class":817},[804,4804,4805],{"class":821},"SENTRY_DSN",[804,4807,4808],{"class":817},"!",[804,4810,825],{"class":817},[804,4812,1006],{"class":821},[804,4814,4815],{"class":806,"line":882},[804,4816,886],{"emptyLinePlaceholder":885},[804,4818,4819,4821,4824,4827,4829,4831,4833,4835,4838,4841,4843,4845,4848,4850],{"class":806,"line":889},[804,4820,4618],{"class":914},[804,4822,4823],{"class":914}," function",[804,4825,4826],{"class":898}," sentryErrorsOnly",[804,4828,902],{"class":817},[804,4830,717],{"class":907},[804,4832,1413],{"class":817},[804,4834,822],{"class":938},[804,4836,4837],{"class":821},"[]",[804,4839,4840],{"class":817},"):",[804,4842,4636],{"class":938},[804,4844,935],{"class":817},[804,4846,4847],{"class":938},"void",[804,4849,942],{"class":817},[804,4851,918],{"class":817},[804,4853,4854,4856,4859,4861,4864,4866,4868,4870,4873,4875,4878,4880,4883,4885,4888,4891,4893,4895,4897],{"class":806,"line":921},[804,4855,924],{"class":914},[804,4857,4858],{"class":821}," errors",[804,4860,930],{"class":817},[804,4862,4863],{"class":821}," batch",[804,4865,980],{"class":817},[804,4867,4273],{"class":898},[804,4869,902],{"class":945},[804,4871,4872],{"class":907},"c",[804,4874,915],{"class":914},[804,4876,4877],{"class":821}," c",[804,4879,980],{"class":817},[804,4881,4882],{"class":821},"event",[804,4884,3829],{"class":817},[804,4886,4887],{"class":821},"level",[804,4889,4890],{"class":817}," ===",[804,4892,831],{"class":817},[804,4894,3797],{"class":834},[804,4896,993],{"class":817},[804,4898,1006],{"class":945},[804,4900,4901,4904,4906,4909,4911,4913,4916,4919,4922,4924,4927,4929,4931],{"class":806,"line":949},[804,4902,4903],{"class":810},"  if",[804,4905,3772],{"class":945},[804,4907,4908],{"class":821},"errors",[804,4910,980],{"class":817},[804,4912,3815],{"class":821},[804,4914,4915],{"class":817}," >",[804,4917,4918],{"class":3657}," 0",[804,4920,4921],{"class":945},") ",[804,4923,2563],{"class":810},[804,4925,4926],{"class":898}," sentry",[804,4928,902],{"class":945},[804,4930,4908],{"class":821},[804,4932,1006],{"class":945},[804,4934,4935],{"class":806,"line":969},[804,4936,4937],{"class":817},"}\n",[804,4939,4940],{"class":806,"line":974},[804,4941,886],{"emptyLinePlaceholder":885},[804,4943,4944,4946,4948,4950,4952,4954,4956,4958,4960,4962,4964,4966],{"class":806,"line":1009},[804,4945,892],{"class":810},[804,4947,1374],{"class":914},[804,4949,1353],{"class":821},[804,4951,1336],{"class":817},[804,4953,927],{"class":898},[804,4955,902],{"class":821},[804,4957,4618],{"class":914},[804,4959,3772],{"class":817},[804,4961,717],{"class":907},[804,4963,911],{"class":817},[804,4965,915],{"class":914},[804,4967,918],{"class":817},[804,4969,4970,4972,4974,4976,4978],{"class":806,"line":1046},[804,4971,4633],{"class":810},[804,4973,4636],{"class":938},[804,4975,980],{"class":817},[804,4977,4239],{"class":898},[804,4979,4643],{"class":945},[804,4981,4982,4984,4986,4988,4990],{"class":806,"line":1433},[804,4983,4648],{"class":898},[804,4985,902],{"class":945},[804,4987,717],{"class":821},[804,4989,911],{"class":945},[804,4991,1423],{"class":817},[804,4993,4994,4997,4999,5001,5003],{"class":806,"line":1440},[804,4995,4996],{"class":898},"    sentryErrorsOnly",[804,4998,902],{"class":945},[804,5000,717],{"class":821},[804,5002,911],{"class":945},[804,5004,1423],{"class":817},[804,5006,5007],{"class":806,"line":1445},[804,5008,4703],{"class":945},[804,5010,5011,5013],{"class":806,"line":3747},[804,5012,1049],{"class":817},[804,5014,1006],{"class":821},[609,5016,5017,5018,5020],{},"Most built-in drains expose ",[699,5019,4269],{}," directly, so you only need this pattern for non-level filters (path, custom field, etc.).",[784,5022,5024],{"id":5023},"write-the-drain-yourself","Write the drain yourself",[609,5026,5027],{},"You don't need an adapter. Pass any async function that accepts a batch:",[794,5029,5032],{"className":796,"code":5030,"filename":5031,"language":798,"meta":800,"style":800},"import type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({ batch: { size: 100 } })\n\nexport const drain = pipeline(async (batch) => {\n  await fetch('https:\u002F\u002Fyour-service.com\u002Flogs', {\n    method: 'POST',\n    headers: { 'Content-Type': 'application\u002Fjson' },\n    body: JSON.stringify(batch.map(ctx => ctx.event)),\n  })\n})\n","pipeline-custom.ts",[699,5033,5034,5054,5072,5076,5115,5119,5145,5165,5181,5208,5250,5257],{"__ignoreMap":800},[804,5035,5036,5038,5040,5042,5044,5046,5048,5050,5052],{"class":806,"line":807},[804,5037,811],{"class":810},[804,5039,814],{"class":810},[804,5041,818],{"class":817},[804,5043,822],{"class":821},[804,5045,825],{"class":817},[804,5047,828],{"class":810},[804,5049,831],{"class":817},[804,5051,835],{"class":834},[804,5053,838],{"class":817},[804,5055,5056,5058,5060,5062,5064,5066,5068,5070],{"class":806,"line":841},[804,5057,811],{"class":810},[804,5059,818],{"class":817},[804,5061,848],{"class":821},[804,5063,825],{"class":817},[804,5065,828],{"class":810},[804,5067,831],{"class":817},[804,5069,705],{"class":834},[804,5071,838],{"class":817},[804,5073,5074],{"class":806,"line":861},[804,5075,886],{"emptyLinePlaceholder":885},[804,5077,5078,5080,5082,5084,5086,5088,5090,5092,5094,5096,5098,5100,5102,5104,5106,5109,5111,5113],{"class":806,"line":882},[804,5079,1330],{"class":914},[804,5081,1333],{"class":821},[804,5083,1336],{"class":817},[804,5085,848],{"class":898},[804,5087,935],{"class":817},[804,5089,939],{"class":938},[804,5091,942],{"class":817},[804,5093,902],{"class":821},[804,5095,1617],{"class":817},[804,5097,4863],{"class":945},[804,5099,1413],{"class":817},[804,5101,818],{"class":817},[804,5103,4447],{"class":945},[804,5105,1413],{"class":817},[804,5107,5108],{"class":3657}," 100",[804,5110,825],{"class":817},[804,5112,825],{"class":817},[804,5114,1006],{"class":821},[804,5116,5117],{"class":806,"line":889},[804,5118,886],{"emptyLinePlaceholder":885},[804,5120,5121,5123,5125,5127,5129,5131,5133,5135,5137,5139,5141,5143],{"class":806,"line":921},[804,5122,892],{"class":810},[804,5124,1374],{"class":914},[804,5126,1353],{"class":821},[804,5128,1336],{"class":817},[804,5130,927],{"class":898},[804,5132,902],{"class":821},[804,5134,4618],{"class":914},[804,5136,3772],{"class":817},[804,5138,717],{"class":907},[804,5140,911],{"class":817},[804,5142,915],{"class":914},[804,5144,918],{"class":817},[804,5146,5147,5149,5152,5154,5156,5159,5161,5163],{"class":806,"line":949},[804,5148,4633],{"class":810},[804,5150,5151],{"class":898}," fetch",[804,5153,902],{"class":945},[804,5155,993],{"class":817},[804,5157,5158],{"class":834},"https:\u002F\u002Fyour-service.com\u002Flogs",[804,5160,993],{"class":817},[804,5162,1001],{"class":817},[804,5164,918],{"class":817},[804,5166,5167,5170,5172,5174,5177,5179],{"class":806,"line":969},[804,5168,5169],{"class":945},"    method",[804,5171,1413],{"class":817},[804,5173,831],{"class":817},[804,5175,5176],{"class":834},"POST",[804,5178,993],{"class":817},[804,5180,1423],{"class":817},[804,5182,5183,5186,5188,5190,5192,5195,5197,5199,5201,5204,5206],{"class":806,"line":974},[804,5184,5185],{"class":945},"    headers",[804,5187,1413],{"class":817},[804,5189,818],{"class":817},[804,5191,831],{"class":817},[804,5193,5194],{"class":945},"Content-Type",[804,5196,993],{"class":817},[804,5198,1413],{"class":817},[804,5200,831],{"class":817},[804,5202,5203],{"class":834},"application\u002Fjson",[804,5205,993],{"class":817},[804,5207,4463],{"class":817},[804,5209,5210,5213,5215,5218,5220,5223,5225,5227,5229,5231,5233,5236,5238,5241,5243,5245,5248],{"class":806,"line":1009},[804,5211,5212],{"class":945},"    body",[804,5214,1413],{"class":817},[804,5216,5217],{"class":821}," JSON",[804,5219,980],{"class":817},[804,5221,5222],{"class":898},"stringify",[804,5224,902],{"class":945},[804,5226,717],{"class":821},[804,5228,980],{"class":817},[804,5230,99],{"class":898},[804,5232,902],{"class":945},[804,5234,5235],{"class":907},"ctx",[804,5237,915],{"class":914},[804,5239,5240],{"class":821}," ctx",[804,5242,980],{"class":817},[804,5244,4882],{"class":821},[804,5246,5247],{"class":945},"))",[804,5249,1423],{"class":817},[804,5251,5252,5255],{"class":806,"line":1046},[804,5253,5254],{"class":817},"  }",[804,5256,1006],{"class":945},[804,5258,5259,5261],{"class":806,"line":1433},[804,5260,1049],{"class":817},[804,5262,1006],{"class":821},[609,5264,5265,5266,5271],{},"For anything more involved (config resolution, retries, identity headers), use ",[613,5267,5268],{"href":530},[699,5269,5270],{},"defineHttpDrain"," instead and let the toolkit handle the boilerplate.",[784,5273,672],{"id":5274},"http-drain-browser-to-server",[609,5276,5277,5278,5281,5282,5285,5286,5289],{},"The HTTP drain ships client-side logs to your server, whatever framework serves it. It composes on top of the same pipeline primitives, with browser-specific defaults (",[699,5279,5280],{},"fetch keepalive"," + ",[699,5283,5284],{},"sendBeacon"," on ",[699,5287,5288],{},"visibilitychange",").",[3473,5291,5293,5294,5297,5298,5301,5302,5305,5306,5309,5310,5312],{"color":5292,"icon":13},"neutral","The ",[699,5295,5296],{},"evlog\u002Fbrowser"," import path is ",[4720,5299,5300],{},"deprecated"," and re-exports the same API as ",[699,5303,5304],{},"evlog\u002Fhttp",". It will be removed in the next ",[4720,5307,5308],{},"major"," release. Prefer ",[699,5311,5304],{}," for new code.",[684,5314,5317,5320,5369],{":actions":686,"description":5315,"icon":5316},"Set up the HTTP transport for client logs","i-lucide-globe",[609,5318,5319],{},"Set up the HTTP transport so my browser logs are sent to my server.",[692,5321,5322,5325,5336,5346,5353,5362],{},[695,5323,5324],{},"Install evlog: pnpm add evlog",[695,5326,697,5327,702,5330,5332,5333,5335],{},[699,5328,5329],{},"createHttpLogDrain",[699,5331,5304],{}," (NOT ",[699,5334,5296],{},", which is deprecated)",[695,5337,5338,5339,5342,5343,911],{},"Create a drain with ",[699,5340,5341],{},"{ endpoint: 'https:\u002F\u002Flogs.example.com\u002Fv1\u002Fingest' }"," and an optional pipeline (",[699,5344,5345],{},"{ batch: { size, intervalMs } }",[695,5347,5348,5349,5352],{},"Pass the drain to ",[699,5350,5351],{},"initLogger({ drain })"," on the client side",[695,5354,5355,5356,5281,5358,5285,5360],{},"The drain batches events and uses ",[699,5357,5280],{},[699,5359,5284],{},[699,5361,5288],{},[695,5363,5364,5365,5368],{},"On the server, accept POST requests with a ",[699,5366,5367],{},"DrainContext[]"," body and forward them to my drain pipeline",[609,5370,772,5371],{},[613,5372,775],{"href":775,"rel":5373},[777],[3521,5375,651],{"id":5376},"quick-start-1",[794,5378,5381],{"className":796,"code":5379,"filename":5380,"language":798,"meta":800,"style":800},"import { initLogger, log } from 'evlog'\nimport { createHttpLogDrain } from 'evlog\u002Fhttp'\n\nconst drain = createHttpLogDrain({\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",[699,5382,5383,5405,5424,5428,5442,5464,5470,5484,5488],{"__ignoreMap":800},[804,5384,5385,5387,5389,5391,5393,5395,5397,5399,5401,5403],{"class":806,"line":807},[804,5386,811],{"class":810},[804,5388,818],{"class":817},[804,5390,3348],{"class":821},[804,5392,1001],{"class":817},[804,5394,1389],{"class":821},[804,5396,825],{"class":817},[804,5398,828],{"class":810},[804,5400,831],{"class":817},[804,5402,835],{"class":834},[804,5404,838],{"class":817},[804,5406,5407,5409,5411,5414,5416,5418,5420,5422],{"class":806,"line":841},[804,5408,811],{"class":810},[804,5410,818],{"class":817},[804,5412,5413],{"class":821}," createHttpLogDrain",[804,5415,825],{"class":817},[804,5417,828],{"class":810},[804,5419,831],{"class":817},[804,5421,5304],{"class":834},[804,5423,838],{"class":817},[804,5425,5426],{"class":806,"line":861},[804,5427,886],{"emptyLinePlaceholder":885},[804,5429,5430,5432,5434,5436,5438,5440],{"class":806,"line":882},[804,5431,1330],{"class":914},[804,5433,1353],{"class":821},[804,5435,1336],{"class":817},[804,5437,5413],{"class":898},[804,5439,902],{"class":821},[804,5441,1405],{"class":817},[804,5443,5444,5446,5448,5450,5453,5455,5457,5460,5462],{"class":806,"line":889},[804,5445,1428],{"class":945},[804,5447,1413],{"class":817},[804,5449,818],{"class":817},[804,5451,5452],{"class":945}," endpoint",[804,5454,1413],{"class":817},[804,5456,831],{"class":817},[804,5458,5459],{"class":834},"https:\u002F\u002Flogs.example.com\u002Fv1\u002Fingest",[804,5461,993],{"class":817},[804,5463,4463],{"class":817},[804,5465,5466,5468],{"class":806,"line":921},[804,5467,1049],{"class":817},[804,5469,1006],{"class":821},[804,5471,5472,5474,5476,5478,5480,5482],{"class":806,"line":949},[804,5473,3441],{"class":898},[804,5475,902],{"class":821},[804,5477,1617],{"class":817},[804,5479,1353],{"class":821},[804,5481,1049],{"class":817},[804,5483,1006],{"class":821},[804,5485,5486],{"class":806,"line":969},[804,5487,886],{"emptyLinePlaceholder":885},[804,5489,5490,5493,5495,5498,5500,5502,5505,5507,5509,5512,5514,5516,5519,5521,5524,5526,5529,5531],{"class":806,"line":974},[804,5491,5492],{"class":821},"log",[804,5494,980],{"class":817},[804,5496,5497],{"class":898},"info",[804,5499,902],{"class":821},[804,5501,1617],{"class":817},[804,5503,5504],{"class":945}," action",[804,5506,1413],{"class":817},[804,5508,831],{"class":817},[804,5510,5511],{"class":834},"page_view",[804,5513,993],{"class":817},[804,5515,1001],{"class":817},[804,5517,5518],{"class":945}," path",[804,5520,1413],{"class":817},[804,5522,5523],{"class":821}," location",[804,5525,980],{"class":817},[804,5527,5528],{"class":821},"pathname ",[804,5530,1049],{"class":817},[804,5532,1006],{"class":821},[3521,5534,5536],{"id":5535},"how-it-works-browser-specifics","How it works (browser specifics)",[5538,5539,5540,5552,5555,5566,5573],"ol",{},[695,5541,5542,4270,5545,4270,5548,5551],{},[699,5543,5544],{},"log.info()",[699,5546,5547],{},"log.warn()",[699,5549,5550],{},"log.error()"," push events into a memory buffer",[695,5553,5554],{},"Events are batched by size (default 25) or time interval (default 2 s)",[695,5556,5557,5558,5561,5562,5565],{},"Batches are sent via ",[699,5559,5560],{},"fetch"," with ",[699,5563,5564],{},"keepalive: true"," so requests survive page navigation",[695,5567,5568,5569,5572],{},"When the page becomes hidden (tab switch, navigation), buffered events are flushed via ",[699,5570,5571],{},"navigator.sendBeacon"," as a fallback",[695,5574,5575,5576,5578],{},"Your server endpoint receives a ",[699,5577,5367],{}," JSON array and processes it however you like",[3521,5580,5582],{"id":5581},"pick-the-tier-you-need","Pick the tier you need",[5584,5585,5587],"h4",{"id":5586},"createhttplogdrainoptions",[699,5588,5589],{},"createHttpLogDrain(options)",[609,5591,5592,5593,5595,5596,5599,5600,980],{},"High-level, pre-composed: creates a pipeline with batching, retry, and auto-flush on ",[699,5594,5288],{},". Returns a ",[699,5597,5598],{},"PipelineDrainFn\u003CDrainContext>"," directly usable with ",[699,5601,5351],{},[794,5603,5605],{"className":796,"code":5604,"filename":5380,"language":798,"meta":800,"style":800},"import { initLogger, log } from 'evlog'\nimport { createHttpLogDrain } from 'evlog\u002Fhttp'\n\nconst drain = createHttpLogDrain({\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",[699,5606,5607,5629,5647,5651,5665,5685,5718,5724,5728,5742],{"__ignoreMap":800},[804,5608,5609,5611,5613,5615,5617,5619,5621,5623,5625,5627],{"class":806,"line":807},[804,5610,811],{"class":810},[804,5612,818],{"class":817},[804,5614,3348],{"class":821},[804,5616,1001],{"class":817},[804,5618,1389],{"class":821},[804,5620,825],{"class":817},[804,5622,828],{"class":810},[804,5624,831],{"class":817},[804,5626,835],{"class":834},[804,5628,838],{"class":817},[804,5630,5631,5633,5635,5637,5639,5641,5643,5645],{"class":806,"line":841},[804,5632,811],{"class":810},[804,5634,818],{"class":817},[804,5636,5413],{"class":821},[804,5638,825],{"class":817},[804,5640,828],{"class":810},[804,5642,831],{"class":817},[804,5644,5304],{"class":834},[804,5646,838],{"class":817},[804,5648,5649],{"class":806,"line":861},[804,5650,886],{"emptyLinePlaceholder":885},[804,5652,5653,5655,5657,5659,5661,5663],{"class":806,"line":882},[804,5654,1330],{"class":914},[804,5656,1353],{"class":821},[804,5658,1336],{"class":817},[804,5660,5413],{"class":898},[804,5662,902],{"class":821},[804,5664,1405],{"class":817},[804,5666,5667,5669,5671,5673,5675,5677,5679,5681,5683],{"class":806,"line":889},[804,5668,1428],{"class":945},[804,5670,1413],{"class":817},[804,5672,818],{"class":817},[804,5674,5452],{"class":945},[804,5676,1413],{"class":817},[804,5678,831],{"class":817},[804,5680,5459],{"class":834},[804,5682,993],{"class":817},[804,5684,4463],{"class":817},[804,5686,5687,5690,5692,5694,5696,5698,5700,5702,5704,5706,5708,5710,5712,5714,5716],{"class":806,"line":921},[804,5688,5689],{"class":945},"  pipeline",[804,5691,1413],{"class":817},[804,5693,818],{"class":817},[804,5695,4863],{"class":945},[804,5697,1413],{"class":817},[804,5699,818],{"class":817},[804,5701,4447],{"class":945},[804,5703,1413],{"class":817},[804,5705,3658],{"class":3657},[804,5707,1001],{"class":817},[804,5709,4456],{"class":945},[804,5711,1413],{"class":817},[804,5713,3673],{"class":3657},[804,5715,825],{"class":817},[804,5717,4463],{"class":817},[804,5719,5720,5722],{"class":806,"line":949},[804,5721,1049],{"class":817},[804,5723,1006],{"class":821},[804,5725,5726],{"class":806,"line":969},[804,5727,886],{"emptyLinePlaceholder":885},[804,5729,5730,5732,5734,5736,5738,5740],{"class":806,"line":974},[804,5731,3441],{"class":898},[804,5733,902],{"class":821},[804,5735,1617],{"class":817},[804,5737,1353],{"class":821},[804,5739,1049],{"class":817},[804,5741,1006],{"class":821},[804,5743,5744,5746,5748,5750,5752,5754,5756,5758,5760,5763,5765,5767,5770,5772,5774,5777,5779,5781],{"class":806,"line":1009},[804,5745,5492],{"class":821},[804,5747,980],{"class":817},[804,5749,5497],{"class":898},[804,5751,902],{"class":821},[804,5753,1617],{"class":817},[804,5755,5504],{"class":945},[804,5757,1413],{"class":817},[804,5759,831],{"class":817},[804,5761,5762],{"class":834},"click",[804,5764,993],{"class":817},[804,5766,1001],{"class":817},[804,5768,5769],{"class":945}," target",[804,5771,1413],{"class":817},[804,5773,831],{"class":817},[804,5775,5776],{"class":834},"buy-button",[804,5778,993],{"class":817},[804,5780,825],{"class":817},[804,5782,1006],{"class":821},[5584,5784,5786],{"id":5785},"createhttpdrainconfig",[699,5787,5788],{},"createHttpDrain(config)",[609,5790,5791],{},"Low-level transport function. Use this when you want full control over the pipeline configuration:",[794,5793,5795],{"className":796,"code":5794,"filename":5380,"language":798,"meta":800,"style":800},"import { createHttpDrain } from 'evlog\u002Fhttp'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport type { DrainContext } from 'evlog'\n\nconst transport = createHttpDrain({\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",[699,5796,5797,5816,5834,5854,5858,5873,5888,5894,5914,5939,5956,5962,5966],{"__ignoreMap":800},[804,5798,5799,5801,5803,5806,5808,5810,5812,5814],{"class":806,"line":807},[804,5800,811],{"class":810},[804,5802,818],{"class":817},[804,5804,5805],{"class":821}," createHttpDrain",[804,5807,825],{"class":817},[804,5809,828],{"class":810},[804,5811,831],{"class":817},[804,5813,5304],{"class":834},[804,5815,838],{"class":817},[804,5817,5818,5820,5822,5824,5826,5828,5830,5832],{"class":806,"line":841},[804,5819,811],{"class":810},[804,5821,818],{"class":817},[804,5823,848],{"class":821},[804,5825,825],{"class":817},[804,5827,828],{"class":810},[804,5829,831],{"class":817},[804,5831,705],{"class":834},[804,5833,838],{"class":817},[804,5835,5836,5838,5840,5842,5844,5846,5848,5850,5852],{"class":806,"line":861},[804,5837,811],{"class":810},[804,5839,814],{"class":810},[804,5841,818],{"class":817},[804,5843,822],{"class":821},[804,5845,825],{"class":817},[804,5847,828],{"class":810},[804,5849,831],{"class":817},[804,5851,835],{"class":834},[804,5853,838],{"class":817},[804,5855,5856],{"class":806,"line":882},[804,5857,886],{"emptyLinePlaceholder":885},[804,5859,5860,5862,5865,5867,5869,5871],{"class":806,"line":889},[804,5861,1330],{"class":914},[804,5863,5864],{"class":821}," transport ",[804,5866,1336],{"class":817},[804,5868,5805],{"class":898},[804,5870,902],{"class":821},[804,5872,1405],{"class":817},[804,5874,5875,5878,5880,5882,5884,5886],{"class":806,"line":921},[804,5876,5877],{"class":945},"  endpoint",[804,5879,1413],{"class":817},[804,5881,831],{"class":817},[804,5883,5459],{"class":834},[804,5885,993],{"class":817},[804,5887,1423],{"class":817},[804,5889,5890,5892],{"class":806,"line":949},[804,5891,1049],{"class":817},[804,5893,1006],{"class":821},[804,5895,5896,5898,5900,5902,5904,5906,5908,5910,5912],{"class":806,"line":969},[804,5897,1330],{"class":914},[804,5899,1333],{"class":821},[804,5901,1336],{"class":817},[804,5903,848],{"class":898},[804,5905,935],{"class":817},[804,5907,939],{"class":938},[804,5909,942],{"class":817},[804,5911,902],{"class":821},[804,5913,1405],{"class":817},[804,5915,5916,5918,5920,5922,5924,5926,5928,5930,5932,5934,5937],{"class":806,"line":974},[804,5917,3643],{"class":945},[804,5919,1413],{"class":817},[804,5921,818],{"class":817},[804,5923,4447],{"class":945},[804,5925,1413],{"class":817},[804,5927,5108],{"class":3657},[804,5929,1001],{"class":817},[804,5931,4456],{"class":945},[804,5933,1413],{"class":817},[804,5935,5936],{"class":3657}," 10000",[804,5938,4463],{"class":817},[804,5940,5941,5943,5945,5947,5949,5951,5954],{"class":806,"line":1009},[804,5942,3688],{"class":945},[804,5944,1413],{"class":817},[804,5946,818],{"class":817},[804,5948,4474],{"class":945},[804,5950,1413],{"class":817},[804,5952,5953],{"class":3657}," 5",[804,5955,4463],{"class":817},[804,5957,5958,5960],{"class":806,"line":1046},[804,5959,1049],{"class":817},[804,5961,1006],{"class":821},[804,5963,5964],{"class":806,"line":1433},[804,5965,886],{"emptyLinePlaceholder":885},[804,5967,5968,5970,5972,5974,5976],{"class":806,"line":1440},[804,5969,1330],{"class":914},[804,5971,1353],{"class":821},[804,5973,1336],{"class":817},[804,5975,927],{"class":898},[804,5977,5978],{"class":821},"(transport)\n",[3521,5980,5982],{"id":5981},"every-browser-option","Every browser option",[5584,5984,5986],{"id":5985},"httpdrainconfig",[699,5987,5988],{},"HttpDrainConfig",[622,5990,5991,6001],{},[625,5992,5993],{},[628,5994,5995,5997,5999],{},[631,5996,3883],{},[631,5998,3886],{},[631,6000,3889],{},[638,6002,6003,6018,6039,6053,6071],{},[628,6004,6005,6010,6012],{},[643,6006,6007],{},[699,6008,6009],{},"endpoint",[643,6011,4008],{},[643,6013,6014,6017],{},[4720,6015,6016],{},"(required)"," Full URL of the server ingest endpoint",[628,6019,6020,6025,6027],{},[643,6021,6022],{},[699,6023,6024],{},"headers",[643,6026,4008],{},[643,6028,6029,6030,6032,6033,3531,6036,911],{},"Custom headers sent with each ",[699,6031,5560],{}," request (e.g. ",[699,6034,6035],{},"Authorization",[699,6037,6038],{},"X-API-Key",[628,6040,6041,6046,6050],{},[643,6042,6043],{},[699,6044,6045],{},"timeout",[643,6047,6048],{},[699,6049,3916],{},[643,6051,6052],{},"Request timeout in milliseconds",[628,6054,6055,6060,6065],{},[643,6056,6057],{},[699,6058,6059],{},"useBeacon",[643,6061,6062],{},[699,6063,6064],{},"true",[643,6066,6067,6068,6070],{},"Use ",[699,6069,5284],{}," when the page is hidden",[628,6072,6073,6078,6083],{},[643,6074,6075],{},[699,6076,6077],{},"credentials",[643,6079,6080],{},[699,6081,6082],{},"'same-origin'",[643,6084,6085,6086,3531,6089,3531,6091,6094,6095,6097],{},"Fetch credentials mode (",[699,6087,6088],{},"'omit'",[699,6090,6082],{},[699,6092,6093],{},"'include'","). Set to ",[699,6096,6093],{}," for cross-origin endpoints",[5584,6099,6101],{"id":6100},"httplogdrainoptions",[699,6102,6103],{},"HttpLogDrainOptions",[622,6105,6106,6116],{},[625,6107,6108],{},[628,6109,6110,6112,6114],{},[631,6111,3883],{},[631,6113,3886],{},[631,6115,3889],{},[638,6117,6118,6134,6149],{},[628,6119,6120,6124,6126],{},[643,6121,6122],{},[699,6123,758],{},[643,6125,4008],{},[643,6127,6128,6130,6131,6133],{},[4720,6129,6016],{}," ",[699,6132,5988],{}," object",[628,6135,6136,6141,6146],{},[643,6137,6138],{},[699,6139,6140],{},"pipeline",[643,6142,6143],{},[699,6144,6145],{},"{ batch: { size: 25, intervalMs: 2000 }, retry: { maxAttempts: 2 } }",[643,6147,6148],{},"Pipeline configuration overrides",[628,6150,6151,6156,6160],{},[643,6152,6153],{},[699,6154,6155],{},"autoFlush",[643,6157,6158],{},[699,6159,6064],{},[643,6161,6162,6163,6165],{},"Auto-register ",[699,6164,5288],{}," flush listener",[3521,6167,6169],{"id":6168},"survive-a-closing-tab","Survive a closing tab",[3473,6171,6173,6174,6176,6177,6179,6180,6182],{"color":5497,"icon":6172},"i-lucide-radio","When ",[699,6175,6059],{}," is enabled (the default) and the page becomes hidden, the drain automatically switches from ",[699,6178,5560],{}," to ",[699,6181,5571],{},". This ensures logs are delivered even when the user closes the tab or navigates away.",[609,6184,6185,6187],{},[699,6186,5284],{}," 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).",[3521,6189,6191],{"id":6190},"authenticate-the-browser-request","Authenticate the browser request",[609,6193,6194],{},"Pass custom headers to protect your ingest endpoint:",[794,6196,6198],{"className":796,"code":6197,"filename":5380,"language":798,"meta":800,"style":800},"const drain = createHttpLogDrain({\n  drain: {\n    endpoint: 'https:\u002F\u002Flogs.example.com\u002Fv1\u002Fingest',\n    headers: {\n      'Authorization': 'Bearer ' + token,\n    },\n  },\n})\n",[699,6199,6200,6214,6222,6237,6245,6271,6276,6280],{"__ignoreMap":800},[804,6201,6202,6204,6206,6208,6210,6212],{"class":806,"line":807},[804,6203,1330],{"class":914},[804,6205,1353],{"class":821},[804,6207,1336],{"class":817},[804,6209,5413],{"class":898},[804,6211,902],{"class":821},[804,6213,1405],{"class":817},[804,6215,6216,6218,6220],{"class":806,"line":841},[804,6217,1428],{"class":945},[804,6219,1413],{"class":817},[804,6221,918],{"class":817},[804,6223,6224,6227,6229,6231,6233,6235],{"class":806,"line":861},[804,6225,6226],{"class":945},"    endpoint",[804,6228,1413],{"class":817},[804,6230,831],{"class":817},[804,6232,5459],{"class":834},[804,6234,993],{"class":817},[804,6236,1423],{"class":817},[804,6238,6239,6241,6243],{"class":806,"line":882},[804,6240,5185],{"class":945},[804,6242,1413],{"class":817},[804,6244,918],{"class":817},[804,6246,6247,6250,6252,6254,6256,6258,6261,6263,6266,6269],{"class":806,"line":889},[804,6248,6249],{"class":817},"      '",[804,6251,6035],{"class":945},[804,6253,993],{"class":817},[804,6255,1413],{"class":817},[804,6257,831],{"class":817},[804,6259,6260],{"class":834},"Bearer ",[804,6262,993],{"class":817},[804,6264,6265],{"class":817}," +",[804,6267,6268],{"class":821}," token",[804,6270,1423],{"class":817},[804,6272,6273],{"class":806,"line":921},[804,6274,6275],{"class":817},"    },\n",[804,6277,6278],{"class":806,"line":949},[804,6279,3683],{"class":817},[804,6281,6282,6284],{"class":806,"line":969},[804,6283,1049],{"class":817},[804,6285,1006],{"class":821},[3473,6287,6288,6290,6291,6293,6294,6296,6297,6299,6300,6303,6304,5561,6306,980],{"color":3475,"icon":59},[699,6289,6024],{}," are applied to ",[699,6292,5560],{}," requests only. The ",[699,6295,5284],{}," API does not support custom headers, so when the page is hidden and ",[699,6298,5284],{}," is used, headers are not sent. If your endpoint requires authentication, validate via a session cookie (set ",[699,6301,6302],{},"credentials: 'include'"," for cross-origin endpoints) or disable ",[699,6305,5284],{},[699,6307,6308],{},"useBeacon: false",[3521,6310,6312],{"id":6311},"server-endpoint","Server endpoint",[609,6314,6315,6316,6318],{},"Your server needs a POST endpoint that accepts a ",[699,6317,5367],{}," JSON body. Examples for common frameworks:",[791,6320,6321,6462],{},[794,6322,6324],{"className":796,"code":6323,"filename":270,"language":798,"meta":2080,"style":800},"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",[699,6325,6326,6375,6402,6434,6439,6456],{"__ignoreMap":800},[804,6327,6328,6330,6332,6335,6337,6339,6342,6344,6346,6349,6351,6354,6357,6359,6361,6364,6366,6369,6371,6373],{"class":806,"line":807},[804,6329,2204],{"class":821},[804,6331,980],{"class":817},[804,6333,6334],{"class":898},"post",[804,6336,902],{"class":821},[804,6338,993],{"class":817},[804,6340,6341],{"class":834},"\u002Fv1\u002Fingest",[804,6343,993],{"class":817},[804,6345,1001],{"class":817},[804,6347,6348],{"class":821}," express",[804,6350,980],{"class":817},[804,6352,6353],{"class":898},"json",[804,6355,6356],{"class":821},"()",[804,6358,1001],{"class":817},[804,6360,3772],{"class":817},[804,6362,6363],{"class":907},"req",[804,6365,1001],{"class":817},[804,6367,6368],{"class":907}," res",[804,6370,911],{"class":817},[804,6372,915],{"class":914},[804,6374,918],{"class":817},[804,6376,6377,6380,6382,6384,6387,6390,6393,6395,6398,6400],{"class":806,"line":841},[804,6378,6379],{"class":810},"  for",[804,6381,3772],{"class":945},[804,6383,1330],{"class":914},[804,6385,6386],{"class":821}," entry",[804,6388,6389],{"class":817}," of",[804,6391,6392],{"class":821}," req",[804,6394,980],{"class":817},[804,6396,6397],{"class":821},"body",[804,6399,4921],{"class":945},[804,6401,1405],{"class":817},[804,6403,6404,6406,6408,6410,6412,6414,6417,6419,6421,6423,6425,6427,6429,6432],{"class":806,"line":861},[804,6405,3792],{"class":821},[804,6407,980],{"class":817},[804,6409,5492],{"class":898},[804,6411,902],{"class":945},[804,6413,993],{"class":817},[804,6415,6416],{"class":834},"[BROWSER]",[804,6418,993],{"class":817},[804,6420,1001],{"class":817},[804,6422,5217],{"class":821},[804,6424,980],{"class":817},[804,6426,5222],{"class":898},[804,6428,902],{"class":945},[804,6430,6431],{"class":821},"entry",[804,6433,2224],{"class":945},[804,6435,6436],{"class":806,"line":882},[804,6437,6438],{"class":817},"  }\n",[804,6440,6441,6444,6446,6449,6451,6454],{"class":806,"line":889},[804,6442,6443],{"class":821},"  res",[804,6445,980],{"class":817},[804,6447,6448],{"class":898},"sendStatus",[804,6450,902],{"class":945},[804,6452,6453],{"class":3657},"204",[804,6455,1006],{"class":945},[804,6457,6458,6460],{"class":806,"line":921},[804,6459,1049],{"class":817},[804,6461,1006],{"class":821},[794,6463,6465],{"className":796,"code":6464,"filename":275,"language":798,"meta":2080,"style":800},"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",[699,6466,6467,6498,6522,6540,6570,6574,6595],{"__ignoreMap":800},[804,6468,6469,6471,6473,6475,6477,6479,6481,6483,6485,6488,6490,6492,6494,6496],{"class":806,"line":807},[804,6470,2204],{"class":821},[804,6472,980],{"class":817},[804,6474,6334],{"class":898},[804,6476,902],{"class":821},[804,6478,993],{"class":817},[804,6480,6341],{"class":834},[804,6482,993],{"class":817},[804,6484,1001],{"class":817},[804,6486,6487],{"class":914}," async",[804,6489,3772],{"class":817},[804,6491,4872],{"class":907},[804,6493,911],{"class":817},[804,6495,915],{"class":914},[804,6497,918],{"class":817},[804,6499,6500,6502,6505,6507,6510,6512,6514,6516,6518,6520],{"class":806,"line":841},[804,6501,924],{"class":914},[804,6503,6504],{"class":821}," body",[804,6506,930],{"class":817},[804,6508,6509],{"class":810}," await",[804,6511,4877],{"class":821},[804,6513,980],{"class":817},[804,6515,6363],{"class":821},[804,6517,980],{"class":817},[804,6519,6353],{"class":898},[804,6521,946],{"class":945},[804,6523,6524,6526,6528,6530,6532,6534,6536,6538],{"class":806,"line":861},[804,6525,6379],{"class":810},[804,6527,3772],{"class":945},[804,6529,1330],{"class":914},[804,6531,6386],{"class":821},[804,6533,6389],{"class":817},[804,6535,6504],{"class":821},[804,6537,4921],{"class":945},[804,6539,1405],{"class":817},[804,6541,6542,6544,6546,6548,6550,6552,6554,6556,6558,6560,6562,6564,6566,6568],{"class":806,"line":882},[804,6543,3792],{"class":821},[804,6545,980],{"class":817},[804,6547,5492],{"class":898},[804,6549,902],{"class":945},[804,6551,993],{"class":817},[804,6553,6416],{"class":834},[804,6555,993],{"class":817},[804,6557,1001],{"class":817},[804,6559,5217],{"class":821},[804,6561,980],{"class":817},[804,6563,5222],{"class":898},[804,6565,902],{"class":945},[804,6567,6431],{"class":821},[804,6569,2224],{"class":945},[804,6571,6572],{"class":806,"line":889},[804,6573,6438],{"class":817},[804,6575,6576,6579,6581,6583,6585,6587,6590,6593],{"class":806,"line":921},[804,6577,6578],{"class":810},"  return",[804,6580,4877],{"class":821},[804,6582,980],{"class":817},[804,6584,6397],{"class":898},[804,6586,902],{"class":945},[804,6588,6589],{"class":817},"null,",[804,6591,6592],{"class":3657}," 204",[804,6594,1006],{"class":945},[804,6596,6597,6599],{"class":806,"line":949},[804,6598,1049],{"class":817},[804,6600,1006],{"class":821},[609,6602,6603,6604,6609],{},"See the full ",[613,6605,6608],{"href":6606,"rel":6607},"https:\u002F\u002Fgithub.com\u002Fevloghq\u002Fevlog\u002Ftree\u002Fmain\u002Fexamples\u002Fbrowser",[777],"browser example"," for a working Hono server + browser page.",[784,6611,6613],{"id":6612},"mistakes-that-cost-you-events","Mistakes that cost you events",[692,6615,6616,6624,6632,6638],{},[695,6617,6618,6623],{},[4720,6619,4277,6620,6622],{},[699,6621,746],{}," on shutdown",": buffered events are lost otherwise",[695,6625,6626,6631],{},[4720,6627,4253,6628,6630],{},[699,6629,3503],{}," to match your provider's recommended payload",": too small wastes overhead, too big risks rejection",[695,6633,6634,6637],{},[4720,6635,6636],{},"Don't run one pipeline per drain unless you need per-destination retries",": sharing one pipeline keeps batching + buffering coherent",[695,6639,6640,6643,6644,6647],{},[4720,6641,6642],{},"Don't fan out to a serverless-incompatible target without checking",": the ",[613,6645,6646],{"href":490},"stream server"," reaches every connected client through the in-process stream; it's not a drain",[784,6649,6651],{"id":6650},"next-steps","Next steps",[692,6653,6654,6665,6671,6676],{},[695,6655,6656,6659,6660,4270,6662],{},[613,6657,6658],{"href":530},"Custom Drains",": build a drain for any backend with ",[699,6661,5270],{},[699,6663,6664],{},"defineDrain",[695,6666,6667,6670],{},[613,6668,6669],{"href":153},"Adapters Overview",": built-in adapters that work with the pipeline out of the box",[695,6672,6673,6675],{},[613,6674,560],{"href":561},": security and production tips",[695,6677,6678,6681],{},[613,6679,6680],{"href":328},"Client logging",": end-to-end browser → server flow",[6683,6684,6685],"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html .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 .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":800,"searchDepth":841,"depth":841,"links":6687},[6688,6689,6692,6697,6698,6703,6704,6713,6714],{"id":786,"depth":841,"text":651},{"id":3493,"depth":841,"text":3494,"children":6690},[6691],{"id":3523,"depth":861,"text":3524},{"id":3552,"depth":841,"text":547,"children":6693},[6694,6695,6696],{"id":3873,"depth":861,"text":3874},{"id":4014,"depth":861,"text":4015},{"id":4073,"depth":861,"text":4074},{"id":4157,"depth":841,"text":3490},{"id":4206,"depth":841,"text":662,"children":6699},[6700,6701,6702],{"id":4288,"depth":861,"text":4289},{"id":4713,"depth":861,"text":4714},{"id":4740,"depth":861,"text":4741},{"id":5023,"depth":841,"text":5024},{"id":5274,"depth":841,"text":672,"children":6705},[6706,6707,6708,6709,6710,6711,6712],{"id":5376,"depth":861,"text":651},{"id":5535,"depth":861,"text":5536},{"id":5581,"depth":861,"text":5582},{"id":5981,"depth":861,"text":5982},{"id":6168,"depth":861,"text":6169},{"id":6190,"depth":861,"text":6191},{"id":6311,"depth":861,"text":6312},{"id":6612,"depth":841,"text":6613},{"id":6650,"depth":841,"text":6651},"The pipeline wraps every drain: it batches events, retries on failure, fans out to several destinations, and ships browser logs.","md",[6718,6720],{"label":6658,"icon":532,"to":530,"color":5292,"variant":6719},"subtle",{"label":6669,"icon":6721,"to":153,"color":5292,"variant":6719},"i-custom-plug",{},{"title":534,"icon":537},{"title":604,"description":6715},"KD4PtXFGPgwppyHhOQjObVV6L5-odTiC8vM5fT7RUic",[6727,6729],{"title":529,"path":530,"stem":531,"description":6728,"icon":532,"children":-1},"Build a drain for any backend without a built-in adapter. Config resolution, retries, timeouts, and identity headers are handled for you.",{"title":41,"path":543,"stem":544,"description":6730,"icon":545,"children":-1},"Every option, every number, and every comparison, in one place. Start here when you know what evlog does and need the exact value.",1791055012455]