[{"data":1,"prerenderedAt":1523},["ShallowReactive",2],{"navigation_docs":3,"-use-cases-better-auth-identify-user":434,"-use-cases-better-auth-identify-user-surround":1518},[4,30,80,240,348,403],{"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,152],{"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],{"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,"children":156,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","3.integrate\u002Fframeworks",[157,161,166,171,176,181,186,191,196,201,206,211,216,221,225,230,235],{"title":36,"path":158,"stem":159,"icon":160},"\u002Fintegrate\u002Fframeworks\u002Foverview","3.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":162,"path":163,"stem":164,"icon":165},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","3.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":167,"path":168,"stem":169,"icon":170},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","3.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":172,"path":173,"stem":174,"icon":175},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","3.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":177,"path":178,"stem":179,"icon":180},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","3.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":182,"path":183,"stem":184,"icon":185},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","3.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":187,"path":188,"stem":189,"icon":190},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","3.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":192,"path":193,"stem":194,"icon":195},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","3.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":197,"path":198,"stem":199,"icon":200},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","3.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":202,"path":203,"stem":204,"icon":205},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","3.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":207,"path":208,"stem":209,"icon":210},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","3.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":212,"path":213,"stem":214,"icon":215},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","3.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":217,"path":218,"stem":219,"icon":220},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","3.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":222,"path":223,"stem":224,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","3.integrate\u002Fframeworks\u002F13.standalone",{"title":226,"path":227,"stem":228,"icon":229},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","3.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":231,"path":232,"stem":233,"icon":234},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","3.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":236,"path":237,"stem":238,"icon":239},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","3.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":241,"path":242,"stem":243,"children":244,"page":29},"Use Cases","\u002Fuse-cases","4.use-cases",[245,249,254,283,311,343],{"title":36,"path":246,"stem":247,"icon":248},"\u002Fuse-cases\u002Foverview","4.use-cases\u002F0.overview","i-lucide-list-checks",{"title":250,"path":251,"stem":252,"icon":253},"Client Logging","\u002Fuse-cases\u002Fclient-logging","4.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":255,"icon":256,"path":257,"stem":258,"children":259,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","4.use-cases\u002F2.ai-sdk",[260,263,268,273,278],{"title":36,"path":261,"stem":262,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","4.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":264,"path":265,"stem":266,"icon":267},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","4.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":269,"path":270,"stem":271,"icon":272},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","4.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":274,"path":275,"stem":276,"icon":277},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","4.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":279,"path":280,"stem":281,"icon":282},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","4.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":284,"icon":285,"path":286,"stem":287,"children":288,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","4.use-cases\u002F3.better-auth",[289,292,297,302,306],{"title":36,"path":290,"stem":291,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","4.use-cases\u002F3.better-auth\u002F01.overview",{"title":293,"path":294,"stem":295,"icon":296},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","4.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":298,"path":299,"stem":300,"icon":301},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","4.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":303,"path":304,"stem":305,"icon":253},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","4.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":307,"path":308,"stem":309,"icon":310},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","4.use-cases\u002F3.better-auth\u002F05.performance","i-lucide-gauge",{"title":312,"icon":313,"path":314,"stem":315,"children":316,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","4.use-cases\u002F4.audit",[317,320,325,330,335,339],{"title":36,"path":318,"stem":319,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","4.use-cases\u002F4.audit\u002F01.overview",{"title":321,"path":322,"stem":323,"icon":324},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","4.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":326,"path":327,"stem":328,"icon":329},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","4.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":331,"path":332,"stem":333,"icon":334},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","4.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":336,"path":337,"stem":338,"icon":313},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","4.use-cases\u002F4.audit\u002F05.compliance",{"title":340,"path":341,"stem":342,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","4.use-cases\u002F4.audit\u002F06.recipes",{"title":344,"path":345,"stem":346,"icon":347},"Enrichers","\u002Fuse-cases\u002Fenrichers","4.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":349,"path":350,"stem":351,"children":352,"page":29},"Extend","\u002Fextend","5.extend",[353,357,362,367,372,376,380,384,388,393,398],{"title":36,"path":354,"stem":355,"icon":356},"\u002Fextend\u002Foverview","5.extend\u002F0.overview","i-lucide-blocks",{"title":358,"path":359,"stem":360,"icon":361},"Stream","\u002Fextend\u002Fstream","5.extend\u002F1.stream","i-lucide-radio-tower",{"title":363,"path":364,"stem":365,"icon":366},"Custom framework","\u002Fextend\u002Fcustom-framework","5.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":368,"path":369,"stem":370,"icon":371},"FS reader","\u002Fextend\u002Ffs-reader","5.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":340,"path":373,"stem":374,"icon":375},"\u002Fextend\u002Fconsumer-recipes","5.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":377,"path":378,"stem":379,"icon":356},"Plugins","\u002Fextend\u002Fplugins","5.extend\u002F4.plugins",{"title":381,"path":382,"stem":383,"icon":347},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","5.extend\u002F5.custom-enrichers",{"title":385,"path":386,"stem":387,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","5.extend\u002F6.tail-sampling",{"title":389,"path":390,"stem":391,"icon":392},"Identity headers","\u002Fextend\u002Fidentity-headers","5.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":394,"path":395,"stem":396,"icon":397},"Custom drains","\u002Fextend\u002Fcustom-drains","5.extend\u002F8.custom-drains","i-lucide-share-2",{"title":399,"path":400,"stem":401,"icon":402},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","5.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":404,"path":405,"stem":406,"children":407,"page":29},"Reference","\u002Freference","6.reference",[408,413,416,421,425,430],{"title":409,"path":410,"stem":411,"icon":412},"Configuration","\u002Freference\u002Fconfiguration","6.reference\u002F1.configuration","i-lucide-settings",{"title":307,"path":414,"stem":415,"icon":310},"\u002Freference\u002Fperformance","6.reference\u002F2.performance",{"title":417,"path":418,"stem":419,"icon":420},"Vite Plugin","\u002Freference\u002Fvite-plugin","6.reference\u002F3.vite-plugin","i-custom-vite",{"title":422,"path":423,"stem":424,"icon":313},"Best Practices","\u002Freference\u002Fbest-practices","6.reference\u002F4.best-practices",{"title":426,"path":427,"stem":428,"icon":429},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","6.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":431,"path":432,"stem":433,"icon":347},"Agent Skills","\u002Freference\u002Fagent-skills","6.reference\u002F6.agent-skills",{"id":435,"title":436,"body":437,"description":1507,"extension":1508,"links":1509,"meta":1514,"navigation":1515,"path":294,"seo":1516,"stem":295,"__hash__":1517},"docs\u002F4.use-cases\u002F3.better-auth\u002F02.identify-user.md","identifyUser",{"type":438,"value":439,"toc":1501},"minimark",[440,463,671,679,683,803,887,891,894,924,930,976,980,986,1111,1114,1265,1271,1275,1497],[441,442,443,446,447,450,451,454,455,458,459,462],"p",{},[444,445,436],"code",{}," is the core building block. Take a ",[444,448,449],{},"RequestLogger"," and a Better Auth session, extract safe fields, and call ",[444,452,453],{},"log.set()",". Returns ",[444,456,457],{},"true"," if the user was identified, ",[444,460,461],{},"false"," otherwise.",[464,465,471],"pre",{"className":466,"code":467,"filename":468,"language":469,"meta":470,"style":470},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { identifyUser } from 'evlog\u002Fbetter-auth'\n\nconst session = await auth.api.getSession({ headers: event.headers })\nif (session) {\n  const identified = identifyUser(log, session)\n  if (identified) {\n    log.set({ subscription: 'premium' })\n  }\n}\n","server\u002Fapi\u002Fcheckout.post.ts","typescript","",[444,472,473,506,513,571,583,610,627,659,665],{"__ignoreMap":470},[474,475,478,482,486,490,493,496,499,503],"span",{"class":476,"line":477},"line",1,[474,479,481],{"class":480},"s7zQu","import",[474,483,485],{"class":484},"sMK4o"," {",[474,487,489],{"class":488},"sTEyZ"," identifyUser",[474,491,492],{"class":484}," }",[474,494,495],{"class":480}," from",[474,497,498],{"class":484}," '",[474,500,502],{"class":501},"sfazB","evlog\u002Fbetter-auth",[474,504,505],{"class":484},"'\n",[474,507,509],{"class":476,"line":508},2,[474,510,512],{"emptyLinePlaceholder":511},true,"\n",[474,514,516,520,523,526,529,532,535,538,540,544,547,550,554,557,560,562,565,568],{"class":476,"line":515},3,[474,517,519],{"class":518},"spNyl","const",[474,521,522],{"class":488}," session ",[474,524,525],{"class":484},"=",[474,527,528],{"class":480}," await",[474,530,531],{"class":488}," auth",[474,533,534],{"class":484},".",[474,536,537],{"class":488},"api",[474,539,534],{"class":484},[474,541,543],{"class":542},"s2Zo4","getSession",[474,545,546],{"class":488},"(",[474,548,549],{"class":484},"{",[474,551,553],{"class":552},"swJcz"," headers",[474,555,556],{"class":484},":",[474,558,559],{"class":488}," event",[474,561,534],{"class":484},[474,563,564],{"class":488},"headers ",[474,566,567],{"class":484},"}",[474,569,570],{"class":488},")\n",[474,572,574,577,580],{"class":476,"line":573},4,[474,575,576],{"class":480},"if",[474,578,579],{"class":488}," (session) ",[474,581,582],{"class":484},"{\n",[474,584,586,589,592,595,597,599,602,605,608],{"class":476,"line":585},5,[474,587,588],{"class":518},"  const",[474,590,591],{"class":488}," identified",[474,593,594],{"class":484}," =",[474,596,489],{"class":542},[474,598,546],{"class":552},[474,600,601],{"class":488},"log",[474,603,604],{"class":484},",",[474,606,607],{"class":488}," session",[474,609,570],{"class":552},[474,611,613,616,619,622,625],{"class":476,"line":612},6,[474,614,615],{"class":480},"  if",[474,617,618],{"class":552}," (",[474,620,621],{"class":488},"identified",[474,623,624],{"class":552},") ",[474,626,582],{"class":484},[474,628,630,633,635,638,640,642,645,647,649,652,655,657],{"class":476,"line":629},7,[474,631,632],{"class":488},"    log",[474,634,534],{"class":484},[474,636,637],{"class":542},"set",[474,639,546],{"class":552},[474,641,549],{"class":484},[474,643,644],{"class":552}," subscription",[474,646,556],{"class":484},[474,648,498],{"class":484},[474,650,651],{"class":501},"premium",[474,653,654],{"class":484},"'",[474,656,492],{"class":484},[474,658,570],{"class":552},[474,660,662],{"class":476,"line":661},8,[474,663,664],{"class":484},"  }\n",[474,666,668],{"class":476,"line":667},9,[474,669,670],{"class":484},"}\n",[672,673,674,678],"tip",{},[675,676,677],"strong",{},"Safe by default."," Only whitelisted fields are extracted — passwords, tokens, and secrets are never written to the logger.",[680,681,269],"h2",{"id":682},"options",[684,685,686,705],"table",{},[687,688,689],"thead",{},[690,691,692,696,699,702],"tr",{},[693,694,695],"th",{},"Option",[693,697,698],{},"Type",[693,700,701],{},"Default",[693,703,704],{},"Description",[706,707,708,731,763,783],"tbody",{},[690,709,710,716,721,725],{},[711,712,713],"td",{},[444,714,715],{},"maskEmail",[711,717,718],{},[444,719,720],{},"boolean",[711,722,723],{},[444,724,461],{},[711,726,727,728,534],{},"Mask emails as ",[444,729,730],{},"h***@example.com",[690,732,733,738,742,746],{},[711,734,735],{},[444,736,737],{},"session",[711,739,740],{},[444,741,720],{},[711,743,744],{},[444,745,457],{},[711,747,748,749,752,753,752,756,752,759,762],{},"Include session metadata (",[444,750,751],{},"session.id",", ",[444,754,755],{},"session.expiresAt",[444,757,758],{},"session.ipAddress",[444,760,761],{},"session.userAgent",").",[690,764,765,770,775,780],{},[711,766,767],{},[444,768,769],{},"fields",[711,771,772],{},[444,773,774],{},"string[]",[711,776,777],{},[444,778,779],{},"['id', 'name', 'email', 'image', 'emailVerified', 'createdAt']",[711,781,782],{},"User fields to extract.",[690,784,785,790,795,800],{},[711,786,787],{},[444,788,789],{},"extend",[711,791,792],{},[444,793,794],{},"(session) => Record\u003Cstring, unknown>",[711,796,797],{},[444,798,799],{},"undefined",[711,801,802],{},"Add custom fields from Better Auth plugins (organizations, roles, etc.).",[464,804,806],{"className":466,"code":805,"filename":468,"language":469,"meta":470,"style":470},"identifyUser(log, session, {\n  maskEmail: true,\n  fields: ['id', 'name'],\n  session: false,\n})\n",[444,807,808,824,838,869,881],{"__ignoreMap":470},[474,809,810,812,815,817,819,821],{"class":476,"line":477},[474,811,436],{"class":542},[474,813,814],{"class":488},"(log",[474,816,604],{"class":484},[474,818,607],{"class":488},[474,820,604],{"class":484},[474,822,823],{"class":484}," {\n",[474,825,826,829,831,835],{"class":476,"line":508},[474,827,828],{"class":552},"  maskEmail",[474,830,556],{"class":484},[474,832,834],{"class":833},"sfNiH"," true",[474,836,837],{"class":484},",\n",[474,839,840,843,845,848,850,853,855,857,859,862,864,867],{"class":476,"line":515},[474,841,842],{"class":552},"  fields",[474,844,556],{"class":484},[474,846,847],{"class":488}," [",[474,849,654],{"class":484},[474,851,852],{"class":501},"id",[474,854,654],{"class":484},[474,856,604],{"class":484},[474,858,498],{"class":484},[474,860,861],{"class":501},"name",[474,863,654],{"class":484},[474,865,866],{"class":488},"]",[474,868,837],{"class":484},[474,870,871,874,876,879],{"class":476,"line":573},[474,872,873],{"class":552},"  session",[474,875,556],{"class":484},[474,877,878],{"class":833}," false",[474,880,837],{"class":484},[474,882,883,885],{"class":476,"line":585},[474,884,567],{"class":484},[474,886,570],{"class":488},[680,888,890],{"id":889},"mask-emails","Mask emails",[441,892,893],{},"Emails are PII. In environments where the audit\u002Flog trail might be reviewed by support or third parties, mask them:",[464,895,897],{"className":466,"code":896,"language":469,"meta":470,"style":470},"identifyUser(log, session, { maskEmail: true })\n",[444,898,899],{"__ignoreMap":470},[474,900,901,903,905,907,909,911,913,916,918,920,922],{"class":476,"line":477},[474,902,436],{"class":542},[474,904,814],{"class":488},[474,906,604],{"class":484},[474,908,607],{"class":488},[474,910,604],{"class":484},[474,912,485],{"class":484},[474,914,915],{"class":552}," maskEmail",[474,917,556],{"class":484},[474,919,834],{"class":833},[474,921,492],{"class":484},[474,923,570],{"class":488},[441,925,926,927,929],{},"The ",[444,928,715],{}," helper is also exported on its own:",[464,931,933],{"className":466,"code":932,"language":469,"meta":470,"style":470},"import { maskEmail } from 'evlog\u002Fbetter-auth'\n\nmaskEmail('hugo@example.com') \u002F\u002F 'h***@example.com'\n",[444,934,935,953,957],{"__ignoreMap":470},[474,936,937,939,941,943,945,947,949,951],{"class":476,"line":477},[474,938,481],{"class":480},[474,940,485],{"class":484},[474,942,915],{"class":488},[474,944,492],{"class":484},[474,946,495],{"class":480},[474,948,498],{"class":484},[474,950,502],{"class":501},[474,952,505],{"class":484},[474,954,955],{"class":476,"line":508},[474,956,512],{"emptyLinePlaceholder":511},[474,958,959,961,963,965,968,970,972],{"class":476,"line":515},[474,960,715],{"class":542},[474,962,546],{"class":488},[474,964,654],{"class":484},[474,966,967],{"class":501},"hugo@example.com",[474,969,654],{"class":484},[474,971,624],{"class":488},[474,973,975],{"class":974},"sHwdD","\u002F\u002F 'h***@example.com'\n",[680,977,979],{"id":978},"capture-plugin-fields","Capture plugin fields",[441,981,982,983,985],{},"Better Auth ships with plugins (organizations, 2FA, roles, admin) that add fields to the session. Use ",[444,984,789],{}," to surface them on the wide event:",[464,987,990],{"className":466,"code":988,"filename":989,"language":469,"meta":470,"style":470},"import { createAuthMiddleware } from 'evlog\u002Fbetter-auth'\n\nconst identify = createAuthMiddleware(auth, {\n  extend: (session) => ({\n    organization: session.user.activeOrganization,\n    role: session.user.role,\n  }),\n})\n","server\u002Fmiddleware\u002Fauth-identify.ts",[444,991,992,1011,1015,1033,1055,1076,1096,1105],{"__ignoreMap":470},[474,993,994,996,998,1001,1003,1005,1007,1009],{"class":476,"line":477},[474,995,481],{"class":480},[474,997,485],{"class":484},[474,999,1000],{"class":488}," createAuthMiddleware",[474,1002,492],{"class":484},[474,1004,495],{"class":480},[474,1006,498],{"class":484},[474,1008,502],{"class":501},[474,1010,505],{"class":484},[474,1012,1013],{"class":476,"line":508},[474,1014,512],{"emptyLinePlaceholder":511},[474,1016,1017,1019,1022,1024,1026,1029,1031],{"class":476,"line":515},[474,1018,519],{"class":518},[474,1020,1021],{"class":488}," identify ",[474,1023,525],{"class":484},[474,1025,1000],{"class":542},[474,1027,1028],{"class":488},"(auth",[474,1030,604],{"class":484},[474,1032,823],{"class":484},[474,1034,1035,1038,1040,1042,1045,1048,1051,1053],{"class":476,"line":573},[474,1036,1037],{"class":542},"  extend",[474,1039,556],{"class":484},[474,1041,618],{"class":484},[474,1043,737],{"class":1044},"sHdIc",[474,1046,1047],{"class":484},")",[474,1049,1050],{"class":518}," =>",[474,1052,618],{"class":488},[474,1054,582],{"class":484},[474,1056,1057,1060,1062,1064,1066,1069,1071,1074],{"class":476,"line":585},[474,1058,1059],{"class":552},"    organization",[474,1061,556],{"class":484},[474,1063,607],{"class":488},[474,1065,534],{"class":484},[474,1067,1068],{"class":488},"user",[474,1070,534],{"class":484},[474,1072,1073],{"class":488},"activeOrganization",[474,1075,837],{"class":484},[474,1077,1078,1081,1083,1085,1087,1089,1091,1094],{"class":476,"line":612},[474,1079,1080],{"class":552},"    role",[474,1082,556],{"class":484},[474,1084,607],{"class":488},[474,1086,534],{"class":484},[474,1088,1068],{"class":488},[474,1090,534],{"class":484},[474,1092,1093],{"class":488},"role",[474,1095,837],{"class":484},[474,1097,1098,1101,1103],{"class":476,"line":629},[474,1099,1100],{"class":484},"  }",[474,1102,1047],{"class":488},[474,1104,837],{"class":484},[474,1106,1107,1109],{"class":476,"line":661},[474,1108,567],{"class":484},[474,1110,570],{"class":488},[441,1112,1113],{},"Wide event with plugin fields:",[464,1115,1120],{"className":1116,"code":1117,"filename":1118,"language":1119,"meta":470,"style":470},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"userId\": \"QBX9tPjJQExWawAbNll75\",\n  \"user\": { \"id\": \"QBX9tPjJQExWawAbNll75\", \"name\": \"Hugo Richard\" },\n  \"organization\": { \"id\": \"org_42\", \"name\": \"Acme\" },\n  \"role\": \"admin\"\n}\n","Wide Event","json",[444,1121,1122,1126,1149,1196,1243,1261],{"__ignoreMap":470},[474,1123,1124],{"class":476,"line":477},[474,1125,582],{"class":484},[474,1127,1128,1131,1134,1137,1139,1142,1145,1147],{"class":476,"line":508},[474,1129,1130],{"class":484},"  \"",[474,1132,1133],{"class":518},"userId",[474,1135,1136],{"class":484},"\"",[474,1138,556],{"class":484},[474,1140,1141],{"class":484}," \"",[474,1143,1144],{"class":501},"QBX9tPjJQExWawAbNll75",[474,1146,1136],{"class":484},[474,1148,837],{"class":484},[474,1150,1151,1153,1155,1157,1159,1161,1163,1166,1168,1170,1172,1174,1176,1178,1180,1182,1184,1186,1188,1191,1193],{"class":476,"line":515},[474,1152,1130],{"class":484},[474,1154,1068],{"class":518},[474,1156,1136],{"class":484},[474,1158,556],{"class":484},[474,1160,485],{"class":484},[474,1162,1141],{"class":484},[474,1164,852],{"class":1165},"sBMFI",[474,1167,1136],{"class":484},[474,1169,556],{"class":484},[474,1171,1141],{"class":484},[474,1173,1144],{"class":501},[474,1175,1136],{"class":484},[474,1177,604],{"class":484},[474,1179,1141],{"class":484},[474,1181,861],{"class":1165},[474,1183,1136],{"class":484},[474,1185,556],{"class":484},[474,1187,1141],{"class":484},[474,1189,1190],{"class":501},"Hugo Richard",[474,1192,1136],{"class":484},[474,1194,1195],{"class":484}," },\n",[474,1197,1198,1200,1203,1205,1207,1209,1211,1213,1215,1217,1219,1222,1224,1226,1228,1230,1232,1234,1236,1239,1241],{"class":476,"line":573},[474,1199,1130],{"class":484},[474,1201,1202],{"class":518},"organization",[474,1204,1136],{"class":484},[474,1206,556],{"class":484},[474,1208,485],{"class":484},[474,1210,1141],{"class":484},[474,1212,852],{"class":1165},[474,1214,1136],{"class":484},[474,1216,556],{"class":484},[474,1218,1141],{"class":484},[474,1220,1221],{"class":501},"org_42",[474,1223,1136],{"class":484},[474,1225,604],{"class":484},[474,1227,1141],{"class":484},[474,1229,861],{"class":1165},[474,1231,1136],{"class":484},[474,1233,556],{"class":484},[474,1235,1141],{"class":484},[474,1237,1238],{"class":501},"Acme",[474,1240,1136],{"class":484},[474,1242,1195],{"class":484},[474,1244,1245,1247,1249,1251,1253,1255,1258],{"class":476,"line":585},[474,1246,1130],{"class":484},[474,1248,1093],{"class":518},[474,1250,1136],{"class":484},[474,1252,556],{"class":484},[474,1254,1141],{"class":484},[474,1256,1257],{"class":501},"admin",[474,1259,1260],{"class":484},"\"\n",[474,1262,1263],{"class":476,"line":612},[474,1264,670],{"class":484},[672,1266,1267,1268,1270],{},"Keep ",[444,1269,789],{}," deterministic — it runs on every request. Avoid heavy computations or extra database calls inside it; query the data Better Auth already loaded into the session.",[680,1272,1274],{"id":1273},"captured-fields","Captured fields",[684,1276,1277,1289],{},[687,1278,1279],{},[690,1280,1281,1284,1287],{},[693,1282,1283],{},"Field",[693,1285,1286],{},"Source",[693,1288,704],{},[706,1290,1291,1308,1322,1337,1355,1370,1385,1400,1414,1428,1442,1456,1471,1484],{},[690,1292,1293,1297,1302],{},[711,1294,1295],{},[444,1296,1133],{},[711,1298,1299],{},[444,1300,1301],{},"session.user.id",[711,1303,1304,1305,762],{},"Top-level user ID (used by PostHog adapter as ",[444,1306,1307],{},"distinct_id",[690,1309,1310,1315,1319],{},[711,1311,1312],{},[444,1313,1314],{},"user.id",[711,1316,1317],{},[444,1318,1301],{},[711,1320,1321],{},"User ID.",[690,1323,1324,1329,1334],{},[711,1325,1326],{},[444,1327,1328],{},"user.name",[711,1330,1331],{},[444,1332,1333],{},"session.user.name",[711,1335,1336],{},"Display name.",[690,1338,1339,1344,1349],{},[711,1340,1341],{},[444,1342,1343],{},"user.email",[711,1345,1346],{},[444,1347,1348],{},"session.user.email",[711,1350,1351,1352,762],{},"Email (maskable with ",[444,1353,1354],{},"maskEmail: true",[690,1356,1357,1362,1367],{},[711,1358,1359],{},[444,1360,1361],{},"user.image",[711,1363,1364],{},[444,1365,1366],{},"session.user.image",[711,1368,1369],{},"Avatar URL.",[690,1371,1372,1377,1382],{},[711,1373,1374],{},[444,1375,1376],{},"user.emailVerified",[711,1378,1379],{},[444,1380,1381],{},"session.user.emailVerified",[711,1383,1384],{},"Email verification status.",[690,1386,1387,1392,1397],{},[711,1388,1389],{},[444,1390,1391],{},"user.createdAt",[711,1393,1394],{},[444,1395,1396],{},"session.user.createdAt",[711,1398,1399],{},"Account creation date (ISO string).",[690,1401,1402,1406,1411],{},[711,1403,1404],{},[444,1405,751],{},[711,1407,1408],{},[444,1409,1410],{},"session.session.id",[711,1412,1413],{},"Session ID.",[690,1415,1416,1420,1425],{},[711,1417,1418],{},[444,1419,755],{},[711,1421,1422],{},[444,1423,1424],{},"session.session.expiresAt",[711,1426,1427],{},"Session expiry (ISO string).",[690,1429,1430,1434,1439],{},[711,1431,1432],{},[444,1433,758],{},[711,1435,1436],{},[444,1437,1438],{},"session.session.ipAddress",[711,1440,1441],{},"Client IP from the session.",[690,1443,1444,1448,1453],{},[711,1445,1446],{},[444,1447,761],{},[711,1449,1450],{},[444,1451,1452],{},"session.session.userAgent",[711,1454,1455],{},"User agent string from the session.",[690,1457,1458,1463,1468],{},[711,1459,1460],{},[444,1461,1462],{},"session.createdAt",[711,1464,1465],{},[444,1466,1467],{},"session.session.createdAt",[711,1469,1470],{},"Session creation date (ISO string).",[690,1472,1473,1478,1481],{},[711,1474,1475],{},[444,1476,1477],{},"auth.resolvedIn",[711,1479,1480],{},"Measured",[711,1482,1483],{},"Session resolution time in ms.",[690,1485,1486,1491,1494],{},[711,1487,1488],{},[444,1489,1490],{},"auth.identified",[711,1492,1493],{},"Computed",[711,1495,1496],{},"Whether the request was identified.",[1498,1499,1500],"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 .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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":470,"searchDepth":508,"depth":508,"links":1502},[1503,1504,1505,1506],{"id":682,"depth":508,"text":269},{"id":889,"depth":508,"text":890},{"id":978,"depth":508,"text":979},{"id":1273,"depth":508,"text":1274},"The core building block — extract safe user fields, mask emails, and capture plugin data (organizations, roles, 2FA) from a Better Auth session.","md",[1510,1513],{"label":36,"icon":39,"to":290,"color":1511,"variant":1512},"neutral","subtle",{"label":298,"icon":301,"to":299,"color":1511,"variant":1512},{},{"title":293,"icon":296},{"title":436,"description":1507},"ktB0zgEcuDV1SnUMSWV1NGf9G4g5y_0GbwN1ACQNQfk",[1519,1521],{"title":36,"path":290,"stem":291,"description":1520,"icon":39,"children":-1},"Automatically identify users on every request. Every wide event includes who made the request — userId, user profile, and session metadata — with zero manual work.",{"title":298,"path":299,"stem":300,"description":1522,"icon":301,"children":-1},"Framework-agnostic factory with route filtering, session timing, and lifecycle hooks. Call it once at startup and reuse across requests.",1778446112133]