[{"data":1,"prerenderedAt":3902},["ShallowReactive",2],{"navigation_docs":3,"-integrate-frameworks-orpc":434,"-integrate-frameworks-orpc-surround":3897},[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":3887,"extension":3888,"links":3889,"meta":3893,"navigation":3894,"path":232,"seo":3895,"stem":233,"__hash__":3896},"docs\u002F3.integrate\u002Fframeworks\u002F15.orpc.md",{"type":437,"value":438,"toc":3868},"minimark",[439,447,479,521,525,530,610,614,1117,1141,1160,1163,1166,1475,1478,1546,1563,1567,1577,1684,1695,1699,1721,2193,2206,2286,2289,2416,2434,2438,2450,2879,2893,3059,3062,3072,3076,3081,3252,3256,3263,3458,3469,3473,3582,3586,3603,3718,3724,3728,3757,3761,3803,3811,3821,3825,3831,3864],[440,441,442,446],"p",{},[443,444,445],"code",{},"evlog\u002Forpc"," ships two primitives that together turn every oRPC procedure call into a single wide event:",[448,449,450,465],"ul",{},[451,452,453,456,457,460,461,464],"li",{},[443,454,455],{},"withEvlog(handler)"," — wraps an ",[443,458,459],{},"RPCHandler"," (or ",[443,462,463],{},"OpenAPIHandler",") so each HTTP request creates a request-scoped logger and emits one wide event when the response completes.",[451,466,467,470,471,474,475,478],{},[443,468,469],{},"evlog()"," — an oRPC procedure middleware that tags the wide event with the procedure path (",[443,472,473],{},"operation",") and forwards the logger via ",[443,476,477],{},"context.log",".",[480,481,484,487,507],"prompt",{":actions":482,"description":483,"icon":234},"[\"copy\",\"cursor\",\"windsurf\"]","Set up evlog in my oRPC app",[440,485,486],{},"Set up evlog in my oRPC app.",[448,488,489,492,495,498,501,504],{},[451,490,491],{},"Install evlog: pnpm add evlog",[451,493,494],{},"Call initLogger({ env: { service: 'my-rpc' } }) at startup",[451,496,497],{},"Wrap your RPCHandler with withEvlog() from 'evlog\u002Forpc'",[451,499,500],{},"Add os.use(evlog()) on your base procedure for typed context.log + per-procedure operation",[451,502,503],{},"Declare EvlogOrpcContext on your base context to type context.log",[451,505,506],{},"Pass drain, enrich, include, and keep options to withEvlog()",[440,508,509,510,516,517],{},"Docs: ",[511,512,513],"a",{"href":513,"rel":514},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fframeworks\u002Forpc",[515],"nofollow","\nAdapters: ",[511,518,519],{"href":519,"rel":520},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fadapters\u002Foverview",[515],[522,523,25],"h2",{"id":524},"quick-start",[526,527,529],"h3",{"id":528},"_1-install","1. Install",[531,532,533,561,577,593],"code-group",{},[534,535,541],"pre",{"className":536,"code":537,"filename":538,"language":539,"meta":540,"style":540},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog @orpc\u002Fserver\n","pnpm","bash","",[443,542,543],{"__ignoreMap":540},[544,545,548,551,555,558],"span",{"class":546,"line":547},"line",1,[544,549,538],{"class":550},"sBMFI",[544,552,554],{"class":553},"sfazB"," add",[544,556,557],{"class":553}," evlog",[544,559,560],{"class":553}," @orpc\u002Fserver\n",[534,562,565],{"className":536,"code":563,"filename":564,"language":539,"meta":540,"style":540},"bun add evlog @orpc\u002Fserver\n","bun",[443,566,567],{"__ignoreMap":540},[544,568,569,571,573,575],{"class":546,"line":547},[544,570,564],{"class":550},[544,572,554],{"class":553},[544,574,557],{"class":553},[544,576,560],{"class":553},[534,578,581],{"className":536,"code":579,"filename":580,"language":539,"meta":540,"style":540},"yarn add evlog @orpc\u002Fserver\n","yarn",[443,582,583],{"__ignoreMap":540},[544,584,585,587,589,591],{"class":546,"line":547},[544,586,580],{"class":550},[544,588,554],{"class":553},[544,590,557],{"class":553},[544,592,560],{"class":553},[534,594,597],{"className":536,"code":595,"filename":596,"language":539,"meta":540,"style":540},"npm install evlog @orpc\u002Fserver\n","npm",[443,598,599],{"__ignoreMap":540},[544,600,601,603,606,608],{"class":546,"line":547},[544,602,596],{"class":550},[544,604,605],{"class":553}," install",[544,607,557],{"class":553},[544,609,560],{"class":553},[526,611,613],{"id":612},"_2-wrap-the-handler-and-the-procedure-base","2. Wrap the handler and the procedure base",[534,615,620],{"className":616,"code":617,"filename":618,"language":619,"meta":540,"style":540},"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({ env: { service: 'my-rpc' } })\n\nconst base = os.$context\u003CEvlogOrpcContext>().use(evlog())\n\nconst router = {\n  ping: base.handler(({ context }) => {\n    context.log.set({ pinged: true })\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,621,622,651,672,693,726,733,775,780,824,829,842,875,908,926,938,944,949,971,976,1008,1064,1112],{"__ignoreMap":540},[544,623,624,628,632,636,639,642,645,648],{"class":546,"line":547},[544,625,627],{"class":626},"s7zQu","import",[544,629,631],{"class":630},"sMK4o"," {",[544,633,635],{"class":634},"sTEyZ"," os",[544,637,638],{"class":630}," }",[544,640,641],{"class":626}," from",[544,643,644],{"class":630}," '",[544,646,647],{"class":553},"@orpc\u002Fserver",[544,649,650],{"class":630},"'\n",[544,652,654,656,658,661,663,665,667,670],{"class":546,"line":653},2,[544,655,627],{"class":626},[544,657,631],{"class":630},[544,659,660],{"class":634}," RPCHandler",[544,662,638],{"class":630},[544,664,641],{"class":626},[544,666,644],{"class":630},[544,668,669],{"class":553},"@orpc\u002Fserver\u002Ffetch",[544,671,650],{"class":630},[544,673,675,677,679,682,684,686,688,691],{"class":546,"line":674},3,[544,676,627],{"class":626},[544,678,631],{"class":630},[544,680,681],{"class":634}," initLogger",[544,683,638],{"class":630},[544,685,641],{"class":626},[544,687,644],{"class":630},[544,689,690],{"class":553},"evlog",[544,692,650],{"class":630},[544,694,696,698,700,702,705,708,710,713,716,718,720,722,724],{"class":546,"line":695},4,[544,697,627],{"class":626},[544,699,631],{"class":630},[544,701,557],{"class":634},[544,703,704],{"class":630},",",[544,706,707],{"class":634}," withEvlog",[544,709,704],{"class":630},[544,711,712],{"class":626}," type",[544,714,715],{"class":634}," EvlogOrpcContext",[544,717,638],{"class":630},[544,719,641],{"class":626},[544,721,644],{"class":630},[544,723,445],{"class":553},[544,725,650],{"class":630},[544,727,729],{"class":546,"line":728},5,[544,730,732],{"emptyLinePlaceholder":731},true,"\n",[544,734,736,740,743,746,750,753,755,758,760,762,765,768,770,772],{"class":546,"line":735},6,[544,737,739],{"class":738},"s2Zo4","initLogger",[544,741,742],{"class":634},"(",[544,744,745],{"class":630},"{",[544,747,749],{"class":748},"swJcz"," env",[544,751,752],{"class":630},":",[544,754,631],{"class":630},[544,756,757],{"class":748}," service",[544,759,752],{"class":630},[544,761,644],{"class":630},[544,763,764],{"class":553},"my-rpc",[544,766,767],{"class":630},"'",[544,769,638],{"class":630},[544,771,638],{"class":630},[544,773,774],{"class":634},")\n",[544,776,778],{"class":546,"line":777},7,[544,779,732],{"emptyLinePlaceholder":731},[544,781,783,787,790,793,795,797,800,803,806,809,812,814,817,819,821],{"class":546,"line":782},8,[544,784,786],{"class":785},"spNyl","const",[544,788,789],{"class":634}," base ",[544,791,792],{"class":630},"=",[544,794,635],{"class":634},[544,796,478],{"class":630},[544,798,799],{"class":738},"$context",[544,801,802],{"class":630},"\u003C",[544,804,805],{"class":550},"EvlogOrpcContext",[544,807,808],{"class":630},">",[544,810,811],{"class":634},"()",[544,813,478],{"class":630},[544,815,816],{"class":738},"use",[544,818,742],{"class":634},[544,820,690],{"class":738},[544,822,823],{"class":634},"())\n",[544,825,827],{"class":546,"line":826},9,[544,828,732],{"emptyLinePlaceholder":731},[544,830,832,834,837,839],{"class":546,"line":831},10,[544,833,786],{"class":785},[544,835,836],{"class":634}," router ",[544,838,792],{"class":630},[544,840,841],{"class":630}," {\n",[544,843,845,848,850,853,855,858,860,863,867,870,873],{"class":546,"line":844},11,[544,846,847],{"class":748},"  ping",[544,849,752],{"class":630},[544,851,852],{"class":634}," base",[544,854,478],{"class":630},[544,856,857],{"class":738},"handler",[544,859,742],{"class":634},[544,861,862],{"class":630},"({",[544,864,866],{"class":865},"sHdIc"," context",[544,868,869],{"class":630}," })",[544,871,872],{"class":785}," =>",[544,874,841],{"class":630},[544,876,878,881,883,886,888,891,893,895,898,900,904,906],{"class":546,"line":877},12,[544,879,880],{"class":634},"    context",[544,882,478],{"class":630},[544,884,885],{"class":634},"log",[544,887,478],{"class":630},[544,889,890],{"class":738},"set",[544,892,742],{"class":748},[544,894,745],{"class":630},[544,896,897],{"class":748}," pinged",[544,899,752],{"class":630},[544,901,903],{"class":902},"sfNiH"," true",[544,905,638],{"class":630},[544,907,774],{"class":748},[544,909,911,914,916,919,921,923],{"class":546,"line":910},13,[544,912,913],{"class":626},"    return",[544,915,631],{"class":630},[544,917,918],{"class":748}," ok",[544,920,752],{"class":630},[544,922,903],{"class":902},[544,924,925],{"class":630}," }\n",[544,927,929,932,935],{"class":546,"line":928},14,[544,930,931],{"class":630},"  }",[544,933,934],{"class":634},")",[544,936,937],{"class":630},",\n",[544,939,941],{"class":546,"line":940},15,[544,942,943],{"class":630},"}\n",[544,945,947],{"class":546,"line":946},16,[544,948,732],{"emptyLinePlaceholder":731},[544,950,952,954,957,959,961,963,966,968],{"class":546,"line":951},17,[544,953,786],{"class":785},[544,955,956],{"class":634}," handler ",[544,958,792],{"class":630},[544,960,707],{"class":738},[544,962,742],{"class":634},[544,964,965],{"class":630},"new",[544,967,660],{"class":738},[544,969,970],{"class":634},"(router))\n",[544,972,974],{"class":546,"line":973},18,[544,975,732],{"emptyLinePlaceholder":731},[544,977,979,982,985,988,991,994,996,999,1001,1004,1006],{"class":546,"line":978},19,[544,980,981],{"class":626},"export",[544,983,984],{"class":626}," default",[544,986,987],{"class":785}," async",[544,989,990],{"class":785}," function",[544,992,993],{"class":738}," fetch",[544,995,742],{"class":630},[544,997,998],{"class":865},"request",[544,1000,752],{"class":630},[544,1002,1003],{"class":550}," Request",[544,1005,934],{"class":630},[544,1007,841],{"class":630},[544,1009,1011,1014,1016,1019,1021,1024,1026,1029,1032,1035,1037,1040,1042,1044,1046,1048,1051,1053,1055,1058,1060,1062],{"class":546,"line":1010},20,[544,1012,1013],{"class":785},"  const",[544,1015,631],{"class":630},[544,1017,1018],{"class":634}," matched",[544,1020,704],{"class":630},[544,1022,1023],{"class":634}," response",[544,1025,638],{"class":630},[544,1027,1028],{"class":630}," =",[544,1030,1031],{"class":626}," await",[544,1033,1034],{"class":634}," handler",[544,1036,478],{"class":630},[544,1038,1039],{"class":738},"handle",[544,1041,742],{"class":748},[544,1043,998],{"class":634},[544,1045,704],{"class":630},[544,1047,631],{"class":630},[544,1049,1050],{"class":748}," prefix",[544,1052,752],{"class":630},[544,1054,644],{"class":630},[544,1056,1057],{"class":553},"\u002Frpc",[544,1059,767],{"class":630},[544,1061,638],{"class":630},[544,1063,774],{"class":748},[544,1065,1067,1070,1072,1075,1077,1080,1083,1086,1088,1090,1093,1095,1097,1099,1102,1104,1108,1110],{"class":546,"line":1066},21,[544,1068,1069],{"class":626},"  return",[544,1071,1018],{"class":634},[544,1073,1074],{"class":630}," ?",[544,1076,1023],{"class":634},[544,1078,1079],{"class":630}," :",[544,1081,1082],{"class":630}," new",[544,1084,1085],{"class":738}," Response",[544,1087,742],{"class":748},[544,1089,767],{"class":630},[544,1091,1092],{"class":553},"Not Found",[544,1094,767],{"class":630},[544,1096,704],{"class":630},[544,1098,631],{"class":630},[544,1100,1101],{"class":748}," status",[544,1103,752],{"class":630},[544,1105,1107],{"class":1106},"sbssI"," 404",[544,1109,638],{"class":630},[544,1111,774],{"class":748},[544,1113,1115],{"class":546,"line":1114},22,[544,1116,943],{"class":630},[1118,1119,1121,1125,1126,1132,1133,1136,1137,1140],"callout",{"color":1120,"icon":420},"info",[1122,1123,1124],"strong",{},"Using Vite?"," The ",[511,1127,1128,1131],{"href":418},[443,1129,1130],{},"evlog\u002Fvite"," plugin"," replaces the ",[443,1134,1135],{},"initLogger()"," call with compile-time auto-initialization, strips ",[443,1138,1139],{},"log.debug()"," from production builds, and injects source locations.",[440,1142,1143,1145,1146,1149,1150,1153,1154,1156,1157,478],{},[443,1144,805],{}," declares ",[443,1147,1148],{},"log: RequestLogger"," on the procedure context — the wrapper injects it for every matched request. ",[443,1151,1152],{},"os.use(evlog())"," on the base then exposes typed ",[443,1155,477],{}," to every procedure that descends from ",[443,1158,1159],{},"base",[522,1161,46],{"id":1162},"wide-events",[440,1164,1165],{},"Build context up over the procedure call. One request = one wide event:",[534,1167,1169],{"className":616,"code":1168,"filename":618,"language":619,"meta":540,"style":540},"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 } })\n\n    return { user, orders }\n  })\n",[443,1170,1171,1183,1225,1252,1292,1296,1325,1379,1383,1411,1451,1455,1469],{"__ignoreMap":540},[544,1172,1173,1175,1178,1180],{"class":546,"line":547},[544,1174,786],{"class":785},[544,1176,1177],{"class":634}," getUser ",[544,1179,792],{"class":630},[544,1181,1182],{"class":634}," base\n",[544,1184,1185,1188,1191,1194,1196,1199,1201,1203,1206,1208,1211,1213,1216,1219,1222],{"class":546,"line":653},[544,1186,1187],{"class":630},"  .",[544,1189,1190],{"class":738},"input",[544,1192,1193],{"class":634},"(z",[544,1195,478],{"class":630},[544,1197,1198],{"class":738},"object",[544,1200,742],{"class":634},[544,1202,745],{"class":630},[544,1204,1205],{"class":748}," id",[544,1207,752],{"class":630},[544,1209,1210],{"class":634}," z",[544,1212,478],{"class":630},[544,1214,1215],{"class":738},"string",[544,1217,1218],{"class":634},"() ",[544,1220,1221],{"class":630},"}",[544,1223,1224],{"class":634},"))\n",[544,1226,1227,1229,1231,1233,1236,1239,1242,1244,1246,1248,1250],{"class":546,"line":674},[544,1228,1187],{"class":630},[544,1230,857],{"class":738},[544,1232,742],{"class":634},[544,1234,1235],{"class":785},"async",[544,1237,1238],{"class":630}," ({",[544,1240,1241],{"class":865}," input",[544,1243,704],{"class":630},[544,1245,866],{"class":865},[544,1247,869],{"class":630},[544,1249,872],{"class":785},[544,1251,841],{"class":630},[544,1253,1254,1256,1258,1260,1262,1264,1266,1268,1271,1273,1275,1277,1279,1281,1283,1286,1288,1290],{"class":546,"line":695},[544,1255,880],{"class":634},[544,1257,478],{"class":630},[544,1259,885],{"class":634},[544,1261,478],{"class":630},[544,1263,890],{"class":738},[544,1265,742],{"class":748},[544,1267,745],{"class":630},[544,1269,1270],{"class":748}," user",[544,1272,752],{"class":630},[544,1274,631],{"class":630},[544,1276,1205],{"class":748},[544,1278,752],{"class":630},[544,1280,1241],{"class":634},[544,1282,478],{"class":630},[544,1284,1285],{"class":634},"id",[544,1287,638],{"class":630},[544,1289,638],{"class":630},[544,1291,774],{"class":748},[544,1293,1294],{"class":546,"line":728},[544,1295,732],{"emptyLinePlaceholder":731},[544,1297,1298,1301,1303,1305,1307,1310,1312,1315,1317,1319,1321,1323],{"class":546,"line":735},[544,1299,1300],{"class":785},"    const",[544,1302,1270],{"class":634},[544,1304,1028],{"class":630},[544,1306,1031],{"class":626},[544,1308,1309],{"class":634}," db",[544,1311,478],{"class":630},[544,1313,1314],{"class":738},"findUser",[544,1316,742],{"class":748},[544,1318,1190],{"class":634},[544,1320,478],{"class":630},[544,1322,1285],{"class":634},[544,1324,774],{"class":748},[544,1326,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1350,1352,1354,1356,1359,1361,1364,1366,1368,1370,1373,1375,1377],{"class":546,"line":777},[544,1328,880],{"class":634},[544,1330,478],{"class":630},[544,1332,885],{"class":634},[544,1334,478],{"class":630},[544,1336,890],{"class":738},[544,1338,742],{"class":748},[544,1340,745],{"class":630},[544,1342,1270],{"class":748},[544,1344,752],{"class":630},[544,1346,631],{"class":630},[544,1348,1349],{"class":748}," name",[544,1351,752],{"class":630},[544,1353,1270],{"class":634},[544,1355,478],{"class":630},[544,1357,1358],{"class":634},"name",[544,1360,704],{"class":630},[544,1362,1363],{"class":748}," plan",[544,1365,752],{"class":630},[544,1367,1270],{"class":634},[544,1369,478],{"class":630},[544,1371,1372],{"class":634},"plan",[544,1374,638],{"class":630},[544,1376,638],{"class":630},[544,1378,774],{"class":748},[544,1380,1381],{"class":546,"line":782},[544,1382,732],{"emptyLinePlaceholder":731},[544,1384,1385,1387,1390,1392,1394,1396,1398,1401,1403,1405,1407,1409],{"class":546,"line":826},[544,1386,1300],{"class":785},[544,1388,1389],{"class":634}," orders",[544,1391,1028],{"class":630},[544,1393,1031],{"class":626},[544,1395,1309],{"class":634},[544,1397,478],{"class":630},[544,1399,1400],{"class":738},"findOrders",[544,1402,742],{"class":748},[544,1404,1190],{"class":634},[544,1406,478],{"class":630},[544,1408,1285],{"class":634},[544,1410,774],{"class":748},[544,1412,1413,1415,1417,1419,1421,1423,1425,1427,1429,1431,1433,1436,1438,1440,1442,1445,1447,1449],{"class":546,"line":831},[544,1414,880],{"class":634},[544,1416,478],{"class":630},[544,1418,885],{"class":634},[544,1420,478],{"class":630},[544,1422,890],{"class":738},[544,1424,742],{"class":748},[544,1426,745],{"class":630},[544,1428,1389],{"class":748},[544,1430,752],{"class":630},[544,1432,631],{"class":630},[544,1434,1435],{"class":748}," count",[544,1437,752],{"class":630},[544,1439,1389],{"class":634},[544,1441,478],{"class":630},[544,1443,1444],{"class":634},"length",[544,1446,638],{"class":630},[544,1448,638],{"class":630},[544,1450,774],{"class":748},[544,1452,1453],{"class":546,"line":844},[544,1454,732],{"emptyLinePlaceholder":731},[544,1456,1457,1459,1461,1463,1465,1467],{"class":546,"line":877},[544,1458,913],{"class":626},[544,1460,631],{"class":630},[544,1462,1270],{"class":634},[544,1464,704],{"class":630},[544,1466,1389],{"class":634},[544,1468,925],{"class":630},[544,1470,1471,1473],{"class":546,"line":910},[544,1472,931],{"class":630},[544,1474,774],{"class":634},[440,1476,1477],{},"Output:",[534,1479,1482],{"className":536,"code":1480,"filename":1481,"language":539,"meta":540,"style":540},"14:58:15 INFO [my-rpc] POST \u002Frpc\u002FgetUser 200 in 12ms\n  ├─ operation: getUser\n  ├─ user: id=usr_123 name=Alice plan=pro\n  ├─ orders: count=2\n  └─ requestId: 4a8ff3a8-...\n","Terminal output",[443,1483,1484,1495,1506,1522,1535],{"__ignoreMap":540},[544,1485,1486,1489,1492],{"class":546,"line":547},[544,1487,1488],{"class":550},"14:58:15",[544,1490,1491],{"class":553}," INFO",[544,1493,1494],{"class":634}," [my-rpc] POST \u002Frpc\u002FgetUser 200 in 12ms\n",[544,1496,1497,1500,1503],{"class":546,"line":653},[544,1498,1499],{"class":550},"  ├─",[544,1501,1502],{"class":553}," operation:",[544,1504,1505],{"class":553}," getUser\n",[544,1507,1508,1510,1513,1516,1519],{"class":546,"line":674},[544,1509,1499],{"class":550},[544,1511,1512],{"class":553}," user:",[544,1514,1515],{"class":553}," id=usr_123",[544,1517,1518],{"class":553}," name=Alice",[544,1520,1521],{"class":553}," plan=pro\n",[544,1523,1524,1526,1529,1532],{"class":546,"line":695},[544,1525,1499],{"class":550},[544,1527,1528],{"class":553}," orders:",[544,1530,1531],{"class":553}," count=",[544,1533,1534],{"class":1106},"2\n",[544,1536,1537,1540,1543],{"class":546,"line":728},[544,1538,1539],{"class":550},"  └─",[544,1541,1542],{"class":553}," requestId:",[544,1544,1545],{"class":553}," 4a8ff3a8-...\n",[440,1547,1548,1549,1551,1552,1554,1555,1558,1559,1562],{},"The ",[443,1550,473],{}," field comes from the procedure path joined with ",[443,1553,478],{},". Nested routers like ",[443,1556,1557],{},"router.users.profile.get"," surface as ",[443,1560,1561],{},"operation: 'users.profile.get'",", which makes filtering by procedure trivial in your observability backend.",[522,1564,1566],{"id":1565},"uselogger-accessing-the-logger-off-context","useLogger() — accessing the logger off-context",[440,1568,1569,1570,1573,1574,752],{},"When you don't have direct access to ",[443,1571,1572],{},"context"," (utility modules, deep service functions), use ",[443,1575,1576],{},"useLogger()",[534,1578,1581],{"className":616,"code":1579,"filename":1580,"language":619,"meta":540,"style":540},"import { useLogger } from 'evlog\u002Forpc'\n\nexport async function chargeCard(amount: number) {\n  const log = useLogger()\n  log.set({ payment: { amount } })\n  \u002F\u002F …\n}\n","server\u002Fservices\u002Fbilling.ts",[443,1582,1583,1602,1606,1631,1645,1674,1680],{"__ignoreMap":540},[544,1584,1585,1587,1589,1592,1594,1596,1598,1600],{"class":546,"line":547},[544,1586,627],{"class":626},[544,1588,631],{"class":630},[544,1590,1591],{"class":634}," useLogger",[544,1593,638],{"class":630},[544,1595,641],{"class":626},[544,1597,644],{"class":630},[544,1599,445],{"class":553},[544,1601,650],{"class":630},[544,1603,1604],{"class":546,"line":653},[544,1605,732],{"emptyLinePlaceholder":731},[544,1607,1608,1610,1612,1614,1617,1619,1622,1624,1627,1629],{"class":546,"line":674},[544,1609,981],{"class":626},[544,1611,987],{"class":785},[544,1613,990],{"class":785},[544,1615,1616],{"class":738}," chargeCard",[544,1618,742],{"class":630},[544,1620,1621],{"class":865},"amount",[544,1623,752],{"class":630},[544,1625,1626],{"class":550}," number",[544,1628,934],{"class":630},[544,1630,841],{"class":630},[544,1632,1633,1635,1638,1640,1642],{"class":546,"line":695},[544,1634,1013],{"class":785},[544,1636,1637],{"class":634}," log",[544,1639,1028],{"class":630},[544,1641,1591],{"class":738},[544,1643,1644],{"class":748},"()\n",[544,1646,1647,1650,1652,1654,1656,1658,1661,1663,1665,1668,1670,1672],{"class":546,"line":728},[544,1648,1649],{"class":634},"  log",[544,1651,478],{"class":630},[544,1653,890],{"class":738},[544,1655,742],{"class":748},[544,1657,745],{"class":630},[544,1659,1660],{"class":748}," payment",[544,1662,752],{"class":630},[544,1664,631],{"class":630},[544,1666,1667],{"class":634}," amount",[544,1669,638],{"class":630},[544,1671,638],{"class":630},[544,1673,774],{"class":748},[544,1675,1676],{"class":546,"line":735},[544,1677,1679],{"class":1678},"sHwdD","  \u002F\u002F …\n",[544,1681,1682],{"class":546,"line":777},[544,1683,943],{"class":630},[440,1685,1686,1688,1689,1691,1692,478],{},[443,1687,1576],{}," resolves to the same logger as ",[443,1690,477],{}," and throws when called outside of a request that flowed through ",[443,1693,1694],{},"withEvlog()",[522,1696,1698],{"id":1697},"error-handling","Error Handling",[440,1700,1701,1702,1705,1706,1709,1710,1712,1713,1716,1717,1720],{},"The idiomatic oRPC pattern is to declare typed errors via ",[443,1703,1704],{},"os.errors({ ... })"," and throw them with ",[443,1707,1708],{},"errors.\u003CNAME>(...)"," from a handler. Each typed error carries a stable ",[443,1711,443],{},", an HTTP status, and a Zod-validated ",[443,1714,1715],{},"data"," payload — and the ",[443,1718,1719],{},"defined: true"," flag in the response tells the client this is a contract error, not an unexpected one.",[534,1722,1724],{"className":616,"code":1723,"filename":618,"language":619,"meta":540,"style":540},"import { os } from '@orpc\u002Fserver'\nimport { z } from 'zod'\nimport { evlog, type EvlogOrpcContext } from 'evlog\u002Forpc'\n\nconst errors = {\n  PAYMENT_DECLINED: {\n    status: 402,\n    message: 'Payment declined',\n    data: z.object({\n      reason: z.enum(['insufficient_funds', 'card_expired', 'fraud_suspected']),\n      retryable: z.boolean(),\n    }),\n  },\n} as const\n\nconst base = os\n  .$context\u003CEvlogOrpcContext>()\n  .errors(errors)\n  .use(evlog())\n\nexport const charge = base\n  .input(z.object({ amount: z.number().int().positive() }))\n  .handler(({ input, context, errors }) => {\n    context.log.set({ payment: { amount: input.amount } })\n    throw errors.PAYMENT_DECLINED({\n      data: { reason: 'insufficient_funds', retryable: true },\n    })\n  })\n",[443,1725,1726,1744,1763,1787,1791,1802,1811,1823,1839,1857,1904,1922,1931,1936,1946,1950,1961,1975,1985,1997,2001,2015,2062,2090,2129,2146,2179,2186],{"__ignoreMap":540},[544,1727,1728,1730,1732,1734,1736,1738,1740,1742],{"class":546,"line":547},[544,1729,627],{"class":626},[544,1731,631],{"class":630},[544,1733,635],{"class":634},[544,1735,638],{"class":630},[544,1737,641],{"class":626},[544,1739,644],{"class":630},[544,1741,647],{"class":553},[544,1743,650],{"class":630},[544,1745,1746,1748,1750,1752,1754,1756,1758,1761],{"class":546,"line":653},[544,1747,627],{"class":626},[544,1749,631],{"class":630},[544,1751,1210],{"class":634},[544,1753,638],{"class":630},[544,1755,641],{"class":626},[544,1757,644],{"class":630},[544,1759,1760],{"class":553},"zod",[544,1762,650],{"class":630},[544,1764,1765,1767,1769,1771,1773,1775,1777,1779,1781,1783,1785],{"class":546,"line":674},[544,1766,627],{"class":626},[544,1768,631],{"class":630},[544,1770,557],{"class":634},[544,1772,704],{"class":630},[544,1774,712],{"class":626},[544,1776,715],{"class":634},[544,1778,638],{"class":630},[544,1780,641],{"class":626},[544,1782,644],{"class":630},[544,1784,445],{"class":553},[544,1786,650],{"class":630},[544,1788,1789],{"class":546,"line":695},[544,1790,732],{"emptyLinePlaceholder":731},[544,1792,1793,1795,1798,1800],{"class":546,"line":728},[544,1794,786],{"class":785},[544,1796,1797],{"class":634}," errors ",[544,1799,792],{"class":630},[544,1801,841],{"class":630},[544,1803,1804,1807,1809],{"class":546,"line":735},[544,1805,1806],{"class":748},"  PAYMENT_DECLINED",[544,1808,752],{"class":630},[544,1810,841],{"class":630},[544,1812,1813,1816,1818,1821],{"class":546,"line":777},[544,1814,1815],{"class":748},"    status",[544,1817,752],{"class":630},[544,1819,1820],{"class":1106}," 402",[544,1822,937],{"class":630},[544,1824,1825,1828,1830,1832,1835,1837],{"class":546,"line":782},[544,1826,1827],{"class":748},"    message",[544,1829,752],{"class":630},[544,1831,644],{"class":630},[544,1833,1834],{"class":553},"Payment declined",[544,1836,767],{"class":630},[544,1838,937],{"class":630},[544,1840,1841,1844,1846,1848,1850,1852,1854],{"class":546,"line":826},[544,1842,1843],{"class":748},"    data",[544,1845,752],{"class":630},[544,1847,1210],{"class":634},[544,1849,478],{"class":630},[544,1851,1198],{"class":738},[544,1853,742],{"class":634},[544,1855,1856],{"class":630},"{\n",[544,1858,1859,1862,1864,1866,1868,1871,1874,1876,1879,1881,1883,1885,1888,1890,1892,1894,1897,1899,1902],{"class":546,"line":831},[544,1860,1861],{"class":748},"      reason",[544,1863,752],{"class":630},[544,1865,1210],{"class":634},[544,1867,478],{"class":630},[544,1869,1870],{"class":738},"enum",[544,1872,1873],{"class":634},"([",[544,1875,767],{"class":630},[544,1877,1878],{"class":553},"insufficient_funds",[544,1880,767],{"class":630},[544,1882,704],{"class":630},[544,1884,644],{"class":630},[544,1886,1887],{"class":553},"card_expired",[544,1889,767],{"class":630},[544,1891,704],{"class":630},[544,1893,644],{"class":630},[544,1895,1896],{"class":553},"fraud_suspected",[544,1898,767],{"class":630},[544,1900,1901],{"class":634},"])",[544,1903,937],{"class":630},[544,1905,1906,1909,1911,1913,1915,1918,1920],{"class":546,"line":844},[544,1907,1908],{"class":748},"      retryable",[544,1910,752],{"class":630},[544,1912,1210],{"class":634},[544,1914,478],{"class":630},[544,1916,1917],{"class":738},"boolean",[544,1919,811],{"class":634},[544,1921,937],{"class":630},[544,1923,1924,1927,1929],{"class":546,"line":877},[544,1925,1926],{"class":630},"    }",[544,1928,934],{"class":634},[544,1930,937],{"class":630},[544,1932,1933],{"class":546,"line":910},[544,1934,1935],{"class":630},"  },\n",[544,1937,1938,1940,1943],{"class":546,"line":928},[544,1939,1221],{"class":630},[544,1941,1942],{"class":626}," as",[544,1944,1945],{"class":785}," const\n",[544,1947,1948],{"class":546,"line":940},[544,1949,732],{"emptyLinePlaceholder":731},[544,1951,1952,1954,1956,1958],{"class":546,"line":946},[544,1953,786],{"class":785},[544,1955,789],{"class":634},[544,1957,792],{"class":630},[544,1959,1960],{"class":634}," os\n",[544,1962,1963,1965,1967,1969,1971,1973],{"class":546,"line":951},[544,1964,1187],{"class":630},[544,1966,799],{"class":738},[544,1968,802],{"class":630},[544,1970,805],{"class":550},[544,1972,808],{"class":630},[544,1974,1644],{"class":634},[544,1976,1977,1979,1982],{"class":546,"line":973},[544,1978,1187],{"class":630},[544,1980,1981],{"class":738},"errors",[544,1983,1984],{"class":634},"(errors)\n",[544,1986,1987,1989,1991,1993,1995],{"class":546,"line":978},[544,1988,1187],{"class":630},[544,1990,816],{"class":738},[544,1992,742],{"class":634},[544,1994,690],{"class":738},[544,1996,823],{"class":634},[544,1998,1999],{"class":546,"line":1010},[544,2000,732],{"emptyLinePlaceholder":731},[544,2002,2003,2005,2008,2011,2013],{"class":546,"line":1066},[544,2004,981],{"class":626},[544,2006,2007],{"class":785}," const",[544,2009,2010],{"class":634}," charge ",[544,2012,792],{"class":630},[544,2014,1182],{"class":634},[544,2016,2017,2019,2021,2023,2025,2027,2029,2031,2033,2035,2037,2039,2042,2044,2046,2049,2051,2053,2056,2058,2060],{"class":546,"line":1114},[544,2018,1187],{"class":630},[544,2020,1190],{"class":738},[544,2022,1193],{"class":634},[544,2024,478],{"class":630},[544,2026,1198],{"class":738},[544,2028,742],{"class":634},[544,2030,745],{"class":630},[544,2032,1667],{"class":748},[544,2034,752],{"class":630},[544,2036,1210],{"class":634},[544,2038,478],{"class":630},[544,2040,2041],{"class":738},"number",[544,2043,811],{"class":634},[544,2045,478],{"class":630},[544,2047,2048],{"class":738},"int",[544,2050,811],{"class":634},[544,2052,478],{"class":630},[544,2054,2055],{"class":738},"positive",[544,2057,1218],{"class":634},[544,2059,1221],{"class":630},[544,2061,1224],{"class":634},[544,2063,2065,2067,2069,2071,2073,2075,2077,2079,2081,2084,2086,2088],{"class":546,"line":2064},23,[544,2066,1187],{"class":630},[544,2068,857],{"class":738},[544,2070,742],{"class":634},[544,2072,862],{"class":630},[544,2074,1241],{"class":865},[544,2076,704],{"class":630},[544,2078,866],{"class":865},[544,2080,704],{"class":630},[544,2082,2083],{"class":865}," errors",[544,2085,869],{"class":630},[544,2087,872],{"class":785},[544,2089,841],{"class":630},[544,2091,2093,2095,2097,2099,2101,2103,2105,2107,2109,2111,2113,2115,2117,2119,2121,2123,2125,2127],{"class":546,"line":2092},24,[544,2094,880],{"class":634},[544,2096,478],{"class":630},[544,2098,885],{"class":634},[544,2100,478],{"class":630},[544,2102,890],{"class":738},[544,2104,742],{"class":748},[544,2106,745],{"class":630},[544,2108,1660],{"class":748},[544,2110,752],{"class":630},[544,2112,631],{"class":630},[544,2114,1667],{"class":748},[544,2116,752],{"class":630},[544,2118,1241],{"class":634},[544,2120,478],{"class":630},[544,2122,1621],{"class":634},[544,2124,638],{"class":630},[544,2126,638],{"class":630},[544,2128,774],{"class":748},[544,2130,2132,2135,2137,2139,2142,2144],{"class":546,"line":2131},25,[544,2133,2134],{"class":626},"    throw",[544,2136,2083],{"class":634},[544,2138,478],{"class":630},[544,2140,2141],{"class":738},"PAYMENT_DECLINED",[544,2143,742],{"class":748},[544,2145,1856],{"class":630},[544,2147,2149,2152,2154,2156,2159,2161,2163,2165,2167,2169,2172,2174,2176],{"class":546,"line":2148},26,[544,2150,2151],{"class":748},"      data",[544,2153,752],{"class":630},[544,2155,631],{"class":630},[544,2157,2158],{"class":748}," reason",[544,2160,752],{"class":630},[544,2162,644],{"class":630},[544,2164,1878],{"class":553},[544,2166,767],{"class":630},[544,2168,704],{"class":630},[544,2170,2171],{"class":748}," retryable",[544,2173,752],{"class":630},[544,2175,903],{"class":902},[544,2177,2178],{"class":630}," },\n",[544,2180,2182,2184],{"class":546,"line":2181},27,[544,2183,1926],{"class":630},[544,2185,774],{"class":748},[544,2187,2189,2191],{"class":546,"line":2188},28,[544,2190,931],{"class":630},[544,2192,774],{"class":634},[440,2194,1548,2195,2197,2198,2201,2202,2205],{},[443,2196,469],{}," middleware catches the throw, calls ",[443,2199,2200],{},"log.error()"," to promote the wide event to ",[443,2203,2204],{},"level: 'error'",", and re-throws so oRPC's own pipeline serializes the response. Token economy on the wide event:",[534,2207,2209],{"className":536,"code":2208,"filename":1481,"language":539,"meta":540,"style":540},"14:58:20 ERROR [my-rpc] POST \u002Fpayments\u002Fcharge 402 in 3ms\n  ├─ operation: charge\n  ├─ error: name=ORPCError message=Payment declined code=PAYMENT_DECLINED status=402 data={reason:insufficient_funds,retryable:true}\n  ├─ payment: amount=1999\n  └─ requestId: 880a50ac-...\n",[443,2210,2211,2222,2231,2264,2277],{"__ignoreMap":540},[544,2212,2213,2216,2219],{"class":546,"line":547},[544,2214,2215],{"class":550},"14:58:20",[544,2217,2218],{"class":553}," ERROR",[544,2220,2221],{"class":634}," [my-rpc] POST \u002Fpayments\u002Fcharge 402 in 3ms\n",[544,2223,2224,2226,2228],{"class":546,"line":653},[544,2225,1499],{"class":550},[544,2227,1502],{"class":553},[544,2229,2230],{"class":553}," charge\n",[544,2232,2233,2235,2238,2241,2244,2247,2250,2253,2256,2259,2262],{"class":546,"line":674},[544,2234,1499],{"class":550},[544,2236,2237],{"class":553}," error:",[544,2239,2240],{"class":553}," name=ORPCError",[544,2242,2243],{"class":553}," message=Payment",[544,2245,2246],{"class":553}," declined",[544,2248,2249],{"class":553}," code=PAYMENT_DECLINED",[544,2251,2252],{"class":553}," status=",[544,2254,2255],{"class":1106},"402",[544,2257,2258],{"class":553}," data={reason:insufficient_funds,retryable:",[544,2260,2261],{"class":630},"true",[544,2263,943],{"class":553},[544,2265,2266,2268,2271,2274],{"class":546,"line":695},[544,2267,1499],{"class":550},[544,2269,2270],{"class":553}," payment:",[544,2272,2273],{"class":553}," amount=",[544,2275,2276],{"class":1106},"1999\n",[544,2278,2279,2281,2283],{"class":546,"line":728},[544,2280,1539],{"class":550},[544,2282,1542],{"class":553},[544,2284,2285],{"class":553}," 880a50ac-...\n",[440,2287,2288],{},"Response body returned to the client:",[534,2290,2295],{"className":2291,"code":2292,"filename":2293,"language":2294,"meta":540,"style":540},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"defined\": true,\n  \"code\": \"PAYMENT_DECLINED\",\n  \"status\": 402,\n  \"message\": \"Payment declined\",\n  \"data\": { \"reason\": \"insufficient_funds\", \"retryable\": true }\n}\n","HTTP 402","json",[443,2296,2297,2301,2317,2336,2351,2370,2412],{"__ignoreMap":540},[544,2298,2299],{"class":546,"line":547},[544,2300,1856],{"class":630},[544,2302,2303,2306,2309,2312,2314],{"class":546,"line":653},[544,2304,2305],{"class":630},"  \"",[544,2307,2308],{"class":785},"defined",[544,2310,2311],{"class":630},"\"",[544,2313,752],{"class":630},[544,2315,2316],{"class":630}," true,\n",[544,2318,2319,2321,2323,2325,2327,2330,2332,2334],{"class":546,"line":674},[544,2320,2305],{"class":630},[544,2322,443],{"class":785},[544,2324,2311],{"class":630},[544,2326,752],{"class":630},[544,2328,2329],{"class":630}," \"",[544,2331,2141],{"class":553},[544,2333,2311],{"class":630},[544,2335,937],{"class":630},[544,2337,2338,2340,2343,2345,2347,2349],{"class":546,"line":695},[544,2339,2305],{"class":630},[544,2341,2342],{"class":785},"status",[544,2344,2311],{"class":630},[544,2346,752],{"class":630},[544,2348,1820],{"class":1106},[544,2350,937],{"class":630},[544,2352,2353,2355,2358,2360,2362,2364,2366,2368],{"class":546,"line":728},[544,2354,2305],{"class":630},[544,2356,2357],{"class":785},"message",[544,2359,2311],{"class":630},[544,2361,752],{"class":630},[544,2363,2329],{"class":630},[544,2365,1834],{"class":553},[544,2367,2311],{"class":630},[544,2369,937],{"class":630},[544,2371,2372,2374,2376,2378,2380,2382,2384,2387,2389,2391,2393,2395,2397,2399,2401,2404,2406,2408,2410],{"class":546,"line":735},[544,2373,2305],{"class":630},[544,2375,1715],{"class":785},[544,2377,2311],{"class":630},[544,2379,752],{"class":630},[544,2381,631],{"class":630},[544,2383,2329],{"class":630},[544,2385,2386],{"class":550},"reason",[544,2388,2311],{"class":630},[544,2390,752],{"class":630},[544,2392,2329],{"class":630},[544,2394,1878],{"class":553},[544,2396,2311],{"class":630},[544,2398,704],{"class":630},[544,2400,2329],{"class":630},[544,2402,2403],{"class":550},"retryable",[544,2405,2311],{"class":630},[544,2407,752],{"class":630},[544,2409,903],{"class":630},[544,2411,925],{"class":630},[544,2413,2414],{"class":546,"line":777},[544,2415,943],{"class":630},[440,2417,2418,2419,2422,2423,2426,2427,2430,2431,2433],{},"If you already use evlog's ",[443,2420,2421],{},"createError()"," elsewhere (audit trails, non-RPC paths) and want to throw it from inside a procedure, the middleware still captures it on the wide event — but the response will be wrapped as an ",[443,2424,2425],{},"INTERNAL_SERVER_ERROR"," by oRPC's default handler. Prefer ",[443,2428,2429],{},"os.errors()"," inside procedures and keep ",[443,2432,2421],{}," for everything outside the RPC boundary.",[522,2435,2437],{"id":2436},"middleware-composition","Middleware Composition",[440,2439,2440,2442,2443,2446,2447,2449],{},[443,2441,469],{}," plays well with other oRPC middleware. Chain them with ",[443,2444,2445],{},".use()"," — every middleware sees ",[443,2448,477],{}," so each layer can append its own keys to the wide event without coordinating with the next:",[534,2451,2453],{"className":616,"code":2452,"filename":618,"language":619,"meta":540,"style":540},"const base = os\n  .$context\u003CEvlogOrpcContext>()\n  .errors(errors)\n  .use(evlog())\n\nconst authed = base.use(async ({ context, next }) => {\n  const user = await verifyApiKey(context)\n  context.log.set({ auth: { ok: true, userId: user.id, role: user.role } })\n  return next({ context: { ...context, user } })\n})\n\nexport const deleteResource = authed\n  .input(z.object({ id: z.string() }))\n  .handler(({ input, context, errors }) => {\n    if (context.user.role !== 'superadmin') {\n      throw errors.FORBIDDEN({ data: { requiredRole: 'superadmin' } })\n    }\n    context.log.set({ deletedId: input.id, by: context.user.id })\n    return { ok: true }\n  })\n",[443,2454,2455,2465,2479,2487,2499,2503,2537,2556,2619,2650,2656,2660,2674,2706,2732,2766,2806,2811,2859,2873],{"__ignoreMap":540},[544,2456,2457,2459,2461,2463],{"class":546,"line":547},[544,2458,786],{"class":785},[544,2460,789],{"class":634},[544,2462,792],{"class":630},[544,2464,1960],{"class":634},[544,2466,2467,2469,2471,2473,2475,2477],{"class":546,"line":653},[544,2468,1187],{"class":630},[544,2470,799],{"class":738},[544,2472,802],{"class":630},[544,2474,805],{"class":550},[544,2476,808],{"class":630},[544,2478,1644],{"class":634},[544,2480,2481,2483,2485],{"class":546,"line":674},[544,2482,1187],{"class":630},[544,2484,1981],{"class":738},[544,2486,1984],{"class":634},[544,2488,2489,2491,2493,2495,2497],{"class":546,"line":695},[544,2490,1187],{"class":630},[544,2492,816],{"class":738},[544,2494,742],{"class":634},[544,2496,690],{"class":738},[544,2498,823],{"class":634},[544,2500,2501],{"class":546,"line":728},[544,2502,732],{"emptyLinePlaceholder":731},[544,2504,2505,2507,2510,2512,2514,2516,2518,2520,2522,2524,2526,2528,2531,2533,2535],{"class":546,"line":735},[544,2506,786],{"class":785},[544,2508,2509],{"class":634}," authed ",[544,2511,792],{"class":630},[544,2513,852],{"class":634},[544,2515,478],{"class":630},[544,2517,816],{"class":738},[544,2519,742],{"class":634},[544,2521,1235],{"class":785},[544,2523,1238],{"class":630},[544,2525,866],{"class":865},[544,2527,704],{"class":630},[544,2529,2530],{"class":865}," next",[544,2532,869],{"class":630},[544,2534,872],{"class":785},[544,2536,841],{"class":630},[544,2538,2539,2541,2543,2545,2547,2550,2552,2554],{"class":546,"line":777},[544,2540,1013],{"class":785},[544,2542,1270],{"class":634},[544,2544,1028],{"class":630},[544,2546,1031],{"class":626},[544,2548,2549],{"class":738}," verifyApiKey",[544,2551,742],{"class":748},[544,2553,1572],{"class":634},[544,2555,774],{"class":748},[544,2557,2558,2561,2563,2565,2567,2569,2571,2573,2576,2578,2580,2582,2584,2586,2588,2591,2593,2595,2597,2599,2601,2604,2606,2608,2610,2613,2615,2617],{"class":546,"line":782},[544,2559,2560],{"class":634},"  context",[544,2562,478],{"class":630},[544,2564,885],{"class":634},[544,2566,478],{"class":630},[544,2568,890],{"class":738},[544,2570,742],{"class":748},[544,2572,745],{"class":630},[544,2574,2575],{"class":748}," auth",[544,2577,752],{"class":630},[544,2579,631],{"class":630},[544,2581,918],{"class":748},[544,2583,752],{"class":630},[544,2585,903],{"class":902},[544,2587,704],{"class":630},[544,2589,2590],{"class":748}," userId",[544,2592,752],{"class":630},[544,2594,1270],{"class":634},[544,2596,478],{"class":630},[544,2598,1285],{"class":634},[544,2600,704],{"class":630},[544,2602,2603],{"class":748}," role",[544,2605,752],{"class":630},[544,2607,1270],{"class":634},[544,2609,478],{"class":630},[544,2611,2612],{"class":634},"role",[544,2614,638],{"class":630},[544,2616,638],{"class":630},[544,2618,774],{"class":748},[544,2620,2621,2623,2625,2627,2629,2631,2633,2635,2638,2640,2642,2644,2646,2648],{"class":546,"line":826},[544,2622,1069],{"class":626},[544,2624,2530],{"class":738},[544,2626,742],{"class":748},[544,2628,745],{"class":630},[544,2630,866],{"class":748},[544,2632,752],{"class":630},[544,2634,631],{"class":630},[544,2636,2637],{"class":630}," ...",[544,2639,1572],{"class":634},[544,2641,704],{"class":630},[544,2643,1270],{"class":634},[544,2645,638],{"class":630},[544,2647,638],{"class":630},[544,2649,774],{"class":748},[544,2651,2652,2654],{"class":546,"line":831},[544,2653,1221],{"class":630},[544,2655,774],{"class":634},[544,2657,2658],{"class":546,"line":844},[544,2659,732],{"emptyLinePlaceholder":731},[544,2661,2662,2664,2666,2669,2671],{"class":546,"line":877},[544,2663,981],{"class":626},[544,2665,2007],{"class":785},[544,2667,2668],{"class":634}," deleteResource ",[544,2670,792],{"class":630},[544,2672,2673],{"class":634}," authed\n",[544,2675,2676,2678,2680,2682,2684,2686,2688,2690,2692,2694,2696,2698,2700,2702,2704],{"class":546,"line":910},[544,2677,1187],{"class":630},[544,2679,1190],{"class":738},[544,2681,1193],{"class":634},[544,2683,478],{"class":630},[544,2685,1198],{"class":738},[544,2687,742],{"class":634},[544,2689,745],{"class":630},[544,2691,1205],{"class":748},[544,2693,752],{"class":630},[544,2695,1210],{"class":634},[544,2697,478],{"class":630},[544,2699,1215],{"class":738},[544,2701,1218],{"class":634},[544,2703,1221],{"class":630},[544,2705,1224],{"class":634},[544,2707,2708,2710,2712,2714,2716,2718,2720,2722,2724,2726,2728,2730],{"class":546,"line":928},[544,2709,1187],{"class":630},[544,2711,857],{"class":738},[544,2713,742],{"class":634},[544,2715,862],{"class":630},[544,2717,1241],{"class":865},[544,2719,704],{"class":630},[544,2721,866],{"class":865},[544,2723,704],{"class":630},[544,2725,2083],{"class":865},[544,2727,869],{"class":630},[544,2729,872],{"class":785},[544,2731,841],{"class":630},[544,2733,2734,2737,2740,2742,2744,2747,2749,2751,2754,2756,2759,2761,2764],{"class":546,"line":940},[544,2735,2736],{"class":626},"    if",[544,2738,2739],{"class":748}," (",[544,2741,1572],{"class":634},[544,2743,478],{"class":630},[544,2745,2746],{"class":634},"user",[544,2748,478],{"class":630},[544,2750,2612],{"class":634},[544,2752,2753],{"class":630}," !==",[544,2755,644],{"class":630},[544,2757,2758],{"class":553},"superadmin",[544,2760,767],{"class":630},[544,2762,2763],{"class":748},") ",[544,2765,1856],{"class":630},[544,2767,2768,2771,2773,2775,2778,2780,2782,2785,2787,2789,2792,2794,2796,2798,2800,2802,2804],{"class":546,"line":946},[544,2769,2770],{"class":626},"      throw",[544,2772,2083],{"class":634},[544,2774,478],{"class":630},[544,2776,2777],{"class":738},"FORBIDDEN",[544,2779,742],{"class":748},[544,2781,745],{"class":630},[544,2783,2784],{"class":748}," data",[544,2786,752],{"class":630},[544,2788,631],{"class":630},[544,2790,2791],{"class":748}," requiredRole",[544,2793,752],{"class":630},[544,2795,644],{"class":630},[544,2797,2758],{"class":553},[544,2799,767],{"class":630},[544,2801,638],{"class":630},[544,2803,638],{"class":630},[544,2805,774],{"class":748},[544,2807,2808],{"class":546,"line":951},[544,2809,2810],{"class":630},"    }\n",[544,2812,2813,2815,2817,2819,2821,2823,2825,2827,2830,2832,2834,2836,2838,2840,2843,2845,2847,2849,2851,2853,2855,2857],{"class":546,"line":973},[544,2814,880],{"class":634},[544,2816,478],{"class":630},[544,2818,885],{"class":634},[544,2820,478],{"class":630},[544,2822,890],{"class":738},[544,2824,742],{"class":748},[544,2826,745],{"class":630},[544,2828,2829],{"class":748}," deletedId",[544,2831,752],{"class":630},[544,2833,1241],{"class":634},[544,2835,478],{"class":630},[544,2837,1285],{"class":634},[544,2839,704],{"class":630},[544,2841,2842],{"class":748}," by",[544,2844,752],{"class":630},[544,2846,866],{"class":634},[544,2848,478],{"class":630},[544,2850,2746],{"class":634},[544,2852,478],{"class":630},[544,2854,1285],{"class":634},[544,2856,638],{"class":630},[544,2858,774],{"class":748},[544,2860,2861,2863,2865,2867,2869,2871],{"class":546,"line":978},[544,2862,913],{"class":626},[544,2864,631],{"class":630},[544,2866,918],{"class":748},[544,2868,752],{"class":630},[544,2870,903],{"class":902},[544,2872,925],{"class":630},[544,2874,2875,2877],{"class":546,"line":1010},[544,2876,931],{"class":630},[544,2878,774],{"class":634},[440,2880,2881,2882,2884,2885,2888,2889,2892],{},"A nested router groups procedures under a path; ",[443,2883,473],{}," on the wide event reflects the full nesting (",[443,2886,2887],{},"users.profile.get",", ",[443,2890,2891],{},"payments.charge",", ...):",[534,2894,2896],{"className":616,"code":2895,"filename":618,"language":619,"meta":540,"style":540},"const router = {\n  health: base.handler(() => ({ ok: true })),\n  users: {\n    list: base.handler(\u002F* … *\u002F),\n    get: base.input(\u002F* … *\u002F).handler(\u002F* … *\u002F),\n  },\n  payments: {\n    charge: authed.input(\u002F* … *\u002F).handler(\u002F* … *\u002F),\n  },\n}\n",[443,2897,2898,2908,2944,2953,2975,3006,3010,3019,3051,3055],{"__ignoreMap":540},[544,2899,2900,2902,2904,2906],{"class":546,"line":547},[544,2901,786],{"class":785},[544,2903,836],{"class":634},[544,2905,792],{"class":630},[544,2907,841],{"class":630},[544,2909,2910,2913,2915,2917,2919,2921,2923,2925,2927,2929,2931,2933,2935,2937,2939,2942],{"class":546,"line":653},[544,2911,2912],{"class":748},"  health",[544,2914,752],{"class":630},[544,2916,852],{"class":634},[544,2918,478],{"class":630},[544,2920,857],{"class":738},[544,2922,742],{"class":634},[544,2924,811],{"class":630},[544,2926,872],{"class":785},[544,2928,2739],{"class":634},[544,2930,745],{"class":630},[544,2932,918],{"class":748},[544,2934,752],{"class":630},[544,2936,903],{"class":902},[544,2938,638],{"class":630},[544,2940,2941],{"class":634},"))",[544,2943,937],{"class":630},[544,2945,2946,2949,2951],{"class":546,"line":674},[544,2947,2948],{"class":748},"  users",[544,2950,752],{"class":630},[544,2952,841],{"class":630},[544,2954,2955,2958,2960,2962,2964,2966,2968,2971,2973],{"class":546,"line":695},[544,2956,2957],{"class":748},"    list",[544,2959,752],{"class":630},[544,2961,852],{"class":634},[544,2963,478],{"class":630},[544,2965,857],{"class":738},[544,2967,742],{"class":634},[544,2969,2970],{"class":1678},"\u002F* … *\u002F",[544,2972,934],{"class":634},[544,2974,937],{"class":630},[544,2976,2977,2980,2982,2984,2986,2988,2990,2992,2994,2996,2998,3000,3002,3004],{"class":546,"line":728},[544,2978,2979],{"class":748},"    get",[544,2981,752],{"class":630},[544,2983,852],{"class":634},[544,2985,478],{"class":630},[544,2987,1190],{"class":738},[544,2989,742],{"class":634},[544,2991,2970],{"class":1678},[544,2993,934],{"class":634},[544,2995,478],{"class":630},[544,2997,857],{"class":738},[544,2999,742],{"class":634},[544,3001,2970],{"class":1678},[544,3003,934],{"class":634},[544,3005,937],{"class":630},[544,3007,3008],{"class":546,"line":735},[544,3009,1935],{"class":630},[544,3011,3012,3015,3017],{"class":546,"line":777},[544,3013,3014],{"class":748},"  payments",[544,3016,752],{"class":630},[544,3018,841],{"class":630},[544,3020,3021,3024,3026,3029,3031,3033,3035,3037,3039,3041,3043,3045,3047,3049],{"class":546,"line":782},[544,3022,3023],{"class":748},"    charge",[544,3025,752],{"class":630},[544,3027,3028],{"class":634}," authed",[544,3030,478],{"class":630},[544,3032,1190],{"class":738},[544,3034,742],{"class":634},[544,3036,2970],{"class":1678},[544,3038,934],{"class":634},[544,3040,478],{"class":630},[544,3042,857],{"class":738},[544,3044,742],{"class":634},[544,3046,2970],{"class":1678},[544,3048,934],{"class":634},[544,3050,937],{"class":630},[544,3052,3053],{"class":546,"line":826},[544,3054,1935],{"class":630},[544,3056,3057],{"class":546,"line":831},[544,3058,943],{"class":630},[522,3060,409],{"id":3061},"configuration",[440,3063,3064,3065,3068,3069,3071],{},"See the ",[511,3066,3067],{"href":410},"Configuration reference"," for all available options (",[443,3070,739],{},", middleware options, sampling, silent mode, etc.).",[522,3073,3075],{"id":3074},"drain-enrichers","Drain & Enrichers",[440,3077,3078,3079,752],{},"Pass adapters and enrichers directly to ",[443,3080,1694],{},[534,3082,3084],{"className":616,"code":3083,"filename":618,"language":619,"meta":540,"style":540},"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,3085,3086,3106,3126,3130,3143,3147,3170,3183,3201,3212,3242,3246],{"__ignoreMap":540},[544,3087,3088,3090,3092,3095,3097,3099,3101,3104],{"class":546,"line":547},[544,3089,627],{"class":626},[544,3091,631],{"class":630},[544,3093,3094],{"class":634}," createAxiomDrain",[544,3096,638],{"class":630},[544,3098,641],{"class":626},[544,3100,644],{"class":630},[544,3102,3103],{"class":553},"evlog\u002Faxiom",[544,3105,650],{"class":630},[544,3107,3108,3110,3112,3115,3117,3119,3121,3124],{"class":546,"line":653},[544,3109,627],{"class":626},[544,3111,631],{"class":630},[544,3113,3114],{"class":634}," createUserAgentEnricher",[544,3116,638],{"class":630},[544,3118,641],{"class":626},[544,3120,644],{"class":630},[544,3122,3123],{"class":553},"evlog\u002Fenrichers",[544,3125,650],{"class":630},[544,3127,3128],{"class":546,"line":674},[544,3129,732],{"emptyLinePlaceholder":731},[544,3131,3132,3134,3137,3139,3141],{"class":546,"line":695},[544,3133,786],{"class":785},[544,3135,3136],{"class":634}," userAgent ",[544,3138,792],{"class":630},[544,3140,3114],{"class":738},[544,3142,1644],{"class":634},[544,3144,3145],{"class":546,"line":728},[544,3146,732],{"emptyLinePlaceholder":731},[544,3148,3149,3151,3153,3155,3157,3159,3161,3163,3166,3168],{"class":546,"line":735},[544,3150,786],{"class":785},[544,3152,956],{"class":634},[544,3154,792],{"class":630},[544,3156,707],{"class":738},[544,3158,742],{"class":634},[544,3160,965],{"class":630},[544,3162,660],{"class":738},[544,3164,3165],{"class":634},"(router)",[544,3167,704],{"class":630},[544,3169,841],{"class":630},[544,3171,3172,3175,3177,3179,3181],{"class":546,"line":777},[544,3173,3174],{"class":748},"  drain",[544,3176,752],{"class":630},[544,3178,3094],{"class":738},[544,3180,811],{"class":634},[544,3182,937],{"class":630},[544,3184,3185,3188,3190,3192,3195,3197,3199],{"class":546,"line":782},[544,3186,3187],{"class":738},"  enrich",[544,3189,752],{"class":630},[544,3191,2739],{"class":630},[544,3193,3194],{"class":865},"ctx",[544,3196,934],{"class":630},[544,3198,872],{"class":785},[544,3200,841],{"class":630},[544,3202,3203,3206,3208,3210],{"class":546,"line":826},[544,3204,3205],{"class":738},"    userAgent",[544,3207,742],{"class":748},[544,3209,3194],{"class":634},[544,3211,774],{"class":748},[544,3213,3214,3217,3219,3222,3224,3227,3229,3232,3234,3237,3239],{"class":546,"line":831},[544,3215,3216],{"class":634},"    ctx",[544,3218,478],{"class":630},[544,3220,3221],{"class":634},"event",[544,3223,478],{"class":630},[544,3225,3226],{"class":634},"region",[544,3228,1028],{"class":630},[544,3230,3231],{"class":634}," process",[544,3233,478],{"class":630},[544,3235,3236],{"class":634},"env",[544,3238,478],{"class":630},[544,3240,3241],{"class":634},"FLY_REGION\n",[544,3243,3244],{"class":546,"line":844},[544,3245,1935],{"class":630},[544,3247,3248,3250],{"class":546,"line":877},[544,3249,1221],{"class":630},[544,3251,774],{"class":634},[526,3253,3255],{"id":3254},"pipeline-batching-retry","Pipeline (Batching & Retry)",[440,3257,3258,3259,3262],{},"For production, wrap your adapter with ",[443,3260,3261],{},"createDrainPipeline"," to batch and retry:",[534,3264,3266],{"className":616,"code":3265,"filename":618,"language":619,"meta":540,"style":540},"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,3267,3268,3289,3307,3327,3331,3353,3382,3401,3407,3426,3430],{"__ignoreMap":540},[544,3269,3270,3272,3274,3276,3279,3281,3283,3285,3287],{"class":546,"line":547},[544,3271,627],{"class":626},[544,3273,712],{"class":626},[544,3275,631],{"class":630},[544,3277,3278],{"class":634}," DrainContext",[544,3280,638],{"class":630},[544,3282,641],{"class":626},[544,3284,644],{"class":630},[544,3286,690],{"class":553},[544,3288,650],{"class":630},[544,3290,3291,3293,3295,3297,3299,3301,3303,3305],{"class":546,"line":653},[544,3292,627],{"class":626},[544,3294,631],{"class":630},[544,3296,3094],{"class":634},[544,3298,638],{"class":630},[544,3300,641],{"class":626},[544,3302,644],{"class":630},[544,3304,3103],{"class":553},[544,3306,650],{"class":630},[544,3308,3309,3311,3313,3316,3318,3320,3322,3325],{"class":546,"line":674},[544,3310,627],{"class":626},[544,3312,631],{"class":630},[544,3314,3315],{"class":634}," createDrainPipeline",[544,3317,638],{"class":630},[544,3319,641],{"class":626},[544,3321,644],{"class":630},[544,3323,3324],{"class":553},"evlog\u002Fpipeline",[544,3326,650],{"class":630},[544,3328,3329],{"class":546,"line":695},[544,3330,732],{"emptyLinePlaceholder":731},[544,3332,3333,3335,3338,3340,3342,3344,3347,3349,3351],{"class":546,"line":728},[544,3334,786],{"class":785},[544,3336,3337],{"class":634}," pipeline ",[544,3339,792],{"class":630},[544,3341,3315],{"class":738},[544,3343,802],{"class":630},[544,3345,3346],{"class":550},"DrainContext",[544,3348,808],{"class":630},[544,3350,742],{"class":634},[544,3352,1856],{"class":630},[544,3354,3355,3358,3360,3362,3365,3367,3370,3372,3375,3377,3380],{"class":546,"line":735},[544,3356,3357],{"class":748},"  batch",[544,3359,752],{"class":630},[544,3361,631],{"class":630},[544,3363,3364],{"class":748}," size",[544,3366,752],{"class":630},[544,3368,3369],{"class":1106}," 50",[544,3371,704],{"class":630},[544,3373,3374],{"class":748}," intervalMs",[544,3376,752],{"class":630},[544,3378,3379],{"class":1106}," 5000",[544,3381,2178],{"class":630},[544,3383,3384,3387,3389,3391,3394,3396,3399],{"class":546,"line":777},[544,3385,3386],{"class":748},"  retry",[544,3388,752],{"class":630},[544,3390,631],{"class":630},[544,3392,3393],{"class":748}," maxAttempts",[544,3395,752],{"class":630},[544,3397,3398],{"class":1106}," 3",[544,3400,2178],{"class":630},[544,3402,3403,3405],{"class":546,"line":782},[544,3404,1221],{"class":630},[544,3406,774],{"class":634},[544,3408,3409,3411,3414,3416,3419,3421,3424],{"class":546,"line":826},[544,3410,786],{"class":785},[544,3412,3413],{"class":634}," drain ",[544,3415,792],{"class":630},[544,3417,3418],{"class":738}," pipeline",[544,3420,742],{"class":634},[544,3422,3423],{"class":738},"createAxiomDrain",[544,3425,823],{"class":634},[544,3427,3428],{"class":546,"line":831},[544,3429,732],{"emptyLinePlaceholder":731},[544,3431,3432,3434,3436,3438,3440,3442,3444,3446,3448,3450,3452,3454,3456],{"class":546,"line":844},[544,3433,786],{"class":785},[544,3435,956],{"class":634},[544,3437,792],{"class":630},[544,3439,707],{"class":738},[544,3441,742],{"class":634},[544,3443,965],{"class":630},[544,3445,660],{"class":738},[544,3447,3165],{"class":634},[544,3449,704],{"class":630},[544,3451,631],{"class":630},[544,3453,3413],{"class":634},[544,3455,1221],{"class":630},[544,3457,774],{"class":634},[1118,3459,3460,3461,3464,3465,3468],{"color":1120,"icon":13},"Call ",[443,3462,3463],{},"drain.flush()"," on server shutdown to ensure buffered events are sent. See the ",[511,3466,3467],{"href":400},"Pipeline docs"," for all options.",[522,3470,3472],{"id":3471},"tail-sampling","Tail Sampling",[534,3474,3476],{"className":616,"code":3475,"filename":618,"language":619,"meta":540,"style":540},"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,3477,3478,3500,3512,3529,3572,3576],{"__ignoreMap":540},[544,3479,3480,3482,3484,3486,3488,3490,3492,3494,3496,3498],{"class":546,"line":547},[544,3481,786],{"class":785},[544,3483,956],{"class":634},[544,3485,792],{"class":630},[544,3487,707],{"class":738},[544,3489,742],{"class":634},[544,3491,965],{"class":630},[544,3493,660],{"class":738},[544,3495,3165],{"class":634},[544,3497,704],{"class":630},[544,3499,841],{"class":630},[544,3501,3502,3504,3506,3508,3510],{"class":546,"line":653},[544,3503,3174],{"class":748},[544,3505,752],{"class":630},[544,3507,3094],{"class":738},[544,3509,811],{"class":634},[544,3511,937],{"class":630},[544,3513,3514,3517,3519,3521,3523,3525,3527],{"class":546,"line":674},[544,3515,3516],{"class":738},"  keep",[544,3518,752],{"class":630},[544,3520,2739],{"class":630},[544,3522,3194],{"class":865},[544,3524,934],{"class":630},[544,3526,872],{"class":785},[544,3528,841],{"class":630},[544,3530,3531,3533,3535,3537,3539,3542,3545,3548,3550,3552,3555,3558,3560,3562,3564,3567,3569],{"class":546,"line":695},[544,3532,2736],{"class":626},[544,3534,2739],{"class":748},[544,3536,3194],{"class":634},[544,3538,478],{"class":630},[544,3540,3541],{"class":634},"duration",[544,3543,3544],{"class":630}," &&",[544,3546,3547],{"class":634}," ctx",[544,3549,478],{"class":630},[544,3551,3541],{"class":634},[544,3553,3554],{"class":630}," >",[544,3556,3557],{"class":1106}," 2000",[544,3559,2763],{"class":748},[544,3561,3194],{"class":634},[544,3563,478],{"class":630},[544,3565,3566],{"class":634},"shouldKeep",[544,3568,1028],{"class":630},[544,3570,3571],{"class":902}," true\n",[544,3573,3574],{"class":546,"line":728},[544,3575,1935],{"class":630},[544,3577,3578,3580],{"class":546,"line":735},[544,3579,1221],{"class":630},[544,3581,774],{"class":634},[522,3583,3585],{"id":3584},"route-filtering","Route Filtering",[440,3587,3588,3591,3592,3595,3596,2739,3599,3602],{},[443,3589,3590],{},"include"," \u002F ",[443,3593,3594],{},"exclude"," match against the ",[1122,3597,3598],{},"HTTP path",[443,3600,3601],{},"request.url.pathname","), not the procedure name:",[534,3604,3606],{"className":616,"code":3605,"filename":618,"language":619,"meta":540,"style":540},"const handler = withEvlog(new RPCHandler(router), {\n  include: ['\u002Frpc\u002F**'],\n  exclude: ['\u002Frpc\u002F_internal\u002F**'],\n  routes: {\n    '\u002Frpc\u002Fauth\u002F**': { service: 'auth-service' },\n  },\n})\n",[443,3607,3608,3630,3652,3672,3681,3708,3712],{"__ignoreMap":540},[544,3609,3610,3612,3614,3616,3618,3620,3622,3624,3626,3628],{"class":546,"line":547},[544,3611,786],{"class":785},[544,3613,956],{"class":634},[544,3615,792],{"class":630},[544,3617,707],{"class":738},[544,3619,742],{"class":634},[544,3621,965],{"class":630},[544,3623,660],{"class":738},[544,3625,3165],{"class":634},[544,3627,704],{"class":630},[544,3629,841],{"class":630},[544,3631,3632,3635,3637,3640,3642,3645,3647,3650],{"class":546,"line":653},[544,3633,3634],{"class":748},"  include",[544,3636,752],{"class":630},[544,3638,3639],{"class":634}," [",[544,3641,767],{"class":630},[544,3643,3644],{"class":553},"\u002Frpc\u002F**",[544,3646,767],{"class":630},[544,3648,3649],{"class":634},"]",[544,3651,937],{"class":630},[544,3653,3654,3657,3659,3661,3663,3666,3668,3670],{"class":546,"line":674},[544,3655,3656],{"class":748},"  exclude",[544,3658,752],{"class":630},[544,3660,3639],{"class":634},[544,3662,767],{"class":630},[544,3664,3665],{"class":553},"\u002Frpc\u002F_internal\u002F**",[544,3667,767],{"class":630},[544,3669,3649],{"class":634},[544,3671,937],{"class":630},[544,3673,3674,3677,3679],{"class":546,"line":695},[544,3675,3676],{"class":748},"  routes",[544,3678,752],{"class":630},[544,3680,841],{"class":630},[544,3682,3683,3686,3689,3691,3693,3695,3697,3699,3701,3704,3706],{"class":546,"line":728},[544,3684,3685],{"class":630},"    '",[544,3687,3688],{"class":748},"\u002Frpc\u002Fauth\u002F**",[544,3690,767],{"class":630},[544,3692,752],{"class":630},[544,3694,631],{"class":630},[544,3696,757],{"class":748},[544,3698,752],{"class":630},[544,3700,644],{"class":630},[544,3702,3703],{"class":553},"auth-service",[544,3705,767],{"class":630},[544,3707,2178],{"class":630},[544,3709,3710],{"class":546,"line":735},[544,3711,1935],{"class":630},[544,3713,3714,3716],{"class":546,"line":777},[544,3715,1221],{"class":630},[544,3717,774],{"class":634},[440,3719,3720,3721,3723],{},"When a route is excluded, the wrapper still injects a no-op logger into ",[443,3722,477],{}," so your procedures never crash on missing fields — the wide event just isn't emitted and drain\u002Fenrich aren't called.",[522,3725,3727],{"id":3726},"streaming-procedures","Streaming Procedures",[440,3729,3730,3731,3736,3737,3740,3741,3744,3745,3748,3749,3752,3753,3756],{},"oRPC's ",[511,3732,3735],{"href":3733,"rel":3734},"https:\u002F\u002Forpc.dev\u002Fdocs\u002Fevent-iterator",[515],"Event Iterator"," lets procedures stream chunks back over Server-Sent Events. The wrapper emits the wide event when ",[443,3738,3739],{},"handler.handle()"," returns the ",[443,3742,3743],{},"Response",", which is ",[1122,3746,3747],{},"before"," the stream has fully drained. Token counts or per-chunk fields written via ",[443,3750,3751],{},"context.log.set()"," after the procedure returns are dropped (and surface a ",[443,3754,3755],{},"[evlog]"," warning) — accumulate them inside the procedure body before yielding the iterator, or use a separate drain pipeline for stream metrics.",[522,3758,3760],{"id":3759},"run-locally","Run Locally",[534,3762,3765],{"className":536,"code":3763,"filename":3764,"language":539,"meta":540,"style":540},"git clone https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog.git\ncd evlog\npnpm install\npnpm run example:orpc\n","Terminal",[443,3766,3767,3778,3786,3793],{"__ignoreMap":540},[544,3768,3769,3772,3775],{"class":546,"line":547},[544,3770,3771],{"class":550},"git",[544,3773,3774],{"class":553}," clone",[544,3776,3777],{"class":553}," https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog.git\n",[544,3779,3780,3783],{"class":546,"line":653},[544,3781,3782],{"class":738},"cd",[544,3784,3785],{"class":553}," evlog\n",[544,3787,3788,3790],{"class":546,"line":674},[544,3789,538],{"class":550},[544,3791,3792],{"class":553}," install\n",[544,3794,3795,3797,3800],{"class":546,"line":695},[544,3796,538],{"class":550},[544,3798,3799],{"class":553}," run",[544,3801,3802],{"class":553}," example:orpc\n",[440,3804,3805,3806,3810],{},"Open ",[511,3807,3808],{"href":3808,"rel":3809},"http:\u002F\u002Flocalhost:3000",[515]," to explore the interactive test UI.",[3812,3813,3814],"card-group",{},[3815,3816,3820],"card",{"icon":3817,"title":3818,"to":3819},"i-simple-icons-github","Source Code","https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog\u002Ftree\u002Fmain\u002Fexamples\u002Forpc","Browse the complete oRPC example source on GitHub.",[522,3822,3824],{"id":3823},"next-steps","Next Steps",[440,3826,3827,3828,3830],{},"Deepen your ",[1122,3829,231],{}," integration:",[448,3832,3833,3838,3843,3848],{},[451,3834,3835,3837],{},[511,3836,46],{"href":47},": Design comprehensive events with context layering",[451,3839,3840,3842],{},[511,3841,90],{"href":95},": Send logs to Axiom, Sentry, PostHog, and more",[451,3844,3845,3847],{},[511,3846,61],{"href":62},": Control log volume with head and tail sampling",[451,3849,3850,3852,3853,2888,3856,3859,3860,3863],{},[511,3851,51],{"href":52},": Throw errors with ",[443,3854,3855],{},"why",[443,3857,3858],{},"fix",", and ",[443,3861,3862],{},"link"," fields",[3865,3866,3867],"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}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":540,"searchDepth":653,"depth":653,"links":3869},[3870,3874,3875,3876,3877,3878,3879,3882,3883,3884,3885,3886],{"id":524,"depth":653,"text":25,"children":3871},[3872,3873],{"id":528,"depth":674,"text":529},{"id":612,"depth":674,"text":613},{"id":1162,"depth":653,"text":46},{"id":1565,"depth":653,"text":1566},{"id":1697,"depth":653,"text":1698},{"id":2436,"depth":653,"text":2437},{"id":3061,"depth":653,"text":409},{"id":3074,"depth":653,"text":3075,"children":3880},[3881],{"id":3254,"depth":674,"text":3255},{"id":3471,"depth":653,"text":3472},{"id":3584,"depth":653,"text":3585},{"id":3726,"depth":653,"text":3727},{"id":3759,"depth":653,"text":3760},{"id":3823,"depth":653,"text":3824},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in oRPC applications.","md",[3890],{"label":3818,"icon":3817,"to":3819,"color":3891,"variant":3892},"neutral","subtle",{},{"title":231,"icon":234},{"title":231,"description":3887},"y8lb5X_8EzbuOiOVXbmRQtoKWW9lsHaUDPf0S3i2oMw",[3898,3900],{"title":226,"path":227,"stem":228,"description":3899,"icon":229,"children":-1},"Wide events and structured errors in Astro server middleware.",{"title":236,"path":237,"stem":238,"description":3901,"icon":239,"children":-1},"Wide events and structured logging in AWS Lambda functions, including SQS consumers and event-driven handlers.",1778444366429]