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