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