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