[{"data":1,"prerenderedAt":4014},["ShallowReactive",2],{"navigation_docs":3,"-integrate-frameworks-orpc":434,"-integrate-frameworks-orpc-surround":4009},[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":3999,"extension":4000,"links":4001,"meta":4005,"navigation":4006,"path":232,"seo":4007,"stem":233,"__hash__":4008},"docs\u002F3.integrate\u002Fframeworks\u002F15.orpc.md",{"type":437,"value":438,"toc":3980},"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,2483,2532,2550,2554,2566,2995,3009,3175,3178,3188,3192,3197,3368,3372,3379,3574,3585,3589,3698,3702,3718,3833,3839,3843,3872,3876,3918,3926,3936,3940,3946,3976],[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\": {\n    \"reason\": \"insufficient_funds\",\n    \"retryable\": true,\n    \"why\": \"The card issuer rejected the charge for insufficient funds\",\n    \"fix\": \"Ask the user to use a different card\",\n    \"link\": \"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined\"\n  }\n}\n","HTTP 402","json",[443,2296,2297,2301,2317,2336,2351,2370,2382,2402,2415,2435,2455,2474,2479],{"__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],{"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,841],{"class":630},[544,2383,2384,2387,2390,2392,2394,2396,2398,2400],{"class":546,"line":777},[544,2385,2386],{"class":630},"    \"",[544,2388,2389],{"class":550},"reason",[544,2391,2311],{"class":630},[544,2393,752],{"class":630},[544,2395,2329],{"class":630},[544,2397,1878],{"class":553},[544,2399,2311],{"class":630},[544,2401,937],{"class":630},[544,2403,2404,2406,2409,2411,2413],{"class":546,"line":782},[544,2405,2386],{"class":630},[544,2407,2408],{"class":550},"retryable",[544,2410,2311],{"class":630},[544,2412,752],{"class":630},[544,2414,2316],{"class":630},[544,2416,2417,2419,2422,2424,2426,2428,2431,2433],{"class":546,"line":826},[544,2418,2386],{"class":630},[544,2420,2421],{"class":550},"why",[544,2423,2311],{"class":630},[544,2425,752],{"class":630},[544,2427,2329],{"class":630},[544,2429,2430],{"class":553},"The card issuer rejected the charge for insufficient funds",[544,2432,2311],{"class":630},[544,2434,937],{"class":630},[544,2436,2437,2439,2442,2444,2446,2448,2451,2453],{"class":546,"line":831},[544,2438,2386],{"class":630},[544,2440,2441],{"class":550},"fix",[544,2443,2311],{"class":630},[544,2445,752],{"class":630},[544,2447,2329],{"class":630},[544,2449,2450],{"class":553},"Ask the user to use a different card",[544,2452,2311],{"class":630},[544,2454,937],{"class":630},[544,2456,2457,2459,2462,2464,2466,2468,2471],{"class":546,"line":844},[544,2458,2386],{"class":630},[544,2460,2461],{"class":550},"link",[544,2463,2311],{"class":630},[544,2465,752],{"class":630},[544,2467,2329],{"class":630},[544,2469,2470],{"class":553},"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined",[544,2472,2473],{"class":630},"\"\n",[544,2475,2476],{"class":546,"line":877},[544,2477,2478],{"class":630},"  }\n",[544,2480,2481],{"class":546,"line":910},[544,2482,943],{"class":630},[1118,2484,2485,2499,2500,2502,2503,2505,2506,2509,2510,2513,2514,2517,2518,2520,2521,2524,2525,2527,2528,2531],{"color":1120,"icon":13},[1122,2486,2487,2488,2490,2491,2490,2493,2495,2496,2498],{},"Why are ",[443,2489,2421],{}," \u002F ",[443,2492,2441],{},[443,2494,2461],{}," inside ",[443,2497,1715],{}," and not at the root?"," The other evlog framework integrations (Express, Hono, ...) put those fields at the response root, alongside ",[443,2501,2357],{}," and ",[443,2504,2342],{},". oRPC's wire format is fixed: every error is serialized as ",[443,2507,2508],{},"{ defined, code, status, message, data }"," so that typed clients (",[443,2511,2512],{},"safe()"," from ",[443,2515,2516],{},"@orpc\u002Fclient",") can deserialize them as a typed union. Anything user-provided lives inside ",[443,2519,1715],{},". evlog could rewrite the response with an ",[443,2522,2523],{},"adapterInterceptor",", but that would silently break the RPC contract for typed clients. We follow the protocol instead: think of ",[443,2526,1715],{}," as the structured-error payload, with the same intent as ",[443,2529,2530],{},"parseError()"," everywhere else.",[440,2533,2534,2535,2538,2539,2542,2543,2546,2547,2549],{},"If you already use evlog's ",[443,2536,2537],{},"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,2540,2541],{},"INTERNAL_SERVER_ERROR"," by oRPC's default handler. Prefer ",[443,2544,2545],{},"os.errors()"," inside procedures and keep ",[443,2548,2537],{}," for everything outside the RPC boundary.",[522,2551,2553],{"id":2552},"middleware-composition","Middleware Composition",[440,2555,2556,2558,2559,2562,2563,2565],{},[443,2557,469],{}," plays well with other oRPC middleware. Chain them with ",[443,2560,2561],{},".use()"," — every middleware sees ",[443,2564,477],{}," so each layer can append its own keys to the wide event without coordinating with the next:",[534,2567,2569],{"className":616,"code":2568,"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,2570,2571,2581,2595,2603,2615,2619,2653,2672,2735,2766,2772,2776,2790,2822,2848,2882,2922,2927,2975,2989],{"__ignoreMap":540},[544,2572,2573,2575,2577,2579],{"class":546,"line":547},[544,2574,786],{"class":785},[544,2576,789],{"class":634},[544,2578,792],{"class":630},[544,2580,1960],{"class":634},[544,2582,2583,2585,2587,2589,2591,2593],{"class":546,"line":653},[544,2584,1187],{"class":630},[544,2586,799],{"class":738},[544,2588,802],{"class":630},[544,2590,805],{"class":550},[544,2592,808],{"class":630},[544,2594,1644],{"class":634},[544,2596,2597,2599,2601],{"class":546,"line":674},[544,2598,1187],{"class":630},[544,2600,1981],{"class":738},[544,2602,1984],{"class":634},[544,2604,2605,2607,2609,2611,2613],{"class":546,"line":695},[544,2606,1187],{"class":630},[544,2608,816],{"class":738},[544,2610,742],{"class":634},[544,2612,690],{"class":738},[544,2614,823],{"class":634},[544,2616,2617],{"class":546,"line":728},[544,2618,732],{"emptyLinePlaceholder":731},[544,2620,2621,2623,2626,2628,2630,2632,2634,2636,2638,2640,2642,2644,2647,2649,2651],{"class":546,"line":735},[544,2622,786],{"class":785},[544,2624,2625],{"class":634}," authed ",[544,2627,792],{"class":630},[544,2629,852],{"class":634},[544,2631,478],{"class":630},[544,2633,816],{"class":738},[544,2635,742],{"class":634},[544,2637,1235],{"class":785},[544,2639,1238],{"class":630},[544,2641,866],{"class":865},[544,2643,704],{"class":630},[544,2645,2646],{"class":865}," next",[544,2648,869],{"class":630},[544,2650,872],{"class":785},[544,2652,841],{"class":630},[544,2654,2655,2657,2659,2661,2663,2666,2668,2670],{"class":546,"line":777},[544,2656,1013],{"class":785},[544,2658,1270],{"class":634},[544,2660,1028],{"class":630},[544,2662,1031],{"class":626},[544,2664,2665],{"class":738}," verifyApiKey",[544,2667,742],{"class":748},[544,2669,1572],{"class":634},[544,2671,774],{"class":748},[544,2673,2674,2677,2679,2681,2683,2685,2687,2689,2692,2694,2696,2698,2700,2702,2704,2707,2709,2711,2713,2715,2717,2720,2722,2724,2726,2729,2731,2733],{"class":546,"line":782},[544,2675,2676],{"class":634},"  context",[544,2678,478],{"class":630},[544,2680,885],{"class":634},[544,2682,478],{"class":630},[544,2684,890],{"class":738},[544,2686,742],{"class":748},[544,2688,745],{"class":630},[544,2690,2691],{"class":748}," auth",[544,2693,752],{"class":630},[544,2695,631],{"class":630},[544,2697,918],{"class":748},[544,2699,752],{"class":630},[544,2701,903],{"class":902},[544,2703,704],{"class":630},[544,2705,2706],{"class":748}," userId",[544,2708,752],{"class":630},[544,2710,1270],{"class":634},[544,2712,478],{"class":630},[544,2714,1285],{"class":634},[544,2716,704],{"class":630},[544,2718,2719],{"class":748}," role",[544,2721,752],{"class":630},[544,2723,1270],{"class":634},[544,2725,478],{"class":630},[544,2727,2728],{"class":634},"role",[544,2730,638],{"class":630},[544,2732,638],{"class":630},[544,2734,774],{"class":748},[544,2736,2737,2739,2741,2743,2745,2747,2749,2751,2754,2756,2758,2760,2762,2764],{"class":546,"line":826},[544,2738,1069],{"class":626},[544,2740,2646],{"class":738},[544,2742,742],{"class":748},[544,2744,745],{"class":630},[544,2746,866],{"class":748},[544,2748,752],{"class":630},[544,2750,631],{"class":630},[544,2752,2753],{"class":630}," ...",[544,2755,1572],{"class":634},[544,2757,704],{"class":630},[544,2759,1270],{"class":634},[544,2761,638],{"class":630},[544,2763,638],{"class":630},[544,2765,774],{"class":748},[544,2767,2768,2770],{"class":546,"line":831},[544,2769,1221],{"class":630},[544,2771,774],{"class":634},[544,2773,2774],{"class":546,"line":844},[544,2775,732],{"emptyLinePlaceholder":731},[544,2777,2778,2780,2782,2785,2787],{"class":546,"line":877},[544,2779,981],{"class":626},[544,2781,2007],{"class":785},[544,2783,2784],{"class":634}," deleteResource ",[544,2786,792],{"class":630},[544,2788,2789],{"class":634}," authed\n",[544,2791,2792,2794,2796,2798,2800,2802,2804,2806,2808,2810,2812,2814,2816,2818,2820],{"class":546,"line":910},[544,2793,1187],{"class":630},[544,2795,1190],{"class":738},[544,2797,1193],{"class":634},[544,2799,478],{"class":630},[544,2801,1198],{"class":738},[544,2803,742],{"class":634},[544,2805,745],{"class":630},[544,2807,1205],{"class":748},[544,2809,752],{"class":630},[544,2811,1210],{"class":634},[544,2813,478],{"class":630},[544,2815,1215],{"class":738},[544,2817,1218],{"class":634},[544,2819,1221],{"class":630},[544,2821,1224],{"class":634},[544,2823,2824,2826,2828,2830,2832,2834,2836,2838,2840,2842,2844,2846],{"class":546,"line":928},[544,2825,1187],{"class":630},[544,2827,857],{"class":738},[544,2829,742],{"class":634},[544,2831,862],{"class":630},[544,2833,1241],{"class":865},[544,2835,704],{"class":630},[544,2837,866],{"class":865},[544,2839,704],{"class":630},[544,2841,2083],{"class":865},[544,2843,869],{"class":630},[544,2845,872],{"class":785},[544,2847,841],{"class":630},[544,2849,2850,2853,2856,2858,2860,2863,2865,2867,2870,2872,2875,2877,2880],{"class":546,"line":940},[544,2851,2852],{"class":626},"    if",[544,2854,2855],{"class":748}," (",[544,2857,1572],{"class":634},[544,2859,478],{"class":630},[544,2861,2862],{"class":634},"user",[544,2864,478],{"class":630},[544,2866,2728],{"class":634},[544,2868,2869],{"class":630}," !==",[544,2871,644],{"class":630},[544,2873,2874],{"class":553},"superadmin",[544,2876,767],{"class":630},[544,2878,2879],{"class":748},") ",[544,2881,1856],{"class":630},[544,2883,2884,2887,2889,2891,2894,2896,2898,2901,2903,2905,2908,2910,2912,2914,2916,2918,2920],{"class":546,"line":946},[544,2885,2886],{"class":626},"      throw",[544,2888,2083],{"class":634},[544,2890,478],{"class":630},[544,2892,2893],{"class":738},"FORBIDDEN",[544,2895,742],{"class":748},[544,2897,745],{"class":630},[544,2899,2900],{"class":748}," data",[544,2902,752],{"class":630},[544,2904,631],{"class":630},[544,2906,2907],{"class":748}," requiredRole",[544,2909,752],{"class":630},[544,2911,644],{"class":630},[544,2913,2874],{"class":553},[544,2915,767],{"class":630},[544,2917,638],{"class":630},[544,2919,638],{"class":630},[544,2921,774],{"class":748},[544,2923,2924],{"class":546,"line":951},[544,2925,2926],{"class":630},"    }\n",[544,2928,2929,2931,2933,2935,2937,2939,2941,2943,2946,2948,2950,2952,2954,2956,2959,2961,2963,2965,2967,2969,2971,2973],{"class":546,"line":973},[544,2930,880],{"class":634},[544,2932,478],{"class":630},[544,2934,885],{"class":634},[544,2936,478],{"class":630},[544,2938,890],{"class":738},[544,2940,742],{"class":748},[544,2942,745],{"class":630},[544,2944,2945],{"class":748}," deletedId",[544,2947,752],{"class":630},[544,2949,1241],{"class":634},[544,2951,478],{"class":630},[544,2953,1285],{"class":634},[544,2955,704],{"class":630},[544,2957,2958],{"class":748}," by",[544,2960,752],{"class":630},[544,2962,866],{"class":634},[544,2964,478],{"class":630},[544,2966,2862],{"class":634},[544,2968,478],{"class":630},[544,2970,1285],{"class":634},[544,2972,638],{"class":630},[544,2974,774],{"class":748},[544,2976,2977,2979,2981,2983,2985,2987],{"class":546,"line":978},[544,2978,913],{"class":626},[544,2980,631],{"class":630},[544,2982,918],{"class":748},[544,2984,752],{"class":630},[544,2986,903],{"class":902},[544,2988,925],{"class":630},[544,2990,2991,2993],{"class":546,"line":1010},[544,2992,931],{"class":630},[544,2994,774],{"class":634},[440,2996,2997,2998,3000,3001,3004,3005,3008],{},"A nested router groups procedures under a path; ",[443,2999,473],{}," on the wide event reflects the full nesting (",[443,3002,3003],{},"users.profile.get",", ",[443,3006,3007],{},"payments.charge",", ...):",[534,3010,3012],{"className":616,"code":3011,"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,3013,3014,3024,3060,3069,3091,3122,3126,3135,3167,3171],{"__ignoreMap":540},[544,3015,3016,3018,3020,3022],{"class":546,"line":547},[544,3017,786],{"class":785},[544,3019,836],{"class":634},[544,3021,792],{"class":630},[544,3023,841],{"class":630},[544,3025,3026,3029,3031,3033,3035,3037,3039,3041,3043,3045,3047,3049,3051,3053,3055,3058],{"class":546,"line":653},[544,3027,3028],{"class":748},"  health",[544,3030,752],{"class":630},[544,3032,852],{"class":634},[544,3034,478],{"class":630},[544,3036,857],{"class":738},[544,3038,742],{"class":634},[544,3040,811],{"class":630},[544,3042,872],{"class":785},[544,3044,2855],{"class":634},[544,3046,745],{"class":630},[544,3048,918],{"class":748},[544,3050,752],{"class":630},[544,3052,903],{"class":902},[544,3054,638],{"class":630},[544,3056,3057],{"class":634},"))",[544,3059,937],{"class":630},[544,3061,3062,3065,3067],{"class":546,"line":674},[544,3063,3064],{"class":748},"  users",[544,3066,752],{"class":630},[544,3068,841],{"class":630},[544,3070,3071,3074,3076,3078,3080,3082,3084,3087,3089],{"class":546,"line":695},[544,3072,3073],{"class":748},"    list",[544,3075,752],{"class":630},[544,3077,852],{"class":634},[544,3079,478],{"class":630},[544,3081,857],{"class":738},[544,3083,742],{"class":634},[544,3085,3086],{"class":1678},"\u002F* … *\u002F",[544,3088,934],{"class":634},[544,3090,937],{"class":630},[544,3092,3093,3096,3098,3100,3102,3104,3106,3108,3110,3112,3114,3116,3118,3120],{"class":546,"line":728},[544,3094,3095],{"class":748},"    get",[544,3097,752],{"class":630},[544,3099,852],{"class":634},[544,3101,478],{"class":630},[544,3103,1190],{"class":738},[544,3105,742],{"class":634},[544,3107,3086],{"class":1678},[544,3109,934],{"class":634},[544,3111,478],{"class":630},[544,3113,857],{"class":738},[544,3115,742],{"class":634},[544,3117,3086],{"class":1678},[544,3119,934],{"class":634},[544,3121,937],{"class":630},[544,3123,3124],{"class":546,"line":735},[544,3125,1935],{"class":630},[544,3127,3128,3131,3133],{"class":546,"line":777},[544,3129,3130],{"class":748},"  payments",[544,3132,752],{"class":630},[544,3134,841],{"class":630},[544,3136,3137,3140,3142,3145,3147,3149,3151,3153,3155,3157,3159,3161,3163,3165],{"class":546,"line":782},[544,3138,3139],{"class":748},"    charge",[544,3141,752],{"class":630},[544,3143,3144],{"class":634}," authed",[544,3146,478],{"class":630},[544,3148,1190],{"class":738},[544,3150,742],{"class":634},[544,3152,3086],{"class":1678},[544,3154,934],{"class":634},[544,3156,478],{"class":630},[544,3158,857],{"class":738},[544,3160,742],{"class":634},[544,3162,3086],{"class":1678},[544,3164,934],{"class":634},[544,3166,937],{"class":630},[544,3168,3169],{"class":546,"line":826},[544,3170,1935],{"class":630},[544,3172,3173],{"class":546,"line":831},[544,3174,943],{"class":630},[522,3176,409],{"id":3177},"configuration",[440,3179,3180,3181,3184,3185,3187],{},"See the ",[511,3182,3183],{"href":410},"Configuration reference"," for all available options (",[443,3186,739],{},", middleware options, sampling, silent mode, etc.).",[522,3189,3191],{"id":3190},"drain-enrichers","Drain & Enrichers",[440,3193,3194,3195,752],{},"Pass adapters and enrichers directly to ",[443,3196,1694],{},[534,3198,3200],{"className":616,"code":3199,"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,3201,3202,3222,3242,3246,3259,3263,3286,3299,3317,3328,3358,3362],{"__ignoreMap":540},[544,3203,3204,3206,3208,3211,3213,3215,3217,3220],{"class":546,"line":547},[544,3205,627],{"class":626},[544,3207,631],{"class":630},[544,3209,3210],{"class":634}," createAxiomDrain",[544,3212,638],{"class":630},[544,3214,641],{"class":626},[544,3216,644],{"class":630},[544,3218,3219],{"class":553},"evlog\u002Faxiom",[544,3221,650],{"class":630},[544,3223,3224,3226,3228,3231,3233,3235,3237,3240],{"class":546,"line":653},[544,3225,627],{"class":626},[544,3227,631],{"class":630},[544,3229,3230],{"class":634}," createUserAgentEnricher",[544,3232,638],{"class":630},[544,3234,641],{"class":626},[544,3236,644],{"class":630},[544,3238,3239],{"class":553},"evlog\u002Fenrichers",[544,3241,650],{"class":630},[544,3243,3244],{"class":546,"line":674},[544,3245,732],{"emptyLinePlaceholder":731},[544,3247,3248,3250,3253,3255,3257],{"class":546,"line":695},[544,3249,786],{"class":785},[544,3251,3252],{"class":634}," userAgent ",[544,3254,792],{"class":630},[544,3256,3230],{"class":738},[544,3258,1644],{"class":634},[544,3260,3261],{"class":546,"line":728},[544,3262,732],{"emptyLinePlaceholder":731},[544,3264,3265,3267,3269,3271,3273,3275,3277,3279,3282,3284],{"class":546,"line":735},[544,3266,786],{"class":785},[544,3268,956],{"class":634},[544,3270,792],{"class":630},[544,3272,707],{"class":738},[544,3274,742],{"class":634},[544,3276,965],{"class":630},[544,3278,660],{"class":738},[544,3280,3281],{"class":634},"(router)",[544,3283,704],{"class":630},[544,3285,841],{"class":630},[544,3287,3288,3291,3293,3295,3297],{"class":546,"line":777},[544,3289,3290],{"class":748},"  drain",[544,3292,752],{"class":630},[544,3294,3210],{"class":738},[544,3296,811],{"class":634},[544,3298,937],{"class":630},[544,3300,3301,3304,3306,3308,3311,3313,3315],{"class":546,"line":782},[544,3302,3303],{"class":738},"  enrich",[544,3305,752],{"class":630},[544,3307,2855],{"class":630},[544,3309,3310],{"class":865},"ctx",[544,3312,934],{"class":630},[544,3314,872],{"class":785},[544,3316,841],{"class":630},[544,3318,3319,3322,3324,3326],{"class":546,"line":826},[544,3320,3321],{"class":738},"    userAgent",[544,3323,742],{"class":748},[544,3325,3310],{"class":634},[544,3327,774],{"class":748},[544,3329,3330,3333,3335,3338,3340,3343,3345,3348,3350,3353,3355],{"class":546,"line":831},[544,3331,3332],{"class":634},"    ctx",[544,3334,478],{"class":630},[544,3336,3337],{"class":634},"event",[544,3339,478],{"class":630},[544,3341,3342],{"class":634},"region",[544,3344,1028],{"class":630},[544,3346,3347],{"class":634}," process",[544,3349,478],{"class":630},[544,3351,3352],{"class":634},"env",[544,3354,478],{"class":630},[544,3356,3357],{"class":634},"FLY_REGION\n",[544,3359,3360],{"class":546,"line":844},[544,3361,1935],{"class":630},[544,3363,3364,3366],{"class":546,"line":877},[544,3365,1221],{"class":630},[544,3367,774],{"class":634},[526,3369,3371],{"id":3370},"pipeline-batching-retry","Pipeline (Batching & Retry)",[440,3373,3374,3375,3378],{},"For production, wrap your adapter with ",[443,3376,3377],{},"createDrainPipeline"," to batch and retry:",[534,3380,3382],{"className":616,"code":3381,"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,3383,3384,3405,3423,3443,3447,3469,3498,3517,3523,3542,3546],{"__ignoreMap":540},[544,3385,3386,3388,3390,3392,3395,3397,3399,3401,3403],{"class":546,"line":547},[544,3387,627],{"class":626},[544,3389,712],{"class":626},[544,3391,631],{"class":630},[544,3393,3394],{"class":634}," DrainContext",[544,3396,638],{"class":630},[544,3398,641],{"class":626},[544,3400,644],{"class":630},[544,3402,690],{"class":553},[544,3404,650],{"class":630},[544,3406,3407,3409,3411,3413,3415,3417,3419,3421],{"class":546,"line":653},[544,3408,627],{"class":626},[544,3410,631],{"class":630},[544,3412,3210],{"class":634},[544,3414,638],{"class":630},[544,3416,641],{"class":626},[544,3418,644],{"class":630},[544,3420,3219],{"class":553},[544,3422,650],{"class":630},[544,3424,3425,3427,3429,3432,3434,3436,3438,3441],{"class":546,"line":674},[544,3426,627],{"class":626},[544,3428,631],{"class":630},[544,3430,3431],{"class":634}," createDrainPipeline",[544,3433,638],{"class":630},[544,3435,641],{"class":626},[544,3437,644],{"class":630},[544,3439,3440],{"class":553},"evlog\u002Fpipeline",[544,3442,650],{"class":630},[544,3444,3445],{"class":546,"line":695},[544,3446,732],{"emptyLinePlaceholder":731},[544,3448,3449,3451,3454,3456,3458,3460,3463,3465,3467],{"class":546,"line":728},[544,3450,786],{"class":785},[544,3452,3453],{"class":634}," pipeline ",[544,3455,792],{"class":630},[544,3457,3431],{"class":738},[544,3459,802],{"class":630},[544,3461,3462],{"class":550},"DrainContext",[544,3464,808],{"class":630},[544,3466,742],{"class":634},[544,3468,1856],{"class":630},[544,3470,3471,3474,3476,3478,3481,3483,3486,3488,3491,3493,3496],{"class":546,"line":735},[544,3472,3473],{"class":748},"  batch",[544,3475,752],{"class":630},[544,3477,631],{"class":630},[544,3479,3480],{"class":748}," size",[544,3482,752],{"class":630},[544,3484,3485],{"class":1106}," 50",[544,3487,704],{"class":630},[544,3489,3490],{"class":748}," intervalMs",[544,3492,752],{"class":630},[544,3494,3495],{"class":1106}," 5000",[544,3497,2178],{"class":630},[544,3499,3500,3503,3505,3507,3510,3512,3515],{"class":546,"line":777},[544,3501,3502],{"class":748},"  retry",[544,3504,752],{"class":630},[544,3506,631],{"class":630},[544,3508,3509],{"class":748}," maxAttempts",[544,3511,752],{"class":630},[544,3513,3514],{"class":1106}," 3",[544,3516,2178],{"class":630},[544,3518,3519,3521],{"class":546,"line":782},[544,3520,1221],{"class":630},[544,3522,774],{"class":634},[544,3524,3525,3527,3530,3532,3535,3537,3540],{"class":546,"line":826},[544,3526,786],{"class":785},[544,3528,3529],{"class":634}," drain ",[544,3531,792],{"class":630},[544,3533,3534],{"class":738}," pipeline",[544,3536,742],{"class":634},[544,3538,3539],{"class":738},"createAxiomDrain",[544,3541,823],{"class":634},[544,3543,3544],{"class":546,"line":831},[544,3545,732],{"emptyLinePlaceholder":731},[544,3547,3548,3550,3552,3554,3556,3558,3560,3562,3564,3566,3568,3570,3572],{"class":546,"line":844},[544,3549,786],{"class":785},[544,3551,956],{"class":634},[544,3553,792],{"class":630},[544,3555,707],{"class":738},[544,3557,742],{"class":634},[544,3559,965],{"class":630},[544,3561,660],{"class":738},[544,3563,3281],{"class":634},[544,3565,704],{"class":630},[544,3567,631],{"class":630},[544,3569,3529],{"class":634},[544,3571,1221],{"class":630},[544,3573,774],{"class":634},[1118,3575,3576,3577,3580,3581,3584],{"color":1120,"icon":13},"Call ",[443,3578,3579],{},"drain.flush()"," on server shutdown to ensure buffered events are sent. See the ",[511,3582,3583],{"href":400},"Pipeline docs"," for all options.",[522,3586,3588],{"id":3587},"tail-sampling","Tail Sampling",[534,3590,3592],{"className":616,"code":3591,"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,3593,3594,3616,3628,3645,3688,3692],{"__ignoreMap":540},[544,3595,3596,3598,3600,3602,3604,3606,3608,3610,3612,3614],{"class":546,"line":547},[544,3597,786],{"class":785},[544,3599,956],{"class":634},[544,3601,792],{"class":630},[544,3603,707],{"class":738},[544,3605,742],{"class":634},[544,3607,965],{"class":630},[544,3609,660],{"class":738},[544,3611,3281],{"class":634},[544,3613,704],{"class":630},[544,3615,841],{"class":630},[544,3617,3618,3620,3622,3624,3626],{"class":546,"line":653},[544,3619,3290],{"class":748},[544,3621,752],{"class":630},[544,3623,3210],{"class":738},[544,3625,811],{"class":634},[544,3627,937],{"class":630},[544,3629,3630,3633,3635,3637,3639,3641,3643],{"class":546,"line":674},[544,3631,3632],{"class":738},"  keep",[544,3634,752],{"class":630},[544,3636,2855],{"class":630},[544,3638,3310],{"class":865},[544,3640,934],{"class":630},[544,3642,872],{"class":785},[544,3644,841],{"class":630},[544,3646,3647,3649,3651,3653,3655,3658,3661,3664,3666,3668,3671,3674,3676,3678,3680,3683,3685],{"class":546,"line":695},[544,3648,2852],{"class":626},[544,3650,2855],{"class":748},[544,3652,3310],{"class":634},[544,3654,478],{"class":630},[544,3656,3657],{"class":634},"duration",[544,3659,3660],{"class":630}," &&",[544,3662,3663],{"class":634}," ctx",[544,3665,478],{"class":630},[544,3667,3657],{"class":634},[544,3669,3670],{"class":630}," >",[544,3672,3673],{"class":1106}," 2000",[544,3675,2879],{"class":748},[544,3677,3310],{"class":634},[544,3679,478],{"class":630},[544,3681,3682],{"class":634},"shouldKeep",[544,3684,1028],{"class":630},[544,3686,3687],{"class":902}," true\n",[544,3689,3690],{"class":546,"line":728},[544,3691,1935],{"class":630},[544,3693,3694,3696],{"class":546,"line":735},[544,3695,1221],{"class":630},[544,3697,774],{"class":634},[522,3699,3701],{"id":3700},"route-filtering","Route Filtering",[440,3703,3704,2490,3707,3710,3711,2855,3714,3717],{},[443,3705,3706],{},"include",[443,3708,3709],{},"exclude"," match against the ",[1122,3712,3713],{},"HTTP path",[443,3715,3716],{},"request.url.pathname","), not the procedure name:",[534,3719,3721],{"className":616,"code":3720,"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,3722,3723,3745,3767,3787,3796,3823,3827],{"__ignoreMap":540},[544,3724,3725,3727,3729,3731,3733,3735,3737,3739,3741,3743],{"class":546,"line":547},[544,3726,786],{"class":785},[544,3728,956],{"class":634},[544,3730,792],{"class":630},[544,3732,707],{"class":738},[544,3734,742],{"class":634},[544,3736,965],{"class":630},[544,3738,660],{"class":738},[544,3740,3281],{"class":634},[544,3742,704],{"class":630},[544,3744,841],{"class":630},[544,3746,3747,3750,3752,3755,3757,3760,3762,3765],{"class":546,"line":653},[544,3748,3749],{"class":748},"  include",[544,3751,752],{"class":630},[544,3753,3754],{"class":634}," [",[544,3756,767],{"class":630},[544,3758,3759],{"class":553},"\u002Frpc\u002F**",[544,3761,767],{"class":630},[544,3763,3764],{"class":634},"]",[544,3766,937],{"class":630},[544,3768,3769,3772,3774,3776,3778,3781,3783,3785],{"class":546,"line":674},[544,3770,3771],{"class":748},"  exclude",[544,3773,752],{"class":630},[544,3775,3754],{"class":634},[544,3777,767],{"class":630},[544,3779,3780],{"class":553},"\u002Frpc\u002F_internal\u002F**",[544,3782,767],{"class":630},[544,3784,3764],{"class":634},[544,3786,937],{"class":630},[544,3788,3789,3792,3794],{"class":546,"line":695},[544,3790,3791],{"class":748},"  routes",[544,3793,752],{"class":630},[544,3795,841],{"class":630},[544,3797,3798,3801,3804,3806,3808,3810,3812,3814,3816,3819,3821],{"class":546,"line":728},[544,3799,3800],{"class":630},"    '",[544,3802,3803],{"class":748},"\u002Frpc\u002Fauth\u002F**",[544,3805,767],{"class":630},[544,3807,752],{"class":630},[544,3809,631],{"class":630},[544,3811,757],{"class":748},[544,3813,752],{"class":630},[544,3815,644],{"class":630},[544,3817,3818],{"class":553},"auth-service",[544,3820,767],{"class":630},[544,3822,2178],{"class":630},[544,3824,3825],{"class":546,"line":735},[544,3826,1935],{"class":630},[544,3828,3829,3831],{"class":546,"line":777},[544,3830,1221],{"class":630},[544,3832,774],{"class":634},[440,3834,3835,3836,3838],{},"When a route is excluded, the wrapper still injects a no-op logger into ",[443,3837,477],{}," so your procedures never crash on missing fields — the wide event just isn't emitted and drain\u002Fenrich aren't called.",[522,3840,3842],{"id":3841},"streaming-procedures","Streaming Procedures",[440,3844,3845,3846,3851,3852,3855,3856,3859,3860,3863,3864,3867,3868,3871],{},"oRPC's ",[511,3847,3850],{"href":3848,"rel":3849},"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,3853,3854],{},"handler.handle()"," returns the ",[443,3857,3858],{},"Response",", which is ",[1122,3861,3862],{},"before"," the stream has fully drained. Token counts or per-chunk fields written via ",[443,3865,3866],{},"context.log.set()"," after the procedure returns are dropped (and surface a ",[443,3869,3870],{},"[evlog]"," warning) — accumulate them inside the procedure body before yielding the iterator, or use a separate drain pipeline for stream metrics.",[522,3873,3875],{"id":3874},"run-locally","Run Locally",[534,3877,3880],{"className":536,"code":3878,"filename":3879,"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,3881,3882,3893,3901,3908],{"__ignoreMap":540},[544,3883,3884,3887,3890],{"class":546,"line":547},[544,3885,3886],{"class":550},"git",[544,3888,3889],{"class":553}," clone",[544,3891,3892],{"class":553}," https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog.git\n",[544,3894,3895,3898],{"class":546,"line":653},[544,3896,3897],{"class":738},"cd",[544,3899,3900],{"class":553}," evlog\n",[544,3902,3903,3905],{"class":546,"line":674},[544,3904,538],{"class":550},[544,3906,3907],{"class":553}," install\n",[544,3909,3910,3912,3915],{"class":546,"line":695},[544,3911,538],{"class":550},[544,3913,3914],{"class":553}," run",[544,3916,3917],{"class":553}," example:orpc\n",[440,3919,3920,3921,3925],{},"Open ",[511,3922,3923],{"href":3923,"rel":3924},"http:\u002F\u002Flocalhost:3000",[515]," to explore the interactive test UI.",[3927,3928,3929],"card-group",{},[3930,3931,3935],"card",{"icon":3932,"title":3933,"to":3934},"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,3937,3939],{"id":3938},"next-steps","Next Steps",[440,3941,3942,3943,3945],{},"Deepen your ",[1122,3944,231],{}," integration:",[448,3947,3948,3953,3958,3963],{},[451,3949,3950,3952],{},[511,3951,46],{"href":47},": Design comprehensive events with context layering",[451,3954,3955,3957],{},[511,3956,90],{"href":95},": Send logs to Axiom, Sentry, PostHog, and more",[451,3959,3960,3962],{},[511,3961,61],{"href":62},": Control log volume with head and tail sampling",[451,3964,3965,3967,3968,3004,3970,3972,3973,3975],{},[511,3966,51],{"href":52},": Throw errors with ",[443,3969,2421],{},[443,3971,2441],{},", and ",[443,3974,2461],{}," fields",[3977,3978,3979],"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":3981},[3982,3986,3987,3988,3989,3990,3991,3994,3995,3996,3997,3998],{"id":524,"depth":653,"text":25,"children":3983},[3984,3985],{"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":2552,"depth":653,"text":2553},{"id":3177,"depth":653,"text":409},{"id":3190,"depth":653,"text":3191,"children":3992},[3993],{"id":3370,"depth":674,"text":3371},{"id":3587,"depth":653,"text":3588},{"id":3700,"depth":653,"text":3701},{"id":3841,"depth":653,"text":3842},{"id":3874,"depth":653,"text":3875},{"id":3938,"depth":653,"text":3939},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in oRPC applications.","md",[4002],{"label":3933,"icon":3932,"to":3934,"color":4003,"variant":4004},"neutral","subtle",{},{"title":231,"icon":234},{"title":231,"description":3999},"YAdG2nAhZRl3MlJYcbxNp2gzZ030xsT09AG3T2r30Gg",[4010,4012],{"title":226,"path":227,"stem":228,"description":4011,"icon":229,"children":-1},"Wide events and structured errors in Astro server middleware.",{"title":236,"path":237,"stem":238,"description":4013,"icon":239,"children":-1},"Wide events and structured logging in AWS Lambda functions, including SQS consumers and event-driven handlers.",1778445003942]