[{"data":1,"prerenderedAt":4092},["ShallowReactive",2],{"navigation_docs":3,"-integrate-frameworks-orpc":434,"-integrate-frameworks-orpc-surround":4087},[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":4077,"extension":4078,"links":4079,"meta":4083,"navigation":4084,"path":232,"seo":4085,"stem":233,"__hash__":4086},"docs\u002F3.integrate\u002Fframeworks\u002F15.orpc.md",{"type":437,"value":438,"toc":4058},"minimark",[439,447,479,521,525,530,610,614,1117,1141,1160,1163,1166,1475,1478,1546,1563,1567,1577,1684,1695,1699,1726,1729,1897,1920,2071,2301,2335,2407,2562,2606,2624,2628,2640,3073,3087,3253,3256,3266,3270,3275,3446,3450,3457,3652,3663,3667,3776,3780,3796,3911,3917,3921,3950,3954,3996,4004,4014,4018,4024,4054],[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,1715,1716,1705,1719,1705,1722,1725],{},"Author errors with ",[443,1703,1704],{},"defineErrorCatalog"," \u002F ",[443,1707,1708],{},"createError"," — the same way you do with every other evlog integration. The ",[443,1711,469],{}," procedure middleware bridges them to oRPC at throw time, so the wire response keeps your catalog ",[443,1714,443],{},", status, message, and the ",[443,1717,1718],{},"why",[443,1720,1721],{},"fix",[443,1723,1724],{},"link"," guidance.",[440,1727,1728],{},"Both authoring styles flow through the same bridge:",[534,1730,1732],{"className":616,"code":1731,"language":619,"meta":540,"style":540},"\u002F\u002F Catalog (recommended for shared\u002Freused errors)\nthrow billingErrors.PAYMENT_DECLINED({ internal: { paymentRef: 'pay_X' } })\n\n\u002F\u002F Ad-hoc createError (fine for one-off errors)\nthrow createError({\n  message: 'Card declined',\n  code: 'PAYMENT_DECLINED',\n  status: 402,\n  why: '...',\n  fix: '...',\n  link: '...',\n})\n",[443,1733,1734,1739,1781,1785,1790,1802,1818,1833,1845,1861,1876,1891],{"__ignoreMap":540},[544,1735,1736],{"class":546,"line":547},[544,1737,1738],{"class":1678},"\u002F\u002F Catalog (recommended for shared\u002Freused errors)\n",[544,1740,1741,1744,1747,1749,1752,1754,1756,1759,1761,1763,1766,1768,1770,1773,1775,1777,1779],{"class":546,"line":653},[544,1742,1743],{"class":626},"throw",[544,1745,1746],{"class":634}," billingErrors",[544,1748,478],{"class":630},[544,1750,1751],{"class":738},"PAYMENT_DECLINED",[544,1753,742],{"class":634},[544,1755,745],{"class":630},[544,1757,1758],{"class":748}," internal",[544,1760,752],{"class":630},[544,1762,631],{"class":630},[544,1764,1765],{"class":748}," paymentRef",[544,1767,752],{"class":630},[544,1769,644],{"class":630},[544,1771,1772],{"class":553},"pay_X",[544,1774,767],{"class":630},[544,1776,638],{"class":630},[544,1778,638],{"class":630},[544,1780,774],{"class":634},[544,1782,1783],{"class":546,"line":674},[544,1784,732],{"emptyLinePlaceholder":731},[544,1786,1787],{"class":546,"line":695},[544,1788,1789],{"class":1678},"\u002F\u002F Ad-hoc createError (fine for one-off errors)\n",[544,1791,1792,1794,1797,1799],{"class":546,"line":728},[544,1793,1743],{"class":626},[544,1795,1796],{"class":738}," createError",[544,1798,742],{"class":634},[544,1800,1801],{"class":630},"{\n",[544,1803,1804,1807,1809,1811,1814,1816],{"class":546,"line":735},[544,1805,1806],{"class":748},"  message",[544,1808,752],{"class":630},[544,1810,644],{"class":630},[544,1812,1813],{"class":553},"Card declined",[544,1815,767],{"class":630},[544,1817,937],{"class":630},[544,1819,1820,1823,1825,1827,1829,1831],{"class":546,"line":777},[544,1821,1822],{"class":748},"  code",[544,1824,752],{"class":630},[544,1826,644],{"class":630},[544,1828,1751],{"class":553},[544,1830,767],{"class":630},[544,1832,937],{"class":630},[544,1834,1835,1838,1840,1843],{"class":546,"line":782},[544,1836,1837],{"class":748},"  status",[544,1839,752],{"class":630},[544,1841,1842],{"class":1106}," 402",[544,1844,937],{"class":630},[544,1846,1847,1850,1852,1854,1857,1859],{"class":546,"line":826},[544,1848,1849],{"class":748},"  why",[544,1851,752],{"class":630},[544,1853,644],{"class":630},[544,1855,1856],{"class":553},"...",[544,1858,767],{"class":630},[544,1860,937],{"class":630},[544,1862,1863,1866,1868,1870,1872,1874],{"class":546,"line":831},[544,1864,1865],{"class":748},"  fix",[544,1867,752],{"class":630},[544,1869,644],{"class":630},[544,1871,1856],{"class":553},[544,1873,767],{"class":630},[544,1875,937],{"class":630},[544,1877,1878,1881,1883,1885,1887,1889],{"class":546,"line":844},[544,1879,1880],{"class":748},"  link",[544,1882,752],{"class":630},[544,1884,644],{"class":630},[544,1886,1856],{"class":553},[544,1888,767],{"class":630},[544,1890,937],{"class":630},[544,1892,1893,1895],{"class":546,"line":877},[544,1894,1221],{"class":630},[544,1896,774],{"class":634},[440,1898,1899,1900,1903,1904,1907,1908,1910,1911,1913,1914,1916,1917,478],{},"The catalog is just sugar over ",[443,1901,1902],{},"createError()"," — both produce an ",[443,1905,1906],{},"EvlogError",", both carry the same metadata, both come out of oRPC with the same wire shape. If ",[443,1909,1902],{}," is called without ",[443,1912,443],{},", the wire ",[443,1915,443],{}," falls back to ",[443,1918,1919],{},"'EVLOG_ERROR'",[534,1921,1924],{"className":616,"code":1922,"filename":1923,"language":619,"meta":540,"style":540},"import { defineErrorCatalog } from 'evlog'\n\nexport const billingErrors = defineErrorCatalog('billing', {\n  PAYMENT_DECLINED: {\n    status: 402,\n    message: 'Payment declined',\n    why: 'The card issuer rejected the charge for insufficient funds',\n    fix: 'Ask the user to use a different card or top up the existing one',\n    link: 'https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined',\n  },\n})\n","server\u002Ferrors.ts",[443,1925,1926,1945,1949,1976,1985,1996,2012,2028,2044,2060,2065],{"__ignoreMap":540},[544,1927,1928,1930,1932,1935,1937,1939,1941,1943],{"class":546,"line":547},[544,1929,627],{"class":626},[544,1931,631],{"class":630},[544,1933,1934],{"class":634}," defineErrorCatalog",[544,1936,638],{"class":630},[544,1938,641],{"class":626},[544,1940,644],{"class":630},[544,1942,690],{"class":553},[544,1944,650],{"class":630},[544,1946,1947],{"class":546,"line":653},[544,1948,732],{"emptyLinePlaceholder":731},[544,1950,1951,1953,1956,1959,1961,1963,1965,1967,1970,1972,1974],{"class":546,"line":674},[544,1952,981],{"class":626},[544,1954,1955],{"class":785}," const",[544,1957,1958],{"class":634}," billingErrors ",[544,1960,792],{"class":630},[544,1962,1934],{"class":738},[544,1964,742],{"class":634},[544,1966,767],{"class":630},[544,1968,1969],{"class":553},"billing",[544,1971,767],{"class":630},[544,1973,704],{"class":630},[544,1975,841],{"class":630},[544,1977,1978,1981,1983],{"class":546,"line":695},[544,1979,1980],{"class":748},"  PAYMENT_DECLINED",[544,1982,752],{"class":630},[544,1984,841],{"class":630},[544,1986,1987,1990,1992,1994],{"class":546,"line":728},[544,1988,1989],{"class":748},"    status",[544,1991,752],{"class":630},[544,1993,1842],{"class":1106},[544,1995,937],{"class":630},[544,1997,1998,2001,2003,2005,2008,2010],{"class":546,"line":735},[544,1999,2000],{"class":748},"    message",[544,2002,752],{"class":630},[544,2004,644],{"class":630},[544,2006,2007],{"class":553},"Payment declined",[544,2009,767],{"class":630},[544,2011,937],{"class":630},[544,2013,2014,2017,2019,2021,2024,2026],{"class":546,"line":777},[544,2015,2016],{"class":748},"    why",[544,2018,752],{"class":630},[544,2020,644],{"class":630},[544,2022,2023],{"class":553},"The card issuer rejected the charge for insufficient funds",[544,2025,767],{"class":630},[544,2027,937],{"class":630},[544,2029,2030,2033,2035,2037,2040,2042],{"class":546,"line":782},[544,2031,2032],{"class":748},"    fix",[544,2034,752],{"class":630},[544,2036,644],{"class":630},[544,2038,2039],{"class":553},"Ask the user to use a different card or top up the existing one",[544,2041,767],{"class":630},[544,2043,937],{"class":630},[544,2045,2046,2049,2051,2053,2056,2058],{"class":546,"line":826},[544,2047,2048],{"class":748},"    link",[544,2050,752],{"class":630},[544,2052,644],{"class":630},[544,2054,2055],{"class":553},"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined",[544,2057,767],{"class":630},[544,2059,937],{"class":630},[544,2061,2062],{"class":546,"line":831},[544,2063,2064],{"class":630},"  },\n",[544,2066,2067,2069],{"class":546,"line":844},[544,2068,1221],{"class":630},[544,2070,774],{"class":634},[534,2072,2074],{"className":616,"code":2073,"filename":618,"language":619,"meta":540,"style":540},"import { z } from 'zod'\nimport { billingErrors } from '.\u002Ferrors'\n\nexport const charge = base\n  .input(z.object({ amount: z.number().int().positive() }))\n  .handler(({ input, context }) => {\n    context.log.set({ payment: { amount: input.amount } })\n    throw billingErrors.PAYMENT_DECLINED({\n      internal: { paymentRef: 'pay_X', attemptedAmount: input.amount },\n    })\n  })\n",[443,2075,2076,2095,2114,2118,2131,2178,2200,2238,2253,2288,2295],{"__ignoreMap":540},[544,2077,2078,2080,2082,2084,2086,2088,2090,2093],{"class":546,"line":547},[544,2079,627],{"class":626},[544,2081,631],{"class":630},[544,2083,1210],{"class":634},[544,2085,638],{"class":630},[544,2087,641],{"class":626},[544,2089,644],{"class":630},[544,2091,2092],{"class":553},"zod",[544,2094,650],{"class":630},[544,2096,2097,2099,2101,2103,2105,2107,2109,2112],{"class":546,"line":653},[544,2098,627],{"class":626},[544,2100,631],{"class":630},[544,2102,1746],{"class":634},[544,2104,638],{"class":630},[544,2106,641],{"class":626},[544,2108,644],{"class":630},[544,2110,2111],{"class":553},".\u002Ferrors",[544,2113,650],{"class":630},[544,2115,2116],{"class":546,"line":674},[544,2117,732],{"emptyLinePlaceholder":731},[544,2119,2120,2122,2124,2127,2129],{"class":546,"line":695},[544,2121,981],{"class":626},[544,2123,1955],{"class":785},[544,2125,2126],{"class":634}," charge ",[544,2128,792],{"class":630},[544,2130,1182],{"class":634},[544,2132,2133,2135,2137,2139,2141,2143,2145,2147,2149,2151,2153,2155,2158,2160,2162,2165,2167,2169,2172,2174,2176],{"class":546,"line":728},[544,2134,1187],{"class":630},[544,2136,1190],{"class":738},[544,2138,1193],{"class":634},[544,2140,478],{"class":630},[544,2142,1198],{"class":738},[544,2144,742],{"class":634},[544,2146,745],{"class":630},[544,2148,1667],{"class":748},[544,2150,752],{"class":630},[544,2152,1210],{"class":634},[544,2154,478],{"class":630},[544,2156,2157],{"class":738},"number",[544,2159,811],{"class":634},[544,2161,478],{"class":630},[544,2163,2164],{"class":738},"int",[544,2166,811],{"class":634},[544,2168,478],{"class":630},[544,2170,2171],{"class":738},"positive",[544,2173,1218],{"class":634},[544,2175,1221],{"class":630},[544,2177,1224],{"class":634},[544,2179,2180,2182,2184,2186,2188,2190,2192,2194,2196,2198],{"class":546,"line":735},[544,2181,1187],{"class":630},[544,2183,857],{"class":738},[544,2185,742],{"class":634},[544,2187,862],{"class":630},[544,2189,1241],{"class":865},[544,2191,704],{"class":630},[544,2193,866],{"class":865},[544,2195,869],{"class":630},[544,2197,872],{"class":785},[544,2199,841],{"class":630},[544,2201,2202,2204,2206,2208,2210,2212,2214,2216,2218,2220,2222,2224,2226,2228,2230,2232,2234,2236],{"class":546,"line":777},[544,2203,880],{"class":634},[544,2205,478],{"class":630},[544,2207,885],{"class":634},[544,2209,478],{"class":630},[544,2211,890],{"class":738},[544,2213,742],{"class":748},[544,2215,745],{"class":630},[544,2217,1660],{"class":748},[544,2219,752],{"class":630},[544,2221,631],{"class":630},[544,2223,1667],{"class":748},[544,2225,752],{"class":630},[544,2227,1241],{"class":634},[544,2229,478],{"class":630},[544,2231,1621],{"class":634},[544,2233,638],{"class":630},[544,2235,638],{"class":630},[544,2237,774],{"class":748},[544,2239,2240,2243,2245,2247,2249,2251],{"class":546,"line":782},[544,2241,2242],{"class":626},"    throw",[544,2244,1746],{"class":634},[544,2246,478],{"class":630},[544,2248,1751],{"class":738},[544,2250,742],{"class":748},[544,2252,1801],{"class":630},[544,2254,2255,2258,2260,2262,2264,2266,2268,2270,2272,2274,2277,2279,2281,2283,2285],{"class":546,"line":826},[544,2256,2257],{"class":748},"      internal",[544,2259,752],{"class":630},[544,2261,631],{"class":630},[544,2263,1765],{"class":748},[544,2265,752],{"class":630},[544,2267,644],{"class":630},[544,2269,1772],{"class":553},[544,2271,767],{"class":630},[544,2273,704],{"class":630},[544,2275,2276],{"class":748}," attemptedAmount",[544,2278,752],{"class":630},[544,2280,1241],{"class":634},[544,2282,478],{"class":630},[544,2284,1621],{"class":634},[544,2286,2287],{"class":630}," },\n",[544,2289,2290,2293],{"class":546,"line":831},[544,2291,2292],{"class":630},"    }",[544,2294,774],{"class":748},[544,2296,2297,2299],{"class":546,"line":844},[544,2298,931],{"class":630},[544,2300,774],{"class":634},[440,2302,2303,2304,2306,2307,2310,2311,2314,2315,2317,2318,2317,2321,2324,2325,2317,2327,2317,2329,2331,2332,752],{},"Inside the procedure middleware, evlog catches the ",[443,2305,1906],{}," thrown by the catalog factory, records it on the wide event (so the level is promoted to ",[443,2308,2309],{},"error","), and re-throws an ",[443,2312,2313],{},"ORPCError"," carrying the same ",[443,2316,443],{},"\u002F",[443,2319,2320],{},"status",[443,2322,2323],{},"message"," plus ",[443,2326,1718],{},[443,2328,1721],{},[443,2330,1724],{}," under ",[443,2333,2334],{},"data",[534,2336,2338],{"className":536,"code":2337,"filename":1481,"language":539,"meta":540,"style":540},"14:58:20 ERROR [my-rpc] POST \u002Fpayments\u002Fcharge 402 in 3ms\n  ├─ operation: payments.charge\n  ├─ error: name=EvlogError code=billing.PAYMENT_DECLINED status=402 message=Payment declined\n  ├─ payment: amount=1999\n  └─ requestId: 880a50ac-...\n",[443,2339,2340,2351,2360,2385,2398],{"__ignoreMap":540},[544,2341,2342,2345,2348],{"class":546,"line":547},[544,2343,2344],{"class":550},"14:58:20",[544,2346,2347],{"class":553}," ERROR",[544,2349,2350],{"class":634}," [my-rpc] POST \u002Fpayments\u002Fcharge 402 in 3ms\n",[544,2352,2353,2355,2357],{"class":546,"line":653},[544,2354,1499],{"class":550},[544,2356,1502],{"class":553},[544,2358,2359],{"class":553}," payments.charge\n",[544,2361,2362,2364,2367,2370,2373,2376,2379,2382],{"class":546,"line":674},[544,2363,1499],{"class":550},[544,2365,2366],{"class":553}," error:",[544,2368,2369],{"class":553}," name=EvlogError",[544,2371,2372],{"class":553}," code=billing.PAYMENT_DECLINED",[544,2374,2375],{"class":553}," status=",[544,2377,2378],{"class":1106},"402",[544,2380,2381],{"class":553}," message=Payment",[544,2383,2384],{"class":553}," declined\n",[544,2386,2387,2389,2392,2395],{"class":546,"line":695},[544,2388,1499],{"class":550},[544,2390,2391],{"class":553}," payment:",[544,2393,2394],{"class":553}," amount=",[544,2396,2397],{"class":1106},"1999\n",[544,2399,2400,2402,2404],{"class":546,"line":728},[544,2401,1539],{"class":550},[544,2403,1542],{"class":553},[544,2405,2406],{"class":553}," 880a50ac-...\n",[534,2408,2413],{"className":2409,"code":2410,"filename":2411,"language":2412,"meta":540,"style":540},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"defined\": false,\n  \"code\": \"billing.PAYMENT_DECLINED\",\n  \"status\": 402,\n  \"message\": \"Payment declined\",\n  \"data\": {\n    \"why\": \"The card issuer rejected the charge for insufficient funds\",\n    \"fix\": \"Ask the user to use a different card or top up the existing one\",\n    \"link\": \"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined\"\n  }\n}\n","HTTP 402","json",[443,2414,2415,2419,2435,2455,2469,2487,2499,2518,2536,2553,2558],{"__ignoreMap":540},[544,2416,2417],{"class":546,"line":547},[544,2418,1801],{"class":630},[544,2420,2421,2424,2427,2430,2432],{"class":546,"line":653},[544,2422,2423],{"class":630},"  \"",[544,2425,2426],{"class":785},"defined",[544,2428,2429],{"class":630},"\"",[544,2431,752],{"class":630},[544,2433,2434],{"class":630}," false,\n",[544,2436,2437,2439,2441,2443,2445,2448,2451,2453],{"class":546,"line":674},[544,2438,2423],{"class":630},[544,2440,443],{"class":785},[544,2442,2429],{"class":630},[544,2444,752],{"class":630},[544,2446,2447],{"class":630}," \"",[544,2449,2450],{"class":553},"billing.PAYMENT_DECLINED",[544,2452,2429],{"class":630},[544,2454,937],{"class":630},[544,2456,2457,2459,2461,2463,2465,2467],{"class":546,"line":695},[544,2458,2423],{"class":630},[544,2460,2320],{"class":785},[544,2462,2429],{"class":630},[544,2464,752],{"class":630},[544,2466,1842],{"class":1106},[544,2468,937],{"class":630},[544,2470,2471,2473,2475,2477,2479,2481,2483,2485],{"class":546,"line":728},[544,2472,2423],{"class":630},[544,2474,2323],{"class":785},[544,2476,2429],{"class":630},[544,2478,752],{"class":630},[544,2480,2447],{"class":630},[544,2482,2007],{"class":553},[544,2484,2429],{"class":630},[544,2486,937],{"class":630},[544,2488,2489,2491,2493,2495,2497],{"class":546,"line":735},[544,2490,2423],{"class":630},[544,2492,2334],{"class":785},[544,2494,2429],{"class":630},[544,2496,752],{"class":630},[544,2498,841],{"class":630},[544,2500,2501,2504,2506,2508,2510,2512,2514,2516],{"class":546,"line":777},[544,2502,2503],{"class":630},"    \"",[544,2505,1718],{"class":550},[544,2507,2429],{"class":630},[544,2509,752],{"class":630},[544,2511,2447],{"class":630},[544,2513,2023],{"class":553},[544,2515,2429],{"class":630},[544,2517,937],{"class":630},[544,2519,2520,2522,2524,2526,2528,2530,2532,2534],{"class":546,"line":782},[544,2521,2503],{"class":630},[544,2523,1721],{"class":550},[544,2525,2429],{"class":630},[544,2527,752],{"class":630},[544,2529,2447],{"class":630},[544,2531,2039],{"class":553},[544,2533,2429],{"class":630},[544,2535,937],{"class":630},[544,2537,2538,2540,2542,2544,2546,2548,2550],{"class":546,"line":826},[544,2539,2503],{"class":630},[544,2541,1724],{"class":550},[544,2543,2429],{"class":630},[544,2545,752],{"class":630},[544,2547,2447],{"class":630},[544,2549,2055],{"class":553},[544,2551,2552],{"class":630},"\"\n",[544,2554,2555],{"class":546,"line":831},[544,2556,2557],{"class":630},"  }\n",[544,2559,2560],{"class":546,"line":844},[544,2561,943],{"class":630},[1118,2563,2564,2576,2577,2579,2580,2582,2583,2586,2587,2590,2591,2594,2595,2597,2598,2602,2603,2605],{"color":1120,"icon":13},[1122,2565,2566,2567,1705,2569,1705,2571,2331,2573,2575],{},"Why are ",[443,2568,1718],{},[443,2570,1721],{},[443,2572,1724],{},[443,2574,2334],{}," and not at the response root?"," The other evlog framework integrations put those fields at the root next to ",[443,2578,2323],{}," and ",[443,2581,2320],{},". oRPC's wire format is fixed: every error is serialized as ",[443,2584,2585],{},"{ defined, code, status, message, data }"," so that typed clients (",[443,2588,2589],{},"safe()"," from ",[443,2592,2593],{},"@orpc\u002Fclient",") can deserialize them as a typed union. Anything user-provided lives inside ",[443,2596,2334],{},". evlog follows the protocol — the ",[2599,2600,2601],"em",{},"authoring"," surface (catalogs, ",[443,2604,1902],{},") is the same everywhere; only the wire shape varies because oRPC has its own contract.",[440,2607,2608,2611,2612,2615,2616,2619,2620,2623],{},[443,2609,2610],{},"defined: false"," here means the error was authored with evlog's catalog rather than registered as an oRPC typed error via ",[443,2613,2614],{},"os.errors({...})",". If you want typed-client-side narrowing on the catalog codes, you can also feed the catalog into ",[443,2617,2618],{},"os.errors()"," and throw with ",[443,2621,2622],{},"errors.\u003CNAME>(...)","; both styles flow through the same wide-event pipeline.",[522,2625,2627],{"id":2626},"middleware-composition","Middleware Composition",[440,2629,2630,2632,2633,2636,2637,2639],{},[443,2631,469],{}," plays well with other oRPC middleware. Chain them with ",[443,2634,2635],{},".use()"," — every middleware sees ",[443,2638,477],{}," so each layer can append its own keys to the wide event without coordinating with the next:",[534,2641,2643],{"className":616,"code":2642,"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,2644,2645,2656,2670,2680,2692,2696,2730,2749,2812,2843,2849,2853,2867,2899,2926,2960,3000,3005,3053,3067],{"__ignoreMap":540},[544,2646,2647,2649,2651,2653],{"class":546,"line":547},[544,2648,786],{"class":785},[544,2650,789],{"class":634},[544,2652,792],{"class":630},[544,2654,2655],{"class":634}," os\n",[544,2657,2658,2660,2662,2664,2666,2668],{"class":546,"line":653},[544,2659,1187],{"class":630},[544,2661,799],{"class":738},[544,2663,802],{"class":630},[544,2665,805],{"class":550},[544,2667,808],{"class":630},[544,2669,1644],{"class":634},[544,2671,2672,2674,2677],{"class":546,"line":674},[544,2673,1187],{"class":630},[544,2675,2676],{"class":738},"errors",[544,2678,2679],{"class":634},"(errors)\n",[544,2681,2682,2684,2686,2688,2690],{"class":546,"line":695},[544,2683,1187],{"class":630},[544,2685,816],{"class":738},[544,2687,742],{"class":634},[544,2689,690],{"class":738},[544,2691,823],{"class":634},[544,2693,2694],{"class":546,"line":728},[544,2695,732],{"emptyLinePlaceholder":731},[544,2697,2698,2700,2703,2705,2707,2709,2711,2713,2715,2717,2719,2721,2724,2726,2728],{"class":546,"line":735},[544,2699,786],{"class":785},[544,2701,2702],{"class":634}," authed ",[544,2704,792],{"class":630},[544,2706,852],{"class":634},[544,2708,478],{"class":630},[544,2710,816],{"class":738},[544,2712,742],{"class":634},[544,2714,1235],{"class":785},[544,2716,1238],{"class":630},[544,2718,866],{"class":865},[544,2720,704],{"class":630},[544,2722,2723],{"class":865}," next",[544,2725,869],{"class":630},[544,2727,872],{"class":785},[544,2729,841],{"class":630},[544,2731,2732,2734,2736,2738,2740,2743,2745,2747],{"class":546,"line":777},[544,2733,1013],{"class":785},[544,2735,1270],{"class":634},[544,2737,1028],{"class":630},[544,2739,1031],{"class":626},[544,2741,2742],{"class":738}," verifyApiKey",[544,2744,742],{"class":748},[544,2746,1572],{"class":634},[544,2748,774],{"class":748},[544,2750,2751,2754,2756,2758,2760,2762,2764,2766,2769,2771,2773,2775,2777,2779,2781,2784,2786,2788,2790,2792,2794,2797,2799,2801,2803,2806,2808,2810],{"class":546,"line":782},[544,2752,2753],{"class":634},"  context",[544,2755,478],{"class":630},[544,2757,885],{"class":634},[544,2759,478],{"class":630},[544,2761,890],{"class":738},[544,2763,742],{"class":748},[544,2765,745],{"class":630},[544,2767,2768],{"class":748}," auth",[544,2770,752],{"class":630},[544,2772,631],{"class":630},[544,2774,918],{"class":748},[544,2776,752],{"class":630},[544,2778,903],{"class":902},[544,2780,704],{"class":630},[544,2782,2783],{"class":748}," userId",[544,2785,752],{"class":630},[544,2787,1270],{"class":634},[544,2789,478],{"class":630},[544,2791,1285],{"class":634},[544,2793,704],{"class":630},[544,2795,2796],{"class":748}," role",[544,2798,752],{"class":630},[544,2800,1270],{"class":634},[544,2802,478],{"class":630},[544,2804,2805],{"class":634},"role",[544,2807,638],{"class":630},[544,2809,638],{"class":630},[544,2811,774],{"class":748},[544,2813,2814,2816,2818,2820,2822,2824,2826,2828,2831,2833,2835,2837,2839,2841],{"class":546,"line":826},[544,2815,1069],{"class":626},[544,2817,2723],{"class":738},[544,2819,742],{"class":748},[544,2821,745],{"class":630},[544,2823,866],{"class":748},[544,2825,752],{"class":630},[544,2827,631],{"class":630},[544,2829,2830],{"class":630}," ...",[544,2832,1572],{"class":634},[544,2834,704],{"class":630},[544,2836,1270],{"class":634},[544,2838,638],{"class":630},[544,2840,638],{"class":630},[544,2842,774],{"class":748},[544,2844,2845,2847],{"class":546,"line":831},[544,2846,1221],{"class":630},[544,2848,774],{"class":634},[544,2850,2851],{"class":546,"line":844},[544,2852,732],{"emptyLinePlaceholder":731},[544,2854,2855,2857,2859,2862,2864],{"class":546,"line":877},[544,2856,981],{"class":626},[544,2858,1955],{"class":785},[544,2860,2861],{"class":634}," deleteResource ",[544,2863,792],{"class":630},[544,2865,2866],{"class":634}," authed\n",[544,2868,2869,2871,2873,2875,2877,2879,2881,2883,2885,2887,2889,2891,2893,2895,2897],{"class":546,"line":910},[544,2870,1187],{"class":630},[544,2872,1190],{"class":738},[544,2874,1193],{"class":634},[544,2876,478],{"class":630},[544,2878,1198],{"class":738},[544,2880,742],{"class":634},[544,2882,745],{"class":630},[544,2884,1205],{"class":748},[544,2886,752],{"class":630},[544,2888,1210],{"class":634},[544,2890,478],{"class":630},[544,2892,1215],{"class":738},[544,2894,1218],{"class":634},[544,2896,1221],{"class":630},[544,2898,1224],{"class":634},[544,2900,2901,2903,2905,2907,2909,2911,2913,2915,2917,2920,2922,2924],{"class":546,"line":928},[544,2902,1187],{"class":630},[544,2904,857],{"class":738},[544,2906,742],{"class":634},[544,2908,862],{"class":630},[544,2910,1241],{"class":865},[544,2912,704],{"class":630},[544,2914,866],{"class":865},[544,2916,704],{"class":630},[544,2918,2919],{"class":865}," errors",[544,2921,869],{"class":630},[544,2923,872],{"class":785},[544,2925,841],{"class":630},[544,2927,2928,2931,2934,2936,2938,2941,2943,2945,2948,2950,2953,2955,2958],{"class":546,"line":940},[544,2929,2930],{"class":626},"    if",[544,2932,2933],{"class":748}," (",[544,2935,1572],{"class":634},[544,2937,478],{"class":630},[544,2939,2940],{"class":634},"user",[544,2942,478],{"class":630},[544,2944,2805],{"class":634},[544,2946,2947],{"class":630}," !==",[544,2949,644],{"class":630},[544,2951,2952],{"class":553},"superadmin",[544,2954,767],{"class":630},[544,2956,2957],{"class":748},") ",[544,2959,1801],{"class":630},[544,2961,2962,2965,2967,2969,2972,2974,2976,2979,2981,2983,2986,2988,2990,2992,2994,2996,2998],{"class":546,"line":946},[544,2963,2964],{"class":626},"      throw",[544,2966,2919],{"class":634},[544,2968,478],{"class":630},[544,2970,2971],{"class":738},"FORBIDDEN",[544,2973,742],{"class":748},[544,2975,745],{"class":630},[544,2977,2978],{"class":748}," data",[544,2980,752],{"class":630},[544,2982,631],{"class":630},[544,2984,2985],{"class":748}," requiredRole",[544,2987,752],{"class":630},[544,2989,644],{"class":630},[544,2991,2952],{"class":553},[544,2993,767],{"class":630},[544,2995,638],{"class":630},[544,2997,638],{"class":630},[544,2999,774],{"class":748},[544,3001,3002],{"class":546,"line":951},[544,3003,3004],{"class":630},"    }\n",[544,3006,3007,3009,3011,3013,3015,3017,3019,3021,3024,3026,3028,3030,3032,3034,3037,3039,3041,3043,3045,3047,3049,3051],{"class":546,"line":973},[544,3008,880],{"class":634},[544,3010,478],{"class":630},[544,3012,885],{"class":634},[544,3014,478],{"class":630},[544,3016,890],{"class":738},[544,3018,742],{"class":748},[544,3020,745],{"class":630},[544,3022,3023],{"class":748}," deletedId",[544,3025,752],{"class":630},[544,3027,1241],{"class":634},[544,3029,478],{"class":630},[544,3031,1285],{"class":634},[544,3033,704],{"class":630},[544,3035,3036],{"class":748}," by",[544,3038,752],{"class":630},[544,3040,866],{"class":634},[544,3042,478],{"class":630},[544,3044,2940],{"class":634},[544,3046,478],{"class":630},[544,3048,1285],{"class":634},[544,3050,638],{"class":630},[544,3052,774],{"class":748},[544,3054,3055,3057,3059,3061,3063,3065],{"class":546,"line":978},[544,3056,913],{"class":626},[544,3058,631],{"class":630},[544,3060,918],{"class":748},[544,3062,752],{"class":630},[544,3064,903],{"class":902},[544,3066,925],{"class":630},[544,3068,3069,3071],{"class":546,"line":1010},[544,3070,931],{"class":630},[544,3072,774],{"class":634},[440,3074,3075,3076,3078,3079,3082,3083,3086],{},"A nested router groups procedures under a path; ",[443,3077,473],{}," on the wide event reflects the full nesting (",[443,3080,3081],{},"users.profile.get",", ",[443,3084,3085],{},"payments.charge",", ...):",[534,3088,3090],{"className":616,"code":3089,"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,3091,3092,3102,3138,3147,3169,3200,3204,3213,3245,3249],{"__ignoreMap":540},[544,3093,3094,3096,3098,3100],{"class":546,"line":547},[544,3095,786],{"class":785},[544,3097,836],{"class":634},[544,3099,792],{"class":630},[544,3101,841],{"class":630},[544,3103,3104,3107,3109,3111,3113,3115,3117,3119,3121,3123,3125,3127,3129,3131,3133,3136],{"class":546,"line":653},[544,3105,3106],{"class":748},"  health",[544,3108,752],{"class":630},[544,3110,852],{"class":634},[544,3112,478],{"class":630},[544,3114,857],{"class":738},[544,3116,742],{"class":634},[544,3118,811],{"class":630},[544,3120,872],{"class":785},[544,3122,2933],{"class":634},[544,3124,745],{"class":630},[544,3126,918],{"class":748},[544,3128,752],{"class":630},[544,3130,903],{"class":902},[544,3132,638],{"class":630},[544,3134,3135],{"class":634},"))",[544,3137,937],{"class":630},[544,3139,3140,3143,3145],{"class":546,"line":674},[544,3141,3142],{"class":748},"  users",[544,3144,752],{"class":630},[544,3146,841],{"class":630},[544,3148,3149,3152,3154,3156,3158,3160,3162,3165,3167],{"class":546,"line":695},[544,3150,3151],{"class":748},"    list",[544,3153,752],{"class":630},[544,3155,852],{"class":634},[544,3157,478],{"class":630},[544,3159,857],{"class":738},[544,3161,742],{"class":634},[544,3163,3164],{"class":1678},"\u002F* … *\u002F",[544,3166,934],{"class":634},[544,3168,937],{"class":630},[544,3170,3171,3174,3176,3178,3180,3182,3184,3186,3188,3190,3192,3194,3196,3198],{"class":546,"line":728},[544,3172,3173],{"class":748},"    get",[544,3175,752],{"class":630},[544,3177,852],{"class":634},[544,3179,478],{"class":630},[544,3181,1190],{"class":738},[544,3183,742],{"class":634},[544,3185,3164],{"class":1678},[544,3187,934],{"class":634},[544,3189,478],{"class":630},[544,3191,857],{"class":738},[544,3193,742],{"class":634},[544,3195,3164],{"class":1678},[544,3197,934],{"class":634},[544,3199,937],{"class":630},[544,3201,3202],{"class":546,"line":735},[544,3203,2064],{"class":630},[544,3205,3206,3209,3211],{"class":546,"line":777},[544,3207,3208],{"class":748},"  payments",[544,3210,752],{"class":630},[544,3212,841],{"class":630},[544,3214,3215,3218,3220,3223,3225,3227,3229,3231,3233,3235,3237,3239,3241,3243],{"class":546,"line":782},[544,3216,3217],{"class":748},"    charge",[544,3219,752],{"class":630},[544,3221,3222],{"class":634}," authed",[544,3224,478],{"class":630},[544,3226,1190],{"class":738},[544,3228,742],{"class":634},[544,3230,3164],{"class":1678},[544,3232,934],{"class":634},[544,3234,478],{"class":630},[544,3236,857],{"class":738},[544,3238,742],{"class":634},[544,3240,3164],{"class":1678},[544,3242,934],{"class":634},[544,3244,937],{"class":630},[544,3246,3247],{"class":546,"line":826},[544,3248,2064],{"class":630},[544,3250,3251],{"class":546,"line":831},[544,3252,943],{"class":630},[522,3254,409],{"id":3255},"configuration",[440,3257,3258,3259,3262,3263,3265],{},"See the ",[511,3260,3261],{"href":410},"Configuration reference"," for all available options (",[443,3264,739],{},", middleware options, sampling, silent mode, etc.).",[522,3267,3269],{"id":3268},"drain-enrichers","Drain & Enrichers",[440,3271,3272,3273,752],{},"Pass adapters and enrichers directly to ",[443,3274,1694],{},[534,3276,3278],{"className":616,"code":3277,"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,3279,3280,3300,3320,3324,3337,3341,3364,3377,3395,3406,3436,3440],{"__ignoreMap":540},[544,3281,3282,3284,3286,3289,3291,3293,3295,3298],{"class":546,"line":547},[544,3283,627],{"class":626},[544,3285,631],{"class":630},[544,3287,3288],{"class":634}," createAxiomDrain",[544,3290,638],{"class":630},[544,3292,641],{"class":626},[544,3294,644],{"class":630},[544,3296,3297],{"class":553},"evlog\u002Faxiom",[544,3299,650],{"class":630},[544,3301,3302,3304,3306,3309,3311,3313,3315,3318],{"class":546,"line":653},[544,3303,627],{"class":626},[544,3305,631],{"class":630},[544,3307,3308],{"class":634}," createUserAgentEnricher",[544,3310,638],{"class":630},[544,3312,641],{"class":626},[544,3314,644],{"class":630},[544,3316,3317],{"class":553},"evlog\u002Fenrichers",[544,3319,650],{"class":630},[544,3321,3322],{"class":546,"line":674},[544,3323,732],{"emptyLinePlaceholder":731},[544,3325,3326,3328,3331,3333,3335],{"class":546,"line":695},[544,3327,786],{"class":785},[544,3329,3330],{"class":634}," userAgent ",[544,3332,792],{"class":630},[544,3334,3308],{"class":738},[544,3336,1644],{"class":634},[544,3338,3339],{"class":546,"line":728},[544,3340,732],{"emptyLinePlaceholder":731},[544,3342,3343,3345,3347,3349,3351,3353,3355,3357,3360,3362],{"class":546,"line":735},[544,3344,786],{"class":785},[544,3346,956],{"class":634},[544,3348,792],{"class":630},[544,3350,707],{"class":738},[544,3352,742],{"class":634},[544,3354,965],{"class":630},[544,3356,660],{"class":738},[544,3358,3359],{"class":634},"(router)",[544,3361,704],{"class":630},[544,3363,841],{"class":630},[544,3365,3366,3369,3371,3373,3375],{"class":546,"line":777},[544,3367,3368],{"class":748},"  drain",[544,3370,752],{"class":630},[544,3372,3288],{"class":738},[544,3374,811],{"class":634},[544,3376,937],{"class":630},[544,3378,3379,3382,3384,3386,3389,3391,3393],{"class":546,"line":782},[544,3380,3381],{"class":738},"  enrich",[544,3383,752],{"class":630},[544,3385,2933],{"class":630},[544,3387,3388],{"class":865},"ctx",[544,3390,934],{"class":630},[544,3392,872],{"class":785},[544,3394,841],{"class":630},[544,3396,3397,3400,3402,3404],{"class":546,"line":826},[544,3398,3399],{"class":738},"    userAgent",[544,3401,742],{"class":748},[544,3403,3388],{"class":634},[544,3405,774],{"class":748},[544,3407,3408,3411,3413,3416,3418,3421,3423,3426,3428,3431,3433],{"class":546,"line":831},[544,3409,3410],{"class":634},"    ctx",[544,3412,478],{"class":630},[544,3414,3415],{"class":634},"event",[544,3417,478],{"class":630},[544,3419,3420],{"class":634},"region",[544,3422,1028],{"class":630},[544,3424,3425],{"class":634}," process",[544,3427,478],{"class":630},[544,3429,3430],{"class":634},"env",[544,3432,478],{"class":630},[544,3434,3435],{"class":634},"FLY_REGION\n",[544,3437,3438],{"class":546,"line":844},[544,3439,2064],{"class":630},[544,3441,3442,3444],{"class":546,"line":877},[544,3443,1221],{"class":630},[544,3445,774],{"class":634},[526,3447,3449],{"id":3448},"pipeline-batching-retry","Pipeline (Batching & Retry)",[440,3451,3452,3453,3456],{},"For production, wrap your adapter with ",[443,3454,3455],{},"createDrainPipeline"," to batch and retry:",[534,3458,3460],{"className":616,"code":3459,"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,3461,3462,3483,3501,3521,3525,3547,3576,3595,3601,3620,3624],{"__ignoreMap":540},[544,3463,3464,3466,3468,3470,3473,3475,3477,3479,3481],{"class":546,"line":547},[544,3465,627],{"class":626},[544,3467,712],{"class":626},[544,3469,631],{"class":630},[544,3471,3472],{"class":634}," DrainContext",[544,3474,638],{"class":630},[544,3476,641],{"class":626},[544,3478,644],{"class":630},[544,3480,690],{"class":553},[544,3482,650],{"class":630},[544,3484,3485,3487,3489,3491,3493,3495,3497,3499],{"class":546,"line":653},[544,3486,627],{"class":626},[544,3488,631],{"class":630},[544,3490,3288],{"class":634},[544,3492,638],{"class":630},[544,3494,641],{"class":626},[544,3496,644],{"class":630},[544,3498,3297],{"class":553},[544,3500,650],{"class":630},[544,3502,3503,3505,3507,3510,3512,3514,3516,3519],{"class":546,"line":674},[544,3504,627],{"class":626},[544,3506,631],{"class":630},[544,3508,3509],{"class":634}," createDrainPipeline",[544,3511,638],{"class":630},[544,3513,641],{"class":626},[544,3515,644],{"class":630},[544,3517,3518],{"class":553},"evlog\u002Fpipeline",[544,3520,650],{"class":630},[544,3522,3523],{"class":546,"line":695},[544,3524,732],{"emptyLinePlaceholder":731},[544,3526,3527,3529,3532,3534,3536,3538,3541,3543,3545],{"class":546,"line":728},[544,3528,786],{"class":785},[544,3530,3531],{"class":634}," pipeline ",[544,3533,792],{"class":630},[544,3535,3509],{"class":738},[544,3537,802],{"class":630},[544,3539,3540],{"class":550},"DrainContext",[544,3542,808],{"class":630},[544,3544,742],{"class":634},[544,3546,1801],{"class":630},[544,3548,3549,3552,3554,3556,3559,3561,3564,3566,3569,3571,3574],{"class":546,"line":735},[544,3550,3551],{"class":748},"  batch",[544,3553,752],{"class":630},[544,3555,631],{"class":630},[544,3557,3558],{"class":748}," size",[544,3560,752],{"class":630},[544,3562,3563],{"class":1106}," 50",[544,3565,704],{"class":630},[544,3567,3568],{"class":748}," intervalMs",[544,3570,752],{"class":630},[544,3572,3573],{"class":1106}," 5000",[544,3575,2287],{"class":630},[544,3577,3578,3581,3583,3585,3588,3590,3593],{"class":546,"line":777},[544,3579,3580],{"class":748},"  retry",[544,3582,752],{"class":630},[544,3584,631],{"class":630},[544,3586,3587],{"class":748}," maxAttempts",[544,3589,752],{"class":630},[544,3591,3592],{"class":1106}," 3",[544,3594,2287],{"class":630},[544,3596,3597,3599],{"class":546,"line":782},[544,3598,1221],{"class":630},[544,3600,774],{"class":634},[544,3602,3603,3605,3608,3610,3613,3615,3618],{"class":546,"line":826},[544,3604,786],{"class":785},[544,3606,3607],{"class":634}," drain ",[544,3609,792],{"class":630},[544,3611,3612],{"class":738}," pipeline",[544,3614,742],{"class":634},[544,3616,3617],{"class":738},"createAxiomDrain",[544,3619,823],{"class":634},[544,3621,3622],{"class":546,"line":831},[544,3623,732],{"emptyLinePlaceholder":731},[544,3625,3626,3628,3630,3632,3634,3636,3638,3640,3642,3644,3646,3648,3650],{"class":546,"line":844},[544,3627,786],{"class":785},[544,3629,956],{"class":634},[544,3631,792],{"class":630},[544,3633,707],{"class":738},[544,3635,742],{"class":634},[544,3637,965],{"class":630},[544,3639,660],{"class":738},[544,3641,3359],{"class":634},[544,3643,704],{"class":630},[544,3645,631],{"class":630},[544,3647,3607],{"class":634},[544,3649,1221],{"class":630},[544,3651,774],{"class":634},[1118,3653,3654,3655,3658,3659,3662],{"color":1120,"icon":13},"Call ",[443,3656,3657],{},"drain.flush()"," on server shutdown to ensure buffered events are sent. See the ",[511,3660,3661],{"href":400},"Pipeline docs"," for all options.",[522,3664,3666],{"id":3665},"tail-sampling","Tail Sampling",[534,3668,3670],{"className":616,"code":3669,"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,3671,3672,3694,3706,3723,3766,3770],{"__ignoreMap":540},[544,3673,3674,3676,3678,3680,3682,3684,3686,3688,3690,3692],{"class":546,"line":547},[544,3675,786],{"class":785},[544,3677,956],{"class":634},[544,3679,792],{"class":630},[544,3681,707],{"class":738},[544,3683,742],{"class":634},[544,3685,965],{"class":630},[544,3687,660],{"class":738},[544,3689,3359],{"class":634},[544,3691,704],{"class":630},[544,3693,841],{"class":630},[544,3695,3696,3698,3700,3702,3704],{"class":546,"line":653},[544,3697,3368],{"class":748},[544,3699,752],{"class":630},[544,3701,3288],{"class":738},[544,3703,811],{"class":634},[544,3705,937],{"class":630},[544,3707,3708,3711,3713,3715,3717,3719,3721],{"class":546,"line":674},[544,3709,3710],{"class":738},"  keep",[544,3712,752],{"class":630},[544,3714,2933],{"class":630},[544,3716,3388],{"class":865},[544,3718,934],{"class":630},[544,3720,872],{"class":785},[544,3722,841],{"class":630},[544,3724,3725,3727,3729,3731,3733,3736,3739,3742,3744,3746,3749,3752,3754,3756,3758,3761,3763],{"class":546,"line":695},[544,3726,2930],{"class":626},[544,3728,2933],{"class":748},[544,3730,3388],{"class":634},[544,3732,478],{"class":630},[544,3734,3735],{"class":634},"duration",[544,3737,3738],{"class":630}," &&",[544,3740,3741],{"class":634}," ctx",[544,3743,478],{"class":630},[544,3745,3735],{"class":634},[544,3747,3748],{"class":630}," >",[544,3750,3751],{"class":1106}," 2000",[544,3753,2957],{"class":748},[544,3755,3388],{"class":634},[544,3757,478],{"class":630},[544,3759,3760],{"class":634},"shouldKeep",[544,3762,1028],{"class":630},[544,3764,3765],{"class":902}," true\n",[544,3767,3768],{"class":546,"line":728},[544,3769,2064],{"class":630},[544,3771,3772,3774],{"class":546,"line":735},[544,3773,1221],{"class":630},[544,3775,774],{"class":634},[522,3777,3779],{"id":3778},"route-filtering","Route Filtering",[440,3781,3782,1705,3785,3788,3789,2933,3792,3795],{},[443,3783,3784],{},"include",[443,3786,3787],{},"exclude"," match against the ",[1122,3790,3791],{},"HTTP path",[443,3793,3794],{},"request.url.pathname","), not the procedure name:",[534,3797,3799],{"className":616,"code":3798,"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,3800,3801,3823,3845,3865,3874,3901,3905],{"__ignoreMap":540},[544,3802,3803,3805,3807,3809,3811,3813,3815,3817,3819,3821],{"class":546,"line":547},[544,3804,786],{"class":785},[544,3806,956],{"class":634},[544,3808,792],{"class":630},[544,3810,707],{"class":738},[544,3812,742],{"class":634},[544,3814,965],{"class":630},[544,3816,660],{"class":738},[544,3818,3359],{"class":634},[544,3820,704],{"class":630},[544,3822,841],{"class":630},[544,3824,3825,3828,3830,3833,3835,3838,3840,3843],{"class":546,"line":653},[544,3826,3827],{"class":748},"  include",[544,3829,752],{"class":630},[544,3831,3832],{"class":634}," [",[544,3834,767],{"class":630},[544,3836,3837],{"class":553},"\u002Frpc\u002F**",[544,3839,767],{"class":630},[544,3841,3842],{"class":634},"]",[544,3844,937],{"class":630},[544,3846,3847,3850,3852,3854,3856,3859,3861,3863],{"class":546,"line":674},[544,3848,3849],{"class":748},"  exclude",[544,3851,752],{"class":630},[544,3853,3832],{"class":634},[544,3855,767],{"class":630},[544,3857,3858],{"class":553},"\u002Frpc\u002F_internal\u002F**",[544,3860,767],{"class":630},[544,3862,3842],{"class":634},[544,3864,937],{"class":630},[544,3866,3867,3870,3872],{"class":546,"line":695},[544,3868,3869],{"class":748},"  routes",[544,3871,752],{"class":630},[544,3873,841],{"class":630},[544,3875,3876,3879,3882,3884,3886,3888,3890,3892,3894,3897,3899],{"class":546,"line":728},[544,3877,3878],{"class":630},"    '",[544,3880,3881],{"class":748},"\u002Frpc\u002Fauth\u002F**",[544,3883,767],{"class":630},[544,3885,752],{"class":630},[544,3887,631],{"class":630},[544,3889,757],{"class":748},[544,3891,752],{"class":630},[544,3893,644],{"class":630},[544,3895,3896],{"class":553},"auth-service",[544,3898,767],{"class":630},[544,3900,2287],{"class":630},[544,3902,3903],{"class":546,"line":735},[544,3904,2064],{"class":630},[544,3906,3907,3909],{"class":546,"line":777},[544,3908,1221],{"class":630},[544,3910,774],{"class":634},[440,3912,3913,3914,3916],{},"When a route is excluded, the wrapper still injects a no-op logger into ",[443,3915,477],{}," so your procedures never crash on missing fields — the wide event just isn't emitted and drain\u002Fenrich aren't called.",[522,3918,3920],{"id":3919},"streaming-procedures","Streaming Procedures",[440,3922,3923,3924,3929,3930,3933,3934,3937,3938,3941,3942,3945,3946,3949],{},"oRPC's ",[511,3925,3928],{"href":3926,"rel":3927},"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,3931,3932],{},"handler.handle()"," returns the ",[443,3935,3936],{},"Response",", which is ",[1122,3939,3940],{},"before"," the stream has fully drained. Token counts or per-chunk fields written via ",[443,3943,3944],{},"context.log.set()"," after the procedure returns are dropped (and surface a ",[443,3947,3948],{},"[evlog]"," warning) — accumulate them inside the procedure body before yielding the iterator, or use a separate drain pipeline for stream metrics.",[522,3951,3953],{"id":3952},"run-locally","Run Locally",[534,3955,3958],{"className":536,"code":3956,"filename":3957,"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,3959,3960,3971,3979,3986],{"__ignoreMap":540},[544,3961,3962,3965,3968],{"class":546,"line":547},[544,3963,3964],{"class":550},"git",[544,3966,3967],{"class":553}," clone",[544,3969,3970],{"class":553}," https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog.git\n",[544,3972,3973,3976],{"class":546,"line":653},[544,3974,3975],{"class":738},"cd",[544,3977,3978],{"class":553}," evlog\n",[544,3980,3981,3983],{"class":546,"line":674},[544,3982,538],{"class":550},[544,3984,3985],{"class":553}," install\n",[544,3987,3988,3990,3993],{"class":546,"line":695},[544,3989,538],{"class":550},[544,3991,3992],{"class":553}," run",[544,3994,3995],{"class":553}," example:orpc\n",[440,3997,3998,3999,4003],{},"Open ",[511,4000,4001],{"href":4001,"rel":4002},"http:\u002F\u002Flocalhost:3000",[515]," to explore the interactive test UI.",[4005,4006,4007],"card-group",{},[4008,4009,4013],"card",{"icon":4010,"title":4011,"to":4012},"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,4015,4017],{"id":4016},"next-steps","Next Steps",[440,4019,4020,4021,4023],{},"Deepen your ",[1122,4022,231],{}," integration:",[448,4025,4026,4031,4036,4041],{},[451,4027,4028,4030],{},[511,4029,46],{"href":47},": Design comprehensive events with context layering",[451,4032,4033,4035],{},[511,4034,90],{"href":95},": Send logs to Axiom, Sentry, PostHog, and more",[451,4037,4038,4040],{},[511,4039,61],{"href":62},": Control log volume with head and tail sampling",[451,4042,4043,4045,4046,3082,4048,4050,4051,4053],{},[511,4044,51],{"href":52},": Throw errors with ",[443,4047,1718],{},[443,4049,1721],{},", and ",[443,4052,1724],{}," fields",[4055,4056,4057],"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":4059},[4060,4064,4065,4066,4067,4068,4069,4072,4073,4074,4075,4076],{"id":524,"depth":653,"text":25,"children":4061},[4062,4063],{"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":2626,"depth":653,"text":2627},{"id":3255,"depth":653,"text":409},{"id":3268,"depth":653,"text":3269,"children":4070},[4071],{"id":3448,"depth":674,"text":3449},{"id":3665,"depth":653,"text":3666},{"id":3778,"depth":653,"text":3779},{"id":3919,"depth":653,"text":3920},{"id":3952,"depth":653,"text":3953},{"id":4016,"depth":653,"text":4017},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in oRPC applications.","md",[4080],{"label":4011,"icon":4010,"to":4012,"color":4081,"variant":4082},"neutral","subtle",{},{"title":231,"icon":234},{"title":231,"description":4077},"7D5g55Yl6s3aHdbQPrbkuuuoaJ7CsWSuF-Y9QNN9Uqc",[4088,4090],{"title":226,"path":227,"stem":228,"description":4089,"icon":229,"children":-1},"Wide events and structured errors in Astro server middleware.",{"title":236,"path":237,"stem":238,"description":4091,"icon":239,"children":-1},"Wide events and structured logging in AWS Lambda functions, including SQS consumers and event-driven handlers.",1778445522796]