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