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