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