[{"data":1,"prerenderedAt":2791},["ShallowReactive",2],{"navigation_docs":3,"-logging-better-auth-overview":402,"-logging-better-auth-overview-surround":2786},[4,35,159,201,289,299,386],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F4.agent-skills","i-lucide-sparkles",{"title":30,"path":31,"stem":32,"icon":33},"vs Other Loggers","\u002Fgetting-started\u002Fvs-other-loggers","1.getting-started\u002F5.vs-other-loggers","i-lucide-scale",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Logging","\u002Flogging","2.logging",[40,45,50,55,60,65,70,99,127],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Catalogs","\u002Flogging\u002Fcatalogs","2.logging\u002F4.catalogs","i-lucide-book-open",{"title":66,"path":67,"stem":68,"icon":69},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F5.client-logging","i-lucide-monitor",{"title":71,"icon":72,"path":73,"stem":74,"children":75,"page":34},"AI SDK","i-simple-icons-vercel","\u002Flogging\u002Fai-sdk","2.logging\u002F6.ai-sdk",[76,79,84,89,94],{"title":41,"path":77,"stem":78,"icon":44},"\u002Flogging\u002Fai-sdk\u002Foverview","2.logging\u002F6.ai-sdk\u002F01.overview",{"title":80,"path":81,"stem":82,"icon":83},"Usage","\u002Flogging\u002Fai-sdk\u002Fusage","2.logging\u002F6.ai-sdk\u002F02.usage","i-lucide-code",{"title":85,"path":86,"stem":87,"icon":88},"Options","\u002Flogging\u002Fai-sdk\u002Foptions","2.logging\u002F6.ai-sdk\u002F03.options","i-lucide-sliders",{"title":90,"path":91,"stem":92,"icon":93},"Metadata","\u002Flogging\u002Fai-sdk\u002Fmetadata","2.logging\u002F6.ai-sdk\u002F04.metadata","i-lucide-database",{"title":95,"path":96,"stem":97,"icon":98},"Telemetry","\u002Flogging\u002Fai-sdk\u002Ftelemetry","2.logging\u002F6.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":100,"icon":101,"path":102,"stem":103,"children":104,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Flogging\u002Fbetter-auth","2.logging\u002F7.better-auth",[105,108,113,118,122],{"title":41,"path":106,"stem":107,"icon":44},"\u002Flogging\u002Fbetter-auth\u002Foverview","2.logging\u002F7.better-auth\u002F01.overview",{"title":109,"path":110,"stem":111,"icon":112},"Identify User","\u002Flogging\u002Fbetter-auth\u002Fidentify-user","2.logging\u002F7.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":114,"path":115,"stem":116,"icon":117},"Middleware","\u002Flogging\u002Fbetter-auth\u002Fmiddleware","2.logging\u002F7.better-auth\u002F03.middleware","i-lucide-shield",{"title":119,"path":120,"stem":121,"icon":69},"Client Sync","\u002Flogging\u002Fbetter-auth\u002Fclient-sync","2.logging\u002F7.better-auth\u002F04.client-sync",{"title":123,"path":124,"stem":125,"icon":126},"Performance","\u002Flogging\u002Fbetter-auth\u002Fperformance","2.logging\u002F7.better-auth\u002F05.performance","i-lucide-gauge",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":34},"Audit Logs","i-lucide-shield-check","\u002Flogging\u002Faudit","2.logging\u002F8.audit",[133,136,141,146,151,155],{"title":41,"path":134,"stem":135,"icon":44},"\u002Flogging\u002Faudit\u002Foverview","2.logging\u002F8.audit\u002F01.overview",{"title":137,"path":138,"stem":139,"icon":140},"Schema","\u002Flogging\u002Faudit\u002Fschema","2.logging\u002F8.audit\u002F02.schema","i-lucide-file-text",{"title":142,"path":143,"stem":144,"icon":145},"Recording","\u002Flogging\u002Faudit\u002Frecording","2.logging\u002F8.audit\u002F03.recording","i-lucide-pen-line",{"title":147,"path":148,"stem":149,"icon":150},"Drains","\u002Flogging\u002Faudit\u002Fpipeline","2.logging\u002F8.audit\u002F04.pipeline","i-lucide-link",{"title":152,"path":153,"stem":154,"icon":129},"Compliance","\u002Flogging\u002Faudit\u002Fcompliance","2.logging\u002F8.audit\u002F05.compliance",{"title":156,"path":157,"stem":158,"icon":64},"Recipes","\u002Flogging\u002Faudit\u002Frecipes","2.logging\u002F8.audit\u002F06.recipes",{"title":160,"path":161,"stem":162,"children":163,"page":34},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[164,169,174,179,184,188,191,196],{"title":165,"path":166,"stem":167,"icon":168},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":170,"path":171,"stem":172,"icon":173},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":175,"path":176,"stem":177,"icon":178},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":180,"path":181,"stem":182,"icon":183},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":185,"path":186,"stem":187,"icon":129},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices",{"title":123,"path":189,"stem":190,"icon":126},"\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance",{"title":192,"path":193,"stem":194,"icon":195},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":197,"path":198,"stem":199,"icon":200},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":202,"path":203,"stem":204,"children":205,"page":34},"Frameworks","\u002Fframeworks","4.frameworks",[206,210,215,220,225,230,235,240,245,250,255,260,265,270,274,279,284],{"title":41,"path":207,"stem":208,"icon":209},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":211,"path":212,"stem":213,"icon":214},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":216,"path":217,"stem":218,"icon":219},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":221,"path":222,"stem":223,"icon":224},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":226,"path":227,"stem":228,"icon":229},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":231,"path":232,"stem":233,"icon":234},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":236,"path":237,"stem":238,"icon":239},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":241,"path":242,"stem":243,"icon":244},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":246,"path":247,"stem":248,"icon":249},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":251,"path":252,"stem":253,"icon":254},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":256,"path":257,"stem":258,"icon":259},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":261,"path":262,"stem":263,"icon":264},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":266,"path":267,"stem":268,"icon":269},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":271,"path":272,"stem":273,"icon":183},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":275,"path":276,"stem":277,"icon":278},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":280,"path":281,"stem":282,"icon":283},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":285,"path":286,"stem":287,"icon":288},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F17.custom-integration","i-lucide-puzzle",{"title":290,"path":291,"stem":292,"children":293,"page":34},"Build On Top","\u002Fbuild-on-top","5.build-on-top",[294],{"title":295,"path":296,"stem":297,"icon":298},"FS reader","\u002Fbuild-on-top\u002Ffs-reader","5.build-on-top\u002F4.fs-reader","i-lucide-folder-search",{"title":300,"path":301,"stem":302,"children":303,"page":34},"Adapters","\u002Fadapters","6.adapters",[304,307,347,362],{"title":41,"path":305,"stem":306,"icon":44},"\u002Fadapters\u002Foverview","6.adapters\u002F01.overview",{"title":308,"path":309,"stem":310,"children":311,"page":34},"Cloud destinations","\u002Fadapters\u002Fcloud","6.adapters\u002F02.cloud",[312,317,322,327,332,337,342],{"title":313,"path":314,"stem":315,"icon":316},"Axiom","\u002Fadapters\u002Fcloud\u002Faxiom","6.adapters\u002F02.cloud\u002F01.axiom","i-custom-axiom",{"title":318,"path":319,"stem":320,"icon":321},"OTLP","\u002Fadapters\u002Fcloud\u002Fotlp","6.adapters\u002F02.cloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":323,"path":324,"stem":325,"icon":326},"PostHog","\u002Fadapters\u002Fcloud\u002Fposthog","6.adapters\u002F02.cloud\u002F03.posthog","i-simple-icons-posthog",{"title":328,"path":329,"stem":330,"icon":331},"Sentry","\u002Fadapters\u002Fcloud\u002Fsentry","6.adapters\u002F02.cloud\u002F04.sentry","i-simple-icons-sentry",{"title":333,"path":334,"stem":335,"icon":336},"Better Stack","\u002Fadapters\u002Fcloud\u002Fbetter-stack","6.adapters\u002F02.cloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":338,"path":339,"stem":340,"icon":341},"Datadog","\u002Fadapters\u002Fcloud\u002Fdatadog","6.adapters\u002F02.cloud\u002F06.datadog","i-simple-icons-datadog",{"title":343,"path":344,"stem":345,"icon":346},"HyperDX","\u002Fadapters\u002Fcloud\u002Fhyperdx","6.adapters\u002F02.cloud\u002F07.hyperdx","i-custom-hyperdx",{"title":348,"path":349,"stem":350,"children":351,"page":34},"Self-hosted","\u002Fadapters\u002Fself-hosted","6.adapters\u002F03.self-hosted",[352,357],{"title":353,"path":354,"stem":355,"icon":356},"File System","\u002Fadapters\u002Fself-hosted\u002Ffs","6.adapters\u002F03.self-hosted\u002F01.fs","i-lucide-hard-drive",{"title":358,"path":359,"stem":360,"icon":361},"NuxtHub","\u002Fadapters\u002Fself-hosted\u002Fnuxthub","6.adapters\u002F03.self-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":363,"path":364,"stem":365,"children":366,"page":34},"Building blocks","\u002Fadapters\u002Fbuilding-blocks","6.adapters\u002F04.building-blocks",[367,372,377,381],{"title":368,"path":369,"stem":370,"icon":371},"Pipeline","\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline","6.adapters\u002F04.building-blocks\u002F01.pipeline","i-lucide-workflow",{"title":373,"path":374,"stem":375,"icon":376},"HTTP","\u002Fadapters\u002Fbuilding-blocks\u002Fhttp","6.adapters\u002F04.building-blocks\u002F02.http","i-lucide-globe",{"title":378,"path":379,"stem":380,"icon":83},"Custom Adapters","\u002Fadapters\u002Fbuilding-blocks\u002Fcustom","6.adapters\u002F04.building-blocks\u002F03.custom",{"title":382,"path":383,"stem":384,"icon":385},"Toolkit","\u002Fadapters\u002Fbuilding-blocks\u002Ftoolkit","6.adapters\u002F04.building-blocks\u002F04.toolkit","i-lucide-blocks",{"title":387,"path":388,"stem":389,"children":390,"page":34},"Enrichers","\u002Fenrichers","7.enrichers",[391,394,398],{"title":41,"path":392,"stem":393,"icon":28},"\u002Fenrichers\u002Foverview","7.enrichers\u002F1.overview",{"title":395,"path":396,"stem":397,"icon":288},"Built-in","\u002Fenrichers\u002Fbuilt-in","7.enrichers\u002F2.built-in",{"title":399,"path":400,"stem":401,"icon":83},"Custom","\u002Fenrichers\u002Fcustom","7.enrichers\u002F3.custom",{"id":403,"title":404,"body":405,"description":2773,"extension":2774,"links":2775,"meta":2782,"navigation":2783,"path":106,"seo":2784,"stem":107,"__hash__":2785},"docs\u002F2.logging\u002F7.better-auth\u002F01.overview.md","Better Auth Integration",{"type":406,"value":407,"toc":2766},"minimark",[408,420,425,454,525,567,570,573,1984,1987,2624,2628,2631,2646,2650,2678,2682,2762],[409,410,411,415,416,419],"p",{},[412,413,414],"code",{},"evlog\u002Fbetter-auth"," turns anonymous wide events into identified ones. Every request automatically includes who made it — no manual ",[412,417,418],{},"log.set({ user })"," needed.",[421,422,424],"h2",{"id":423},"prerequisites","Prerequisites",[409,426,427,428,434,435,439,440,443,444,447,448,453],{},"Use ",[429,430,100],"a",{"href":431,"rel":432},"https:\u002F\u002Fbetter-auth.com\u002F",[433],"nofollow"," as a ",[436,437,438],"strong",{},"direct dependency"," in your app. ",[412,441,442],{},"evlog"," does not bundle Better Auth. The integration is tested against Better Auth ",[412,445,446],{},">=1.6.9"," (same major as ",[429,449,452],{"href":450,"rel":451},"https:\u002F\u002Fgithub.com\u002FHugoRCD\u002Fevlog\u002Ftree\u002Fmain\u002Fapps\u002Fplayground",[433],"the playground",").",[455,456,457,482,496,510],"code-group",{},[458,459,465],"pre",{"className":460,"code":461,"filename":462,"language":463,"meta":464,"style":464},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add better-auth\n","pnpm","bash","",[412,466,467],{"__ignoreMap":464},[468,469,472,475,479],"span",{"class":470,"line":471},"line",1,[468,473,462],{"class":474},"sBMFI",[468,476,478],{"class":477},"sfazB"," add",[468,480,481],{"class":477}," better-auth\n",[458,483,486],{"className":460,"code":484,"filename":485,"language":463,"meta":464,"style":464},"bun add better-auth\n","bun",[412,487,488],{"__ignoreMap":464},[468,489,490,492,494],{"class":470,"line":471},[468,491,485],{"class":474},[468,493,478],{"class":477},[468,495,481],{"class":477},[458,497,500],{"className":460,"code":498,"filename":499,"language":463,"meta":464,"style":464},"yarn add better-auth\n","yarn",[412,501,502],{"__ignoreMap":464},[468,503,504,506,508],{"class":470,"line":471},[468,505,499],{"class":474},[468,507,478],{"class":477},[468,509,481],{"class":477},[458,511,514],{"className":460,"code":512,"filename":513,"language":463,"meta":464,"style":464},"npm install better-auth\n","npm",[412,515,516],{"__ignoreMap":464},[468,517,518,520,523],{"class":470,"line":471},[468,519,513],{"class":474},[468,521,522],{"class":477}," install",[468,524,481],{"class":477},[526,527,530,533,555],"prompt",{":actions":528,"description":529,"icon":101},"[\"copy\",\"cursor\",\"windsurf\"]","Add Better Auth user identification",[409,531,532],{},"Add Better Auth user identification to my app with evlog.",[534,535,536,540,543,546,549,552],"ul",{},[537,538,539],"li",{},"Import createAuthMiddleware from 'evlog\u002Fbetter-auth'",[537,541,542],{},"Call createAuthMiddleware(auth) to get an identify function",[537,544,545],{},"Call identify(log, headers, path) in your middleware\u002Fhook to auto-identify users on every request",[537,547,548],{},"Safe by default — only extracts whitelisted fields, never logs passwords or tokens",[537,550,551],{},"Supports include\u002Fexclude route patterns, lifecycle hooks, and Better Auth plugin fields",[537,553,554],{},"Works with all frameworks: Nuxt, Next.js, Express, Hono, Fastify, NestJS, Elysia, standalone",[409,556,557,558,562,563],{},"Docs: ",[429,559,560],{"href":560,"rel":561},"https:\u002F\u002Fwww.evlog.dev\u002Flogging\u002Fbetter-auth\u002Foverview",[433],"\nAdapters: ",[429,564,565],{"href":565,"rel":566},"https:\u002F\u002Fwww.evlog.dev\u002Fadapters",[433],[421,568,20],{"id":569},"quick-start",[409,571,572],{},"One middleware, all requests identified:",[455,574,575,796,1026,1179,1349,1493,1650,1858],{},[458,576,581],{"className":577,"code":578,"filename":579,"language":580,"meta":464,"style":464},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createAuthMiddleware } from 'evlog\u002Fbetter-auth'\n\nconst identify = createAuthMiddleware(auth, {\n  exclude: ['\u002Fapi\u002Fauth\u002F**'],\n})\n\nexport default defineEventHandler(async (event) => {\n  if (!event.context.log) return\n  await identify(event.context.log, event.headers, event.path)\n})\n","server\u002Fmiddleware\u002Fauth-identify.ts (Nuxt)","typescript",[412,582,583,611,618,643,670,679,684,717,747,789],{"__ignoreMap":464},[468,584,585,589,593,597,600,603,606,608],{"class":470,"line":471},[468,586,588],{"class":587},"s7zQu","import",[468,590,592],{"class":591},"sMK4o"," {",[468,594,596],{"class":595},"sTEyZ"," createAuthMiddleware",[468,598,599],{"class":591}," }",[468,601,602],{"class":587}," from",[468,604,605],{"class":591}," '",[468,607,414],{"class":477},[468,609,610],{"class":591},"'\n",[468,612,614],{"class":470,"line":613},2,[468,615,617],{"emptyLinePlaceholder":616},true,"\n",[468,619,621,625,628,631,634,637,640],{"class":470,"line":620},3,[468,622,624],{"class":623},"spNyl","const",[468,626,627],{"class":595}," identify ",[468,629,630],{"class":591},"=",[468,632,596],{"class":633},"s2Zo4",[468,635,636],{"class":595},"(auth",[468,638,639],{"class":591},",",[468,641,642],{"class":591}," {\n",[468,644,646,650,653,656,659,662,664,667],{"class":470,"line":645},4,[468,647,649],{"class":648},"swJcz","  exclude",[468,651,652],{"class":591},":",[468,654,655],{"class":595}," [",[468,657,658],{"class":591},"'",[468,660,661],{"class":477},"\u002Fapi\u002Fauth\u002F**",[468,663,658],{"class":591},[468,665,666],{"class":595},"]",[468,668,669],{"class":591},",\n",[468,671,673,676],{"class":470,"line":672},5,[468,674,675],{"class":591},"}",[468,677,678],{"class":595},")\n",[468,680,682],{"class":470,"line":681},6,[468,683,617],{"emptyLinePlaceholder":616},[468,685,687,690,693,696,699,702,705,709,712,715],{"class":470,"line":686},7,[468,688,689],{"class":587},"export",[468,691,692],{"class":587}," default",[468,694,695],{"class":633}," defineEventHandler",[468,697,698],{"class":595},"(",[468,700,701],{"class":623},"async",[468,703,704],{"class":591}," (",[468,706,708],{"class":707},"sHdIc","event",[468,710,711],{"class":591},")",[468,713,714],{"class":623}," =>",[468,716,642],{"class":591},[468,718,720,723,725,728,730,733,736,738,741,744],{"class":470,"line":719},8,[468,721,722],{"class":587},"  if",[468,724,704],{"class":648},[468,726,727],{"class":591},"!",[468,729,708],{"class":595},[468,731,732],{"class":591},".",[468,734,735],{"class":595},"context",[468,737,732],{"class":591},[468,739,740],{"class":595},"log",[468,742,743],{"class":648},") ",[468,745,746],{"class":587},"return\n",[468,748,750,753,756,758,760,762,764,766,768,770,773,775,778,780,782,784,787],{"class":470,"line":749},9,[468,751,752],{"class":587},"  await",[468,754,755],{"class":633}," identify",[468,757,698],{"class":648},[468,759,708],{"class":595},[468,761,732],{"class":591},[468,763,735],{"class":595},[468,765,732],{"class":591},[468,767,740],{"class":595},[468,769,639],{"class":591},[468,771,772],{"class":595}," event",[468,774,732],{"class":591},[468,776,777],{"class":595},"headers",[468,779,639],{"class":591},[468,781,772],{"class":595},[468,783,732],{"class":591},[468,785,786],{"class":595},"path",[468,788,678],{"class":648},[468,790,792,794],{"class":470,"line":791},10,[468,793,675],{"class":591},[468,795,678],{"class":595},[458,797,800],{"className":577,"code":798,"filename":799,"language":580,"meta":464,"style":464},"import { withEvlog, useLogger } from '@\u002Flib\u002Fevlog'\nimport { createAuthMiddleware } from 'evlog\u002Fbetter-auth'\nimport { auth } from '@\u002Flib\u002Fauth'\n\nconst identify = createAuthMiddleware(auth)\n\nexport const POST = withEvlog(async (request: Request) => {\n  const log = useLogger()\n  await identify(log, request.headers)\n  log.set({ action: 'checkout' })\n  return Response.json({ success: true })\n})\n","app\u002Fapi\u002Fcheckout\u002Froute.ts (Next.js)",[412,801,802,827,845,865,869,882,886,920,936,957,988,1019],{"__ignoreMap":464},[468,803,804,806,808,811,813,816,818,820,822,825],{"class":470,"line":471},[468,805,588],{"class":587},[468,807,592],{"class":591},[468,809,810],{"class":595}," withEvlog",[468,812,639],{"class":591},[468,814,815],{"class":595}," useLogger",[468,817,599],{"class":591},[468,819,602],{"class":587},[468,821,605],{"class":591},[468,823,824],{"class":477},"@\u002Flib\u002Fevlog",[468,826,610],{"class":591},[468,828,829,831,833,835,837,839,841,843],{"class":470,"line":613},[468,830,588],{"class":587},[468,832,592],{"class":591},[468,834,596],{"class":595},[468,836,599],{"class":591},[468,838,602],{"class":587},[468,840,605],{"class":591},[468,842,414],{"class":477},[468,844,610],{"class":591},[468,846,847,849,851,854,856,858,860,863],{"class":470,"line":620},[468,848,588],{"class":587},[468,850,592],{"class":591},[468,852,853],{"class":595}," auth",[468,855,599],{"class":591},[468,857,602],{"class":587},[468,859,605],{"class":591},[468,861,862],{"class":477},"@\u002Flib\u002Fauth",[468,864,610],{"class":591},[468,866,867],{"class":470,"line":645},[468,868,617],{"emptyLinePlaceholder":616},[468,870,871,873,875,877,879],{"class":470,"line":672},[468,872,624],{"class":623},[468,874,627],{"class":595},[468,876,630],{"class":591},[468,878,596],{"class":633},[468,880,881],{"class":595},"(auth)\n",[468,883,884],{"class":470,"line":681},[468,885,617],{"emptyLinePlaceholder":616},[468,887,888,890,893,896,898,900,902,904,906,909,911,914,916,918],{"class":470,"line":686},[468,889,689],{"class":587},[468,891,892],{"class":623}," const",[468,894,895],{"class":595}," POST ",[468,897,630],{"class":591},[468,899,810],{"class":633},[468,901,698],{"class":595},[468,903,701],{"class":623},[468,905,704],{"class":591},[468,907,908],{"class":707},"request",[468,910,652],{"class":591},[468,912,913],{"class":474}," Request",[468,915,711],{"class":591},[468,917,714],{"class":623},[468,919,642],{"class":591},[468,921,922,925,928,931,933],{"class":470,"line":719},[468,923,924],{"class":623},"  const",[468,926,927],{"class":595}," log",[468,929,930],{"class":591}," =",[468,932,815],{"class":633},[468,934,935],{"class":648},"()\n",[468,937,938,940,942,944,946,948,951,953,955],{"class":470,"line":749},[468,939,752],{"class":587},[468,941,755],{"class":633},[468,943,698],{"class":648},[468,945,740],{"class":595},[468,947,639],{"class":591},[468,949,950],{"class":595}," request",[468,952,732],{"class":591},[468,954,777],{"class":595},[468,956,678],{"class":648},[468,958,959,962,964,967,969,972,975,977,979,982,984,986],{"class":470,"line":791},[468,960,961],{"class":595},"  log",[468,963,732],{"class":591},[468,965,966],{"class":633},"set",[468,968,698],{"class":648},[468,970,971],{"class":591},"{",[468,973,974],{"class":648}," action",[468,976,652],{"class":591},[468,978,605],{"class":591},[468,980,981],{"class":477},"checkout",[468,983,658],{"class":591},[468,985,599],{"class":591},[468,987,678],{"class":648},[468,989,991,994,997,999,1002,1004,1006,1009,1011,1015,1017],{"class":470,"line":990},11,[468,992,993],{"class":587},"  return",[468,995,996],{"class":595}," Response",[468,998,732],{"class":591},[468,1000,1001],{"class":633},"json",[468,1003,698],{"class":648},[468,1005,971],{"class":591},[468,1007,1008],{"class":648}," success",[468,1010,652],{"class":591},[468,1012,1014],{"class":1013},"sfNiH"," true",[468,1016,599],{"class":591},[468,1018,678],{"class":648},[468,1020,1022,1024],{"class":470,"line":1021},12,[468,1023,675],{"class":591},[468,1025,678],{"class":595},[458,1027,1030],{"className":577,"code":1028,"filename":1029,"language":580,"meta":464,"style":464},"import { createAuthMiddleware } from 'evlog\u002Fbetter-auth'\n\nconst identify = createAuthMiddleware(auth, {\n  exclude: ['\u002Fapi\u002Fauth\u002F**'],\n})\n\napp.use(async (req, res, next) => {\n  await identify(req.log, req.headers, req.path)\n  next()\n})\n","src\u002Findex.ts (Express)",[412,1031,1032,1050,1054,1070,1088,1094,1098,1133,1166,1173],{"__ignoreMap":464},[468,1033,1034,1036,1038,1040,1042,1044,1046,1048],{"class":470,"line":471},[468,1035,588],{"class":587},[468,1037,592],{"class":591},[468,1039,596],{"class":595},[468,1041,599],{"class":591},[468,1043,602],{"class":587},[468,1045,605],{"class":591},[468,1047,414],{"class":477},[468,1049,610],{"class":591},[468,1051,1052],{"class":470,"line":613},[468,1053,617],{"emptyLinePlaceholder":616},[468,1055,1056,1058,1060,1062,1064,1066,1068],{"class":470,"line":620},[468,1057,624],{"class":623},[468,1059,627],{"class":595},[468,1061,630],{"class":591},[468,1063,596],{"class":633},[468,1065,636],{"class":595},[468,1067,639],{"class":591},[468,1069,642],{"class":591},[468,1071,1072,1074,1076,1078,1080,1082,1084,1086],{"class":470,"line":645},[468,1073,649],{"class":648},[468,1075,652],{"class":591},[468,1077,655],{"class":595},[468,1079,658],{"class":591},[468,1081,661],{"class":477},[468,1083,658],{"class":591},[468,1085,666],{"class":595},[468,1087,669],{"class":591},[468,1089,1090,1092],{"class":470,"line":672},[468,1091,675],{"class":591},[468,1093,678],{"class":595},[468,1095,1096],{"class":470,"line":681},[468,1097,617],{"emptyLinePlaceholder":616},[468,1099,1100,1103,1105,1108,1110,1112,1114,1117,1119,1122,1124,1127,1129,1131],{"class":470,"line":686},[468,1101,1102],{"class":595},"app",[468,1104,732],{"class":591},[468,1106,1107],{"class":633},"use",[468,1109,698],{"class":595},[468,1111,701],{"class":623},[468,1113,704],{"class":591},[468,1115,1116],{"class":707},"req",[468,1118,639],{"class":591},[468,1120,1121],{"class":707}," res",[468,1123,639],{"class":591},[468,1125,1126],{"class":707}," next",[468,1128,711],{"class":591},[468,1130,714],{"class":623},[468,1132,642],{"class":591},[468,1134,1135,1137,1139,1141,1143,1145,1147,1149,1152,1154,1156,1158,1160,1162,1164],{"class":470,"line":719},[468,1136,752],{"class":587},[468,1138,755],{"class":633},[468,1140,698],{"class":648},[468,1142,1116],{"class":595},[468,1144,732],{"class":591},[468,1146,740],{"class":595},[468,1148,639],{"class":591},[468,1150,1151],{"class":595}," req",[468,1153,732],{"class":591},[468,1155,777],{"class":595},[468,1157,639],{"class":591},[468,1159,1151],{"class":595},[468,1161,732],{"class":591},[468,1163,786],{"class":595},[468,1165,678],{"class":648},[468,1167,1168,1171],{"class":470,"line":749},[468,1169,1170],{"class":633},"  next",[468,1172,935],{"class":648},[468,1174,1175,1177],{"class":470,"line":791},[468,1176,675],{"class":591},[468,1178,678],{"class":595},[458,1180,1183],{"className":577,"code":1181,"filename":1182,"language":580,"meta":464,"style":464},"import { createAuthMiddleware } from 'evlog\u002Fbetter-auth'\n\nconst identify = createAuthMiddleware(auth, {\n  exclude: ['\u002Fapi\u002Fauth\u002F**'],\n})\n\napp.use(async (c, next) => {\n  await identify(c.get('log'), c.req.raw.headers, c.req.path)\n  await next()\n})\n","src\u002Findex.ts (Hono)",[412,1184,1185,1203,1207,1223,1241,1247,1251,1278,1335,1343],{"__ignoreMap":464},[468,1186,1187,1189,1191,1193,1195,1197,1199,1201],{"class":470,"line":471},[468,1188,588],{"class":587},[468,1190,592],{"class":591},[468,1192,596],{"class":595},[468,1194,599],{"class":591},[468,1196,602],{"class":587},[468,1198,605],{"class":591},[468,1200,414],{"class":477},[468,1202,610],{"class":591},[468,1204,1205],{"class":470,"line":613},[468,1206,617],{"emptyLinePlaceholder":616},[468,1208,1209,1211,1213,1215,1217,1219,1221],{"class":470,"line":620},[468,1210,624],{"class":623},[468,1212,627],{"class":595},[468,1214,630],{"class":591},[468,1216,596],{"class":633},[468,1218,636],{"class":595},[468,1220,639],{"class":591},[468,1222,642],{"class":591},[468,1224,1225,1227,1229,1231,1233,1235,1237,1239],{"class":470,"line":645},[468,1226,649],{"class":648},[468,1228,652],{"class":591},[468,1230,655],{"class":595},[468,1232,658],{"class":591},[468,1234,661],{"class":477},[468,1236,658],{"class":591},[468,1238,666],{"class":595},[468,1240,669],{"class":591},[468,1242,1243,1245],{"class":470,"line":672},[468,1244,675],{"class":591},[468,1246,678],{"class":595},[468,1248,1249],{"class":470,"line":681},[468,1250,617],{"emptyLinePlaceholder":616},[468,1252,1253,1255,1257,1259,1261,1263,1265,1268,1270,1272,1274,1276],{"class":470,"line":686},[468,1254,1102],{"class":595},[468,1256,732],{"class":591},[468,1258,1107],{"class":633},[468,1260,698],{"class":595},[468,1262,701],{"class":623},[468,1264,704],{"class":591},[468,1266,1267],{"class":707},"c",[468,1269,639],{"class":591},[468,1271,1126],{"class":707},[468,1273,711],{"class":591},[468,1275,714],{"class":623},[468,1277,642],{"class":591},[468,1279,1280,1282,1284,1286,1288,1290,1293,1295,1297,1299,1301,1303,1305,1308,1310,1312,1314,1317,1319,1321,1323,1325,1327,1329,1331,1333],{"class":470,"line":719},[468,1281,752],{"class":587},[468,1283,755],{"class":633},[468,1285,698],{"class":648},[468,1287,1267],{"class":595},[468,1289,732],{"class":591},[468,1291,1292],{"class":633},"get",[468,1294,698],{"class":648},[468,1296,658],{"class":591},[468,1298,740],{"class":477},[468,1300,658],{"class":591},[468,1302,711],{"class":648},[468,1304,639],{"class":591},[468,1306,1307],{"class":595}," c",[468,1309,732],{"class":591},[468,1311,1116],{"class":595},[468,1313,732],{"class":591},[468,1315,1316],{"class":595},"raw",[468,1318,732],{"class":591},[468,1320,777],{"class":595},[468,1322,639],{"class":591},[468,1324,1307],{"class":595},[468,1326,732],{"class":591},[468,1328,1116],{"class":595},[468,1330,732],{"class":591},[468,1332,786],{"class":595},[468,1334,678],{"class":648},[468,1336,1337,1339,1341],{"class":470,"line":749},[468,1338,752],{"class":587},[468,1340,1126],{"class":633},[468,1342,935],{"class":648},[468,1344,1345,1347],{"class":470,"line":791},[468,1346,675],{"class":591},[468,1348,678],{"class":595},[458,1350,1353],{"className":577,"code":1351,"filename":1352,"language":580,"meta":464,"style":464},"import { createAuthMiddleware } from 'evlog\u002Fbetter-auth'\n\nconst identify = createAuthMiddleware(auth, {\n  exclude: ['\u002Fapi\u002Fauth\u002F**'],\n})\n\napp.addHook('onRequest', async (request) => {\n  await identify(request.log, request.headers, request.url)\n})\n","src\u002Findex.ts (Fastify)",[412,1354,1355,1373,1377,1393,1411,1417,1421,1454,1487],{"__ignoreMap":464},[468,1356,1357,1359,1361,1363,1365,1367,1369,1371],{"class":470,"line":471},[468,1358,588],{"class":587},[468,1360,592],{"class":591},[468,1362,596],{"class":595},[468,1364,599],{"class":591},[468,1366,602],{"class":587},[468,1368,605],{"class":591},[468,1370,414],{"class":477},[468,1372,610],{"class":591},[468,1374,1375],{"class":470,"line":613},[468,1376,617],{"emptyLinePlaceholder":616},[468,1378,1379,1381,1383,1385,1387,1389,1391],{"class":470,"line":620},[468,1380,624],{"class":623},[468,1382,627],{"class":595},[468,1384,630],{"class":591},[468,1386,596],{"class":633},[468,1388,636],{"class":595},[468,1390,639],{"class":591},[468,1392,642],{"class":591},[468,1394,1395,1397,1399,1401,1403,1405,1407,1409],{"class":470,"line":645},[468,1396,649],{"class":648},[468,1398,652],{"class":591},[468,1400,655],{"class":595},[468,1402,658],{"class":591},[468,1404,661],{"class":477},[468,1406,658],{"class":591},[468,1408,666],{"class":595},[468,1410,669],{"class":591},[468,1412,1413,1415],{"class":470,"line":672},[468,1414,675],{"class":591},[468,1416,678],{"class":595},[468,1418,1419],{"class":470,"line":681},[468,1420,617],{"emptyLinePlaceholder":616},[468,1422,1423,1425,1427,1430,1432,1434,1437,1439,1441,1444,1446,1448,1450,1452],{"class":470,"line":686},[468,1424,1102],{"class":595},[468,1426,732],{"class":591},[468,1428,1429],{"class":633},"addHook",[468,1431,698],{"class":595},[468,1433,658],{"class":591},[468,1435,1436],{"class":477},"onRequest",[468,1438,658],{"class":591},[468,1440,639],{"class":591},[468,1442,1443],{"class":623}," async",[468,1445,704],{"class":591},[468,1447,908],{"class":707},[468,1449,711],{"class":591},[468,1451,714],{"class":623},[468,1453,642],{"class":591},[468,1455,1456,1458,1460,1462,1464,1466,1468,1470,1472,1474,1476,1478,1480,1482,1485],{"class":470,"line":719},[468,1457,752],{"class":587},[468,1459,755],{"class":633},[468,1461,698],{"class":648},[468,1463,908],{"class":595},[468,1465,732],{"class":591},[468,1467,740],{"class":595},[468,1469,639],{"class":591},[468,1471,950],{"class":595},[468,1473,732],{"class":591},[468,1475,777],{"class":595},[468,1477,639],{"class":591},[468,1479,950],{"class":595},[468,1481,732],{"class":591},[468,1483,1484],{"class":595},"url",[468,1486,678],{"class":648},[468,1488,1489,1491],{"class":470,"line":749},[468,1490,675],{"class":591},[468,1492,678],{"class":595},[458,1494,1497],{"className":577,"code":1495,"filename":1496,"language":580,"meta":464,"style":464},"import { createAuthMiddleware } from 'evlog\u002Fbetter-auth'\n\nconst identify = createAuthMiddleware(auth, {\n  exclude: ['\u002Fapi\u002Fauth\u002F**'],\n})\n\napp.derive(async ({ log, request }) => {\n  await identify(log, request.headers, new URL(request.url).pathname)\n  return {}\n})\n","src\u002Findex.ts (Elysia)",[412,1498,1499,1517,1521,1537,1555,1561,1565,1594,1637,1644],{"__ignoreMap":464},[468,1500,1501,1503,1505,1507,1509,1511,1513,1515],{"class":470,"line":471},[468,1502,588],{"class":587},[468,1504,592],{"class":591},[468,1506,596],{"class":595},[468,1508,599],{"class":591},[468,1510,602],{"class":587},[468,1512,605],{"class":591},[468,1514,414],{"class":477},[468,1516,610],{"class":591},[468,1518,1519],{"class":470,"line":613},[468,1520,617],{"emptyLinePlaceholder":616},[468,1522,1523,1525,1527,1529,1531,1533,1535],{"class":470,"line":620},[468,1524,624],{"class":623},[468,1526,627],{"class":595},[468,1528,630],{"class":591},[468,1530,596],{"class":633},[468,1532,636],{"class":595},[468,1534,639],{"class":591},[468,1536,642],{"class":591},[468,1538,1539,1541,1543,1545,1547,1549,1551,1553],{"class":470,"line":645},[468,1540,649],{"class":648},[468,1542,652],{"class":591},[468,1544,655],{"class":595},[468,1546,658],{"class":591},[468,1548,661],{"class":477},[468,1550,658],{"class":591},[468,1552,666],{"class":595},[468,1554,669],{"class":591},[468,1556,1557,1559],{"class":470,"line":672},[468,1558,675],{"class":591},[468,1560,678],{"class":595},[468,1562,1563],{"class":470,"line":681},[468,1564,617],{"emptyLinePlaceholder":616},[468,1566,1567,1569,1571,1574,1576,1578,1581,1583,1585,1587,1590,1592],{"class":470,"line":686},[468,1568,1102],{"class":595},[468,1570,732],{"class":591},[468,1572,1573],{"class":633},"derive",[468,1575,698],{"class":595},[468,1577,701],{"class":623},[468,1579,1580],{"class":591}," ({",[468,1582,927],{"class":707},[468,1584,639],{"class":591},[468,1586,950],{"class":707},[468,1588,1589],{"class":591}," })",[468,1591,714],{"class":623},[468,1593,642],{"class":591},[468,1595,1596,1598,1600,1602,1604,1606,1608,1610,1612,1614,1617,1620,1622,1624,1626,1628,1630,1632,1635],{"class":470,"line":719},[468,1597,752],{"class":587},[468,1599,755],{"class":633},[468,1601,698],{"class":648},[468,1603,740],{"class":595},[468,1605,639],{"class":591},[468,1607,950],{"class":595},[468,1609,732],{"class":591},[468,1611,777],{"class":595},[468,1613,639],{"class":591},[468,1615,1616],{"class":591}," new",[468,1618,1619],{"class":633}," URL",[468,1621,698],{"class":648},[468,1623,908],{"class":595},[468,1625,732],{"class":591},[468,1627,1484],{"class":595},[468,1629,711],{"class":648},[468,1631,732],{"class":591},[468,1633,1634],{"class":595},"pathname",[468,1636,678],{"class":648},[468,1638,1639,1641],{"class":470,"line":749},[468,1640,993],{"class":587},[468,1642,1643],{"class":591}," {}\n",[468,1645,1646,1648],{"class":470,"line":791},[468,1647,675],{"class":591},[468,1649,678],{"class":595},[458,1651,1654],{"className":577,"code":1652,"filename":1653,"language":580,"meta":464,"style":464},"import { createAuthMiddleware } from 'evlog\u002Fbetter-auth'\nimport { useLogger } from 'evlog\u002Fnestjs'\n\nconst identify = createAuthMiddleware(auth, {\n  exclude: ['\u002Fapi\u002Fauth\u002F**'],\n})\n\n@Injectable()\nexport class AuthIdentifyMiddleware implements NestMiddleware {\n  async use(req: Request, res: Response, next: NextFunction) {\n    await identify(useLogger(), req.headers, req.path)\n    next()\n  }\n}\n","src\u002Fauth-identify.middleware.ts (NestJS)",[412,1655,1656,1674,1693,1697,1713,1731,1737,1741,1751,1769,1806,1839,1846,1852],{"__ignoreMap":464},[468,1657,1658,1660,1662,1664,1666,1668,1670,1672],{"class":470,"line":471},[468,1659,588],{"class":587},[468,1661,592],{"class":591},[468,1663,596],{"class":595},[468,1665,599],{"class":591},[468,1667,602],{"class":587},[468,1669,605],{"class":591},[468,1671,414],{"class":477},[468,1673,610],{"class":591},[468,1675,1676,1678,1680,1682,1684,1686,1688,1691],{"class":470,"line":613},[468,1677,588],{"class":587},[468,1679,592],{"class":591},[468,1681,815],{"class":595},[468,1683,599],{"class":591},[468,1685,602],{"class":587},[468,1687,605],{"class":591},[468,1689,1690],{"class":477},"evlog\u002Fnestjs",[468,1692,610],{"class":591},[468,1694,1695],{"class":470,"line":620},[468,1696,617],{"emptyLinePlaceholder":616},[468,1698,1699,1701,1703,1705,1707,1709,1711],{"class":470,"line":645},[468,1700,624],{"class":623},[468,1702,627],{"class":595},[468,1704,630],{"class":591},[468,1706,596],{"class":633},[468,1708,636],{"class":595},[468,1710,639],{"class":591},[468,1712,642],{"class":591},[468,1714,1715,1717,1719,1721,1723,1725,1727,1729],{"class":470,"line":672},[468,1716,649],{"class":648},[468,1718,652],{"class":591},[468,1720,655],{"class":595},[468,1722,658],{"class":591},[468,1724,661],{"class":477},[468,1726,658],{"class":591},[468,1728,666],{"class":595},[468,1730,669],{"class":591},[468,1732,1733,1735],{"class":470,"line":681},[468,1734,675],{"class":591},[468,1736,678],{"class":595},[468,1738,1739],{"class":470,"line":686},[468,1740,617],{"emptyLinePlaceholder":616},[468,1742,1743,1746,1749],{"class":470,"line":719},[468,1744,1745],{"class":591},"@",[468,1747,1748],{"class":633},"Injectable",[468,1750,935],{"class":595},[468,1752,1753,1755,1758,1761,1764,1767],{"class":470,"line":749},[468,1754,689],{"class":587},[468,1756,1757],{"class":623}," class",[468,1759,1760],{"class":474}," AuthIdentifyMiddleware",[468,1762,1763],{"class":623}," implements",[468,1765,1766],{"class":474}," NestMiddleware",[468,1768,642],{"class":591},[468,1770,1771,1774,1777,1779,1781,1783,1785,1787,1789,1791,1793,1795,1797,1799,1802,1804],{"class":470,"line":791},[468,1772,1773],{"class":623},"  async",[468,1775,1776],{"class":648}," use",[468,1778,698],{"class":591},[468,1780,1116],{"class":707},[468,1782,652],{"class":591},[468,1784,913],{"class":474},[468,1786,639],{"class":591},[468,1788,1121],{"class":707},[468,1790,652],{"class":591},[468,1792,996],{"class":474},[468,1794,639],{"class":591},[468,1796,1126],{"class":707},[468,1798,652],{"class":591},[468,1800,1801],{"class":474}," NextFunction",[468,1803,711],{"class":591},[468,1805,642],{"class":591},[468,1807,1808,1811,1813,1815,1818,1821,1823,1825,1827,1829,1831,1833,1835,1837],{"class":470,"line":990},[468,1809,1810],{"class":587},"    await",[468,1812,755],{"class":633},[468,1814,698],{"class":648},[468,1816,1817],{"class":633},"useLogger",[468,1819,1820],{"class":648},"()",[468,1822,639],{"class":591},[468,1824,1151],{"class":595},[468,1826,732],{"class":591},[468,1828,777],{"class":595},[468,1830,639],{"class":591},[468,1832,1151],{"class":595},[468,1834,732],{"class":591},[468,1836,786],{"class":595},[468,1838,678],{"class":648},[468,1840,1841,1844],{"class":470,"line":1021},[468,1842,1843],{"class":633},"    next",[468,1845,935],{"class":648},[468,1847,1849],{"class":470,"line":1848},13,[468,1850,1851],{"class":591},"  }\n",[468,1853,1855],{"class":470,"line":1854},14,[468,1856,1857],{"class":591},"}\n",[458,1859,1862],{"className":577,"code":1860,"filename":1861,"language":580,"meta":464,"style":464},"import { identifyUser } from 'evlog\u002Fbetter-auth'\nimport { createLogger } from 'evlog'\n\nconst log = createLogger()\nconst session = await auth.api.getSession({ headers })\nif (session) identifyUser(log, session)\nlog.emit()\n","scripts\u002Fsync-job.ts (Standalone)",[412,1863,1864,1883,1902,1906,1919,1954,1973],{"__ignoreMap":464},[468,1865,1866,1868,1870,1873,1875,1877,1879,1881],{"class":470,"line":471},[468,1867,588],{"class":587},[468,1869,592],{"class":591},[468,1871,1872],{"class":595}," identifyUser",[468,1874,599],{"class":591},[468,1876,602],{"class":587},[468,1878,605],{"class":591},[468,1880,414],{"class":477},[468,1882,610],{"class":591},[468,1884,1885,1887,1889,1892,1894,1896,1898,1900],{"class":470,"line":613},[468,1886,588],{"class":587},[468,1888,592],{"class":591},[468,1890,1891],{"class":595}," createLogger",[468,1893,599],{"class":591},[468,1895,602],{"class":587},[468,1897,605],{"class":591},[468,1899,442],{"class":477},[468,1901,610],{"class":591},[468,1903,1904],{"class":470,"line":620},[468,1905,617],{"emptyLinePlaceholder":616},[468,1907,1908,1910,1913,1915,1917],{"class":470,"line":645},[468,1909,624],{"class":623},[468,1911,1912],{"class":595}," log ",[468,1914,630],{"class":591},[468,1916,1891],{"class":633},[468,1918,935],{"class":595},[468,1920,1921,1923,1926,1928,1931,1933,1935,1938,1940,1943,1945,1947,1950,1952],{"class":470,"line":672},[468,1922,624],{"class":623},[468,1924,1925],{"class":595}," session ",[468,1927,630],{"class":591},[468,1929,1930],{"class":587}," await",[468,1932,853],{"class":595},[468,1934,732],{"class":591},[468,1936,1937],{"class":595},"api",[468,1939,732],{"class":591},[468,1941,1942],{"class":633},"getSession",[468,1944,698],{"class":595},[468,1946,971],{"class":591},[468,1948,1949],{"class":595}," headers ",[468,1951,675],{"class":591},[468,1953,678],{"class":595},[468,1955,1956,1959,1962,1965,1968,1970],{"class":470,"line":681},[468,1957,1958],{"class":587},"if",[468,1960,1961],{"class":595}," (session) ",[468,1963,1964],{"class":633},"identifyUser",[468,1966,1967],{"class":595},"(log",[468,1969,639],{"class":591},[468,1971,1972],{"class":595}," session)\n",[468,1974,1975,1977,1979,1982],{"class":470,"line":686},[468,1976,740],{"class":595},[468,1978,732],{"class":591},[468,1980,1981],{"class":633},"emit",[468,1983,935],{"class":595},[409,1985,1986],{},"Your wide event now includes the user:",[455,1988,1989,2166],{},[458,1990,1994],{"className":1991,"code":1992,"filename":1993,"language":1001,"meta":464,"style":464},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"level\": \"info\",\n  \"method\": \"POST\",\n  \"path\": \"\u002Fapi\u002Fcheckout\",\n  \"status\": 200,\n  \"duration\": \"120ms\",\n  \"requestId\": \"a5669202-7765-4f59-b6f0-b9f40ce71599\",\n  \"cart\": { \"items\": 3, \"total\": 9999 }\n}\n","Before — anonymous",[412,1995,1996,2001,2024,2044,2063,2080,2100,2120,2162],{"__ignoreMap":464},[468,1997,1998],{"class":470,"line":471},[468,1999,2000],{"class":591},"{\n",[468,2002,2003,2006,2009,2012,2014,2017,2020,2022],{"class":470,"line":613},[468,2004,2005],{"class":591},"  \"",[468,2007,2008],{"class":623},"level",[468,2010,2011],{"class":591},"\"",[468,2013,652],{"class":591},[468,2015,2016],{"class":591}," \"",[468,2018,2019],{"class":477},"info",[468,2021,2011],{"class":591},[468,2023,669],{"class":591},[468,2025,2026,2028,2031,2033,2035,2037,2040,2042],{"class":470,"line":620},[468,2027,2005],{"class":591},[468,2029,2030],{"class":623},"method",[468,2032,2011],{"class":591},[468,2034,652],{"class":591},[468,2036,2016],{"class":591},[468,2038,2039],{"class":477},"POST",[468,2041,2011],{"class":591},[468,2043,669],{"class":591},[468,2045,2046,2048,2050,2052,2054,2056,2059,2061],{"class":470,"line":645},[468,2047,2005],{"class":591},[468,2049,786],{"class":623},[468,2051,2011],{"class":591},[468,2053,652],{"class":591},[468,2055,2016],{"class":591},[468,2057,2058],{"class":477},"\u002Fapi\u002Fcheckout",[468,2060,2011],{"class":591},[468,2062,669],{"class":591},[468,2064,2065,2067,2070,2072,2074,2078],{"class":470,"line":672},[468,2066,2005],{"class":591},[468,2068,2069],{"class":623},"status",[468,2071,2011],{"class":591},[468,2073,652],{"class":591},[468,2075,2077],{"class":2076},"sbssI"," 200",[468,2079,669],{"class":591},[468,2081,2082,2084,2087,2089,2091,2093,2096,2098],{"class":470,"line":681},[468,2083,2005],{"class":591},[468,2085,2086],{"class":623},"duration",[468,2088,2011],{"class":591},[468,2090,652],{"class":591},[468,2092,2016],{"class":591},[468,2094,2095],{"class":477},"120ms",[468,2097,2011],{"class":591},[468,2099,669],{"class":591},[468,2101,2102,2104,2107,2109,2111,2113,2116,2118],{"class":470,"line":686},[468,2103,2005],{"class":591},[468,2105,2106],{"class":623},"requestId",[468,2108,2011],{"class":591},[468,2110,652],{"class":591},[468,2112,2016],{"class":591},[468,2114,2115],{"class":477},"a5669202-7765-4f59-b6f0-b9f40ce71599",[468,2117,2011],{"class":591},[468,2119,669],{"class":591},[468,2121,2122,2124,2127,2129,2131,2133,2135,2138,2140,2142,2145,2147,2149,2152,2154,2156,2159],{"class":470,"line":719},[468,2123,2005],{"class":591},[468,2125,2126],{"class":623},"cart",[468,2128,2011],{"class":591},[468,2130,652],{"class":591},[468,2132,592],{"class":591},[468,2134,2016],{"class":591},[468,2136,2137],{"class":474},"items",[468,2139,2011],{"class":591},[468,2141,652],{"class":591},[468,2143,2144],{"class":2076}," 3",[468,2146,639],{"class":591},[468,2148,2016],{"class":591},[468,2150,2151],{"class":474},"total",[468,2153,2011],{"class":591},[468,2155,652],{"class":591},[468,2157,2158],{"class":2076}," 9999",[468,2160,2161],{"class":591}," }\n",[468,2163,2164],{"class":470,"line":749},[468,2165,1857],{"class":591},[458,2167,2170],{"className":1991,"code":2168,"filename":2169,"language":1001,"meta":464,"style":464},"{\n  \"level\": \"info\",\n  \"method\": \"POST\",\n  \"path\": \"\u002Fapi\u002Fcheckout\",\n  \"status\": 200,\n  \"duration\": \"120ms\",\n  \"requestId\": \"a5669202-7765-4f59-b6f0-b9f40ce71599\",\n  \"userId\": \"QBX9tPjJQExWawAbNll75\",\n  \"user\": {\n    \"id\": \"QBX9tPjJQExWawAbNll75\",\n    \"name\": \"Hugo Richard\",\n    \"email\": \"hugo@example.com\",\n    \"emailVerified\": true,\n    \"createdAt\": \"2024-01-15T10:00:00.000Z\"\n  },\n  \"session\": {\n    \"id\": \"Xhmh6TxKJQrVKFX0Y0II\",\n    \"expiresAt\": \"2024-01-22T10:00:00.000Z\",\n    \"ipAddress\": \"192.168.1.42\",\n    \"userAgent\": \"Mozilla\u002F5.0 (Macintosh; Intel Mac OS X 10_15_7)\",\n    \"createdAt\": \"2024-01-15T10:00:00.000Z\"\n  },\n  \"auth\": {\n    \"resolvedIn\": 12,\n    \"identified\": true\n  },\n  \"cart\": { \"items\": 3, \"total\": 9999 }\n}\n","After — identified",[412,2171,2172,2176,2194,2212,2230,2244,2262,2280,2300,2313,2333,2353,2373,2387,2406,2412,2426,2446,2467,2488,2509,2526,2531,2545,2562,2577,2582,2619],{"__ignoreMap":464},[468,2173,2174],{"class":470,"line":471},[468,2175,2000],{"class":591},[468,2177,2178,2180,2182,2184,2186,2188,2190,2192],{"class":470,"line":613},[468,2179,2005],{"class":591},[468,2181,2008],{"class":623},[468,2183,2011],{"class":591},[468,2185,652],{"class":591},[468,2187,2016],{"class":591},[468,2189,2019],{"class":477},[468,2191,2011],{"class":591},[468,2193,669],{"class":591},[468,2195,2196,2198,2200,2202,2204,2206,2208,2210],{"class":470,"line":620},[468,2197,2005],{"class":591},[468,2199,2030],{"class":623},[468,2201,2011],{"class":591},[468,2203,652],{"class":591},[468,2205,2016],{"class":591},[468,2207,2039],{"class":477},[468,2209,2011],{"class":591},[468,2211,669],{"class":591},[468,2213,2214,2216,2218,2220,2222,2224,2226,2228],{"class":470,"line":645},[468,2215,2005],{"class":591},[468,2217,786],{"class":623},[468,2219,2011],{"class":591},[468,2221,652],{"class":591},[468,2223,2016],{"class":591},[468,2225,2058],{"class":477},[468,2227,2011],{"class":591},[468,2229,669],{"class":591},[468,2231,2232,2234,2236,2238,2240,2242],{"class":470,"line":672},[468,2233,2005],{"class":591},[468,2235,2069],{"class":623},[468,2237,2011],{"class":591},[468,2239,652],{"class":591},[468,2241,2077],{"class":2076},[468,2243,669],{"class":591},[468,2245,2246,2248,2250,2252,2254,2256,2258,2260],{"class":470,"line":681},[468,2247,2005],{"class":591},[468,2249,2086],{"class":623},[468,2251,2011],{"class":591},[468,2253,652],{"class":591},[468,2255,2016],{"class":591},[468,2257,2095],{"class":477},[468,2259,2011],{"class":591},[468,2261,669],{"class":591},[468,2263,2264,2266,2268,2270,2272,2274,2276,2278],{"class":470,"line":686},[468,2265,2005],{"class":591},[468,2267,2106],{"class":623},[468,2269,2011],{"class":591},[468,2271,652],{"class":591},[468,2273,2016],{"class":591},[468,2275,2115],{"class":477},[468,2277,2011],{"class":591},[468,2279,669],{"class":591},[468,2281,2282,2284,2287,2289,2291,2293,2296,2298],{"class":470,"line":719},[468,2283,2005],{"class":591},[468,2285,2286],{"class":623},"userId",[468,2288,2011],{"class":591},[468,2290,652],{"class":591},[468,2292,2016],{"class":591},[468,2294,2295],{"class":477},"QBX9tPjJQExWawAbNll75",[468,2297,2011],{"class":591},[468,2299,669],{"class":591},[468,2301,2302,2304,2307,2309,2311],{"class":470,"line":749},[468,2303,2005],{"class":591},[468,2305,2306],{"class":623},"user",[468,2308,2011],{"class":591},[468,2310,652],{"class":591},[468,2312,642],{"class":591},[468,2314,2315,2318,2321,2323,2325,2327,2329,2331],{"class":470,"line":791},[468,2316,2317],{"class":591},"    \"",[468,2319,2320],{"class":474},"id",[468,2322,2011],{"class":591},[468,2324,652],{"class":591},[468,2326,2016],{"class":591},[468,2328,2295],{"class":477},[468,2330,2011],{"class":591},[468,2332,669],{"class":591},[468,2334,2335,2337,2340,2342,2344,2346,2349,2351],{"class":470,"line":990},[468,2336,2317],{"class":591},[468,2338,2339],{"class":474},"name",[468,2341,2011],{"class":591},[468,2343,652],{"class":591},[468,2345,2016],{"class":591},[468,2347,2348],{"class":477},"Hugo Richard",[468,2350,2011],{"class":591},[468,2352,669],{"class":591},[468,2354,2355,2357,2360,2362,2364,2366,2369,2371],{"class":470,"line":1021},[468,2356,2317],{"class":591},[468,2358,2359],{"class":474},"email",[468,2361,2011],{"class":591},[468,2363,652],{"class":591},[468,2365,2016],{"class":591},[468,2367,2368],{"class":477},"hugo@example.com",[468,2370,2011],{"class":591},[468,2372,669],{"class":591},[468,2374,2375,2377,2380,2382,2384],{"class":470,"line":1848},[468,2376,2317],{"class":591},[468,2378,2379],{"class":474},"emailVerified",[468,2381,2011],{"class":591},[468,2383,652],{"class":591},[468,2385,2386],{"class":591}," true,\n",[468,2388,2389,2391,2394,2396,2398,2400,2403],{"class":470,"line":1854},[468,2390,2317],{"class":591},[468,2392,2393],{"class":474},"createdAt",[468,2395,2011],{"class":591},[468,2397,652],{"class":591},[468,2399,2016],{"class":591},[468,2401,2402],{"class":477},"2024-01-15T10:00:00.000Z",[468,2404,2405],{"class":591},"\"\n",[468,2407,2409],{"class":470,"line":2408},15,[468,2410,2411],{"class":591},"  },\n",[468,2413,2415,2417,2420,2422,2424],{"class":470,"line":2414},16,[468,2416,2005],{"class":591},[468,2418,2419],{"class":623},"session",[468,2421,2011],{"class":591},[468,2423,652],{"class":591},[468,2425,642],{"class":591},[468,2427,2429,2431,2433,2435,2437,2439,2442,2444],{"class":470,"line":2428},17,[468,2430,2317],{"class":591},[468,2432,2320],{"class":474},[468,2434,2011],{"class":591},[468,2436,652],{"class":591},[468,2438,2016],{"class":591},[468,2440,2441],{"class":477},"Xhmh6TxKJQrVKFX0Y0II",[468,2443,2011],{"class":591},[468,2445,669],{"class":591},[468,2447,2449,2451,2454,2456,2458,2460,2463,2465],{"class":470,"line":2448},18,[468,2450,2317],{"class":591},[468,2452,2453],{"class":474},"expiresAt",[468,2455,2011],{"class":591},[468,2457,652],{"class":591},[468,2459,2016],{"class":591},[468,2461,2462],{"class":477},"2024-01-22T10:00:00.000Z",[468,2464,2011],{"class":591},[468,2466,669],{"class":591},[468,2468,2470,2472,2475,2477,2479,2481,2484,2486],{"class":470,"line":2469},19,[468,2471,2317],{"class":591},[468,2473,2474],{"class":474},"ipAddress",[468,2476,2011],{"class":591},[468,2478,652],{"class":591},[468,2480,2016],{"class":591},[468,2482,2483],{"class":477},"192.168.1.42",[468,2485,2011],{"class":591},[468,2487,669],{"class":591},[468,2489,2491,2493,2496,2498,2500,2502,2505,2507],{"class":470,"line":2490},20,[468,2492,2317],{"class":591},[468,2494,2495],{"class":474},"userAgent",[468,2497,2011],{"class":591},[468,2499,652],{"class":591},[468,2501,2016],{"class":591},[468,2503,2504],{"class":477},"Mozilla\u002F5.0 (Macintosh; Intel Mac OS X 10_15_7)",[468,2506,2011],{"class":591},[468,2508,669],{"class":591},[468,2510,2512,2514,2516,2518,2520,2522,2524],{"class":470,"line":2511},21,[468,2513,2317],{"class":591},[468,2515,2393],{"class":474},[468,2517,2011],{"class":591},[468,2519,652],{"class":591},[468,2521,2016],{"class":591},[468,2523,2402],{"class":477},[468,2525,2405],{"class":591},[468,2527,2529],{"class":470,"line":2528},22,[468,2530,2411],{"class":591},[468,2532,2534,2536,2539,2541,2543],{"class":470,"line":2533},23,[468,2535,2005],{"class":591},[468,2537,2538],{"class":623},"auth",[468,2540,2011],{"class":591},[468,2542,652],{"class":591},[468,2544,642],{"class":591},[468,2546,2548,2550,2553,2555,2557,2560],{"class":470,"line":2547},24,[468,2549,2317],{"class":591},[468,2551,2552],{"class":474},"resolvedIn",[468,2554,2011],{"class":591},[468,2556,652],{"class":591},[468,2558,2559],{"class":2076}," 12",[468,2561,669],{"class":591},[468,2563,2565,2567,2570,2572,2574],{"class":470,"line":2564},25,[468,2566,2317],{"class":591},[468,2568,2569],{"class":474},"identified",[468,2571,2011],{"class":591},[468,2573,652],{"class":591},[468,2575,2576],{"class":591}," true\n",[468,2578,2580],{"class":470,"line":2579},26,[468,2581,2411],{"class":591},[468,2583,2585,2587,2589,2591,2593,2595,2597,2599,2601,2603,2605,2607,2609,2611,2613,2615,2617],{"class":470,"line":2584},27,[468,2586,2005],{"class":591},[468,2588,2126],{"class":623},[468,2590,2011],{"class":591},[468,2592,652],{"class":591},[468,2594,592],{"class":591},[468,2596,2016],{"class":591},[468,2598,2137],{"class":474},[468,2600,2011],{"class":591},[468,2602,652],{"class":591},[468,2604,2144],{"class":2076},[468,2606,639],{"class":591},[468,2608,2016],{"class":591},[468,2610,2151],{"class":474},[468,2612,2011],{"class":591},[468,2614,652],{"class":591},[468,2616,2158],{"class":2076},[468,2618,2161],{"class":591},[468,2620,2622],{"class":470,"line":2621},28,[468,2623,1857],{"class":591},[421,2625,2627],{"id":2626},"how-it-works","How It Works",[2629,2630],"better-auth-identify",{},[409,2632,2633,2634,2637,2638,2641,2642,2645],{},"The integration resolves the Better Auth session from request cookies, extracts a safe whitelist of user and session fields, sets them on the logger, then fires the ",[412,2635,2636],{},"onIdentify"," (or ",[412,2639,2640],{},"onAnonymous",") hook. Auth routes are skipped by default. Resolution timing is captured on ",[412,2643,2644],{},"auth.resolvedIn",", so you can chart auth latency alongside the rest of the wide event.",[421,2647,2649],{"id":2648},"where-to-next","Where to next",[2651,2652,2653,2657,2668,2675],"card-group",{},[2654,2655,2656],"card",{"icon":112,"title":109,"to":110},"The core building block — extract safe fields, mask emails, capture plugin data (organizations, roles, 2FA).",[2654,2658,2659,2660,2663,2664,2667],{"icon":117,"title":114,"to":115},"Filter routes with ",[412,2661,2662],{},"include","\u002F",[412,2665,2666],{},"exclude",", react to identification with lifecycle hooks, and tune behaviour per app.",[2654,2669,2670,2671,2674],{"icon":69,"title":119,"to":120},"Mirror the user identity into client-side logs with ",[412,2672,2673],{},"setIdentity"," and the Better Auth client.",[2654,2676,2677],{"icon":126,"title":123,"to":124},"Watch session resolution time, enable session caching, and combine with the AI SDK integration.",[421,2679,2681],{"id":2680},"public-api","Public API",[2683,2684,2685,2698],"table",{},[2686,2687,2688],"thead",{},[2689,2690,2691,2695],"tr",{},[2692,2693,2694],"th",{},"Export",[2692,2696,2697],{},"Description",[2699,2700,2701,2716,2730,2746],"tbody",{},[2689,2702,2703,2709],{},[2704,2705,2706],"td",{},[412,2707,2708],{},"identifyUser(log, session)",[2704,2710,2711,2712,2715],{},"Core helper — extracts safe fields from a session and sets them on the logger. Returns ",[412,2713,2714],{},"true"," if identified.",[2689,2717,2718,2723],{},[2704,2719,2720],{},[412,2721,2722],{},"createAuthMiddleware(auth)",[2704,2724,2725,2726,2729],{},"Returns an async ",[412,2727,2728],{},"(log, headers, path?) => Promise\u003Cboolean>"," function with route filtering, timing, and hooks.",[2689,2731,2732,2737],{},[2704,2733,2734],{},[412,2735,2736],{},"createAuthIdentifier(auth)",[2704,2738,2739,2740,2742,2743,732],{},"Nitro ",[412,2741,908],{}," hook factory for standalone Nitro apps. See ",[429,2744,123],{"href":2745},"\u002Flogging\u002Fbetter-auth\u002Fperformance#standalone-nitro",[2689,2747,2748,2753],{},[2704,2749,2750],{},[412,2751,2752],{},"maskEmail(email)",[2704,2754,2755,2756,2758,2759,732],{},"Mask an email: ",[412,2757,2368],{}," → ",[412,2760,2761],{},"h***@example.com",[2763,2764,2765],"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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .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":464,"searchDepth":613,"depth":613,"links":2767},[2768,2769,2770,2771,2772],{"id":423,"depth":613,"text":424},{"id":569,"depth":613,"text":20},{"id":2626,"depth":613,"text":2627},{"id":2648,"depth":613,"text":2649},{"id":2680,"depth":613,"text":2681},"Automatically identify users on every request. Every wide event includes who made the request — userId, user profile, and session metadata — with zero manual work.","md",[2776,2779,2780,2781],{"label":109,"icon":112,"to":110,"color":2777,"variant":2778},"neutral","subtle",{"label":114,"icon":117,"to":115,"color":2777,"variant":2778},{"label":119,"icon":69,"to":120,"color":2777,"variant":2778},{"label":123,"icon":126,"to":124,"color":2777,"variant":2778},{},{"title":41,"icon":44},{"title":404,"description":2773},"fNlaxqdbthr0UcMrZ4EfVuU28oXl2XfDl-gpLrTrS88",[2787,2789],{"title":95,"path":96,"stem":97,"description":2788,"icon":98,"children":-1},"Add tool execution timing and total wall time with createEvlogIntegration. Compose with other middleware like supermemory or guardrails.",{"title":109,"path":110,"stem":111,"description":2790,"icon":112,"children":-1},"The core building block — extract safe user fields, mask emails, and capture plugin data (organizations, roles, 2FA) from a Better Auth session.",1778325968342]