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