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