[{"data":1,"prerenderedAt":2841},["ShallowReactive",2],{"navigation_docs":3,"-adapters-building-blocks-custom":421,"-adapters-building-blocks-custom-surround":2836},[4,35,159,201,289,318,405],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F4.agent-skills","i-lucide-sparkles",{"title":30,"path":31,"stem":32,"icon":33},"vs Other Loggers","\u002Fgetting-started\u002Fvs-other-loggers","1.getting-started\u002F5.vs-other-loggers","i-lucide-scale",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Logging","\u002Flogging","2.logging",[40,45,50,55,60,65,70,99,127],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Catalogs","\u002Flogging\u002Fcatalogs","2.logging\u002F4.catalogs","i-lucide-book-open",{"title":66,"path":67,"stem":68,"icon":69},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F5.client-logging","i-lucide-monitor",{"title":71,"icon":72,"path":73,"stem":74,"children":75,"page":34},"AI SDK","i-simple-icons-vercel","\u002Flogging\u002Fai-sdk","2.logging\u002F6.ai-sdk",[76,79,84,89,94],{"title":41,"path":77,"stem":78,"icon":44},"\u002Flogging\u002Fai-sdk\u002Foverview","2.logging\u002F6.ai-sdk\u002F01.overview",{"title":80,"path":81,"stem":82,"icon":83},"Usage","\u002Flogging\u002Fai-sdk\u002Fusage","2.logging\u002F6.ai-sdk\u002F02.usage","i-lucide-code",{"title":85,"path":86,"stem":87,"icon":88},"Options","\u002Flogging\u002Fai-sdk\u002Foptions","2.logging\u002F6.ai-sdk\u002F03.options","i-lucide-sliders",{"title":90,"path":91,"stem":92,"icon":93},"Metadata","\u002Flogging\u002Fai-sdk\u002Fmetadata","2.logging\u002F6.ai-sdk\u002F04.metadata","i-lucide-database",{"title":95,"path":96,"stem":97,"icon":98},"Telemetry","\u002Flogging\u002Fai-sdk\u002Ftelemetry","2.logging\u002F6.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":100,"icon":101,"path":102,"stem":103,"children":104,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Flogging\u002Fbetter-auth","2.logging\u002F7.better-auth",[105,108,113,118,122],{"title":41,"path":106,"stem":107,"icon":44},"\u002Flogging\u002Fbetter-auth\u002Foverview","2.logging\u002F7.better-auth\u002F01.overview",{"title":109,"path":110,"stem":111,"icon":112},"Identify User","\u002Flogging\u002Fbetter-auth\u002Fidentify-user","2.logging\u002F7.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":114,"path":115,"stem":116,"icon":117},"Middleware","\u002Flogging\u002Fbetter-auth\u002Fmiddleware","2.logging\u002F7.better-auth\u002F03.middleware","i-lucide-shield",{"title":119,"path":120,"stem":121,"icon":69},"Client Sync","\u002Flogging\u002Fbetter-auth\u002Fclient-sync","2.logging\u002F7.better-auth\u002F04.client-sync",{"title":123,"path":124,"stem":125,"icon":126},"Performance","\u002Flogging\u002Fbetter-auth\u002Fperformance","2.logging\u002F7.better-auth\u002F05.performance","i-lucide-gauge",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":34},"Audit Logs","i-lucide-shield-check","\u002Flogging\u002Faudit","2.logging\u002F8.audit",[133,136,141,146,151,155],{"title":41,"path":134,"stem":135,"icon":44},"\u002Flogging\u002Faudit\u002Foverview","2.logging\u002F8.audit\u002F01.overview",{"title":137,"path":138,"stem":139,"icon":140},"Schema","\u002Flogging\u002Faudit\u002Fschema","2.logging\u002F8.audit\u002F02.schema","i-lucide-file-text",{"title":142,"path":143,"stem":144,"icon":145},"Recording","\u002Flogging\u002Faudit\u002Frecording","2.logging\u002F8.audit\u002F03.recording","i-lucide-pen-line",{"title":147,"path":148,"stem":149,"icon":150},"Drains","\u002Flogging\u002Faudit\u002Fpipeline","2.logging\u002F8.audit\u002F04.pipeline","i-lucide-link",{"title":152,"path":153,"stem":154,"icon":129},"Compliance","\u002Flogging\u002Faudit\u002Fcompliance","2.logging\u002F8.audit\u002F05.compliance",{"title":156,"path":157,"stem":158,"icon":64},"Recipes","\u002Flogging\u002Faudit\u002Frecipes","2.logging\u002F8.audit\u002F06.recipes",{"title":160,"path":161,"stem":162,"children":163,"page":34},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[164,169,174,179,184,188,191,196],{"title":165,"path":166,"stem":167,"icon":168},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":170,"path":171,"stem":172,"icon":173},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":175,"path":176,"stem":177,"icon":178},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":180,"path":181,"stem":182,"icon":183},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":185,"path":186,"stem":187,"icon":129},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices",{"title":123,"path":189,"stem":190,"icon":126},"\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance",{"title":192,"path":193,"stem":194,"icon":195},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":197,"path":198,"stem":199,"icon":200},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":202,"path":203,"stem":204,"children":205,"page":34},"Frameworks","\u002Fframeworks","4.frameworks",[206,210,215,220,225,230,235,240,245,250,255,260,265,270,274,279,284],{"title":41,"path":207,"stem":208,"icon":209},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":211,"path":212,"stem":213,"icon":214},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":216,"path":217,"stem":218,"icon":219},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":221,"path":222,"stem":223,"icon":224},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":226,"path":227,"stem":228,"icon":229},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":231,"path":232,"stem":233,"icon":234},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":236,"path":237,"stem":238,"icon":239},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":241,"path":242,"stem":243,"icon":244},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":246,"path":247,"stem":248,"icon":249},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":251,"path":252,"stem":253,"icon":254},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":256,"path":257,"stem":258,"icon":259},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":261,"path":262,"stem":263,"icon":264},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":266,"path":267,"stem":268,"icon":269},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":271,"path":272,"stem":273,"icon":183},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":275,"path":276,"stem":277,"icon":278},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":280,"path":281,"stem":282,"icon":283},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":285,"path":286,"stem":287,"icon":288},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F17.custom-integration","i-lucide-puzzle",{"title":290,"path":291,"stem":292,"children":293,"page":34},"Build on top","\u002Fbuild-on-top","5.build-on-top",[294,299,304,309,314],{"title":295,"path":296,"stem":297,"icon":298},"Identity headers","\u002Fbuild-on-top\u002Fidentity-headers","5.build-on-top\u002F1.identity-headers","i-lucide-fingerprint",{"title":300,"path":301,"stem":302,"icon":303},"Stream API","\u002Fbuild-on-top\u002Fstream-api","5.build-on-top\u002F2.stream-api","i-lucide-radio-tower",{"title":305,"path":306,"stem":307,"icon":308},"SSE bridge","\u002Fbuild-on-top\u002Fsse-bridge","5.build-on-top\u002F3.sse-bridge","i-lucide-wifi",{"title":310,"path":311,"stem":312,"icon":313},"FS reader","\u002Fbuild-on-top\u002Ffs-reader","5.build-on-top\u002F4.fs-reader","i-lucide-folder-search",{"title":156,"path":315,"stem":316,"icon":317},"\u002Fbuild-on-top\u002Frecipes","5.build-on-top\u002F4.recipes","i-lucide-chef-hat",{"title":319,"path":320,"stem":321,"children":322,"page":34},"Adapters","\u002Fadapters","6.adapters",[323,326,366,381],{"title":41,"path":324,"stem":325,"icon":44},"\u002Fadapters\u002Foverview","6.adapters\u002F01.overview",{"title":327,"path":328,"stem":329,"children":330,"page":34},"Cloud destinations","\u002Fadapters\u002Fcloud","6.adapters\u002F02.cloud",[331,336,341,346,351,356,361],{"title":332,"path":333,"stem":334,"icon":335},"Axiom","\u002Fadapters\u002Fcloud\u002Faxiom","6.adapters\u002F02.cloud\u002F01.axiom","i-custom-axiom",{"title":337,"path":338,"stem":339,"icon":340},"OTLP","\u002Fadapters\u002Fcloud\u002Fotlp","6.adapters\u002F02.cloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":342,"path":343,"stem":344,"icon":345},"PostHog","\u002Fadapters\u002Fcloud\u002Fposthog","6.adapters\u002F02.cloud\u002F03.posthog","i-simple-icons-posthog",{"title":347,"path":348,"stem":349,"icon":350},"Sentry","\u002Fadapters\u002Fcloud\u002Fsentry","6.adapters\u002F02.cloud\u002F04.sentry","i-simple-icons-sentry",{"title":352,"path":353,"stem":354,"icon":355},"Better Stack","\u002Fadapters\u002Fcloud\u002Fbetter-stack","6.adapters\u002F02.cloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":357,"path":358,"stem":359,"icon":360},"Datadog","\u002Fadapters\u002Fcloud\u002Fdatadog","6.adapters\u002F02.cloud\u002F06.datadog","i-simple-icons-datadog",{"title":362,"path":363,"stem":364,"icon":365},"HyperDX","\u002Fadapters\u002Fcloud\u002Fhyperdx","6.adapters\u002F02.cloud\u002F07.hyperdx","i-custom-hyperdx",{"title":367,"path":368,"stem":369,"children":370,"page":34},"Self-hosted","\u002Fadapters\u002Fself-hosted","6.adapters\u002F03.self-hosted",[371,376],{"title":372,"path":373,"stem":374,"icon":375},"File System","\u002Fadapters\u002Fself-hosted\u002Ffs","6.adapters\u002F03.self-hosted\u002F01.fs","i-lucide-hard-drive",{"title":377,"path":378,"stem":379,"icon":380},"NuxtHub","\u002Fadapters\u002Fself-hosted\u002Fnuxthub","6.adapters\u002F03.self-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":382,"path":383,"stem":384,"children":385,"page":34},"Building blocks","\u002Fadapters\u002Fbuilding-blocks","6.adapters\u002F04.building-blocks",[386,391,396,400],{"title":387,"path":388,"stem":389,"icon":390},"Pipeline","\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline","6.adapters\u002F04.building-blocks\u002F01.pipeline","i-lucide-workflow",{"title":392,"path":393,"stem":394,"icon":395},"HTTP","\u002Fadapters\u002Fbuilding-blocks\u002Fhttp","6.adapters\u002F04.building-blocks\u002F02.http","i-lucide-globe",{"title":397,"path":398,"stem":399,"icon":83},"Custom Adapters","\u002Fadapters\u002Fbuilding-blocks\u002Fcustom","6.adapters\u002F04.building-blocks\u002F03.custom",{"title":401,"path":402,"stem":403,"icon":404},"Toolkit","\u002Fadapters\u002Fbuilding-blocks\u002Ftoolkit","6.adapters\u002F04.building-blocks\u002F04.toolkit","i-lucide-blocks",{"title":406,"path":407,"stem":408,"children":409,"page":34},"Enrichers","\u002Fenrichers","7.enrichers",[410,413,417],{"title":41,"path":411,"stem":412,"icon":28},"\u002Fenrichers\u002Foverview","7.enrichers\u002F1.overview",{"title":414,"path":415,"stem":416,"icon":288},"Built-in","\u002Fenrichers\u002Fbuilt-in","7.enrichers\u002F2.built-in",{"title":418,"path":419,"stem":420,"icon":83},"Custom","\u002Fenrichers\u002Fcustom","7.enrichers\u002F3.custom",{"id":422,"title":397,"body":423,"description":2825,"extension":2826,"links":2827,"meta":2832,"navigation":2833,"path":398,"seo":2834,"stem":399,"__hash__":2835},"docs\u002F6.adapters\u002F04.building-blocks\u002F03.custom.md",{"type":424,"value":425,"toc":2813},"minimark",[426,446,456,503,511,518,1184,1190,1193,1531,1535,1796,1800,1806,1838,1871,1875,1884,2247,2257,2263,2269,2467,2470,2474,2481,2705,2714,2718,2723,2766,2780,2784,2809],[427,428,429,433,434,437,438,441,442,445],"p",{},[430,431,432],"code",{},"evlog\u002Ftoolkit"," ships ",[430,435,436],{},"defineHttpDrain"," — the same factory every built-in adapter uses. You provide two pure functions (",[430,439,440],{},"resolve()"," for config, ",[430,443,444],{},"encode()"," for the payload) and the toolkit handles batching, retries, timeouts, and error isolation.",[427,447,448,449,452,453,455],{},"A drain at its lowest level is still just a function that receives a ",[430,450,451],{},"DrainContext"," and sends data somewhere — but in practice, you should reach for ",[430,454,436],{}," first.",[457,458,461,464,489],"prompt",{":actions":459,"description":460,"icon":83},"[\"copy\",\"cursor\",\"windsurf\"]","Build a custom drain adapter",[427,462,463],{},"Build a custom evlog drain adapter that sends wide events to my destination.",[465,466,467,471,474,477,480,483,486],"ul",{},[468,469,470],"li",{},"Use defineHttpDrain from evlog\u002Ftoolkit — never call fetch directly",[468,472,473],{},"Provide a resolve() function returning the config (or null to skip)",[468,475,476],{},"Provide an encode(events, config) function returning { url, headers, body } (or null to skip)",[468,478,479],{},"For config use resolveAdapterConfig from evlog\u002Ftoolkit so users get the standard precedence (overrides → runtimeConfig → env)",[468,481,482],{},"Use the standardized field names: apiKey for bearer secrets, endpoint for the base URL, serviceName, timeout",[468,484,485],{},"defineHttpDrain handles retries, timeouts, error isolation, and batching — don't reimplement them",[468,487,488],{},"Wire the drain via defineEvlog({ drain: createMyDrain() }) or your framework's middleware drain option",[427,490,491,492,498,499],{},"Docs: ",[493,494,495],"a",{"href":495,"rel":496},"https:\u002F\u002Fwww.evlog.dev\u002Fadapters\u002Fbuilding-blocks\u002Fcustom",[497],"nofollow","\nPipeline: ",[493,500,501],{"href":501,"rel":502},"https:\u002F\u002Fwww.evlog.dev\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline",[497],[504,505,507,508,510],"h2",{"id":506},"recipe-definehttpdrain-in-15-lines","Recipe — ",[430,509,436],{}," in 15 lines",[427,512,513,514,517],{},"The recipe every built-in adapter follows. Replace ",[430,515,516],{},"myservice"," with your service name.",[519,520,526],"pre",{"className":521,"code":522,"filename":523,"language":524,"meta":525,"style":525},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import {\n  defineHttpDrain,\n  resolveAdapterConfig,\n  type ConfigField,\n} from 'evlog\u002Ftoolkit'\n\ninterface MyServiceConfig {\n  apiKey: string\n  endpoint?: string\n  timeout?: number\n}\n\nconst FIELDS: ConfigField\u003CMyServiceConfig>[] = [\n  { key: 'apiKey', env: ['MYSERVICE_API_KEY'] },\n  { key: 'endpoint', env: ['MYSERVICE_ENDPOINT'] },\n  { key: 'timeout' },\n]\n\nexport function createMyServiceDrain(overrides?: Partial\u003CMyServiceConfig>) {\n  return defineHttpDrain\u003CMyServiceConfig>({\n    name: 'myservice',\n    resolve: async () => {\n      const cfg = await resolveAdapterConfig\u003CMyServiceConfig>('myservice', FIELDS, overrides)\n      if (!cfg.apiKey) {\n        console.error('[evlog\u002Fmyservice] Missing apiKey')\n        return null\n      }\n      return cfg as MyServiceConfig\n    },\n    encode: (events, cfg) => ({\n      url: `${cfg.endpoint ?? 'https:\u002F\u002Fapi.myservice.com'}\u002Fv1\u002Fingest`,\n      headers: {\n        'Content-Type': 'application\u002Fjson',\n        Authorization: `Bearer ${cfg.apiKey}`,\n      },\n      body: JSON.stringify(events),\n    }),\n  })\n}\n","lib\u002Fmy-drain.ts","typescript","",[430,527,528,541,551,559,570,588,595,608,621,632,643,649,654,685,728,763,782,788,793,827,847,863,882,926,951,973,982,988,1002,1008,1034,1071,1081,1103,1131,1137,1161,1171,1179],{"__ignoreMap":525},[529,530,533,537],"span",{"class":531,"line":532},"line",1,[529,534,536],{"class":535},"s7zQu","import",[529,538,540],{"class":539},"sMK4o"," {\n",[529,542,544,548],{"class":531,"line":543},2,[529,545,547],{"class":546},"sTEyZ","  defineHttpDrain",[529,549,550],{"class":539},",\n",[529,552,554,557],{"class":531,"line":553},3,[529,555,556],{"class":546},"  resolveAdapterConfig",[529,558,550],{"class":539},[529,560,562,565,568],{"class":531,"line":561},4,[529,563,564],{"class":535},"  type",[529,566,567],{"class":546}," ConfigField",[529,569,550],{"class":539},[529,571,573,576,579,582,585],{"class":531,"line":572},5,[529,574,575],{"class":539},"}",[529,577,578],{"class":535}," from",[529,580,581],{"class":539}," '",[529,583,432],{"class":584},"sfazB",[529,586,587],{"class":539},"'\n",[529,589,591],{"class":531,"line":590},6,[529,592,594],{"emptyLinePlaceholder":593},true,"\n",[529,596,598,602,606],{"class":531,"line":597},7,[529,599,601],{"class":600},"spNyl","interface",[529,603,605],{"class":604},"sBMFI"," MyServiceConfig",[529,607,540],{"class":539},[529,609,611,615,618],{"class":531,"line":610},8,[529,612,614],{"class":613},"swJcz","  apiKey",[529,616,617],{"class":539},":",[529,619,620],{"class":604}," string\n",[529,622,624,627,630],{"class":531,"line":623},9,[529,625,626],{"class":613},"  endpoint",[529,628,629],{"class":539},"?:",[529,631,620],{"class":604},[529,633,635,638,640],{"class":531,"line":634},10,[529,636,637],{"class":613},"  timeout",[529,639,629],{"class":539},[529,641,642],{"class":604}," number\n",[529,644,646],{"class":531,"line":645},11,[529,647,648],{"class":539},"}\n",[529,650,652],{"class":531,"line":651},12,[529,653,594],{"emptyLinePlaceholder":593},[529,655,657,660,663,665,667,670,673,676,679,682],{"class":531,"line":656},13,[529,658,659],{"class":600},"const",[529,661,662],{"class":546}," FIELDS",[529,664,617],{"class":539},[529,666,567],{"class":604},[529,668,669],{"class":539},"\u003C",[529,671,672],{"class":604},"MyServiceConfig",[529,674,675],{"class":539},">",[529,677,678],{"class":546},"[] ",[529,680,681],{"class":539},"=",[529,683,684],{"class":546}," [\n",[529,686,688,691,694,696,698,701,704,707,710,712,715,717,720,722,725],{"class":531,"line":687},14,[529,689,690],{"class":539},"  {",[529,692,693],{"class":613}," key",[529,695,617],{"class":539},[529,697,581],{"class":539},[529,699,700],{"class":584},"apiKey",[529,702,703],{"class":539},"'",[529,705,706],{"class":539},",",[529,708,709],{"class":613}," env",[529,711,617],{"class":539},[529,713,714],{"class":546}," [",[529,716,703],{"class":539},[529,718,719],{"class":584},"MYSERVICE_API_KEY",[529,721,703],{"class":539},[529,723,724],{"class":546},"] ",[529,726,727],{"class":539},"},\n",[529,729,731,733,735,737,739,742,744,746,748,750,752,754,757,759,761],{"class":531,"line":730},15,[529,732,690],{"class":539},[529,734,693],{"class":613},[529,736,617],{"class":539},[529,738,581],{"class":539},[529,740,741],{"class":584},"endpoint",[529,743,703],{"class":539},[529,745,706],{"class":539},[529,747,709],{"class":613},[529,749,617],{"class":539},[529,751,714],{"class":546},[529,753,703],{"class":539},[529,755,756],{"class":584},"MYSERVICE_ENDPOINT",[529,758,703],{"class":539},[529,760,724],{"class":546},[529,762,727],{"class":539},[529,764,766,768,770,772,774,777,779],{"class":531,"line":765},16,[529,767,690],{"class":539},[529,769,693],{"class":613},[529,771,617],{"class":539},[529,773,581],{"class":539},[529,775,776],{"class":584},"timeout",[529,778,703],{"class":539},[529,780,781],{"class":539}," },\n",[529,783,785],{"class":531,"line":784},17,[529,786,787],{"class":546},"]\n",[529,789,791],{"class":531,"line":790},18,[529,792,594],{"emptyLinePlaceholder":593},[529,794,796,799,802,806,809,813,815,818,820,822,825],{"class":531,"line":795},19,[529,797,798],{"class":535},"export",[529,800,801],{"class":600}," function",[529,803,805],{"class":804},"s2Zo4"," createMyServiceDrain",[529,807,808],{"class":539},"(",[529,810,812],{"class":811},"sHdIc","overrides",[529,814,629],{"class":539},[529,816,817],{"class":604}," Partial",[529,819,669],{"class":539},[529,821,672],{"class":604},[529,823,824],{"class":539},">)",[529,826,540],{"class":539},[529,828,830,833,836,838,840,842,844],{"class":531,"line":829},20,[529,831,832],{"class":535},"  return",[529,834,835],{"class":804}," defineHttpDrain",[529,837,669],{"class":539},[529,839,672],{"class":604},[529,841,675],{"class":539},[529,843,808],{"class":613},[529,845,846],{"class":539},"{\n",[529,848,850,853,855,857,859,861],{"class":531,"line":849},21,[529,851,852],{"class":613},"    name",[529,854,617],{"class":539},[529,856,581],{"class":539},[529,858,516],{"class":584},[529,860,703],{"class":539},[529,862,550],{"class":539},[529,864,866,869,871,874,877,880],{"class":531,"line":865},22,[529,867,868],{"class":804},"    resolve",[529,870,617],{"class":539},[529,872,873],{"class":600}," async",[529,875,876],{"class":539}," ()",[529,878,879],{"class":600}," =>",[529,881,540],{"class":539},[529,883,885,888,891,894,897,900,902,904,906,908,910,912,914,916,918,920,923],{"class":531,"line":884},23,[529,886,887],{"class":600},"      const",[529,889,890],{"class":546}," cfg",[529,892,893],{"class":539}," =",[529,895,896],{"class":535}," await",[529,898,899],{"class":804}," resolveAdapterConfig",[529,901,669],{"class":539},[529,903,672],{"class":604},[529,905,675],{"class":539},[529,907,808],{"class":613},[529,909,703],{"class":539},[529,911,516],{"class":584},[529,913,703],{"class":539},[529,915,706],{"class":539},[529,917,662],{"class":546},[529,919,706],{"class":539},[529,921,922],{"class":546}," overrides",[529,924,925],{"class":613},")\n",[529,927,929,932,935,938,941,944,946,949],{"class":531,"line":928},24,[529,930,931],{"class":535},"      if",[529,933,934],{"class":613}," (",[529,936,937],{"class":539},"!",[529,939,940],{"class":546},"cfg",[529,942,943],{"class":539},".",[529,945,700],{"class":546},[529,947,948],{"class":613},") ",[529,950,846],{"class":539},[529,952,954,957,959,962,964,966,969,971],{"class":531,"line":953},25,[529,955,956],{"class":546},"        console",[529,958,943],{"class":539},[529,960,961],{"class":804},"error",[529,963,808],{"class":613},[529,965,703],{"class":539},[529,967,968],{"class":584},"[evlog\u002Fmyservice] Missing apiKey",[529,970,703],{"class":539},[529,972,925],{"class":613},[529,974,976,979],{"class":531,"line":975},26,[529,977,978],{"class":535},"        return",[529,980,981],{"class":539}," null\n",[529,983,985],{"class":531,"line":984},27,[529,986,987],{"class":539},"      }\n",[529,989,991,994,996,999],{"class":531,"line":990},28,[529,992,993],{"class":535},"      return",[529,995,890],{"class":546},[529,997,998],{"class":535}," as",[529,1000,1001],{"class":604}," MyServiceConfig\n",[529,1003,1005],{"class":531,"line":1004},29,[529,1006,1007],{"class":539},"    },\n",[529,1009,1011,1014,1016,1018,1021,1023,1025,1028,1030,1032],{"class":531,"line":1010},30,[529,1012,1013],{"class":804},"    encode",[529,1015,617],{"class":539},[529,1017,934],{"class":539},[529,1019,1020],{"class":811},"events",[529,1022,706],{"class":539},[529,1024,890],{"class":811},[529,1026,1027],{"class":539},")",[529,1029,879],{"class":600},[529,1031,934],{"class":613},[529,1033,846],{"class":539},[529,1035,1037,1040,1042,1045,1047,1049,1052,1055,1057,1060,1063,1066,1069],{"class":531,"line":1036},31,[529,1038,1039],{"class":613},"      url",[529,1041,617],{"class":539},[529,1043,1044],{"class":539}," `${",[529,1046,940],{"class":546},[529,1048,943],{"class":539},[529,1050,1051],{"class":546},"endpoint ",[529,1053,1054],{"class":539},"??",[529,1056,581],{"class":539},[529,1058,1059],{"class":584},"https:\u002F\u002Fapi.myservice.com",[529,1061,1062],{"class":539},"'}",[529,1064,1065],{"class":584},"\u002Fv1\u002Fingest",[529,1067,1068],{"class":539},"`",[529,1070,550],{"class":539},[529,1072,1074,1077,1079],{"class":531,"line":1073},32,[529,1075,1076],{"class":613},"      headers",[529,1078,617],{"class":539},[529,1080,540],{"class":539},[529,1082,1084,1087,1090,1092,1094,1096,1099,1101],{"class":531,"line":1083},33,[529,1085,1086],{"class":539},"        '",[529,1088,1089],{"class":613},"Content-Type",[529,1091,703],{"class":539},[529,1093,617],{"class":539},[529,1095,581],{"class":539},[529,1097,1098],{"class":584},"application\u002Fjson",[529,1100,703],{"class":539},[529,1102,550],{"class":539},[529,1104,1106,1109,1111,1114,1117,1120,1122,1124,1126,1129],{"class":531,"line":1105},34,[529,1107,1108],{"class":613},"        Authorization",[529,1110,617],{"class":539},[529,1112,1113],{"class":539}," `",[529,1115,1116],{"class":584},"Bearer ",[529,1118,1119],{"class":539},"${",[529,1121,940],{"class":546},[529,1123,943],{"class":539},[529,1125,700],{"class":546},[529,1127,1128],{"class":539},"}`",[529,1130,550],{"class":539},[529,1132,1134],{"class":531,"line":1133},35,[529,1135,1136],{"class":539},"      },\n",[529,1138,1140,1143,1145,1148,1150,1153,1155,1157,1159],{"class":531,"line":1139},36,[529,1141,1142],{"class":613},"      body",[529,1144,617],{"class":539},[529,1146,1147],{"class":546}," JSON",[529,1149,943],{"class":539},[529,1151,1152],{"class":804},"stringify",[529,1154,808],{"class":613},[529,1156,1020],{"class":546},[529,1158,1027],{"class":613},[529,1160,550],{"class":539},[529,1162,1164,1167,1169],{"class":531,"line":1163},37,[529,1165,1166],{"class":539},"    }",[529,1168,1027],{"class":613},[529,1170,550],{"class":539},[529,1172,1174,1177],{"class":531,"line":1173},38,[529,1175,1176],{"class":539},"  }",[529,1178,925],{"class":613},[529,1180,1182],{"class":531,"line":1181},39,[529,1183,648],{"class":539},[427,1185,1186,1187,1189],{},"That's it. ",[430,1188,436],{}," handles retries (default 2), timeouts (default 5000ms), and error isolation — your app pipeline keeps running even if your destination is down.",[427,1191,1192],{},"Then wire it to your framework:",[1194,1195,1196,1268,1370,1403,1429,1460,1486,1511],"code-group",{},[519,1197,1200],{"className":521,"code":1198,"filename":1199,"language":524,"meta":525,"style":525},"\u002F\u002F server\u002Fplugins\u002Fevlog-drain.ts\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', drain)\n})\n","Nuxt \u002F Nitro",[430,1201,1202,1208,1231,1262],{"__ignoreMap":525},[529,1203,1204],{"class":531,"line":532},[529,1205,1207],{"class":1206},"sHwdD","\u002F\u002F server\u002Fplugins\u002Fevlog-drain.ts\n",[529,1209,1210,1212,1215,1218,1220,1222,1225,1227,1229],{"class":531,"line":543},[529,1211,798],{"class":535},[529,1213,1214],{"class":535}," default",[529,1216,1217],{"class":804}," defineNitroPlugin",[529,1219,808],{"class":546},[529,1221,808],{"class":539},[529,1223,1224],{"class":811},"nitroApp",[529,1226,1027],{"class":539},[529,1228,879],{"class":600},[529,1230,540],{"class":539},[529,1232,1233,1236,1238,1241,1243,1246,1248,1250,1253,1255,1257,1260],{"class":531,"line":553},[529,1234,1235],{"class":546},"  nitroApp",[529,1237,943],{"class":539},[529,1239,1240],{"class":546},"hooks",[529,1242,943],{"class":539},[529,1244,1245],{"class":804},"hook",[529,1247,808],{"class":613},[529,1249,703],{"class":539},[529,1251,1252],{"class":584},"evlog:drain",[529,1254,703],{"class":539},[529,1256,706],{"class":539},[529,1258,1259],{"class":546}," drain",[529,1261,925],{"class":613},[529,1263,1264,1266],{"class":531,"line":561},[529,1265,575],{"class":539},[529,1267,925],{"class":546},[519,1269,1271],{"className":521,"code":1270,"filename":216,"language":524,"meta":525,"style":525},"\u002F\u002F lib\u002Fevlog.ts\nimport { createEvlog } from 'evlog\u002Fnext'\n\nexport const { withEvlog, useLogger, log, createError } = createEvlog({\n  service: 'my-app',\n  drain,\n})\n",[430,1272,1273,1278,1300,1304,1341,1357,1364],{"__ignoreMap":525},[529,1274,1275],{"class":531,"line":532},[529,1276,1277],{"class":1206},"\u002F\u002F lib\u002Fevlog.ts\n",[529,1279,1280,1282,1285,1288,1291,1293,1295,1298],{"class":531,"line":543},[529,1281,536],{"class":535},[529,1283,1284],{"class":539}," {",[529,1286,1287],{"class":546}," createEvlog",[529,1289,1290],{"class":539}," }",[529,1292,578],{"class":535},[529,1294,581],{"class":539},[529,1296,1297],{"class":584},"evlog\u002Fnext",[529,1299,587],{"class":539},[529,1301,1302],{"class":531,"line":553},[529,1303,594],{"emptyLinePlaceholder":593},[529,1305,1306,1308,1311,1313,1316,1318,1321,1323,1326,1328,1331,1333,1335,1337,1339],{"class":531,"line":561},[529,1307,798],{"class":535},[529,1309,1310],{"class":600}," const",[529,1312,1284],{"class":539},[529,1314,1315],{"class":546}," withEvlog",[529,1317,706],{"class":539},[529,1319,1320],{"class":546}," useLogger",[529,1322,706],{"class":539},[529,1324,1325],{"class":546}," log",[529,1327,706],{"class":539},[529,1329,1330],{"class":546}," createError ",[529,1332,575],{"class":539},[529,1334,893],{"class":539},[529,1336,1287],{"class":804},[529,1338,808],{"class":546},[529,1340,846],{"class":539},[529,1342,1343,1346,1348,1350,1353,1355],{"class":531,"line":572},[529,1344,1345],{"class":613},"  service",[529,1347,617],{"class":539},[529,1349,581],{"class":539},[529,1351,1352],{"class":584},"my-app",[529,1354,703],{"class":539},[529,1356,550],{"class":539},[529,1358,1359,1362],{"class":531,"line":590},[529,1360,1361],{"class":546},"  drain",[529,1363,550],{"class":539},[529,1365,1366,1368],{"class":531,"line":597},[529,1367,575],{"class":539},[529,1369,925],{"class":546},[519,1371,1373],{"className":521,"code":1372,"filename":246,"language":524,"meta":525,"style":525},"app.use(evlog({ drain }))\n",[430,1374,1375],{"__ignoreMap":525},[529,1376,1377,1380,1382,1385,1387,1390,1392,1395,1398,1400],{"class":531,"line":532},[529,1378,1379],{"class":546},"app",[529,1381,943],{"class":539},[529,1383,1384],{"class":804},"use",[529,1386,808],{"class":546},[529,1388,1389],{"class":804},"evlog",[529,1391,808],{"class":546},[529,1393,1394],{"class":539},"{",[529,1396,1397],{"class":546}," drain ",[529,1399,575],{"class":539},[529,1401,1402],{"class":546},"))\n",[519,1404,1405],{"className":521,"code":1372,"filename":241,"language":524,"meta":525,"style":525},[430,1406,1407],{"__ignoreMap":525},[529,1408,1409,1411,1413,1415,1417,1419,1421,1423,1425,1427],{"class":531,"line":532},[529,1410,1379],{"class":546},[529,1412,943],{"class":539},[529,1414,1384],{"class":804},[529,1416,808],{"class":546},[529,1418,1389],{"class":804},[529,1420,808],{"class":546},[529,1422,1394],{"class":539},[529,1424,1397],{"class":546},[529,1426,575],{"class":539},[529,1428,1402],{"class":546},[519,1430,1432],{"className":521,"code":1431,"filename":251,"language":524,"meta":525,"style":525},"await app.register(evlog, { drain })\n",[430,1433,1434],{"__ignoreMap":525},[529,1435,1436,1439,1442,1444,1447,1450,1452,1454,1456,1458],{"class":531,"line":532},[529,1437,1438],{"class":535},"await",[529,1440,1441],{"class":546}," app",[529,1443,943],{"class":539},[529,1445,1446],{"class":804},"register",[529,1448,1449],{"class":546},"(evlog",[529,1451,706],{"class":539},[529,1453,1284],{"class":539},[529,1455,1397],{"class":546},[529,1457,575],{"class":539},[529,1459,925],{"class":546},[519,1461,1462],{"className":521,"code":1372,"filename":256,"language":524,"meta":525,"style":525},[430,1463,1464],{"__ignoreMap":525},[529,1465,1466,1468,1470,1472,1474,1476,1478,1480,1482,1484],{"class":531,"line":532},[529,1467,1379],{"class":546},[529,1469,943],{"class":539},[529,1471,1384],{"class":804},[529,1473,808],{"class":546},[529,1475,1389],{"class":804},[529,1477,808],{"class":546},[529,1479,1394],{"class":539},[529,1481,1397],{"class":546},[529,1483,575],{"class":539},[529,1485,1402],{"class":546},[519,1487,1489],{"className":521,"code":1488,"filename":236,"language":524,"meta":525,"style":525},"EvlogModule.forRoot({ drain })\n",[430,1490,1491],{"__ignoreMap":525},[529,1492,1493,1496,1498,1501,1503,1505,1507,1509],{"class":531,"line":532},[529,1494,1495],{"class":546},"EvlogModule",[529,1497,943],{"class":539},[529,1499,1500],{"class":804},"forRoot",[529,1502,808],{"class":546},[529,1504,1394],{"class":539},[529,1506,1397],{"class":546},[529,1508,575],{"class":539},[529,1510,925],{"class":546},[519,1512,1514],{"className":521,"code":1513,"filename":271,"language":524,"meta":525,"style":525},"initLogger({ drain })\n",[430,1515,1516],{"__ignoreMap":525},[529,1517,1518,1521,1523,1525,1527,1529],{"class":531,"line":532},[529,1519,1520],{"class":804},"initLogger",[529,1522,808],{"class":546},[529,1524,1394],{"class":539},[529,1526,1397],{"class":546},[529,1528,575],{"class":539},[529,1530,925],{"class":546},[504,1532,1534],{"id":1533},"draincontext-reference","DrainContext Reference",[519,1536,1539],{"className":521,"code":1537,"filename":1538,"language":524,"meta":525,"style":525},"interface DrainContext {\n  \u002F** The complete wide event with all accumulated context *\u002F\n  event: WideEvent\n\n  \u002F** Request metadata *\u002F\n  request?: {\n    method: string\n    path: string\n    requestId: string\n  }\n\n  \u002F** Safe HTTP headers (sensitive headers filtered) *\u002F\n  headers?: Record\u003Cstring, string>\n}\n\ninterface WideEvent {\n  timestamp: string\n  level: 'debug' | 'info' | 'warn' | 'error'\n  service: string\n  environment?: string\n  version?: string\n  region?: string\n  commitHash?: string\n  requestId?: string\n  \u002F\u002F ... plus all fields added via log.set()\n  [key: string]: unknown\n}\n","types.ts",[430,1540,1541,1550,1555,1565,1569,1574,1583,1592,1601,1610,1615,1619,1624,1647,1651,1655,1664,1673,1714,1722,1731,1740,1749,1758,1767,1772,1792],{"__ignoreMap":525},[529,1542,1543,1545,1548],{"class":531,"line":532},[529,1544,601],{"class":600},[529,1546,1547],{"class":604}," DrainContext",[529,1549,540],{"class":539},[529,1551,1552],{"class":531,"line":543},[529,1553,1554],{"class":1206},"  \u002F** The complete wide event with all accumulated context *\u002F\n",[529,1556,1557,1560,1562],{"class":531,"line":553},[529,1558,1559],{"class":613},"  event",[529,1561,617],{"class":539},[529,1563,1564],{"class":604}," WideEvent\n",[529,1566,1567],{"class":531,"line":561},[529,1568,594],{"emptyLinePlaceholder":593},[529,1570,1571],{"class":531,"line":572},[529,1572,1573],{"class":1206},"  \u002F** Request metadata *\u002F\n",[529,1575,1576,1579,1581],{"class":531,"line":590},[529,1577,1578],{"class":613},"  request",[529,1580,629],{"class":539},[529,1582,540],{"class":539},[529,1584,1585,1588,1590],{"class":531,"line":597},[529,1586,1587],{"class":613},"    method",[529,1589,617],{"class":539},[529,1591,620],{"class":604},[529,1593,1594,1597,1599],{"class":531,"line":610},[529,1595,1596],{"class":613},"    path",[529,1598,617],{"class":539},[529,1600,620],{"class":604},[529,1602,1603,1606,1608],{"class":531,"line":623},[529,1604,1605],{"class":613},"    requestId",[529,1607,617],{"class":539},[529,1609,620],{"class":604},[529,1611,1612],{"class":531,"line":634},[529,1613,1614],{"class":539},"  }\n",[529,1616,1617],{"class":531,"line":645},[529,1618,594],{"emptyLinePlaceholder":593},[529,1620,1621],{"class":531,"line":651},[529,1622,1623],{"class":1206},"  \u002F** Safe HTTP headers (sensitive headers filtered) *\u002F\n",[529,1625,1626,1629,1631,1634,1636,1639,1641,1644],{"class":531,"line":656},[529,1627,1628],{"class":613},"  headers",[529,1630,629],{"class":539},[529,1632,1633],{"class":604}," Record",[529,1635,669],{"class":539},[529,1637,1638],{"class":604},"string",[529,1640,706],{"class":539},[529,1642,1643],{"class":604}," string",[529,1645,1646],{"class":539},">\n",[529,1648,1649],{"class":531,"line":687},[529,1650,648],{"class":539},[529,1652,1653],{"class":531,"line":730},[529,1654,594],{"emptyLinePlaceholder":593},[529,1656,1657,1659,1662],{"class":531,"line":765},[529,1658,601],{"class":600},[529,1660,1661],{"class":604}," WideEvent",[529,1663,540],{"class":539},[529,1665,1666,1669,1671],{"class":531,"line":784},[529,1667,1668],{"class":613},"  timestamp",[529,1670,617],{"class":539},[529,1672,620],{"class":604},[529,1674,1675,1678,1680,1682,1685,1687,1690,1692,1695,1697,1699,1701,1704,1706,1708,1710,1712],{"class":531,"line":790},[529,1676,1677],{"class":613},"  level",[529,1679,617],{"class":539},[529,1681,581],{"class":539},[529,1683,1684],{"class":584},"debug",[529,1686,703],{"class":539},[529,1688,1689],{"class":539}," |",[529,1691,581],{"class":539},[529,1693,1694],{"class":584},"info",[529,1696,703],{"class":539},[529,1698,1689],{"class":539},[529,1700,581],{"class":539},[529,1702,1703],{"class":584},"warn",[529,1705,703],{"class":539},[529,1707,1689],{"class":539},[529,1709,581],{"class":539},[529,1711,961],{"class":584},[529,1713,587],{"class":539},[529,1715,1716,1718,1720],{"class":531,"line":795},[529,1717,1345],{"class":613},[529,1719,617],{"class":539},[529,1721,620],{"class":604},[529,1723,1724,1727,1729],{"class":531,"line":829},[529,1725,1726],{"class":613},"  environment",[529,1728,629],{"class":539},[529,1730,620],{"class":604},[529,1732,1733,1736,1738],{"class":531,"line":849},[529,1734,1735],{"class":613},"  version",[529,1737,629],{"class":539},[529,1739,620],{"class":604},[529,1741,1742,1745,1747],{"class":531,"line":865},[529,1743,1744],{"class":613},"  region",[529,1746,629],{"class":539},[529,1748,620],{"class":604},[529,1750,1751,1754,1756],{"class":531,"line":884},[529,1752,1753],{"class":613},"  commitHash",[529,1755,629],{"class":539},[529,1757,620],{"class":604},[529,1759,1760,1763,1765],{"class":531,"line":928},[529,1761,1762],{"class":613},"  requestId",[529,1764,629],{"class":539},[529,1766,620],{"class":604},[529,1768,1769],{"class":531,"line":953},[529,1770,1771],{"class":1206},"  \u002F\u002F ... plus all fields added via log.set()\n",[529,1773,1774,1777,1780,1782,1784,1787,1789],{"class":531,"line":975},[529,1775,1776],{"class":546},"  [",[529,1778,1779],{"class":811},"key",[529,1781,617],{"class":539},[529,1783,1643],{"class":604},[529,1785,1786],{"class":546},"]",[529,1788,617],{"class":539},[529,1790,1791],{"class":604}," unknown\n",[529,1793,1794],{"class":531,"line":984},[529,1795,648],{"class":539},[504,1797,1799],{"id":1798},"standardized-config-priority","Standardized config priority",[427,1801,1802,1805],{},[430,1803,1804],{},"resolveAdapterConfig(namespace, fields, overrides)"," walks the standard chain so users get the same configuration UX as built-in adapters:",[1807,1808,1809,1815,1821,1827,1833],"ol",{},[468,1810,1811,1812,1814],{},"Explicit ",[430,1813,812],{}," passed to your factory",[468,1816,1817,1820],{},[430,1818,1819],{},"runtimeConfig.evlog.\u003Cnamespace>"," (Nuxt\u002FNitro)",[468,1822,1823,1826],{},[430,1824,1825],{},"runtimeConfig.\u003Cnamespace>"," (legacy Nuxt\u002FNitro)",[468,1828,1829,1832],{},[430,1830,1831],{},"NUXT_\u003CNS>_\u003CFIELD>"," env vars",[468,1834,1835,1832],{},[430,1836,1837],{},"\u003CNS>_\u003CFIELD>",[427,1839,1840,1841,1843,1844,1843,1846,1843,1849,1851,1852,1855,1856,1858,1859,1862,1863,1866,1867,1870],{},"Field names should follow the project conventions: ",[430,1842,700],{},", ",[430,1845,741],{},[430,1847,1848],{},"serviceName",[430,1850,776],{},". If you're renaming an existing field (e.g. ",[430,1853,1854],{},"token"," → ",[430,1857,700],{},"), keep both as ",[430,1860,1861],{},"ConfigField"," entries for one major version — see ",[430,1864,1865],{},"axiom.ts"," and ",[430,1868,1869],{},"better-stack.ts"," for the deprecation pattern.",[504,1872,1874],{"id":1873},"filtering-and-transforming-events","Filtering and transforming events",[427,1876,1877,1879,1880,1883],{},[430,1878,444],{}," receives the full batch of ",[430,1881,1882],{},"WideEvent[]"," plus the resolved config. Filter or transform inline:",[519,1885,1887],{"className":521,"code":1886,"language":524,"meta":525,"style":525},"encode: (events, cfg) => {\n  const filtered = events.filter(e => e.level === 'error' && e.path !== '\u002Fhealth')\n  if (filtered.length === 0) return null\n\n  const payload = filtered.map(e => ({\n    ts: new Date(e.timestamp).getTime(),\n    severity: e.level.toUpperCase(),\n    attributes: { method: e.method, path: e.path, status: e.status, duration: e.duration },\n  }))\n\n  return {\n    url: `${cfg.endpoint}\u002Fv1\u002Fpush`,\n    headers: { 'Content-Type': 'application\u002Fjson' },\n    body: JSON.stringify(payload),\n  }\n}\n",[430,1888,1889,1910,1974,2002,2006,2032,2066,2088,2152,2158,2162,2168,2192,2217,2239,2243],{"__ignoreMap":525},[529,1890,1891,1894,1896,1898,1900,1902,1904,1906,1908],{"class":531,"line":532},[529,1892,1893],{"class":604},"encode",[529,1895,617],{"class":539},[529,1897,934],{"class":539},[529,1899,1020],{"class":811},[529,1901,706],{"class":539},[529,1903,890],{"class":811},[529,1905,1027],{"class":539},[529,1907,879],{"class":600},[529,1909,540],{"class":539},[529,1911,1912,1915,1918,1920,1923,1925,1928,1930,1933,1935,1938,1940,1943,1946,1948,1950,1952,1955,1957,1959,1962,1965,1967,1970,1972],{"class":531,"line":543},[529,1913,1914],{"class":600},"  const",[529,1916,1917],{"class":546}," filtered",[529,1919,893],{"class":539},[529,1921,1922],{"class":546}," events",[529,1924,943],{"class":539},[529,1926,1927],{"class":804},"filter",[529,1929,808],{"class":613},[529,1931,1932],{"class":811},"e",[529,1934,879],{"class":600},[529,1936,1937],{"class":546}," e",[529,1939,943],{"class":539},[529,1941,1942],{"class":546},"level",[529,1944,1945],{"class":539}," ===",[529,1947,581],{"class":539},[529,1949,961],{"class":584},[529,1951,703],{"class":539},[529,1953,1954],{"class":539}," &&",[529,1956,1937],{"class":546},[529,1958,943],{"class":539},[529,1960,1961],{"class":546},"path",[529,1963,1964],{"class":539}," !==",[529,1966,581],{"class":539},[529,1968,1969],{"class":584},"\u002Fhealth",[529,1971,703],{"class":539},[529,1973,925],{"class":613},[529,1975,1976,1979,1981,1984,1986,1989,1991,1995,1997,2000],{"class":531,"line":553},[529,1977,1978],{"class":535},"  if",[529,1980,934],{"class":613},[529,1982,1983],{"class":546},"filtered",[529,1985,943],{"class":539},[529,1987,1988],{"class":546},"length",[529,1990,1945],{"class":539},[529,1992,1994],{"class":1993},"sbssI"," 0",[529,1996,948],{"class":613},[529,1998,1999],{"class":535},"return",[529,2001,981],{"class":539},[529,2003,2004],{"class":531,"line":561},[529,2005,594],{"emptyLinePlaceholder":593},[529,2007,2008,2010,2013,2015,2017,2019,2022,2024,2026,2028,2030],{"class":531,"line":572},[529,2009,1914],{"class":600},[529,2011,2012],{"class":546}," payload",[529,2014,893],{"class":539},[529,2016,1917],{"class":546},[529,2018,943],{"class":539},[529,2020,2021],{"class":804},"map",[529,2023,808],{"class":613},[529,2025,1932],{"class":811},[529,2027,879],{"class":600},[529,2029,934],{"class":613},[529,2031,846],{"class":539},[529,2033,2034,2037,2039,2042,2045,2047,2049,2051,2054,2056,2058,2061,2064],{"class":531,"line":590},[529,2035,2036],{"class":613},"    ts",[529,2038,617],{"class":539},[529,2040,2041],{"class":539}," new",[529,2043,2044],{"class":804}," Date",[529,2046,808],{"class":613},[529,2048,1932],{"class":546},[529,2050,943],{"class":539},[529,2052,2053],{"class":546},"timestamp",[529,2055,1027],{"class":613},[529,2057,943],{"class":539},[529,2059,2060],{"class":804},"getTime",[529,2062,2063],{"class":613},"()",[529,2065,550],{"class":539},[529,2067,2068,2071,2073,2075,2077,2079,2081,2084,2086],{"class":531,"line":597},[529,2069,2070],{"class":613},"    severity",[529,2072,617],{"class":539},[529,2074,1937],{"class":546},[529,2076,943],{"class":539},[529,2078,1942],{"class":546},[529,2080,943],{"class":539},[529,2082,2083],{"class":804},"toUpperCase",[529,2085,2063],{"class":613},[529,2087,550],{"class":539},[529,2089,2090,2093,2095,2097,2100,2102,2104,2106,2109,2111,2114,2116,2118,2120,2122,2124,2127,2129,2131,2133,2136,2138,2141,2143,2145,2147,2150],{"class":531,"line":610},[529,2091,2092],{"class":613},"    attributes",[529,2094,617],{"class":539},[529,2096,1284],{"class":539},[529,2098,2099],{"class":613}," method",[529,2101,617],{"class":539},[529,2103,1937],{"class":546},[529,2105,943],{"class":539},[529,2107,2108],{"class":546},"method",[529,2110,706],{"class":539},[529,2112,2113],{"class":613}," path",[529,2115,617],{"class":539},[529,2117,1937],{"class":546},[529,2119,943],{"class":539},[529,2121,1961],{"class":546},[529,2123,706],{"class":539},[529,2125,2126],{"class":613}," status",[529,2128,617],{"class":539},[529,2130,1937],{"class":546},[529,2132,943],{"class":539},[529,2134,2135],{"class":546},"status",[529,2137,706],{"class":539},[529,2139,2140],{"class":613}," duration",[529,2142,617],{"class":539},[529,2144,1937],{"class":546},[529,2146,943],{"class":539},[529,2148,2149],{"class":546},"duration",[529,2151,781],{"class":539},[529,2153,2154,2156],{"class":531,"line":623},[529,2155,1176],{"class":539},[529,2157,1402],{"class":613},[529,2159,2160],{"class":531,"line":634},[529,2161,594],{"emptyLinePlaceholder":593},[529,2163,2164,2166],{"class":531,"line":645},[529,2165,832],{"class":535},[529,2167,540],{"class":539},[529,2169,2170,2173,2175,2177,2179,2181,2183,2185,2188,2190],{"class":531,"line":651},[529,2171,2172],{"class":613},"    url",[529,2174,617],{"class":539},[529,2176,1044],{"class":539},[529,2178,940],{"class":546},[529,2180,943],{"class":539},[529,2182,741],{"class":546},[529,2184,575],{"class":539},[529,2186,2187],{"class":584},"\u002Fv1\u002Fpush",[529,2189,1068],{"class":539},[529,2191,550],{"class":539},[529,2193,2194,2197,2199,2201,2203,2205,2207,2209,2211,2213,2215],{"class":531,"line":656},[529,2195,2196],{"class":613},"    headers",[529,2198,617],{"class":539},[529,2200,1284],{"class":539},[529,2202,581],{"class":539},[529,2204,1089],{"class":613},[529,2206,703],{"class":539},[529,2208,617],{"class":539},[529,2210,581],{"class":539},[529,2212,1098],{"class":584},[529,2214,703],{"class":539},[529,2216,781],{"class":539},[529,2218,2219,2222,2224,2226,2228,2230,2232,2235,2237],{"class":531,"line":687},[529,2220,2221],{"class":613},"    body",[529,2223,617],{"class":539},[529,2225,1147],{"class":546},[529,2227,943],{"class":539},[529,2229,1152],{"class":804},[529,2231,808],{"class":613},[529,2233,2234],{"class":546},"payload",[529,2236,1027],{"class":613},[529,2238,550],{"class":539},[529,2240,2241],{"class":531,"line":730},[529,2242,1614],{"class":539},[529,2244,2245],{"class":531,"line":765},[529,2246,648],{"class":539},[427,2248,2249,2250,2253,2254,2256],{},"Returning ",[430,2251,2252],{},"null"," from ",[430,2255,444],{}," is a clean opt-out — the drain stays a no-op for that batch.",[504,2258,2260,2261],{"id":2259},"when-you-cant-use-definehttpdrain","When you can't use ",[430,2262,436],{},[427,2264,2265,2266,617],{},"If your destination requires a non-HTTP transport (gRPC, websocket, vendor SDK), drop one level lower with ",[430,2267,2268],{},"defineDrain",[519,2270,2272],{"className":521,"code":2271,"language":524,"meta":525,"style":525},"import { defineDrain, type DrainContext } from 'evlog\u002Ftoolkit'\n\nexport const createCustomTransportDrain = () =>\n  defineDrain\u003C{ apiKey: string }>({\n    name: 'custom',\n    resolve: async () => ({ apiKey: process.env.MY_KEY! }),\n    send: async (events, cfg) => {\n      await myVendorSdk.publish(events, { token: cfg.apiKey })\n    },\n  })\n",[430,2273,2274,2300,2304,2320,2342,2357,2398,2421,2457,2461],{"__ignoreMap":525},[529,2275,2276,2278,2280,2283,2285,2288,2290,2292,2294,2296,2298],{"class":531,"line":532},[529,2277,536],{"class":535},[529,2279,1284],{"class":539},[529,2281,2282],{"class":546}," defineDrain",[529,2284,706],{"class":539},[529,2286,2287],{"class":535}," type",[529,2289,1547],{"class":546},[529,2291,1290],{"class":539},[529,2293,578],{"class":535},[529,2295,581],{"class":539},[529,2297,432],{"class":584},[529,2299,587],{"class":539},[529,2301,2302],{"class":531,"line":543},[529,2303,594],{"emptyLinePlaceholder":593},[529,2305,2306,2308,2310,2313,2315,2317],{"class":531,"line":553},[529,2307,798],{"class":535},[529,2309,1310],{"class":600},[529,2311,2312],{"class":546}," createCustomTransportDrain ",[529,2314,681],{"class":539},[529,2316,876],{"class":539},[529,2318,2319],{"class":600}," =>\n",[529,2321,2322,2325,2328,2331,2333,2335,2338,2340],{"class":531,"line":561},[529,2323,2324],{"class":804},"  defineDrain",[529,2326,2327],{"class":539},"\u003C{",[529,2329,2330],{"class":613}," apiKey",[529,2332,617],{"class":539},[529,2334,1643],{"class":604},[529,2336,2337],{"class":539}," }>",[529,2339,808],{"class":546},[529,2341,846],{"class":539},[529,2343,2344,2346,2348,2350,2353,2355],{"class":531,"line":572},[529,2345,852],{"class":613},[529,2347,617],{"class":539},[529,2349,581],{"class":539},[529,2351,2352],{"class":584},"custom",[529,2354,703],{"class":539},[529,2356,550],{"class":539},[529,2358,2359,2361,2363,2365,2367,2369,2371,2373,2375,2377,2380,2382,2385,2387,2390,2392,2394,2396],{"class":531,"line":590},[529,2360,868],{"class":804},[529,2362,617],{"class":539},[529,2364,873],{"class":600},[529,2366,876],{"class":539},[529,2368,879],{"class":600},[529,2370,934],{"class":546},[529,2372,1394],{"class":539},[529,2374,2330],{"class":613},[529,2376,617],{"class":539},[529,2378,2379],{"class":546}," process",[529,2381,943],{"class":539},[529,2383,2384],{"class":546},"env",[529,2386,943],{"class":539},[529,2388,2389],{"class":546},"MY_KEY",[529,2391,937],{"class":539},[529,2393,1290],{"class":539},[529,2395,1027],{"class":546},[529,2397,550],{"class":539},[529,2399,2400,2403,2405,2407,2409,2411,2413,2415,2417,2419],{"class":531,"line":597},[529,2401,2402],{"class":804},"    send",[529,2404,617],{"class":539},[529,2406,873],{"class":600},[529,2408,934],{"class":539},[529,2410,1020],{"class":811},[529,2412,706],{"class":539},[529,2414,890],{"class":811},[529,2416,1027],{"class":539},[529,2418,879],{"class":600},[529,2420,540],{"class":539},[529,2422,2423,2426,2429,2431,2434,2436,2438,2440,2442,2445,2447,2449,2451,2453,2455],{"class":531,"line":610},[529,2424,2425],{"class":535},"      await",[529,2427,2428],{"class":546}," myVendorSdk",[529,2430,943],{"class":539},[529,2432,2433],{"class":804},"publish",[529,2435,808],{"class":613},[529,2437,1020],{"class":546},[529,2439,706],{"class":539},[529,2441,1284],{"class":539},[529,2443,2444],{"class":613}," token",[529,2446,617],{"class":539},[529,2448,890],{"class":546},[529,2450,943],{"class":539},[529,2452,700],{"class":546},[529,2454,1290],{"class":539},[529,2456,925],{"class":613},[529,2458,2459],{"class":531,"line":623},[529,2460,1007],{"class":539},[529,2462,2463,2465],{"class":531,"line":634},[529,2464,1176],{"class":539},[529,2466,925],{"class":546},[427,2468,2469],{},"You still get config resolution, error isolation, and a consistent shape — you just own the wire transport.",[504,2471,2473],{"id":2472},"batching","Batching",[427,2475,2476,2477,2480],{},"For high-throughput scenarios, use the ",[493,2478,2479],{"href":388},"Drain Pipeline"," to batch events, retry on failure, and handle buffer overflow automatically:",[519,2482,2484],{"className":521,"code":2483,"filename":523,"language":524,"meta":525,"style":525},"import type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({\n  batch: { size: 100, intervalMs: 5000 },\n})\n\nconst drain = pipeline(async (batch) => {\n  await fetch('https:\u002F\u002Fapi.example.com\u002Flogs\u002Fbatch', {\n    method: 'POST',\n    body: JSON.stringify(batch.map(ctx => ctx.event)),\n  })\n})\n",[430,2485,2486,2506,2526,2530,2551,2580,2586,2590,2617,2638,2653,2693,2699],{"__ignoreMap":525},[529,2487,2488,2490,2492,2494,2496,2498,2500,2502,2504],{"class":531,"line":532},[529,2489,536],{"class":535},[529,2491,2287],{"class":535},[529,2493,1284],{"class":539},[529,2495,1547],{"class":546},[529,2497,1290],{"class":539},[529,2499,578],{"class":535},[529,2501,581],{"class":539},[529,2503,1389],{"class":584},[529,2505,587],{"class":539},[529,2507,2508,2510,2512,2515,2517,2519,2521,2524],{"class":531,"line":543},[529,2509,536],{"class":535},[529,2511,1284],{"class":539},[529,2513,2514],{"class":546}," createDrainPipeline",[529,2516,1290],{"class":539},[529,2518,578],{"class":535},[529,2520,581],{"class":539},[529,2522,2523],{"class":584},"evlog\u002Fpipeline",[529,2525,587],{"class":539},[529,2527,2528],{"class":531,"line":553},[529,2529,594],{"emptyLinePlaceholder":593},[529,2531,2532,2534,2537,2539,2541,2543,2545,2547,2549],{"class":531,"line":561},[529,2533,659],{"class":600},[529,2535,2536],{"class":546}," pipeline ",[529,2538,681],{"class":539},[529,2540,2514],{"class":804},[529,2542,669],{"class":539},[529,2544,451],{"class":604},[529,2546,675],{"class":539},[529,2548,808],{"class":546},[529,2550,846],{"class":539},[529,2552,2553,2556,2558,2560,2563,2565,2568,2570,2573,2575,2578],{"class":531,"line":572},[529,2554,2555],{"class":613},"  batch",[529,2557,617],{"class":539},[529,2559,1284],{"class":539},[529,2561,2562],{"class":613}," size",[529,2564,617],{"class":539},[529,2566,2567],{"class":1993}," 100",[529,2569,706],{"class":539},[529,2571,2572],{"class":613}," intervalMs",[529,2574,617],{"class":539},[529,2576,2577],{"class":1993}," 5000",[529,2579,781],{"class":539},[529,2581,2582,2584],{"class":531,"line":590},[529,2583,575],{"class":539},[529,2585,925],{"class":546},[529,2587,2588],{"class":531,"line":597},[529,2589,594],{"emptyLinePlaceholder":593},[529,2591,2592,2594,2596,2598,2601,2603,2606,2608,2611,2613,2615],{"class":531,"line":610},[529,2593,659],{"class":600},[529,2595,1397],{"class":546},[529,2597,681],{"class":539},[529,2599,2600],{"class":804}," pipeline",[529,2602,808],{"class":546},[529,2604,2605],{"class":600},"async",[529,2607,934],{"class":539},[529,2609,2610],{"class":811},"batch",[529,2612,1027],{"class":539},[529,2614,879],{"class":600},[529,2616,540],{"class":539},[529,2618,2619,2622,2625,2627,2629,2632,2634,2636],{"class":531,"line":623},[529,2620,2621],{"class":535},"  await",[529,2623,2624],{"class":804}," fetch",[529,2626,808],{"class":613},[529,2628,703],{"class":539},[529,2630,2631],{"class":584},"https:\u002F\u002Fapi.example.com\u002Flogs\u002Fbatch",[529,2633,703],{"class":539},[529,2635,706],{"class":539},[529,2637,540],{"class":539},[529,2639,2640,2642,2644,2646,2649,2651],{"class":531,"line":634},[529,2641,1587],{"class":613},[529,2643,617],{"class":539},[529,2645,581],{"class":539},[529,2647,2648],{"class":584},"POST",[529,2650,703],{"class":539},[529,2652,550],{"class":539},[529,2654,2655,2657,2659,2661,2663,2665,2667,2669,2671,2673,2675,2678,2680,2683,2685,2688,2691],{"class":531,"line":645},[529,2656,2221],{"class":613},[529,2658,617],{"class":539},[529,2660,1147],{"class":546},[529,2662,943],{"class":539},[529,2664,1152],{"class":804},[529,2666,808],{"class":613},[529,2668,2610],{"class":546},[529,2670,943],{"class":539},[529,2672,2021],{"class":804},[529,2674,808],{"class":613},[529,2676,2677],{"class":811},"ctx",[529,2679,879],{"class":600},[529,2681,2682],{"class":546}," ctx",[529,2684,943],{"class":539},[529,2686,2687],{"class":546},"event",[529,2689,2690],{"class":613},"))",[529,2692,550],{"class":539},[529,2694,2695,2697],{"class":531,"line":651},[529,2696,1176],{"class":539},[529,2698,925],{"class":613},[529,2700,2701,2703],{"class":531,"line":656},[529,2702,575],{"class":539},[529,2704,925],{"class":546},[2706,2707,2709,2710,2713],"callout",{"color":1694,"icon":2708},"i-lucide-arrow-right","See the ",[493,2711,2712],{"href":388},"Pipeline documentation"," for the full options reference, retry strategies, and buffer overflow handling.",[504,2715,2717],{"id":2716},"error-handling-already-done-for-you","Error Handling — already done for you",[427,2719,2720,2722],{},[430,2721,436],{}," enforces every best practice automatically:",[1807,2724,2725,2736,2746,2754],{},[468,2726,2727,2731,2732,2735],{},[2728,2729,2730],"strong",{},"Never throws"," — failures are caught and logged with the ",[430,2733,2734],{},"[evlog\u002F\u003Cname>]"," prefix.",[468,2737,2738,2741,2742,2745],{},[2728,2739,2740],{},"Retries"," — defaults to 2 attempts on transient errors (configurable via ",[430,2743,2744],{},"retries",").",[468,2747,2748,2751,2752,2745],{},[2728,2749,2750],{},"Timeouts"," — defaults to 5000ms (configurable via ",[430,2753,776],{},[468,2755,2756,2759,2760,2762,2763,2765],{},[2728,2757,2758],{},"Graceful degradation"," — ",[430,2761,440],{}," returning ",[430,2764,2252],{}," makes the drain a no-op.",[427,2767,2768,2769,2771,2772,2775,2776,2779],{},"If you fall back to ",[430,2770,2268],{}," for non-HTTP transports, follow the same rules manually — wrap the transport in ",[430,2773,2774],{},"try\u002Fcatch",", log with ",[430,2777,2778],{},"console.error('[evlog\u002F\u003Cname>] …')",", and never re-throw.",[504,2781,2783],{"id":2782},"next-steps","Next Steps",[465,2785,2786,2792,2798,2804],{},[468,2787,2788,2791],{},[493,2789,2790],{"href":333},"Axiom Adapter"," - See a production-ready adapter implementation",[468,2793,2794,2797],{},[493,2795,2796],{"href":338},"OTLP Adapter"," - OpenTelemetry Protocol adapter",[468,2799,2800,2803],{},[493,2801,2802],{"href":343},"PostHog Adapter"," - PostHog product analytics adapter",[468,2805,2806,2808],{},[493,2807,185],{"href":186}," - Security and production tips",[2810,2811,2812],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .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 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 .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":525,"searchDepth":543,"depth":543,"links":2814},[2815,2817,2818,2819,2820,2822,2823,2824],{"id":506,"depth":543,"text":2816},"Recipe — defineHttpDrain in 15 lines",{"id":1533,"depth":543,"text":1534},{"id":1798,"depth":543,"text":1799},{"id":1873,"depth":543,"text":1874},{"id":2259,"depth":543,"text":2821},"When you can't use defineHttpDrain",{"id":2472,"depth":543,"text":2473},{"id":2716,"depth":543,"text":2717},{"id":2782,"depth":543,"text":2783},"Build your own adapter to send logs to any destination using defineHttpDrain — config resolution, retries, timeouts, and error handling are handled for you.","md",[2828,2831],{"label":2790,"icon":335,"to":333,"color":2829,"variant":2830},"neutral","subtle",{"label":185,"icon":129,"to":186,"color":2829,"variant":2830},{},{"icon":83},{"title":397,"description":2825},"y3SEJzJOQWr98KRcRYbmwenqorLQM3z7gyQP-04pMtM",[2837,2839],{"title":392,"path":393,"stem":394,"description":2838,"icon":395,"children":-1},"Framework-agnostic HTTP log transport for sending client-side logs to your server via fetch or sendBeacon. Works in the browser or any environment with fetch. Use the `evlog\u002Fhttp` entry point.",{"title":401,"path":402,"stem":403,"description":2840,"icon":404,"children":-1},"The evlog\u002Ftoolkit public API — every primitive used to build adapters, enrichers, plugins, and framework integrations.",1778330174567]