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