[{"data":1,"prerenderedAt":1284},["ShallowReactive",2],{"navigation_docs":3,"-logging-better-auth-middleware":547,"-logging-better-auth-middleware-surround":1279},[4,35,159,201,289,446,531],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F4.agent-skills","i-lucide-sparkles",{"title":30,"path":31,"stem":32,"icon":33},"vs Other Loggers","\u002Fgetting-started\u002Fvs-other-loggers","1.getting-started\u002F5.vs-other-loggers","i-lucide-scale",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Logging","\u002Flogging","2.logging",[40,45,50,55,60,65,70,99,127],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Catalogs","\u002Flogging\u002Fcatalogs","2.logging\u002F4.catalogs","i-lucide-book-open",{"title":66,"path":67,"stem":68,"icon":69},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F5.client-logging","i-lucide-monitor",{"title":71,"icon":72,"path":73,"stem":74,"children":75,"page":34},"AI SDK","i-simple-icons-vercel","\u002Flogging\u002Fai-sdk","2.logging\u002F6.ai-sdk",[76,79,84,89,94],{"title":41,"path":77,"stem":78,"icon":44},"\u002Flogging\u002Fai-sdk\u002Foverview","2.logging\u002F6.ai-sdk\u002F01.overview",{"title":80,"path":81,"stem":82,"icon":83},"Usage","\u002Flogging\u002Fai-sdk\u002Fusage","2.logging\u002F6.ai-sdk\u002F02.usage","i-lucide-code",{"title":85,"path":86,"stem":87,"icon":88},"Options","\u002Flogging\u002Fai-sdk\u002Foptions","2.logging\u002F6.ai-sdk\u002F03.options","i-lucide-sliders",{"title":90,"path":91,"stem":92,"icon":93},"Metadata","\u002Flogging\u002Fai-sdk\u002Fmetadata","2.logging\u002F6.ai-sdk\u002F04.metadata","i-lucide-database",{"title":95,"path":96,"stem":97,"icon":98},"Telemetry","\u002Flogging\u002Fai-sdk\u002Ftelemetry","2.logging\u002F6.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":100,"icon":101,"path":102,"stem":103,"children":104,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Flogging\u002Fbetter-auth","2.logging\u002F7.better-auth",[105,108,113,118,122],{"title":41,"path":106,"stem":107,"icon":44},"\u002Flogging\u002Fbetter-auth\u002Foverview","2.logging\u002F7.better-auth\u002F01.overview",{"title":109,"path":110,"stem":111,"icon":112},"Identify User","\u002Flogging\u002Fbetter-auth\u002Fidentify-user","2.logging\u002F7.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":114,"path":115,"stem":116,"icon":117},"Middleware","\u002Flogging\u002Fbetter-auth\u002Fmiddleware","2.logging\u002F7.better-auth\u002F03.middleware","i-lucide-shield",{"title":119,"path":120,"stem":121,"icon":69},"Client Sync","\u002Flogging\u002Fbetter-auth\u002Fclient-sync","2.logging\u002F7.better-auth\u002F04.client-sync",{"title":123,"path":124,"stem":125,"icon":126},"Performance","\u002Flogging\u002Fbetter-auth\u002Fperformance","2.logging\u002F7.better-auth\u002F05.performance","i-lucide-gauge",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":34},"Audit Logs","i-lucide-shield-check","\u002Flogging\u002Faudit","2.logging\u002F8.audit",[133,136,141,146,151,155],{"title":41,"path":134,"stem":135,"icon":44},"\u002Flogging\u002Faudit\u002Foverview","2.logging\u002F8.audit\u002F01.overview",{"title":137,"path":138,"stem":139,"icon":140},"Schema","\u002Flogging\u002Faudit\u002Fschema","2.logging\u002F8.audit\u002F02.schema","i-lucide-file-text",{"title":142,"path":143,"stem":144,"icon":145},"Recording","\u002Flogging\u002Faudit\u002Frecording","2.logging\u002F8.audit\u002F03.recording","i-lucide-pen-line",{"title":147,"path":148,"stem":149,"icon":150},"Drains","\u002Flogging\u002Faudit\u002Fpipeline","2.logging\u002F8.audit\u002F04.pipeline","i-lucide-link",{"title":152,"path":153,"stem":154,"icon":129},"Compliance","\u002Flogging\u002Faudit\u002Fcompliance","2.logging\u002F8.audit\u002F05.compliance",{"title":156,"path":157,"stem":158,"icon":64},"Recipes","\u002Flogging\u002Faudit\u002Frecipes","2.logging\u002F8.audit\u002F06.recipes",{"title":160,"path":161,"stem":162,"children":163,"page":34},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[164,169,174,179,184,188,191,196],{"title":165,"path":166,"stem":167,"icon":168},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":170,"path":171,"stem":172,"icon":173},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":175,"path":176,"stem":177,"icon":178},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":180,"path":181,"stem":182,"icon":183},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":185,"path":186,"stem":187,"icon":129},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices",{"title":123,"path":189,"stem":190,"icon":126},"\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance",{"title":192,"path":193,"stem":194,"icon":195},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":197,"path":198,"stem":199,"icon":200},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":202,"path":203,"stem":204,"children":205,"page":34},"Frameworks","\u002Fframeworks","4.frameworks",[206,210,215,220,225,230,235,240,245,250,255,260,265,270,274,279,284],{"title":41,"path":207,"stem":208,"icon":209},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":211,"path":212,"stem":213,"icon":214},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":216,"path":217,"stem":218,"icon":219},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":221,"path":222,"stem":223,"icon":224},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":226,"path":227,"stem":228,"icon":229},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":231,"path":232,"stem":233,"icon":234},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":236,"path":237,"stem":238,"icon":239},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":241,"path":242,"stem":243,"icon":244},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":246,"path":247,"stem":248,"icon":249},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":251,"path":252,"stem":253,"icon":254},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":256,"path":257,"stem":258,"icon":259},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":261,"path":262,"stem":263,"icon":264},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":266,"path":267,"stem":268,"icon":269},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":271,"path":272,"stem":273,"icon":183},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":275,"path":276,"stem":277,"icon":278},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":280,"path":281,"stem":282,"icon":283},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":285,"path":286,"stem":287,"icon":288},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F17.custom-integration","i-lucide-puzzle",{"title":290,"path":291,"stem":292,"children":293,"page":34},"Build on top","\u002Fbuild-on-top","5.build-on-top",[294,297,325,346,373,400,428],{"title":41,"path":295,"stem":296,"icon":54},"\u002Fbuild-on-top\u002Foverview","5.build-on-top\u002F0.overview",{"title":298,"path":299,"stem":300,"children":301,"page":34},"Observers","\u002Fbuild-on-top\u002Fobservers","5.build-on-top\u002Fobservers",[302,306,311,316,321],{"title":41,"path":303,"stem":304,"icon":305},"\u002Fbuild-on-top\u002Fobservers\u002Foverview","5.build-on-top\u002Fobservers\u002F1.overview","i-lucide-eye",{"title":307,"path":308,"stem":309,"icon":310},"Stream API","\u002Fbuild-on-top\u002Fobservers\u002Fin-process-stream","5.build-on-top\u002Fobservers\u002F2.in-process-stream","i-lucide-radio-tower",{"title":312,"path":313,"stem":314,"icon":315},"Stream server","\u002Fbuild-on-top\u002Fobservers\u002Fstream-server","5.build-on-top\u002Fobservers\u002F3.stream-server","i-lucide-radio",{"title":317,"path":318,"stem":319,"icon":320},"FS reader","\u002Fbuild-on-top\u002Fobservers\u002Ffs-reader","5.build-on-top\u002Fobservers\u002F4.fs-reader","i-lucide-folder-search",{"title":156,"path":322,"stem":323,"icon":324},"\u002Fbuild-on-top\u002Fobservers\u002Fconsumer-recipes","5.build-on-top\u002Fobservers\u002F5.consumer-recipes","i-lucide-chef-hat",{"title":326,"path":327,"stem":328,"children":329,"page":34},"Pipeline","\u002Fbuild-on-top\u002Fpipeline","5.build-on-top\u002Fpipeline",[330,334,338,342],{"title":41,"path":331,"stem":332,"icon":333},"\u002Fbuild-on-top\u002Fpipeline\u002Foverview","5.build-on-top\u002Fpipeline\u002F1.overview","i-lucide-workflow",{"title":335,"path":336,"stem":337,"icon":288},"Plugins","\u002Fbuild-on-top\u002Fpipeline\u002Fplugins","5.build-on-top\u002Fpipeline\u002F2.plugins",{"title":339,"path":340,"stem":341,"icon":28},"Custom enrichers","\u002Fbuild-on-top\u002Fpipeline\u002Fcustom-enrichers","5.build-on-top\u002Fpipeline\u002F3.custom-enrichers",{"title":343,"path":344,"stem":345,"icon":178},"Tail sampling","\u002Fbuild-on-top\u002Fpipeline\u002Ftail-sampling","5.build-on-top\u002Fpipeline\u002F4.tail-sampling",{"title":347,"path":348,"stem":349,"children":350,"page":34},"Scenarios","\u002Fbuild-on-top\u002Fscenarios","5.build-on-top\u002Fscenarios",[351,355,359,364,368],{"title":41,"path":352,"stem":353,"icon":354},"\u002Fbuild-on-top\u002Fscenarios\u002Foverview","5.build-on-top\u002Fscenarios\u002F0.overview","i-lucide-clipboard-list",{"title":356,"path":357,"stem":358,"icon":49},"Local debugging toolkit","\u002Fbuild-on-top\u002Fscenarios\u002Flocal-debugging-toolkit","5.build-on-top\u002Fscenarios\u002F1.local-debugging-toolkit",{"title":360,"path":361,"stem":362,"icon":363},"Tenant-aware logging","\u002Fbuild-on-top\u002Fscenarios\u002Ftenant-aware-logging","5.build-on-top\u002Fscenarios\u002F2.tenant-aware-logging","i-lucide-users",{"title":365,"path":366,"stem":367,"icon":129},"Compliance audit","\u002Fbuild-on-top\u002Fscenarios\u002Fcompliance-audit","5.build-on-top\u002Fscenarios\u002F3.compliance-audit",{"title":369,"path":370,"stem":371,"icon":372},"Cross-app error vocab","\u002Fbuild-on-top\u002Fscenarios\u002Fcross-app-error-vocab","5.build-on-top\u002Fscenarios\u002F4.cross-app-error-vocab","i-lucide-book",{"title":374,"path":375,"stem":376,"children":377,"page":34},"Shared packages","\u002Fbuild-on-top\u002Fshared","5.build-on-top\u002Fshared",[378,382,386,391,395],{"title":41,"path":379,"stem":380,"icon":381},"\u002Fbuild-on-top\u002Fshared\u002Foverview","5.build-on-top\u002Fshared\u002F1.overview","i-lucide-package",{"title":383,"path":384,"stem":385,"icon":381},"Catalogs as packages","\u002Fbuild-on-top\u002Fshared\u002Fcatalogs-as-packages","5.build-on-top\u002Fshared\u002F2.catalogs-as-packages",{"title":387,"path":388,"stem":389,"icon":390},"Drains as packages","\u002Fbuild-on-top\u002Fshared\u002Fdrains-as-packages","5.build-on-top\u002Fshared\u002F3.drains-as-packages","i-lucide-package-2",{"title":392,"path":393,"stem":394,"icon":28},"Enrichers as packages","\u002Fbuild-on-top\u002Fshared\u002Fenrichers-as-packages","5.build-on-top\u002Fshared\u002F4.enrichers-as-packages",{"title":396,"path":397,"stem":398,"icon":399},"Integration as package","\u002Fbuild-on-top\u002Fshared\u002Fintegration-as-package","5.build-on-top\u002Fshared\u002F5.integration-as-package","i-lucide-package-check",{"title":401,"path":402,"stem":403,"children":404,"page":34},"Sinks","\u002Fbuild-on-top\u002Fsinks","5.build-on-top\u002Fsinks",[405,409,414,418,423],{"title":41,"path":406,"stem":407,"icon":408},"\u002Fbuild-on-top\u002Fsinks\u002Foverview","5.build-on-top\u002Fsinks\u002F1.overview","i-lucide-arrow-up-from-line",{"title":410,"path":411,"stem":412,"icon":413},"Custom drains","\u002Fbuild-on-top\u002Fsinks\u002Fcustom-drains","5.build-on-top\u002Fsinks\u002F2.custom-drains","i-lucide-code-2",{"title":415,"path":416,"stem":417,"icon":333},"Drain pipeline","\u002Fbuild-on-top\u002Fsinks\u002Fdrain-pipeline","5.build-on-top\u002Fsinks\u002F3.drain-pipeline",{"title":419,"path":420,"stem":421,"icon":422},"Identity headers","\u002Fbuild-on-top\u002Fsinks\u002Fidentity-headers","5.build-on-top\u002Fsinks\u002F4.identity-headers","i-lucide-fingerprint",{"title":424,"path":425,"stem":426,"icon":427},"Fanout","\u002Fbuild-on-top\u002Fsinks\u002Ffanout-and-multi-drain","5.build-on-top\u002Fsinks\u002F5.fanout-and-multi-drain","i-lucide-share-2",{"title":429,"path":430,"stem":431,"children":432,"page":34},"Sources","\u002Fbuild-on-top\u002Fsources","5.build-on-top\u002Fsources",[433,437,441],{"title":41,"path":434,"stem":435,"icon":436},"\u002Fbuild-on-top\u002Fsources\u002Foverview","5.build-on-top\u002Fsources\u002F1.overview","i-lucide-arrow-down-to-line",{"title":438,"path":439,"stem":440,"icon":288},"Custom framework","\u002Fbuild-on-top\u002Fsources\u002Fcustom-framework","5.build-on-top\u002Fsources\u002F2.custom-framework",{"title":442,"path":443,"stem":444,"icon":445},"Middleware toolkit","\u002Fbuild-on-top\u002Fsources\u002Fmiddleware-toolkit","5.build-on-top\u002Fsources\u002F3.middleware-toolkit","i-lucide-wrench",{"title":447,"path":448,"stem":449,"children":450,"page":34},"Adapters","\u002Fadapters","6.adapters",[451,454,494,509],{"title":41,"path":452,"stem":453,"icon":44},"\u002Fadapters\u002Foverview","6.adapters\u002F01.overview",{"title":455,"path":456,"stem":457,"children":458,"page":34},"Cloud destinations","\u002Fadapters\u002Fcloud","6.adapters\u002F02.cloud",[459,464,469,474,479,484,489],{"title":460,"path":461,"stem":462,"icon":463},"Axiom","\u002Fadapters\u002Fcloud\u002Faxiom","6.adapters\u002F02.cloud\u002F01.axiom","i-custom-axiom",{"title":465,"path":466,"stem":467,"icon":468},"OTLP","\u002Fadapters\u002Fcloud\u002Fotlp","6.adapters\u002F02.cloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":470,"path":471,"stem":472,"icon":473},"PostHog","\u002Fadapters\u002Fcloud\u002Fposthog","6.adapters\u002F02.cloud\u002F03.posthog","i-simple-icons-posthog",{"title":475,"path":476,"stem":477,"icon":478},"Sentry","\u002Fadapters\u002Fcloud\u002Fsentry","6.adapters\u002F02.cloud\u002F04.sentry","i-simple-icons-sentry",{"title":480,"path":481,"stem":482,"icon":483},"Better Stack","\u002Fadapters\u002Fcloud\u002Fbetter-stack","6.adapters\u002F02.cloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":485,"path":486,"stem":487,"icon":488},"Datadog","\u002Fadapters\u002Fcloud\u002Fdatadog","6.adapters\u002F02.cloud\u002F06.datadog","i-simple-icons-datadog",{"title":490,"path":491,"stem":492,"icon":493},"HyperDX","\u002Fadapters\u002Fcloud\u002Fhyperdx","6.adapters\u002F02.cloud\u002F07.hyperdx","i-custom-hyperdx",{"title":495,"path":496,"stem":497,"children":498,"page":34},"Self-hosted","\u002Fadapters\u002Fself-hosted","6.adapters\u002F03.self-hosted",[499,504],{"title":500,"path":501,"stem":502,"icon":503},"File System","\u002Fadapters\u002Fself-hosted\u002Ffs","6.adapters\u002F03.self-hosted\u002F01.fs","i-lucide-hard-drive",{"title":505,"path":506,"stem":507,"icon":508},"NuxtHub","\u002Fadapters\u002Fself-hosted\u002Fnuxthub","6.adapters\u002F03.self-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":510,"path":511,"stem":512,"children":513,"page":34},"Building blocks","\u002Fadapters\u002Fbuilding-blocks","6.adapters\u002F04.building-blocks",[514,517,522,526],{"title":326,"path":515,"stem":516,"icon":333},"\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline","6.adapters\u002F04.building-blocks\u002F01.pipeline",{"title":518,"path":519,"stem":520,"icon":521},"HTTP","\u002Fadapters\u002Fbuilding-blocks\u002Fhttp","6.adapters\u002F04.building-blocks\u002F02.http","i-lucide-globe",{"title":523,"path":524,"stem":525,"icon":83},"Custom Adapters","\u002Fadapters\u002Fbuilding-blocks\u002Fcustom","6.adapters\u002F04.building-blocks\u002F03.custom",{"title":527,"path":528,"stem":529,"icon":530},"Toolkit","\u002Fadapters\u002Fbuilding-blocks\u002Ftoolkit","6.adapters\u002F04.building-blocks\u002F04.toolkit","i-lucide-blocks",{"title":532,"path":533,"stem":534,"children":535,"page":34},"Enrichers","\u002Fenrichers","7.enrichers",[536,539,543],{"title":41,"path":537,"stem":538,"icon":28},"\u002Fenrichers\u002Foverview","7.enrichers\u002F1.overview",{"title":540,"path":541,"stem":542,"icon":288},"Built-in","\u002Fenrichers\u002Fbuilt-in","7.enrichers\u002F2.built-in",{"title":544,"path":545,"stem":546,"icon":83},"Custom","\u002Fenrichers\u002Fcustom","7.enrichers\u002F3.custom",{"id":548,"title":549,"body":550,"description":1268,"extension":1269,"links":1270,"meta":1275,"navigation":1276,"path":115,"seo":1277,"stem":116,"__hash__":1278},"docs\u002F2.logging\u002F7.better-auth\u002F03.middleware.md","createAuthMiddleware",{"type":551,"value":552,"toc":1262},"minimark",[553,564,719,733,737,748,851,855,858,943,946,1001,1023,1027,1033,1208,1220,1241,1245,1258],[554,555,556,559,560,563],"p",{},[557,558,549],"code",{}," wraps ",[557,561,562],{},"identifyUser"," with the things you need on every request: route filtering, session resolution timing, lifecycle hooks, and silent error handling. Call it once at startup, then use the returned function in your framework's middleware\u002Fhook system.",[565,566,572],"pre",{"className":567,"code":568,"filename":569,"language":570,"meta":571,"style":571},"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**', '\u002Fapi\u002Fpublic\u002F**'],\n  include: ['\u002Fapi\u002F**'],\n  maskEmail: true,\n})\n","server\u002Fmiddleware\u002Fauth-identify.ts","typescript","",[557,573,574,607,614,639,675,696,710],{"__ignoreMap":571},[575,576,579,583,587,591,594,597,600,604],"span",{"class":577,"line":578},"line",1,[575,580,582],{"class":581},"s7zQu","import",[575,584,586],{"class":585},"sMK4o"," {",[575,588,590],{"class":589},"sTEyZ"," createAuthMiddleware",[575,592,593],{"class":585}," }",[575,595,596],{"class":581}," from",[575,598,599],{"class":585}," '",[575,601,603],{"class":602},"sfazB","evlog\u002Fbetter-auth",[575,605,606],{"class":585},"'\n",[575,608,610],{"class":577,"line":609},2,[575,611,613],{"emptyLinePlaceholder":612},true,"\n",[575,615,617,621,624,627,630,633,636],{"class":577,"line":616},3,[575,618,620],{"class":619},"spNyl","const",[575,622,623],{"class":589}," identify ",[575,625,626],{"class":585},"=",[575,628,590],{"class":629},"s2Zo4",[575,631,632],{"class":589},"(auth",[575,634,635],{"class":585},",",[575,637,638],{"class":585}," {\n",[575,640,642,646,649,652,655,658,660,662,664,667,669,672],{"class":577,"line":641},4,[575,643,645],{"class":644},"swJcz","  exclude",[575,647,648],{"class":585},":",[575,650,651],{"class":589}," [",[575,653,654],{"class":585},"'",[575,656,657],{"class":602},"\u002Fapi\u002Fauth\u002F**",[575,659,654],{"class":585},[575,661,635],{"class":585},[575,663,599],{"class":585},[575,665,666],{"class":602},"\u002Fapi\u002Fpublic\u002F**",[575,668,654],{"class":585},[575,670,671],{"class":589},"]",[575,673,674],{"class":585},",\n",[575,676,678,681,683,685,687,690,692,694],{"class":577,"line":677},5,[575,679,680],{"class":644},"  include",[575,682,648],{"class":585},[575,684,651],{"class":589},[575,686,654],{"class":585},[575,688,689],{"class":602},"\u002Fapi\u002F**",[575,691,654],{"class":585},[575,693,671],{"class":589},[575,695,674],{"class":585},[575,697,699,702,704,708],{"class":577,"line":698},6,[575,700,701],{"class":644},"  maskEmail",[575,703,648],{"class":585},[575,705,707],{"class":706},"sfNiH"," true",[575,709,674],{"class":585},[575,711,713,716],{"class":577,"line":712},7,[575,714,715],{"class":585},"}",[575,717,718],{"class":589},")\n",[554,720,721,722,725,726,728,729,732],{},"The function signature is ",[557,723,724],{},"(log, headers, path?) => Promise\u003Cboolean>",". It resolves the session, calls ",[557,727,562],{},", captures timing into ",[557,730,731],{},"auth.resolvedIn",", fires lifecycle hooks, and silently catches errors so session resolution never breaks a request.",[734,735,85],"h2",{"id":736},"options",[554,738,739,740,747],{},"Inherits all ",[741,742,744,746],"a",{"href":743},"\u002Flogging\u002Fbetter-auth\u002Fidentify-user#options",[557,745,562],{}," options",", plus:",[749,750,751,770],"table",{},[752,753,754],"thead",{},[755,756,757,761,764,767],"tr",{},[758,759,760],"th",{},"Option",[758,762,763],{},"Type",[758,765,766],{},"Default",[758,768,769],{},"Description",[771,772,773,794,813,832],"tbody",{},[755,774,775,781,786,791],{},[776,777,778],"td",{},[557,779,780],{},"exclude",[776,782,783],{},[557,784,785],{},"string[]",[776,787,788],{},[557,789,790],{},"['\u002Fapi\u002Fauth\u002F**']",[776,792,793],{},"Route patterns to skip (glob).",[755,795,796,801,805,810],{},[776,797,798],{},[557,799,800],{},"include",[776,802,803],{},[557,804,785],{},[776,806,807],{},[557,808,809],{},"undefined",[776,811,812],{},"If set, only matching routes are resolved.",[755,814,815,820,825,829],{},[776,816,817],{},[557,818,819],{},"onIdentify",[776,821,822],{},[557,823,824],{},"(log, session) => void",[776,826,827],{},[557,828,809],{},[776,830,831],{},"Called after successful identification.",[755,833,834,839,844,848],{},[776,835,836],{},[557,837,838],{},"onAnonymous",[776,840,841],{},[557,842,843],{},"(log) => void",[776,845,846],{},[557,847,809],{},[776,849,850],{},"Called when no session is found.",[734,852,854],{"id":853},"route-filtering","Route Filtering",[554,856,857],{},"Skip Better Auth's own routes and any public endpoints to avoid wasted database queries:",[565,859,861],{"className":567,"code":860,"language":570,"meta":571,"style":571},"const identify = createAuthMiddleware(auth, {\n  exclude: [\n    '\u002Fapi\u002Fauth\u002F**',     \u002F\u002F Better Auth itself\n    '\u002Fapi\u002Fpublic\u002F**',   \u002F\u002F Public endpoints\n    '\u002Fapi\u002Fhealth',      \u002F\u002F Health checks\n  ],\n})\n",[557,862,863,879,888,903,916,930,937],{"__ignoreMap":571},[575,864,865,867,869,871,873,875,877],{"class":577,"line":578},[575,866,620],{"class":619},[575,868,623],{"class":589},[575,870,626],{"class":585},[575,872,590],{"class":629},[575,874,632],{"class":589},[575,876,635],{"class":585},[575,878,638],{"class":585},[575,880,881,883,885],{"class":577,"line":609},[575,882,645],{"class":644},[575,884,648],{"class":585},[575,886,887],{"class":589}," [\n",[575,889,890,893,895,897,899],{"class":577,"line":616},[575,891,892],{"class":585},"    '",[575,894,657],{"class":602},[575,896,654],{"class":585},[575,898,635],{"class":585},[575,900,902],{"class":901},"sHwdD","     \u002F\u002F Better Auth itself\n",[575,904,905,907,909,911,913],{"class":577,"line":641},[575,906,892],{"class":585},[575,908,666],{"class":602},[575,910,654],{"class":585},[575,912,635],{"class":585},[575,914,915],{"class":901},"   \u002F\u002F Public endpoints\n",[575,917,918,920,923,925,927],{"class":577,"line":677},[575,919,892],{"class":585},[575,921,922],{"class":602},"\u002Fapi\u002Fhealth",[575,924,654],{"class":585},[575,926,635],{"class":585},[575,928,929],{"class":901},"      \u002F\u002F Health checks\n",[575,931,932,935],{"class":577,"line":698},[575,933,934],{"class":589},"  ]",[575,936,674],{"class":585},[575,938,939,941],{"class":577,"line":712},[575,940,715],{"class":585},[575,942,718],{"class":589},[554,944,945],{},"For high-traffic apps, flip the model — only resolve sessions on routes that need them:",[565,947,949],{"className":567,"code":948,"language":570,"meta":571,"style":571},"const identify = createAuthMiddleware(auth, {\n  include: ['\u002Fapi\u002Fdashboard\u002F**', '\u002Fapi\u002Faccount\u002F**'],\n})\n",[557,950,951,967,995],{"__ignoreMap":571},[575,952,953,955,957,959,961,963,965],{"class":577,"line":578},[575,954,620],{"class":619},[575,956,623],{"class":589},[575,958,626],{"class":585},[575,960,590],{"class":629},[575,962,632],{"class":589},[575,964,635],{"class":585},[575,966,638],{"class":585},[575,968,969,971,973,975,977,980,982,984,986,989,991,993],{"class":577,"line":609},[575,970,680],{"class":644},[575,972,648],{"class":585},[575,974,651],{"class":589},[575,976,654],{"class":585},[575,978,979],{"class":602},"\u002Fapi\u002Fdashboard\u002F**",[575,981,654],{"class":585},[575,983,635],{"class":585},[575,985,599],{"class":585},[575,987,988],{"class":602},"\u002Fapi\u002Faccount\u002F**",[575,990,654],{"class":585},[575,992,671],{"class":589},[575,994,674],{"class":585},[575,996,997,999],{"class":577,"line":616},[575,998,715],{"class":585},[575,1000,718],{"class":589},[554,1002,1003,1005,1006,1008,1009,1012,1013,1016,1017,1019,1020,1022],{},[557,1004,800],{}," and ",[557,1007,780],{}," use glob patterns (",[557,1010,1011],{},"*",", ",[557,1014,1015],{},"**","). Provide both if you need granular control — ",[557,1018,780],{}," wins over ",[557,1021,800],{},".",[734,1024,1026],{"id":1025},"lifecycle-hooks","Lifecycle Hooks",[554,1028,1029,1030,1032],{},"Use ",[557,1031,819],{}," to react to user identification — for example, force-keep logs for premium users via tail sampling:",[565,1034,1036],{"className":567,"code":1035,"filename":569,"language":570,"meta":571,"style":571},"const identify = createAuthMiddleware(auth, {\n  onIdentify: (log, session) => {\n    if (session.user.plan === 'enterprise') {\n      log.set({ _forceKeep: true })\n    }\n  },\n  onAnonymous: (log) => {\n    log.set({ anonymous: true })\n  },\n})\n",[557,1037,1038,1054,1081,1117,1144,1149,1154,1171,1196,1201],{"__ignoreMap":571},[575,1039,1040,1042,1044,1046,1048,1050,1052],{"class":577,"line":578},[575,1041,620],{"class":619},[575,1043,623],{"class":589},[575,1045,626],{"class":585},[575,1047,590],{"class":629},[575,1049,632],{"class":589},[575,1051,635],{"class":585},[575,1053,638],{"class":585},[575,1055,1056,1059,1061,1064,1068,1070,1073,1076,1079],{"class":577,"line":609},[575,1057,1058],{"class":629},"  onIdentify",[575,1060,648],{"class":585},[575,1062,1063],{"class":585}," (",[575,1065,1067],{"class":1066},"sHdIc","log",[575,1069,635],{"class":585},[575,1071,1072],{"class":1066}," session",[575,1074,1075],{"class":585},")",[575,1077,1078],{"class":619}," =>",[575,1080,638],{"class":585},[575,1082,1083,1086,1088,1091,1093,1096,1098,1101,1104,1106,1109,1111,1114],{"class":577,"line":616},[575,1084,1085],{"class":581},"    if",[575,1087,1063],{"class":644},[575,1089,1090],{"class":589},"session",[575,1092,1022],{"class":585},[575,1094,1095],{"class":589},"user",[575,1097,1022],{"class":585},[575,1099,1100],{"class":589},"plan",[575,1102,1103],{"class":585}," ===",[575,1105,599],{"class":585},[575,1107,1108],{"class":602},"enterprise",[575,1110,654],{"class":585},[575,1112,1113],{"class":644},") ",[575,1115,1116],{"class":585},"{\n",[575,1118,1119,1122,1124,1127,1130,1133,1136,1138,1140,1142],{"class":577,"line":641},[575,1120,1121],{"class":589},"      log",[575,1123,1022],{"class":585},[575,1125,1126],{"class":629},"set",[575,1128,1129],{"class":644},"(",[575,1131,1132],{"class":585},"{",[575,1134,1135],{"class":644}," _forceKeep",[575,1137,648],{"class":585},[575,1139,707],{"class":706},[575,1141,593],{"class":585},[575,1143,718],{"class":644},[575,1145,1146],{"class":577,"line":677},[575,1147,1148],{"class":585},"    }\n",[575,1150,1151],{"class":577,"line":698},[575,1152,1153],{"class":585},"  },\n",[575,1155,1156,1159,1161,1163,1165,1167,1169],{"class":577,"line":712},[575,1157,1158],{"class":629},"  onAnonymous",[575,1160,648],{"class":585},[575,1162,1063],{"class":585},[575,1164,1067],{"class":1066},[575,1166,1075],{"class":585},[575,1168,1078],{"class":619},[575,1170,638],{"class":585},[575,1172,1174,1177,1179,1181,1183,1185,1188,1190,1192,1194],{"class":577,"line":1173},8,[575,1175,1176],{"class":589},"    log",[575,1178,1022],{"class":585},[575,1180,1126],{"class":629},[575,1182,1129],{"class":644},[575,1184,1132],{"class":585},[575,1186,1187],{"class":644}," anonymous",[575,1189,648],{"class":585},[575,1191,707],{"class":706},[575,1193,593],{"class":585},[575,1195,718],{"class":644},[575,1197,1199],{"class":577,"line":1198},9,[575,1200,1153],{"class":585},[575,1202,1204,1206],{"class":577,"line":1203},10,[575,1205,715],{"class":585},[575,1207,718],{"class":589},[554,1209,1210,1211,1213,1214,1216,1217,1219],{},"Hooks fire after the session is resolved and ",[557,1212,562],{}," has set its fields. They run on every request that passes the ",[557,1215,800],{},"\u002F",[557,1218,780],{}," filter, so keep them fast and side-effect-free.",[1221,1222,1223,1228],"tip",{},[554,1224,1225,1226,648],{},"Common patterns for ",[557,1227,819],{},[1229,1230,1231,1235,1238],"ul",{},[1232,1233,1234],"li",{},"Force-keep audit logs for admins or high-value plans.",[1232,1236,1237],{},"Tag the request with feature flags or tenant info loaded from the session.",[1232,1239,1240],{},"Increment a per-user counter for billing.",[734,1242,1244],{"id":1243},"error-handling","Error Handling",[554,1246,1247,1248,1251,1252,1005,1254,1257],{},"The middleware catches every error from ",[557,1249,1250],{},"getSession"," and logs nothing — your request keeps flowing whether the auth backend is up or down. The wide event still includes ",[557,1253,731],{},[557,1255,1256],{},"auth.identified: false"," so you can alert on session resolution health from your dashboards.",[1259,1260,1261],"style",{},"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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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 .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}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}",{"title":571,"searchDepth":609,"depth":609,"links":1263},[1264,1265,1266,1267],{"id":736,"depth":609,"text":85},{"id":853,"depth":609,"text":854},{"id":1025,"depth":609,"text":1026},{"id":1243,"depth":609,"text":1244},"Framework-agnostic factory with route filtering, session timing, and lifecycle hooks. Call it once at startup and reuse across requests.","md",[1271,1274],{"label":109,"icon":112,"to":110,"color":1272,"variant":1273},"neutral","subtle",{"label":123,"icon":126,"to":124,"color":1272,"variant":1273},{},{"title":114,"icon":117},{"title":549,"description":1268},"ZixjaO8WGr0DIrrPIzupQI4fZZLVn2bM3EBBAoqYgdg",[1280,1282],{"title":109,"path":110,"stem":111,"description":1281,"icon":112,"children":-1},"The core building block — extract safe user fields, mask emails, and capture plugin data (organizations, roles, 2FA) from a Better Auth session.",{"title":119,"path":120,"stem":121,"description":1283,"icon":69,"children":-1},"Mirror the server-side user identity into client-side logs by watching the Better Auth session and calling setIdentity.",1778338246644]