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