[{"data":1,"prerenderedAt":3284},["ShallowReactive",2],{"navigation_docs":3,"-integrate-frameworks-orpc":434,"-integrate-frameworks-orpc-surround":3279},[4,30,80,240,348,403],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Start","\u002Fstart","1.start",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Learn","\u002Flearn","2.learn",[35,40,45,50,55,60,65,70,75],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":61,"path":62,"stem":63,"icon":64},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":66,"path":67,"stem":68,"icon":69},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":71,"path":72,"stem":73,"icon":74},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":76,"path":77,"stem":78,"icon":79},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":81,"path":82,"stem":83,"children":84,"page":29},"Integrate","\u002Fintegrate","3.integrate",[85,89,152],{"title":36,"path":86,"stem":87,"icon":88},"\u002Fintegrate\u002Foverview","3.integrate\u002F0.overview","i-lucide-plug",{"title":90,"path":91,"stem":92,"children":93,"page":29},"Adapters","\u002Fintegrate\u002Fadapters","3.integrate\u002Fadapters",[94,97,137],{"title":36,"path":95,"stem":96,"icon":39},"\u002Fintegrate\u002Fadapters\u002Foverview","3.integrate\u002Fadapters\u002F01.overview",{"title":98,"path":99,"stem":100,"children":101,"page":29},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","3.integrate\u002Fadapters\u002Fcloud",[102,107,112,117,122,127,132],{"title":103,"path":104,"stem":105,"icon":106},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","3.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":108,"path":109,"stem":110,"icon":111},"OTLP","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fotlp","3.integrate\u002Fadapters\u002Fcloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":113,"path":114,"stem":115,"icon":116},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","3.integrate\u002Fadapters\u002Fcloud\u002F03.posthog","i-simple-icons-posthog",{"title":118,"path":119,"stem":120,"icon":121},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","3.integrate\u002Fadapters\u002Fcloud\u002F04.sentry","i-simple-icons-sentry",{"title":123,"path":124,"stem":125,"icon":126},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","3.integrate\u002Fadapters\u002Fcloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":128,"path":129,"stem":130,"icon":131},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","3.integrate\u002Fadapters\u002Fcloud\u002F06.datadog","i-simple-icons-datadog",{"title":133,"path":134,"stem":135,"icon":136},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fhyperdx","3.integrate\u002Fadapters\u002Fcloud\u002F07.hyperdx","i-custom-hyperdx",{"title":138,"path":139,"stem":140,"children":141,"page":29},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","3.integrate\u002Fadapters\u002Fself-hosted",[142,147],{"title":143,"path":144,"stem":145,"icon":146},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","3.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":148,"path":149,"stem":150,"icon":151},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","3.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":153,"path":154,"stem":155,"children":156,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","3.integrate\u002Fframeworks",[157,161,166,171,176,181,186,191,196,201,206,211,216,221,225,230,235],{"title":36,"path":158,"stem":159,"icon":160},"\u002Fintegrate\u002Fframeworks\u002Foverview","3.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":162,"path":163,"stem":164,"icon":165},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","3.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":167,"path":168,"stem":169,"icon":170},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","3.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":172,"path":173,"stem":174,"icon":175},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","3.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":177,"path":178,"stem":179,"icon":180},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","3.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":182,"path":183,"stem":184,"icon":185},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","3.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":187,"path":188,"stem":189,"icon":190},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","3.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":192,"path":193,"stem":194,"icon":195},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","3.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":197,"path":198,"stem":199,"icon":200},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","3.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":202,"path":203,"stem":204,"icon":205},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","3.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":207,"path":208,"stem":209,"icon":210},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","3.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":212,"path":213,"stem":214,"icon":215},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","3.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":217,"path":218,"stem":219,"icon":220},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","3.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":222,"path":223,"stem":224,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","3.integrate\u002Fframeworks\u002F13.standalone",{"title":226,"path":227,"stem":228,"icon":229},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","3.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":231,"path":232,"stem":233,"icon":234},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","3.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":236,"path":237,"stem":238,"icon":239},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","3.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":241,"path":242,"stem":243,"children":244,"page":29},"Use Cases","\u002Fuse-cases","4.use-cases",[245,249,254,283,311,343],{"title":36,"path":246,"stem":247,"icon":248},"\u002Fuse-cases\u002Foverview","4.use-cases\u002F0.overview","i-lucide-list-checks",{"title":250,"path":251,"stem":252,"icon":253},"Client Logging","\u002Fuse-cases\u002Fclient-logging","4.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":255,"icon":256,"path":257,"stem":258,"children":259,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","4.use-cases\u002F2.ai-sdk",[260,263,268,273,278],{"title":36,"path":261,"stem":262,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","4.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":264,"path":265,"stem":266,"icon":267},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","4.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":269,"path":270,"stem":271,"icon":272},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","4.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":274,"path":275,"stem":276,"icon":277},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","4.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":279,"path":280,"stem":281,"icon":282},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","4.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":284,"icon":285,"path":286,"stem":287,"children":288,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","4.use-cases\u002F3.better-auth",[289,292,297,302,306],{"title":36,"path":290,"stem":291,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","4.use-cases\u002F3.better-auth\u002F01.overview",{"title":293,"path":294,"stem":295,"icon":296},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","4.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":298,"path":299,"stem":300,"icon":301},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","4.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":303,"path":304,"stem":305,"icon":253},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","4.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":307,"path":308,"stem":309,"icon":310},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","4.use-cases\u002F3.better-auth\u002F05.performance","i-lucide-gauge",{"title":312,"icon":313,"path":314,"stem":315,"children":316,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","4.use-cases\u002F4.audit",[317,320,325,330,335,339],{"title":36,"path":318,"stem":319,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","4.use-cases\u002F4.audit\u002F01.overview",{"title":321,"path":322,"stem":323,"icon":324},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","4.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":326,"path":327,"stem":328,"icon":329},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","4.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":331,"path":332,"stem":333,"icon":334},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","4.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":336,"path":337,"stem":338,"icon":313},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","4.use-cases\u002F4.audit\u002F05.compliance",{"title":340,"path":341,"stem":342,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","4.use-cases\u002F4.audit\u002F06.recipes",{"title":344,"path":345,"stem":346,"icon":347},"Enrichers","\u002Fuse-cases\u002Fenrichers","4.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":349,"path":350,"stem":351,"children":352,"page":29},"Extend","\u002Fextend","5.extend",[353,357,362,367,372,376,380,384,388,393,398],{"title":36,"path":354,"stem":355,"icon":356},"\u002Fextend\u002Foverview","5.extend\u002F0.overview","i-lucide-blocks",{"title":358,"path":359,"stem":360,"icon":361},"Stream","\u002Fextend\u002Fstream","5.extend\u002F1.stream","i-lucide-radio-tower",{"title":363,"path":364,"stem":365,"icon":366},"Custom framework","\u002Fextend\u002Fcustom-framework","5.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":368,"path":369,"stem":370,"icon":371},"FS reader","\u002Fextend\u002Ffs-reader","5.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":340,"path":373,"stem":374,"icon":375},"\u002Fextend\u002Fconsumer-recipes","5.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":377,"path":378,"stem":379,"icon":356},"Plugins","\u002Fextend\u002Fplugins","5.extend\u002F4.plugins",{"title":381,"path":382,"stem":383,"icon":347},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","5.extend\u002F5.custom-enrichers",{"title":385,"path":386,"stem":387,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","5.extend\u002F6.tail-sampling",{"title":389,"path":390,"stem":391,"icon":392},"Identity headers","\u002Fextend\u002Fidentity-headers","5.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":394,"path":395,"stem":396,"icon":397},"Custom drains","\u002Fextend\u002Fcustom-drains","5.extend\u002F8.custom-drains","i-lucide-share-2",{"title":399,"path":400,"stem":401,"icon":402},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","5.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":404,"path":405,"stem":406,"children":407,"page":29},"Reference","\u002Freference","6.reference",[408,413,416,421,425,430],{"title":409,"path":410,"stem":411,"icon":412},"Configuration","\u002Freference\u002Fconfiguration","6.reference\u002F1.configuration","i-lucide-settings",{"title":307,"path":414,"stem":415,"icon":310},"\u002Freference\u002Fperformance","6.reference\u002F2.performance",{"title":417,"path":418,"stem":419,"icon":420},"Vite Plugin","\u002Freference\u002Fvite-plugin","6.reference\u002F3.vite-plugin","i-custom-vite",{"title":422,"path":423,"stem":424,"icon":313},"Best Practices","\u002Freference\u002Fbest-practices","6.reference\u002F4.best-practices",{"title":426,"path":427,"stem":428,"icon":429},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","6.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":431,"path":432,"stem":433,"icon":347},"Agent Skills","\u002Freference\u002Fagent-skills","6.reference\u002F6.agent-skills",{"id":435,"title":231,"body":436,"description":3269,"extension":3270,"links":3271,"meta":3275,"navigation":3276,"path":232,"seo":3277,"stem":233,"__hash__":3278},"docs\u002F3.integrate\u002Fframeworks\u002F15.orpc.md",{"type":437,"value":438,"toc":3252},"minimark",[439,471,491,536,540,545,625,629,1146,1167,1182,1185,1188,1514,1528,1602,1606,1612,1793,1891,1907,1911,1944,2168,2171,2249,2252,2407,2443,2446,2456,2460,2467,2640,2644,2651,2845,2856,2860,2866,2976,2980,2989,3139,3145,3149,3191,3199,3209,3213,3219,3248],[440,441,442,446,447,450,451,454,455,458,459,462,463,466,467,470],"p",{},[443,444,445],"code",{},"evlog\u002Forpc"," ships two primitives: ",[443,448,449],{},"withEvlog(handler)"," wraps any oRPC handler (",[443,452,453],{},"RPCHandler",", ",[443,456,457],{},"OpenAPIHandler",") so each request becomes one wide event, and ",[443,460,461],{},"evlog()"," is a procedure middleware that exposes ",[443,464,465],{},"context.log"," and tags the wide event with the procedure path as ",[443,468,469],{},"operation",".",[472,473,475,479,480,487,488,490],"callout",{"color":474,"icon":13},"info",[476,477,478],"strong",{},"oRPC v2:"," The oRPC maintainers have ",[481,482,486],"a",{"href":483,"rel":484},"https:\u002F\u002Fgithub.com\u002Fmiddleapi\u002Forpc\u002Fdiscussions\u002F1293#discussioncomment-17032656",[485],"nofollow","announced first-party evlog support in v2"," (edge-ready). Until v2 ships, ",[443,489,445],{}," is the integration path for oRPC v1 — and it remains the entrypoint for evlog's full pipeline (drains, enrichers, tail sampling, structured errors) regardless of how oRPC wires it in later.",[492,493,496,499,524],"prompt",{":actions":494,"description":495,"icon":234},"[\"copy\",\"cursor\",\"windsurf\"]","Set up evlog in my oRPC app",[440,497,498],{},"Set up evlog in my oRPC app.",[500,501,502,506,509,512,515,518,521],"ul",{},[503,504,505],"li",{},"Install evlog: pnpm add evlog",[503,507,508],{},"Call initLogger({ env: { service: 'my-rpc' } }) at startup",[503,510,511],{},"Wrap your RPCHandler \u002F OpenAPIHandler with withEvlog() from 'evlog\u002Forpc'",[503,513,514],{},"Add os.use(evlog()) on your base procedure for typed context.log + per-procedure operation",[503,516,517],{},"Declare EvlogOrpcContext on your base context to type context.log",[503,519,520],{},"Throw evlog errors (createError or defineErrorCatalog) directly from procedures — evlog\u002Forpc bridges them to ORPCError",[503,522,523],{},"Pass drain, enrich, include, and keep options to withEvlog()",[440,525,526,527,531,532],{},"Docs: ",[481,528,529],{"href":529,"rel":530},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fframeworks\u002Forpc",[485],"\nAdapters: ",[481,533,534],{"href":534,"rel":535},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fadapters\u002Foverview",[485],[537,538,25],"h2",{"id":539},"quick-start",[541,542,544],"h3",{"id":543},"_1-install","1. Install",[546,547,548,576,592,608],"code-group",{},[549,550,556],"pre",{"className":551,"code":552,"filename":553,"language":554,"meta":555,"style":555},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog @orpc\u002Fserver\n","pnpm","bash","",[443,557,558],{"__ignoreMap":555},[559,560,563,566,570,573],"span",{"class":561,"line":562},"line",1,[559,564,553],{"class":565},"sBMFI",[559,567,569],{"class":568},"sfazB"," add",[559,571,572],{"class":568}," evlog",[559,574,575],{"class":568}," @orpc\u002Fserver\n",[549,577,580],{"className":551,"code":578,"filename":579,"language":554,"meta":555,"style":555},"bun add evlog @orpc\u002Fserver\n","bun",[443,581,582],{"__ignoreMap":555},[559,583,584,586,588,590],{"class":561,"line":562},[559,585,579],{"class":565},[559,587,569],{"class":568},[559,589,572],{"class":568},[559,591,575],{"class":568},[549,593,596],{"className":551,"code":594,"filename":595,"language":554,"meta":555,"style":555},"yarn add evlog @orpc\u002Fserver\n","yarn",[443,597,598],{"__ignoreMap":555},[559,599,600,602,604,606],{"class":561,"line":562},[559,601,595],{"class":565},[559,603,569],{"class":568},[559,605,572],{"class":568},[559,607,575],{"class":568},[549,609,612],{"className":551,"code":610,"filename":611,"language":554,"meta":555,"style":555},"npm install evlog @orpc\u002Fserver\n","npm",[443,613,614],{"__ignoreMap":555},[559,615,616,618,621,623],{"class":561,"line":562},[559,617,611],{"class":565},[559,619,620],{"class":568}," install",[559,622,572],{"class":568},[559,624,575],{"class":568},[541,626,628],{"id":627},"_2-initialize-and-wire-the-wrappers","2. Initialize and wire the wrappers",[549,630,635],{"className":631,"code":632,"filename":633,"language":634,"meta":555,"style":555},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { os } from '@orpc\u002Fserver'\nimport { RPCHandler } from '@orpc\u002Fserver\u002Ffetch'\nimport { initLogger } from 'evlog'\nimport { evlog, withEvlog, type EvlogOrpcContext } from 'evlog\u002Forpc'\n\ninitLogger({\n  env: { service: 'my-rpc' },\n})\n\nconst base = os.$context\u003CEvlogOrpcContext>().use(evlog())\n\nconst router = {\n  health: base.handler(({ context }) => {\n    context.log.set({ route: 'health' })\n    return { ok: true }\n  }),\n}\n\nconst handler = withEvlog(new RPCHandler(router))\n\nexport default async function fetch(request: Request) {\n  const { matched, response } = await handler.handle(request, { prefix: '\u002Frpc' })\n  return matched ? response : new Response('Not Found', { status: 404 })\n}\n","server\u002Forpc.ts","typescript",[443,636,637,666,687,708,741,748,761,789,798,803,847,852,865,898,935,955,967,973,978,1000,1005,1037,1093,1141],{"__ignoreMap":555},[559,638,639,643,647,651,654,657,660,663],{"class":561,"line":562},[559,640,642],{"class":641},"s7zQu","import",[559,644,646],{"class":645},"sMK4o"," {",[559,648,650],{"class":649},"sTEyZ"," os",[559,652,653],{"class":645}," }",[559,655,656],{"class":641}," from",[559,658,659],{"class":645}," '",[559,661,662],{"class":568},"@orpc\u002Fserver",[559,664,665],{"class":645},"'\n",[559,667,669,671,673,676,678,680,682,685],{"class":561,"line":668},2,[559,670,642],{"class":641},[559,672,646],{"class":645},[559,674,675],{"class":649}," RPCHandler",[559,677,653],{"class":645},[559,679,656],{"class":641},[559,681,659],{"class":645},[559,683,684],{"class":568},"@orpc\u002Fserver\u002Ffetch",[559,686,665],{"class":645},[559,688,690,692,694,697,699,701,703,706],{"class":561,"line":689},3,[559,691,642],{"class":641},[559,693,646],{"class":645},[559,695,696],{"class":649}," initLogger",[559,698,653],{"class":645},[559,700,656],{"class":641},[559,702,659],{"class":645},[559,704,705],{"class":568},"evlog",[559,707,665],{"class":645},[559,709,711,713,715,717,720,723,725,728,731,733,735,737,739],{"class":561,"line":710},4,[559,712,642],{"class":641},[559,714,646],{"class":645},[559,716,572],{"class":649},[559,718,719],{"class":645},",",[559,721,722],{"class":649}," withEvlog",[559,724,719],{"class":645},[559,726,727],{"class":641}," type",[559,729,730],{"class":649}," EvlogOrpcContext",[559,732,653],{"class":645},[559,734,656],{"class":641},[559,736,659],{"class":645},[559,738,445],{"class":568},[559,740,665],{"class":645},[559,742,744],{"class":561,"line":743},5,[559,745,747],{"emptyLinePlaceholder":746},true,"\n",[559,749,751,755,758],{"class":561,"line":750},6,[559,752,754],{"class":753},"s2Zo4","initLogger",[559,756,757],{"class":649},"(",[559,759,760],{"class":645},"{\n",[559,762,764,768,771,773,776,778,780,783,786],{"class":561,"line":763},7,[559,765,767],{"class":766},"swJcz","  env",[559,769,770],{"class":645},":",[559,772,646],{"class":645},[559,774,775],{"class":766}," service",[559,777,770],{"class":645},[559,779,659],{"class":645},[559,781,782],{"class":568},"my-rpc",[559,784,785],{"class":645},"'",[559,787,788],{"class":645}," },\n",[559,790,792,795],{"class":561,"line":791},8,[559,793,794],{"class":645},"}",[559,796,797],{"class":649},")\n",[559,799,801],{"class":561,"line":800},9,[559,802,747],{"emptyLinePlaceholder":746},[559,804,806,810,813,816,818,820,823,826,829,832,835,837,840,842,844],{"class":561,"line":805},10,[559,807,809],{"class":808},"spNyl","const",[559,811,812],{"class":649}," base ",[559,814,815],{"class":645},"=",[559,817,650],{"class":649},[559,819,470],{"class":645},[559,821,822],{"class":753},"$context",[559,824,825],{"class":645},"\u003C",[559,827,828],{"class":565},"EvlogOrpcContext",[559,830,831],{"class":645},">",[559,833,834],{"class":649},"()",[559,836,470],{"class":645},[559,838,839],{"class":753},"use",[559,841,757],{"class":649},[559,843,705],{"class":753},[559,845,846],{"class":649},"())\n",[559,848,850],{"class":561,"line":849},11,[559,851,747],{"emptyLinePlaceholder":746},[559,853,855,857,860,862],{"class":561,"line":854},12,[559,856,809],{"class":808},[559,858,859],{"class":649}," router ",[559,861,815],{"class":645},[559,863,864],{"class":645}," {\n",[559,866,868,871,873,876,878,881,883,886,890,893,896],{"class":561,"line":867},13,[559,869,870],{"class":766},"  health",[559,872,770],{"class":645},[559,874,875],{"class":649}," base",[559,877,470],{"class":645},[559,879,880],{"class":753},"handler",[559,882,757],{"class":649},[559,884,885],{"class":645},"({",[559,887,889],{"class":888},"sHdIc"," context",[559,891,892],{"class":645}," })",[559,894,895],{"class":808}," =>",[559,897,864],{"class":645},[559,899,901,904,906,909,911,914,916,919,922,924,926,929,931,933],{"class":561,"line":900},14,[559,902,903],{"class":649},"    context",[559,905,470],{"class":645},[559,907,908],{"class":649},"log",[559,910,470],{"class":645},[559,912,913],{"class":753},"set",[559,915,757],{"class":766},[559,917,918],{"class":645},"{",[559,920,921],{"class":766}," route",[559,923,770],{"class":645},[559,925,659],{"class":645},[559,927,928],{"class":568},"health",[559,930,785],{"class":645},[559,932,653],{"class":645},[559,934,797],{"class":766},[559,936,938,941,943,946,948,952],{"class":561,"line":937},15,[559,939,940],{"class":641},"    return",[559,942,646],{"class":645},[559,944,945],{"class":766}," ok",[559,947,770],{"class":645},[559,949,951],{"class":950},"sfNiH"," true",[559,953,954],{"class":645}," }\n",[559,956,958,961,964],{"class":561,"line":957},16,[559,959,960],{"class":645},"  }",[559,962,963],{"class":649},")",[559,965,966],{"class":645},",\n",[559,968,970],{"class":561,"line":969},17,[559,971,972],{"class":645},"}\n",[559,974,976],{"class":561,"line":975},18,[559,977,747],{"emptyLinePlaceholder":746},[559,979,981,983,986,988,990,992,995,997],{"class":561,"line":980},19,[559,982,809],{"class":808},[559,984,985],{"class":649}," handler ",[559,987,815],{"class":645},[559,989,722],{"class":753},[559,991,757],{"class":649},[559,993,994],{"class":645},"new",[559,996,675],{"class":753},[559,998,999],{"class":649},"(router))\n",[559,1001,1003],{"class":561,"line":1002},20,[559,1004,747],{"emptyLinePlaceholder":746},[559,1006,1008,1011,1014,1017,1020,1023,1025,1028,1030,1033,1035],{"class":561,"line":1007},21,[559,1009,1010],{"class":641},"export",[559,1012,1013],{"class":641}," default",[559,1015,1016],{"class":808}," async",[559,1018,1019],{"class":808}," function",[559,1021,1022],{"class":753}," fetch",[559,1024,757],{"class":645},[559,1026,1027],{"class":888},"request",[559,1029,770],{"class":645},[559,1031,1032],{"class":565}," Request",[559,1034,963],{"class":645},[559,1036,864],{"class":645},[559,1038,1040,1043,1045,1048,1050,1053,1055,1058,1061,1064,1066,1069,1071,1073,1075,1077,1080,1082,1084,1087,1089,1091],{"class":561,"line":1039},22,[559,1041,1042],{"class":808},"  const",[559,1044,646],{"class":645},[559,1046,1047],{"class":649}," matched",[559,1049,719],{"class":645},[559,1051,1052],{"class":649}," response",[559,1054,653],{"class":645},[559,1056,1057],{"class":645}," =",[559,1059,1060],{"class":641}," await",[559,1062,1063],{"class":649}," handler",[559,1065,470],{"class":645},[559,1067,1068],{"class":753},"handle",[559,1070,757],{"class":766},[559,1072,1027],{"class":649},[559,1074,719],{"class":645},[559,1076,646],{"class":645},[559,1078,1079],{"class":766}," prefix",[559,1081,770],{"class":645},[559,1083,659],{"class":645},[559,1085,1086],{"class":568},"\u002Frpc",[559,1088,785],{"class":645},[559,1090,653],{"class":645},[559,1092,797],{"class":766},[559,1094,1096,1099,1101,1104,1106,1109,1112,1115,1117,1119,1122,1124,1126,1128,1131,1133,1137,1139],{"class":561,"line":1095},23,[559,1097,1098],{"class":641},"  return",[559,1100,1047],{"class":649},[559,1102,1103],{"class":645}," ?",[559,1105,1052],{"class":649},[559,1107,1108],{"class":645}," :",[559,1110,1111],{"class":645}," new",[559,1113,1114],{"class":753}," Response",[559,1116,757],{"class":766},[559,1118,785],{"class":645},[559,1120,1121],{"class":568},"Not Found",[559,1123,785],{"class":645},[559,1125,719],{"class":645},[559,1127,646],{"class":645},[559,1129,1130],{"class":766}," status",[559,1132,770],{"class":645},[559,1134,1136],{"class":1135},"sbssI"," 404",[559,1138,653],{"class":645},[559,1140,797],{"class":766},[559,1142,1144],{"class":561,"line":1143},24,[559,1145,972],{"class":645},[472,1147,1148,1151,1152,1158,1159,1162,1163,1166],{"color":474,"icon":420},[476,1149,1150],{},"Using Vite?"," The ",[481,1153,1154,1157],{"href":418},[443,1155,1156],{},"evlog\u002Fvite"," plugin"," replaces the ",[443,1160,1161],{},"initLogger()"," call with compile-time auto-initialization, strips ",[443,1164,1165],{},"log.debug()"," from production builds, and injects source locations.",[440,1168,1169,1171,1172,1175,1176,1178,1179,470],{},[443,1170,828],{}," declares ",[443,1173,1174],{},"log: RequestLogger"," on the procedure context so ",[443,1177,465],{}," is fully typed in every procedure that descends from ",[443,1180,1181],{},"base",[537,1183,46],{"id":1184},"wide-events",[440,1186,1187],{},"Build up context progressively through your handler. One request = one wide event:",[549,1189,1191],{"className":631,"code":1190,"filename":633,"language":634,"meta":555,"style":555},"const getUser = base\n  .input(z.object({ id: z.string() }))\n  .handler(async ({ input, context }) => {\n    context.log.set({ user: { id: input.id } })\n\n    const user = await db.findUser(input.id)\n    context.log.set({ user: { name: user.name, plan: user.plan } })\n\n    const orders = await db.findOrders(input.id)\n    context.log.set({ orders: { count: orders.length, totalRevenue: sum(orders) } })\n\n    return { user, orders }\n  })\n",[443,1192,1193,1205,1246,1273,1313,1317,1346,1400,1404,1432,1490,1494,1508],{"__ignoreMap":555},[559,1194,1195,1197,1200,1202],{"class":561,"line":562},[559,1196,809],{"class":808},[559,1198,1199],{"class":649}," getUser ",[559,1201,815],{"class":645},[559,1203,1204],{"class":649}," base\n",[559,1206,1207,1210,1213,1216,1218,1221,1223,1225,1228,1230,1233,1235,1238,1241,1243],{"class":561,"line":668},[559,1208,1209],{"class":645},"  .",[559,1211,1212],{"class":753},"input",[559,1214,1215],{"class":649},"(z",[559,1217,470],{"class":645},[559,1219,1220],{"class":753},"object",[559,1222,757],{"class":649},[559,1224,918],{"class":645},[559,1226,1227],{"class":766}," id",[559,1229,770],{"class":645},[559,1231,1232],{"class":649}," z",[559,1234,470],{"class":645},[559,1236,1237],{"class":753},"string",[559,1239,1240],{"class":649},"() ",[559,1242,794],{"class":645},[559,1244,1245],{"class":649},"))\n",[559,1247,1248,1250,1252,1254,1257,1260,1263,1265,1267,1269,1271],{"class":561,"line":689},[559,1249,1209],{"class":645},[559,1251,880],{"class":753},[559,1253,757],{"class":649},[559,1255,1256],{"class":808},"async",[559,1258,1259],{"class":645}," ({",[559,1261,1262],{"class":888}," input",[559,1264,719],{"class":645},[559,1266,889],{"class":888},[559,1268,892],{"class":645},[559,1270,895],{"class":808},[559,1272,864],{"class":645},[559,1274,1275,1277,1279,1281,1283,1285,1287,1289,1292,1294,1296,1298,1300,1302,1304,1307,1309,1311],{"class":561,"line":710},[559,1276,903],{"class":649},[559,1278,470],{"class":645},[559,1280,908],{"class":649},[559,1282,470],{"class":645},[559,1284,913],{"class":753},[559,1286,757],{"class":766},[559,1288,918],{"class":645},[559,1290,1291],{"class":766}," user",[559,1293,770],{"class":645},[559,1295,646],{"class":645},[559,1297,1227],{"class":766},[559,1299,770],{"class":645},[559,1301,1262],{"class":649},[559,1303,470],{"class":645},[559,1305,1306],{"class":649},"id",[559,1308,653],{"class":645},[559,1310,653],{"class":645},[559,1312,797],{"class":766},[559,1314,1315],{"class":561,"line":743},[559,1316,747],{"emptyLinePlaceholder":746},[559,1318,1319,1322,1324,1326,1328,1331,1333,1336,1338,1340,1342,1344],{"class":561,"line":750},[559,1320,1321],{"class":808},"    const",[559,1323,1291],{"class":649},[559,1325,1057],{"class":645},[559,1327,1060],{"class":641},[559,1329,1330],{"class":649}," db",[559,1332,470],{"class":645},[559,1334,1335],{"class":753},"findUser",[559,1337,757],{"class":766},[559,1339,1212],{"class":649},[559,1341,470],{"class":645},[559,1343,1306],{"class":649},[559,1345,797],{"class":766},[559,1347,1348,1350,1352,1354,1356,1358,1360,1362,1364,1366,1368,1371,1373,1375,1377,1380,1382,1385,1387,1389,1391,1394,1396,1398],{"class":561,"line":763},[559,1349,903],{"class":649},[559,1351,470],{"class":645},[559,1353,908],{"class":649},[559,1355,470],{"class":645},[559,1357,913],{"class":753},[559,1359,757],{"class":766},[559,1361,918],{"class":645},[559,1363,1291],{"class":766},[559,1365,770],{"class":645},[559,1367,646],{"class":645},[559,1369,1370],{"class":766}," name",[559,1372,770],{"class":645},[559,1374,1291],{"class":649},[559,1376,470],{"class":645},[559,1378,1379],{"class":649},"name",[559,1381,719],{"class":645},[559,1383,1384],{"class":766}," plan",[559,1386,770],{"class":645},[559,1388,1291],{"class":649},[559,1390,470],{"class":645},[559,1392,1393],{"class":649},"plan",[559,1395,653],{"class":645},[559,1397,653],{"class":645},[559,1399,797],{"class":766},[559,1401,1402],{"class":561,"line":791},[559,1403,747],{"emptyLinePlaceholder":746},[559,1405,1406,1408,1411,1413,1415,1417,1419,1422,1424,1426,1428,1430],{"class":561,"line":800},[559,1407,1321],{"class":808},[559,1409,1410],{"class":649}," orders",[559,1412,1057],{"class":645},[559,1414,1060],{"class":641},[559,1416,1330],{"class":649},[559,1418,470],{"class":645},[559,1420,1421],{"class":753},"findOrders",[559,1423,757],{"class":766},[559,1425,1212],{"class":649},[559,1427,470],{"class":645},[559,1429,1306],{"class":649},[559,1431,797],{"class":766},[559,1433,1434,1436,1438,1440,1442,1444,1446,1448,1450,1452,1454,1457,1459,1461,1463,1466,1468,1471,1473,1476,1478,1481,1484,1486,1488],{"class":561,"line":805},[559,1435,903],{"class":649},[559,1437,470],{"class":645},[559,1439,908],{"class":649},[559,1441,470],{"class":645},[559,1443,913],{"class":753},[559,1445,757],{"class":766},[559,1447,918],{"class":645},[559,1449,1410],{"class":766},[559,1451,770],{"class":645},[559,1453,646],{"class":645},[559,1455,1456],{"class":766}," count",[559,1458,770],{"class":645},[559,1460,1410],{"class":649},[559,1462,470],{"class":645},[559,1464,1465],{"class":649},"length",[559,1467,719],{"class":645},[559,1469,1470],{"class":766}," totalRevenue",[559,1472,770],{"class":645},[559,1474,1475],{"class":753}," sum",[559,1477,757],{"class":766},[559,1479,1480],{"class":649},"orders",[559,1482,1483],{"class":766},") ",[559,1485,794],{"class":645},[559,1487,653],{"class":645},[559,1489,797],{"class":766},[559,1491,1492],{"class":561,"line":849},[559,1493,747],{"emptyLinePlaceholder":746},[559,1495,1496,1498,1500,1502,1504,1506],{"class":561,"line":854},[559,1497,940],{"class":641},[559,1499,646],{"class":645},[559,1501,1291],{"class":649},[559,1503,719],{"class":645},[559,1505,1410],{"class":649},[559,1507,954],{"class":645},[559,1509,1510,1512],{"class":561,"line":867},[559,1511,960],{"class":645},[559,1513,797],{"class":649},[440,1515,1516,1517,1519,1520,1523,1524,1527],{},"All fields are merged into a single wide event emitted when the request completes. The ",[443,1518,469],{}," field is filled automatically from the procedure path (nested routers like ",[443,1521,1522],{},"users.profile.get"," surface as ",[443,1525,1526],{},"operation: 'users.profile.get'","):",[549,1529,1532],{"className":551,"code":1530,"filename":1531,"language":554,"meta":555,"style":555},"14:58:15 INFO [my-rpc] POST \u002Frpc\u002FgetUser 200 in 12ms\n  ├─ operation: getUser\n  ├─ orders: count=2 totalRevenue=6298\n  ├─ user: id=usr_123 name=Alice plan=pro\n  └─ requestId: 4a8ff3a8-...\n","Terminal output",[443,1533,1534,1545,1556,1575,1591],{"__ignoreMap":555},[559,1535,1536,1539,1542],{"class":561,"line":562},[559,1537,1538],{"class":565},"14:58:15",[559,1540,1541],{"class":568}," INFO",[559,1543,1544],{"class":649}," [my-rpc] POST \u002Frpc\u002FgetUser 200 in 12ms\n",[559,1546,1547,1550,1553],{"class":561,"line":668},[559,1548,1549],{"class":565},"  ├─",[559,1551,1552],{"class":568}," operation:",[559,1554,1555],{"class":568}," getUser\n",[559,1557,1558,1560,1563,1566,1569,1572],{"class":561,"line":689},[559,1559,1549],{"class":565},[559,1561,1562],{"class":568}," orders:",[559,1564,1565],{"class":568}," count=",[559,1567,1568],{"class":1135},"2",[559,1570,1571],{"class":568}," totalRevenue=",[559,1573,1574],{"class":1135},"6298\n",[559,1576,1577,1579,1582,1585,1588],{"class":561,"line":710},[559,1578,1549],{"class":565},[559,1580,1581],{"class":568}," user:",[559,1583,1584],{"class":568}," id=usr_123",[559,1586,1587],{"class":568}," name=Alice",[559,1589,1590],{"class":568}," plan=pro\n",[559,1592,1593,1596,1599],{"class":561,"line":743},[559,1594,1595],{"class":565},"  └─",[559,1597,1598],{"class":568}," requestId:",[559,1600,1601],{"class":568}," 4a8ff3a8-...\n",[537,1603,1605],{"id":1604},"uselogger","useLogger()",[440,1607,1608,1609,1611],{},"Use ",[443,1610,1605],{}," to access the request-scoped logger from anywhere in the call stack without passing the context through your service layer:",[549,1613,1616],{"className":631,"code":1614,"filename":1615,"language":634,"meta":555,"style":555},"import { useLogger } from 'evlog\u002Forpc'\n\nexport async function findUser(id: string) {\n  const log = useLogger()\n  log.set({ user: { id } })\n\n  const user = await db.findUser(id)\n  log.set({ user: { name: user.name, plan: user.plan } })\n\n  return user\n}\n","server\u002Fservices\u002Fuser.ts",[443,1617,1618,1637,1641,1665,1679,1706,1710,1732,1778,1782,1789],{"__ignoreMap":555},[559,1619,1620,1622,1624,1627,1629,1631,1633,1635],{"class":561,"line":562},[559,1621,642],{"class":641},[559,1623,646],{"class":645},[559,1625,1626],{"class":649}," useLogger",[559,1628,653],{"class":645},[559,1630,656],{"class":641},[559,1632,659],{"class":645},[559,1634,445],{"class":568},[559,1636,665],{"class":645},[559,1638,1639],{"class":561,"line":668},[559,1640,747],{"emptyLinePlaceholder":746},[559,1642,1643,1645,1647,1649,1652,1654,1656,1658,1661,1663],{"class":561,"line":689},[559,1644,1010],{"class":641},[559,1646,1016],{"class":808},[559,1648,1019],{"class":808},[559,1650,1651],{"class":753}," findUser",[559,1653,757],{"class":645},[559,1655,1306],{"class":888},[559,1657,770],{"class":645},[559,1659,1660],{"class":565}," string",[559,1662,963],{"class":645},[559,1664,864],{"class":645},[559,1666,1667,1669,1672,1674,1676],{"class":561,"line":710},[559,1668,1042],{"class":808},[559,1670,1671],{"class":649}," log",[559,1673,1057],{"class":645},[559,1675,1626],{"class":753},[559,1677,1678],{"class":766},"()\n",[559,1680,1681,1684,1686,1688,1690,1692,1694,1696,1698,1700,1702,1704],{"class":561,"line":743},[559,1682,1683],{"class":649},"  log",[559,1685,470],{"class":645},[559,1687,913],{"class":753},[559,1689,757],{"class":766},[559,1691,918],{"class":645},[559,1693,1291],{"class":766},[559,1695,770],{"class":645},[559,1697,646],{"class":645},[559,1699,1227],{"class":649},[559,1701,653],{"class":645},[559,1703,653],{"class":645},[559,1705,797],{"class":766},[559,1707,1708],{"class":561,"line":750},[559,1709,747],{"emptyLinePlaceholder":746},[559,1711,1712,1714,1716,1718,1720,1722,1724,1726,1728,1730],{"class":561,"line":763},[559,1713,1042],{"class":808},[559,1715,1291],{"class":649},[559,1717,1057],{"class":645},[559,1719,1060],{"class":641},[559,1721,1330],{"class":649},[559,1723,470],{"class":645},[559,1725,1335],{"class":753},[559,1727,757],{"class":766},[559,1729,1306],{"class":649},[559,1731,797],{"class":766},[559,1733,1734,1736,1738,1740,1742,1744,1746,1748,1750,1752,1754,1756,1758,1760,1762,1764,1766,1768,1770,1772,1774,1776],{"class":561,"line":791},[559,1735,1683],{"class":649},[559,1737,470],{"class":645},[559,1739,913],{"class":753},[559,1741,757],{"class":766},[559,1743,918],{"class":645},[559,1745,1291],{"class":766},[559,1747,770],{"class":645},[559,1749,646],{"class":645},[559,1751,1370],{"class":766},[559,1753,770],{"class":645},[559,1755,1291],{"class":649},[559,1757,470],{"class":645},[559,1759,1379],{"class":649},[559,1761,719],{"class":645},[559,1763,1384],{"class":766},[559,1765,770],{"class":645},[559,1767,1291],{"class":649},[559,1769,470],{"class":645},[559,1771,1393],{"class":649},[559,1773,653],{"class":645},[559,1775,653],{"class":645},[559,1777,797],{"class":766},[559,1779,1780],{"class":561,"line":800},[559,1781,747],{"emptyLinePlaceholder":746},[559,1783,1784,1786],{"class":561,"line":805},[559,1785,1098],{"class":641},[559,1787,1788],{"class":649}," user\n",[559,1790,1791],{"class":561,"line":849},[559,1792,972],{"class":645},[549,1794,1796],{"className":631,"code":1795,"filename":633,"language":634,"meta":555,"style":555},"import { findUser } from '.\u002Fservices\u002Fuser'\n\nconst getUser = base\n  .input(z.object({ id: z.string() }))\n  .handler(async ({ input }) => findUser(input.id))\n",[443,1797,1798,1817,1821,1831,1863],{"__ignoreMap":555},[559,1799,1800,1802,1804,1806,1808,1810,1812,1815],{"class":561,"line":562},[559,1801,642],{"class":641},[559,1803,646],{"class":645},[559,1805,1651],{"class":649},[559,1807,653],{"class":645},[559,1809,656],{"class":641},[559,1811,659],{"class":645},[559,1813,1814],{"class":568},".\u002Fservices\u002Fuser",[559,1816,665],{"class":645},[559,1818,1819],{"class":561,"line":668},[559,1820,747],{"emptyLinePlaceholder":746},[559,1822,1823,1825,1827,1829],{"class":561,"line":689},[559,1824,809],{"class":808},[559,1826,1199],{"class":649},[559,1828,815],{"class":645},[559,1830,1204],{"class":649},[559,1832,1833,1835,1837,1839,1841,1843,1845,1847,1849,1851,1853,1855,1857,1859,1861],{"class":561,"line":710},[559,1834,1209],{"class":645},[559,1836,1212],{"class":753},[559,1838,1215],{"class":649},[559,1840,470],{"class":645},[559,1842,1220],{"class":753},[559,1844,757],{"class":649},[559,1846,918],{"class":645},[559,1848,1227],{"class":766},[559,1850,770],{"class":645},[559,1852,1232],{"class":649},[559,1854,470],{"class":645},[559,1856,1237],{"class":753},[559,1858,1240],{"class":649},[559,1860,794],{"class":645},[559,1862,1245],{"class":649},[559,1864,1865,1867,1869,1871,1873,1875,1877,1879,1881,1883,1886,1888],{"class":561,"line":743},[559,1866,1209],{"class":645},[559,1868,880],{"class":753},[559,1870,757],{"class":649},[559,1872,1256],{"class":808},[559,1874,1259],{"class":645},[559,1876,1262],{"class":888},[559,1878,892],{"class":645},[559,1880,895],{"class":808},[559,1882,1651],{"class":753},[559,1884,1885],{"class":649},"(input",[559,1887,470],{"class":645},[559,1889,1890],{"class":649},"id))\n",[440,1892,1893,1894,1896,1897,1899,1900,1902,1903,1906],{},"Both ",[443,1895,465],{}," and ",[443,1898,1605],{}," return the same logger instance. ",[443,1901,1605],{}," uses ",[443,1904,1905],{},"AsyncLocalStorage"," to propagate the logger across async boundaries.",[537,1908,1910],{"id":1909},"error-handling","Error Handling",[440,1912,1608,1913,1916,1917,454,1920,1923,1924,1927,1928,1930,1931,1934,1935,454,1937,454,1940,1943],{},[443,1914,1915],{},"createError"," for structured errors with ",[443,1918,1919],{},"why",[443,1921,1922],{},"fix",", and ",[443,1925,1926],{},"link"," fields. The ",[443,1929,461],{}," middleware catches the throw, records it on the wide event, and bridges it to an ",[443,1932,1933],{},"ORPCError"," so the wire response carries your ",[443,1936,443],{},[443,1938,1939],{},"status",[443,1941,1942],{},"message",", and the human-guidance fields:",[549,1945,1947],{"className":631,"code":1946,"filename":633,"language":634,"meta":555,"style":555},"import { createError } from 'evlog'\n\nconst checkout = base\n  .handler(({ context }) => {\n    context.log.set({ cart: { items: 3, total: 9999 } })\n\n    throw createError({\n      message: 'Payment failed',\n      code: 'PAYMENT_DECLINED',\n      status: 402,\n      why: 'Card declined by issuer',\n      fix: 'Try a different payment method',\n      link: 'https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined',\n    })\n  })\n",[443,1948,1949,1968,1972,1983,2001,2048,2052,2063,2079,2095,2107,2123,2139,2155,2162],{"__ignoreMap":555},[559,1950,1951,1953,1955,1958,1960,1962,1964,1966],{"class":561,"line":562},[559,1952,642],{"class":641},[559,1954,646],{"class":645},[559,1956,1957],{"class":649}," createError",[559,1959,653],{"class":645},[559,1961,656],{"class":641},[559,1963,659],{"class":645},[559,1965,705],{"class":568},[559,1967,665],{"class":645},[559,1969,1970],{"class":561,"line":668},[559,1971,747],{"emptyLinePlaceholder":746},[559,1973,1974,1976,1979,1981],{"class":561,"line":689},[559,1975,809],{"class":808},[559,1977,1978],{"class":649}," checkout ",[559,1980,815],{"class":645},[559,1982,1204],{"class":649},[559,1984,1985,1987,1989,1991,1993,1995,1997,1999],{"class":561,"line":710},[559,1986,1209],{"class":645},[559,1988,880],{"class":753},[559,1990,757],{"class":649},[559,1992,885],{"class":645},[559,1994,889],{"class":888},[559,1996,892],{"class":645},[559,1998,895],{"class":808},[559,2000,864],{"class":645},[559,2002,2003,2005,2007,2009,2011,2013,2015,2017,2020,2022,2024,2027,2029,2032,2034,2037,2039,2042,2044,2046],{"class":561,"line":743},[559,2004,903],{"class":649},[559,2006,470],{"class":645},[559,2008,908],{"class":649},[559,2010,470],{"class":645},[559,2012,913],{"class":753},[559,2014,757],{"class":766},[559,2016,918],{"class":645},[559,2018,2019],{"class":766}," cart",[559,2021,770],{"class":645},[559,2023,646],{"class":645},[559,2025,2026],{"class":766}," items",[559,2028,770],{"class":645},[559,2030,2031],{"class":1135}," 3",[559,2033,719],{"class":645},[559,2035,2036],{"class":766}," total",[559,2038,770],{"class":645},[559,2040,2041],{"class":1135}," 9999",[559,2043,653],{"class":645},[559,2045,653],{"class":645},[559,2047,797],{"class":766},[559,2049,2050],{"class":561,"line":750},[559,2051,747],{"emptyLinePlaceholder":746},[559,2053,2054,2057,2059,2061],{"class":561,"line":763},[559,2055,2056],{"class":641},"    throw",[559,2058,1957],{"class":753},[559,2060,757],{"class":766},[559,2062,760],{"class":645},[559,2064,2065,2068,2070,2072,2075,2077],{"class":561,"line":791},[559,2066,2067],{"class":766},"      message",[559,2069,770],{"class":645},[559,2071,659],{"class":645},[559,2073,2074],{"class":568},"Payment failed",[559,2076,785],{"class":645},[559,2078,966],{"class":645},[559,2080,2081,2084,2086,2088,2091,2093],{"class":561,"line":800},[559,2082,2083],{"class":766},"      code",[559,2085,770],{"class":645},[559,2087,659],{"class":645},[559,2089,2090],{"class":568},"PAYMENT_DECLINED",[559,2092,785],{"class":645},[559,2094,966],{"class":645},[559,2096,2097,2100,2102,2105],{"class":561,"line":805},[559,2098,2099],{"class":766},"      status",[559,2101,770],{"class":645},[559,2103,2104],{"class":1135}," 402",[559,2106,966],{"class":645},[559,2108,2109,2112,2114,2116,2119,2121],{"class":561,"line":849},[559,2110,2111],{"class":766},"      why",[559,2113,770],{"class":645},[559,2115,659],{"class":645},[559,2117,2118],{"class":568},"Card declined by issuer",[559,2120,785],{"class":645},[559,2122,966],{"class":645},[559,2124,2125,2128,2130,2132,2135,2137],{"class":561,"line":854},[559,2126,2127],{"class":766},"      fix",[559,2129,770],{"class":645},[559,2131,659],{"class":645},[559,2133,2134],{"class":568},"Try a different payment method",[559,2136,785],{"class":645},[559,2138,966],{"class":645},[559,2140,2141,2144,2146,2148,2151,2153],{"class":561,"line":867},[559,2142,2143],{"class":766},"      link",[559,2145,770],{"class":645},[559,2147,659],{"class":645},[559,2149,2150],{"class":568},"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined",[559,2152,785],{"class":645},[559,2154,966],{"class":645},[559,2156,2157,2160],{"class":561,"line":900},[559,2158,2159],{"class":645},"    }",[559,2161,797],{"class":766},[559,2163,2164,2166],{"class":561,"line":937},[559,2165,960],{"class":645},[559,2167,797],{"class":649},[440,2169,2170],{},"The error is captured and logged with both the custom context and structured error fields:",[549,2172,2174],{"className":551,"code":2173,"filename":1531,"language":554,"meta":555,"style":555},"14:58:20 ERROR [my-rpc] POST \u002Frpc\u002Fcheckout 402 in 3ms\n  ├─ operation: checkout\n  ├─ error: name=EvlogError code=PAYMENT_DECLINED status=402 message=Payment failed\n  ├─ cart: items=3 total=9999\n  └─ requestId: 880a50ac-...\n",[443,2175,2176,2187,2196,2221,2240],{"__ignoreMap":555},[559,2177,2178,2181,2184],{"class":561,"line":562},[559,2179,2180],{"class":565},"14:58:20",[559,2182,2183],{"class":568}," ERROR",[559,2185,2186],{"class":649}," [my-rpc] POST \u002Frpc\u002Fcheckout 402 in 3ms\n",[559,2188,2189,2191,2193],{"class":561,"line":668},[559,2190,1549],{"class":565},[559,2192,1552],{"class":568},[559,2194,2195],{"class":568}," checkout\n",[559,2197,2198,2200,2203,2206,2209,2212,2215,2218],{"class":561,"line":689},[559,2199,1549],{"class":565},[559,2201,2202],{"class":568}," error:",[559,2204,2205],{"class":568}," name=EvlogError",[559,2207,2208],{"class":568}," code=PAYMENT_DECLINED",[559,2210,2211],{"class":568}," status=",[559,2213,2214],{"class":1135},"402",[559,2216,2217],{"class":568}," message=Payment",[559,2219,2220],{"class":568}," failed\n",[559,2222,2223,2225,2228,2231,2234,2237],{"class":561,"line":710},[559,2224,1549],{"class":565},[559,2226,2227],{"class":568}," cart:",[559,2229,2230],{"class":568}," items=",[559,2232,2233],{"class":1135},"3",[559,2235,2236],{"class":568}," total=",[559,2238,2239],{"class":1135},"9999\n",[559,2241,2242,2244,2246],{"class":561,"line":743},[559,2243,1595],{"class":565},[559,2245,1598],{"class":568},[559,2247,2248],{"class":568}," 880a50ac-...\n",[440,2250,2251],{},"Wire response returned to the client:",[549,2253,2258],{"className":2254,"code":2255,"filename":2256,"language":2257,"meta":555,"style":555},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"defined\": false,\n  \"code\": \"PAYMENT_DECLINED\",\n  \"status\": 402,\n  \"message\": \"Payment failed\",\n  \"data\": {\n    \"why\": \"Card declined by issuer\",\n    \"fix\": \"Try a different payment method\",\n    \"link\": \"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined\"\n  }\n}\n","HTTP 402","json",[443,2259,2260,2264,2280,2299,2313,2331,2344,2363,2381,2398,2403],{"__ignoreMap":555},[559,2261,2262],{"class":561,"line":562},[559,2263,760],{"class":645},[559,2265,2266,2269,2272,2275,2277],{"class":561,"line":668},[559,2267,2268],{"class":645},"  \"",[559,2270,2271],{"class":808},"defined",[559,2273,2274],{"class":645},"\"",[559,2276,770],{"class":645},[559,2278,2279],{"class":645}," false,\n",[559,2281,2282,2284,2286,2288,2290,2293,2295,2297],{"class":561,"line":689},[559,2283,2268],{"class":645},[559,2285,443],{"class":808},[559,2287,2274],{"class":645},[559,2289,770],{"class":645},[559,2291,2292],{"class":645}," \"",[559,2294,2090],{"class":568},[559,2296,2274],{"class":645},[559,2298,966],{"class":645},[559,2300,2301,2303,2305,2307,2309,2311],{"class":561,"line":710},[559,2302,2268],{"class":645},[559,2304,1939],{"class":808},[559,2306,2274],{"class":645},[559,2308,770],{"class":645},[559,2310,2104],{"class":1135},[559,2312,966],{"class":645},[559,2314,2315,2317,2319,2321,2323,2325,2327,2329],{"class":561,"line":743},[559,2316,2268],{"class":645},[559,2318,1942],{"class":808},[559,2320,2274],{"class":645},[559,2322,770],{"class":645},[559,2324,2292],{"class":645},[559,2326,2074],{"class":568},[559,2328,2274],{"class":645},[559,2330,966],{"class":645},[559,2332,2333,2335,2338,2340,2342],{"class":561,"line":750},[559,2334,2268],{"class":645},[559,2336,2337],{"class":808},"data",[559,2339,2274],{"class":645},[559,2341,770],{"class":645},[559,2343,864],{"class":645},[559,2345,2346,2349,2351,2353,2355,2357,2359,2361],{"class":561,"line":763},[559,2347,2348],{"class":645},"    \"",[559,2350,1919],{"class":565},[559,2352,2274],{"class":645},[559,2354,770],{"class":645},[559,2356,2292],{"class":645},[559,2358,2118],{"class":568},[559,2360,2274],{"class":645},[559,2362,966],{"class":645},[559,2364,2365,2367,2369,2371,2373,2375,2377,2379],{"class":561,"line":791},[559,2366,2348],{"class":645},[559,2368,1922],{"class":565},[559,2370,2274],{"class":645},[559,2372,770],{"class":645},[559,2374,2292],{"class":645},[559,2376,2134],{"class":568},[559,2378,2274],{"class":645},[559,2380,966],{"class":645},[559,2382,2383,2385,2387,2389,2391,2393,2395],{"class":561,"line":800},[559,2384,2348],{"class":645},[559,2386,1926],{"class":565},[559,2388,2274],{"class":645},[559,2390,770],{"class":645},[559,2392,2292],{"class":645},[559,2394,2150],{"class":568},[559,2396,2397],{"class":645},"\"\n",[559,2399,2400],{"class":561,"line":805},[559,2401,2402],{"class":645},"  }\n",[559,2404,2405],{"class":561,"line":849},[559,2406,972],{"class":645},[472,2408,2409,2410,2413,2414,2417,2418,2421,2422,2424,2425,2424,2427,2429,2430,2432,2433,2435,2436,2442],{"color":474,"icon":13},"oRPC's error envelope is ",[443,2411,2412],{},"{ defined, code, status, message, data }"," — clients deserialize errors as a typed union via ",[443,2415,2416],{},"safe()"," from ",[443,2419,2420],{},"@orpc\u002Fclient",". evlog follows the protocol, so ",[443,2423,1919],{},"\u002F",[443,2426,1922],{},[443,2428,1926],{}," live under ",[443,2431,2337],{}," instead of at the response root. The authoring API (",[443,2434,1915],{}," \u002F ",[481,2437,2439],{"href":2438},"\u002Flearn\u002Fstructured-errors#error-catalogs",[443,2440,2441],{},"defineErrorCatalog",") is identical to the rest of evlog.",[537,2444,409],{"id":2445},"configuration",[440,2447,2448,2449,2452,2453,2455],{},"See the ",[481,2450,2451],{"href":410},"Configuration reference"," for all available options (",[443,2454,754],{},", middleware options, sampling, silent mode, etc.).",[537,2457,2459],{"id":2458},"drain-enrichers","Drain & Enrichers",[440,2461,2462,2463,2466],{},"Configure drain adapters and enrichers directly in the ",[443,2464,2465],{},"withEvlog()"," options:",[549,2468,2470],{"className":631,"code":2469,"filename":633,"language":634,"meta":555,"style":555},"import { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createUserAgentEnricher } from 'evlog\u002Fenrichers'\n\nconst userAgent = createUserAgentEnricher()\n\nconst handler = withEvlog(new RPCHandler(router), {\n  drain: createAxiomDrain(),\n  enrich: (ctx) => {\n    userAgent(ctx)\n    ctx.event.region = process.env.FLY_REGION\n  },\n})\n",[443,2471,2472,2492,2512,2516,2529,2533,2556,2569,2588,2599,2629,2634],{"__ignoreMap":555},[559,2473,2474,2476,2478,2481,2483,2485,2487,2490],{"class":561,"line":562},[559,2475,642],{"class":641},[559,2477,646],{"class":645},[559,2479,2480],{"class":649}," createAxiomDrain",[559,2482,653],{"class":645},[559,2484,656],{"class":641},[559,2486,659],{"class":645},[559,2488,2489],{"class":568},"evlog\u002Faxiom",[559,2491,665],{"class":645},[559,2493,2494,2496,2498,2501,2503,2505,2507,2510],{"class":561,"line":668},[559,2495,642],{"class":641},[559,2497,646],{"class":645},[559,2499,2500],{"class":649}," createUserAgentEnricher",[559,2502,653],{"class":645},[559,2504,656],{"class":641},[559,2506,659],{"class":645},[559,2508,2509],{"class":568},"evlog\u002Fenrichers",[559,2511,665],{"class":645},[559,2513,2514],{"class":561,"line":689},[559,2515,747],{"emptyLinePlaceholder":746},[559,2517,2518,2520,2523,2525,2527],{"class":561,"line":710},[559,2519,809],{"class":808},[559,2521,2522],{"class":649}," userAgent ",[559,2524,815],{"class":645},[559,2526,2500],{"class":753},[559,2528,1678],{"class":649},[559,2530,2531],{"class":561,"line":743},[559,2532,747],{"emptyLinePlaceholder":746},[559,2534,2535,2537,2539,2541,2543,2545,2547,2549,2552,2554],{"class":561,"line":750},[559,2536,809],{"class":808},[559,2538,985],{"class":649},[559,2540,815],{"class":645},[559,2542,722],{"class":753},[559,2544,757],{"class":649},[559,2546,994],{"class":645},[559,2548,675],{"class":753},[559,2550,2551],{"class":649},"(router)",[559,2553,719],{"class":645},[559,2555,864],{"class":645},[559,2557,2558,2561,2563,2565,2567],{"class":561,"line":763},[559,2559,2560],{"class":766},"  drain",[559,2562,770],{"class":645},[559,2564,2480],{"class":753},[559,2566,834],{"class":649},[559,2568,966],{"class":645},[559,2570,2571,2574,2576,2579,2582,2584,2586],{"class":561,"line":791},[559,2572,2573],{"class":753},"  enrich",[559,2575,770],{"class":645},[559,2577,2578],{"class":645}," (",[559,2580,2581],{"class":888},"ctx",[559,2583,963],{"class":645},[559,2585,895],{"class":808},[559,2587,864],{"class":645},[559,2589,2590,2593,2595,2597],{"class":561,"line":800},[559,2591,2592],{"class":753},"    userAgent",[559,2594,757],{"class":766},[559,2596,2581],{"class":649},[559,2598,797],{"class":766},[559,2600,2601,2604,2606,2609,2611,2614,2616,2619,2621,2624,2626],{"class":561,"line":805},[559,2602,2603],{"class":649},"    ctx",[559,2605,470],{"class":645},[559,2607,2608],{"class":649},"event",[559,2610,470],{"class":645},[559,2612,2613],{"class":649},"region",[559,2615,1057],{"class":645},[559,2617,2618],{"class":649}," process",[559,2620,470],{"class":645},[559,2622,2623],{"class":649},"env",[559,2625,470],{"class":645},[559,2627,2628],{"class":649},"FLY_REGION\n",[559,2630,2631],{"class":561,"line":849},[559,2632,2633],{"class":645},"  },\n",[559,2635,2636,2638],{"class":561,"line":854},[559,2637,794],{"class":645},[559,2639,797],{"class":649},[541,2641,2643],{"id":2642},"pipeline-batching-retry","Pipeline (Batching & Retry)",[440,2645,2646,2647,2650],{},"For production, wrap your adapter with ",[443,2648,2649],{},"createDrainPipeline"," to batch events and retry on failure:",[549,2652,2654],{"className":631,"code":2653,"filename":633,"language":634,"meta":555,"style":555},"import type { DrainContext } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({\n  batch: { size: 50, intervalMs: 5000 },\n  retry: { maxAttempts: 3 },\n})\nconst drain = pipeline(createAxiomDrain())\n\nconst handler = withEvlog(new RPCHandler(router), { drain })\n",[443,2655,2656,2677,2695,2715,2719,2741,2770,2788,2794,2813,2817],{"__ignoreMap":555},[559,2657,2658,2660,2662,2664,2667,2669,2671,2673,2675],{"class":561,"line":562},[559,2659,642],{"class":641},[559,2661,727],{"class":641},[559,2663,646],{"class":645},[559,2665,2666],{"class":649}," DrainContext",[559,2668,653],{"class":645},[559,2670,656],{"class":641},[559,2672,659],{"class":645},[559,2674,705],{"class":568},[559,2676,665],{"class":645},[559,2678,2679,2681,2683,2685,2687,2689,2691,2693],{"class":561,"line":668},[559,2680,642],{"class":641},[559,2682,646],{"class":645},[559,2684,2480],{"class":649},[559,2686,653],{"class":645},[559,2688,656],{"class":641},[559,2690,659],{"class":645},[559,2692,2489],{"class":568},[559,2694,665],{"class":645},[559,2696,2697,2699,2701,2704,2706,2708,2710,2713],{"class":561,"line":689},[559,2698,642],{"class":641},[559,2700,646],{"class":645},[559,2702,2703],{"class":649}," createDrainPipeline",[559,2705,653],{"class":645},[559,2707,656],{"class":641},[559,2709,659],{"class":645},[559,2711,2712],{"class":568},"evlog\u002Fpipeline",[559,2714,665],{"class":645},[559,2716,2717],{"class":561,"line":710},[559,2718,747],{"emptyLinePlaceholder":746},[559,2720,2721,2723,2726,2728,2730,2732,2735,2737,2739],{"class":561,"line":743},[559,2722,809],{"class":808},[559,2724,2725],{"class":649}," pipeline ",[559,2727,815],{"class":645},[559,2729,2703],{"class":753},[559,2731,825],{"class":645},[559,2733,2734],{"class":565},"DrainContext",[559,2736,831],{"class":645},[559,2738,757],{"class":649},[559,2740,760],{"class":645},[559,2742,2743,2746,2748,2750,2753,2755,2758,2760,2763,2765,2768],{"class":561,"line":750},[559,2744,2745],{"class":766},"  batch",[559,2747,770],{"class":645},[559,2749,646],{"class":645},[559,2751,2752],{"class":766}," size",[559,2754,770],{"class":645},[559,2756,2757],{"class":1135}," 50",[559,2759,719],{"class":645},[559,2761,2762],{"class":766}," intervalMs",[559,2764,770],{"class":645},[559,2766,2767],{"class":1135}," 5000",[559,2769,788],{"class":645},[559,2771,2772,2775,2777,2779,2782,2784,2786],{"class":561,"line":763},[559,2773,2774],{"class":766},"  retry",[559,2776,770],{"class":645},[559,2778,646],{"class":645},[559,2780,2781],{"class":766}," maxAttempts",[559,2783,770],{"class":645},[559,2785,2031],{"class":1135},[559,2787,788],{"class":645},[559,2789,2790,2792],{"class":561,"line":791},[559,2791,794],{"class":645},[559,2793,797],{"class":649},[559,2795,2796,2798,2801,2803,2806,2808,2811],{"class":561,"line":800},[559,2797,809],{"class":808},[559,2799,2800],{"class":649}," drain ",[559,2802,815],{"class":645},[559,2804,2805],{"class":753}," pipeline",[559,2807,757],{"class":649},[559,2809,2810],{"class":753},"createAxiomDrain",[559,2812,846],{"class":649},[559,2814,2815],{"class":561,"line":805},[559,2816,747],{"emptyLinePlaceholder":746},[559,2818,2819,2821,2823,2825,2827,2829,2831,2833,2835,2837,2839,2841,2843],{"class":561,"line":849},[559,2820,809],{"class":808},[559,2822,985],{"class":649},[559,2824,815],{"class":645},[559,2826,722],{"class":753},[559,2828,757],{"class":649},[559,2830,994],{"class":645},[559,2832,675],{"class":753},[559,2834,2551],{"class":649},[559,2836,719],{"class":645},[559,2838,646],{"class":645},[559,2840,2800],{"class":649},[559,2842,794],{"class":645},[559,2844,797],{"class":649},[472,2846,2847,2848,2851,2852,2855],{"color":474,"icon":13},"Call ",[443,2849,2850],{},"drain.flush()"," on server shutdown to ensure all buffered events are sent. See the ",[481,2853,2854],{"href":400},"Pipeline docs"," for all options.",[537,2857,2859],{"id":2858},"tail-sampling","Tail Sampling",[440,2861,1608,2862,2865],{},[443,2863,2864],{},"keep"," to force-retain specific events regardless of head sampling:",[549,2867,2869],{"className":631,"code":2868,"filename":633,"language":634,"meta":555,"style":555},"const handler = withEvlog(new RPCHandler(router), {\n  drain: createAxiomDrain(),\n  keep: (ctx) => {\n    if (ctx.duration && ctx.duration > 2000) ctx.shouldKeep = true\n  },\n})\n",[443,2870,2871,2893,2905,2922,2966,2970],{"__ignoreMap":555},[559,2872,2873,2875,2877,2879,2881,2883,2885,2887,2889,2891],{"class":561,"line":562},[559,2874,809],{"class":808},[559,2876,985],{"class":649},[559,2878,815],{"class":645},[559,2880,722],{"class":753},[559,2882,757],{"class":649},[559,2884,994],{"class":645},[559,2886,675],{"class":753},[559,2888,2551],{"class":649},[559,2890,719],{"class":645},[559,2892,864],{"class":645},[559,2894,2895,2897,2899,2901,2903],{"class":561,"line":668},[559,2896,2560],{"class":766},[559,2898,770],{"class":645},[559,2900,2480],{"class":753},[559,2902,834],{"class":649},[559,2904,966],{"class":645},[559,2906,2907,2910,2912,2914,2916,2918,2920],{"class":561,"line":689},[559,2908,2909],{"class":753},"  keep",[559,2911,770],{"class":645},[559,2913,2578],{"class":645},[559,2915,2581],{"class":888},[559,2917,963],{"class":645},[559,2919,895],{"class":808},[559,2921,864],{"class":645},[559,2923,2924,2927,2929,2931,2933,2936,2939,2942,2944,2946,2949,2952,2954,2956,2958,2961,2963],{"class":561,"line":710},[559,2925,2926],{"class":641},"    if",[559,2928,2578],{"class":766},[559,2930,2581],{"class":649},[559,2932,470],{"class":645},[559,2934,2935],{"class":649},"duration",[559,2937,2938],{"class":645}," &&",[559,2940,2941],{"class":649}," ctx",[559,2943,470],{"class":645},[559,2945,2935],{"class":649},[559,2947,2948],{"class":645}," >",[559,2950,2951],{"class":1135}," 2000",[559,2953,1483],{"class":766},[559,2955,2581],{"class":649},[559,2957,470],{"class":645},[559,2959,2960],{"class":649},"shouldKeep",[559,2962,1057],{"class":645},[559,2964,2965],{"class":950}," true\n",[559,2967,2968],{"class":561,"line":743},[559,2969,2633],{"class":645},[559,2971,2972,2974],{"class":561,"line":750},[559,2973,794],{"class":645},[559,2975,797],{"class":649},[537,2977,2979],{"id":2978},"route-filtering","Route Filtering",[440,2981,2982,2435,2985,2988],{},[443,2983,2984],{},"include",[443,2986,2987],{},"exclude"," match against the HTTP path (the request URL), not the procedure name:",[549,2990,2992],{"className":631,"code":2991,"filename":633,"language":634,"meta":555,"style":555},"const handler = withEvlog(new RPCHandler(router), {\n  include: ['\u002Frpc\u002F**'],\n  exclude: ['\u002Frpc\u002F_internal\u002F**', '\u002Fhealth'],\n  routes: {\n    '\u002Frpc\u002Fauth\u002F**': { service: 'auth-service' },\n    '\u002Frpc\u002Fpayment\u002F**': { service: 'payment-service' },\n  },\n})\n",[443,2993,2994,3016,3038,3067,3076,3103,3129,3133],{"__ignoreMap":555},[559,2995,2996,2998,3000,3002,3004,3006,3008,3010,3012,3014],{"class":561,"line":562},[559,2997,809],{"class":808},[559,2999,985],{"class":649},[559,3001,815],{"class":645},[559,3003,722],{"class":753},[559,3005,757],{"class":649},[559,3007,994],{"class":645},[559,3009,675],{"class":753},[559,3011,2551],{"class":649},[559,3013,719],{"class":645},[559,3015,864],{"class":645},[559,3017,3018,3021,3023,3026,3028,3031,3033,3036],{"class":561,"line":668},[559,3019,3020],{"class":766},"  include",[559,3022,770],{"class":645},[559,3024,3025],{"class":649}," [",[559,3027,785],{"class":645},[559,3029,3030],{"class":568},"\u002Frpc\u002F**",[559,3032,785],{"class":645},[559,3034,3035],{"class":649},"]",[559,3037,966],{"class":645},[559,3039,3040,3043,3045,3047,3049,3052,3054,3056,3058,3061,3063,3065],{"class":561,"line":689},[559,3041,3042],{"class":766},"  exclude",[559,3044,770],{"class":645},[559,3046,3025],{"class":649},[559,3048,785],{"class":645},[559,3050,3051],{"class":568},"\u002Frpc\u002F_internal\u002F**",[559,3053,785],{"class":645},[559,3055,719],{"class":645},[559,3057,659],{"class":645},[559,3059,3060],{"class":568},"\u002Fhealth",[559,3062,785],{"class":645},[559,3064,3035],{"class":649},[559,3066,966],{"class":645},[559,3068,3069,3072,3074],{"class":561,"line":710},[559,3070,3071],{"class":766},"  routes",[559,3073,770],{"class":645},[559,3075,864],{"class":645},[559,3077,3078,3081,3084,3086,3088,3090,3092,3094,3096,3099,3101],{"class":561,"line":743},[559,3079,3080],{"class":645},"    '",[559,3082,3083],{"class":766},"\u002Frpc\u002Fauth\u002F**",[559,3085,785],{"class":645},[559,3087,770],{"class":645},[559,3089,646],{"class":645},[559,3091,775],{"class":766},[559,3093,770],{"class":645},[559,3095,659],{"class":645},[559,3097,3098],{"class":568},"auth-service",[559,3100,785],{"class":645},[559,3102,788],{"class":645},[559,3104,3105,3107,3110,3112,3114,3116,3118,3120,3122,3125,3127],{"class":561,"line":750},[559,3106,3080],{"class":645},[559,3108,3109],{"class":766},"\u002Frpc\u002Fpayment\u002F**",[559,3111,785],{"class":645},[559,3113,770],{"class":645},[559,3115,646],{"class":645},[559,3117,775],{"class":766},[559,3119,770],{"class":645},[559,3121,659],{"class":645},[559,3123,3124],{"class":568},"payment-service",[559,3126,785],{"class":645},[559,3128,788],{"class":645},[559,3130,3131],{"class":561,"line":763},[559,3132,2633],{"class":645},[559,3134,3135,3137],{"class":561,"line":791},[559,3136,794],{"class":645},[559,3138,797],{"class":649},[440,3140,3141,3142,3144],{},"When a route is filtered out, the wrapper still injects a no-op ",[443,3143,465],{}," so procedures never crash on missing fields — the wide event simply isn't emitted and drain\u002Fenrich aren't called.",[537,3146,3148],{"id":3147},"run-locally","Run Locally",[549,3150,3153],{"className":551,"code":3151,"filename":3152,"language":554,"meta":555,"style":555},"git clone https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog.git\ncd evlog\npnpm install\npnpm run example:orpc\n","Terminal",[443,3154,3155,3166,3174,3181],{"__ignoreMap":555},[559,3156,3157,3160,3163],{"class":561,"line":562},[559,3158,3159],{"class":565},"git",[559,3161,3162],{"class":568}," clone",[559,3164,3165],{"class":568}," https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog.git\n",[559,3167,3168,3171],{"class":561,"line":668},[559,3169,3170],{"class":753},"cd",[559,3172,3173],{"class":568}," evlog\n",[559,3175,3176,3178],{"class":561,"line":689},[559,3177,553],{"class":565},[559,3179,3180],{"class":568}," install\n",[559,3182,3183,3185,3188],{"class":561,"line":710},[559,3184,553],{"class":565},[559,3186,3187],{"class":568}," run",[559,3189,3190],{"class":568}," example:orpc\n",[440,3192,3193,3194,3198],{},"Open ",[481,3195,3196],{"href":3196,"rel":3197},"http:\u002F\u002Flocalhost:3000",[485]," to explore the interactive test UI.",[3200,3201,3202],"card-group",{},[3203,3204,3208],"card",{"icon":3205,"title":3206,"to":3207},"i-simple-icons-github","Source Code","https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog\u002Ftree\u002Fmain\u002Fexamples\u002Forpc","Browse the complete oRPC example source on GitHub.",[537,3210,3212],{"id":3211},"next-steps","Next Steps",[440,3214,3215,3216,3218],{},"Deepen your ",[476,3217,231],{}," integration:",[500,3220,3221,3226,3231,3236],{},[503,3222,3223,3225],{},[481,3224,46],{"href":47},": Design comprehensive events with context layering",[503,3227,3228,3230],{},[481,3229,90],{"href":95},": Send logs to Axiom, Sentry, PostHog, and more",[503,3232,3233,3235],{},[481,3234,61],{"href":62},": Control log volume with head and tail sampling",[503,3237,3238,3240,3241,454,3243,1923,3245,3247],{},[481,3239,51],{"href":52},": Throw errors with ",[443,3242,1919],{},[443,3244,1922],{},[443,3246,1926],{}," fields",[3249,3250,3251],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":555,"searchDepth":668,"depth":668,"links":3253},[3254,3258,3259,3260,3261,3262,3265,3266,3267,3268],{"id":539,"depth":668,"text":25,"children":3255},[3256,3257],{"id":543,"depth":689,"text":544},{"id":627,"depth":689,"text":628},{"id":1184,"depth":668,"text":46},{"id":1604,"depth":668,"text":1605},{"id":1909,"depth":668,"text":1910},{"id":2445,"depth":668,"text":409},{"id":2458,"depth":668,"text":2459,"children":3263},[3264],{"id":2642,"depth":689,"text":2643},{"id":2858,"depth":668,"text":2859},{"id":2978,"depth":668,"text":2979},{"id":3147,"depth":668,"text":3148},{"id":3211,"depth":668,"text":3212},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in oRPC applications.","md",[3272],{"label":3206,"icon":3205,"to":3207,"color":3273,"variant":3274},"neutral","subtle",{},{"title":231,"icon":234},{"title":231,"description":3269},"SHuXRPkeR6cI02bGX7Xmmtk8vi-w3CMBjob4JNM7d-s",[3280,3282],{"title":226,"path":227,"stem":228,"description":3281,"icon":229,"children":-1},"Wide events and structured errors in Astro server middleware.",{"title":236,"path":237,"stem":238,"description":3283,"icon":239,"children":-1},"Wide events and structured logging in AWS Lambda functions, including SQS consumers and event-driven handlers.",1779651506820]