[{"data":1,"prerenderedAt":2936},["ShallowReactive",2],{"navigation_docs":3,"-logging-better-auth-overview":547,"-logging-better-auth-overview-surround":2931},[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":2918,"extension":2919,"links":2920,"meta":2927,"navigation":2928,"path":106,"seo":2929,"stem":107,"__hash__":2930},"docs\u002F2.logging\u002F7.better-auth\u002F01.overview.md","Better Auth Integration",{"type":551,"value":552,"toc":2911},"minimark",[553,565,570,599,670,712,715,718,2129,2132,2769,2773,2776,2791,2795,2823,2827,2907],[554,555,556,560,561,564],"p",{},[557,558,559],"code",{},"evlog\u002Fbetter-auth"," turns anonymous wide events into identified ones. Every request automatically includes who made it — no manual ",[557,562,563],{},"log.set({ user })"," needed.",[566,567,569],"h2",{"id":568},"prerequisites","Prerequisites",[554,571,572,573,579,580,584,585,588,589,592,593,598],{},"Use ",[574,575,100],"a",{"href":576,"rel":577},"https:\u002F\u002Fbetter-auth.com\u002F",[578],"nofollow"," as a ",[581,582,583],"strong",{},"direct dependency"," in your app. ",[557,586,587],{},"evlog"," does not bundle Better Auth. The integration is tested against Better Auth ",[557,590,591],{},">=1.6.9"," (same major as ",[574,594,597],{"href":595,"rel":596},"https:\u002F\u002Fgithub.com\u002FHugoRCD\u002Fevlog\u002Ftree\u002Fmain\u002Fapps\u002Fplayground",[578],"the playground",").",[600,601,602,627,641,655],"code-group",{},[603,604,610],"pre",{"className":605,"code":606,"filename":607,"language":608,"meta":609,"style":609},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add better-auth\n","pnpm","bash","",[557,611,612],{"__ignoreMap":609},[613,614,617,620,624],"span",{"class":615,"line":616},"line",1,[613,618,607],{"class":619},"sBMFI",[613,621,623],{"class":622},"sfazB"," add",[613,625,626],{"class":622}," better-auth\n",[603,628,631],{"className":605,"code":629,"filename":630,"language":608,"meta":609,"style":609},"bun add better-auth\n","bun",[557,632,633],{"__ignoreMap":609},[613,634,635,637,639],{"class":615,"line":616},[613,636,630],{"class":619},[613,638,623],{"class":622},[613,640,626],{"class":622},[603,642,645],{"className":605,"code":643,"filename":644,"language":608,"meta":609,"style":609},"yarn add better-auth\n","yarn",[557,646,647],{"__ignoreMap":609},[613,648,649,651,653],{"class":615,"line":616},[613,650,644],{"class":619},[613,652,623],{"class":622},[613,654,626],{"class":622},[603,656,659],{"className":605,"code":657,"filename":658,"language":608,"meta":609,"style":609},"npm install better-auth\n","npm",[557,660,661],{"__ignoreMap":609},[613,662,663,665,668],{"class":615,"line":616},[613,664,658],{"class":619},[613,666,667],{"class":622}," install",[613,669,626],{"class":622},[671,672,675,678,700],"prompt",{":actions":673,"description":674,"icon":101},"[\"copy\",\"cursor\",\"windsurf\"]","Add Better Auth user identification",[554,676,677],{},"Add Better Auth user identification to my app with evlog.",[679,680,681,685,688,691,694,697],"ul",{},[682,683,684],"li",{},"Import createAuthMiddleware from 'evlog\u002Fbetter-auth'",[682,686,687],{},"Call createAuthMiddleware(auth) to get an identify function",[682,689,690],{},"Call identify(log, headers, path) in your middleware\u002Fhook to auto-identify users on every request",[682,692,693],{},"Safe by default — only extracts whitelisted fields, never logs passwords or tokens",[682,695,696],{},"Supports include\u002Fexclude route patterns, lifecycle hooks, and Better Auth plugin fields",[682,698,699],{},"Works with all frameworks: Nuxt, Next.js, Express, Hono, Fastify, NestJS, Elysia, standalone",[554,701,702,703,707,708],{},"Docs: ",[574,704,705],{"href":705,"rel":706},"https:\u002F\u002Fwww.evlog.dev\u002Flogging\u002Fbetter-auth\u002Foverview",[578],"\nAdapters: ",[574,709,710],{"href":710,"rel":711},"https:\u002F\u002Fwww.evlog.dev\u002Fadapters",[578],[566,713,20],{"id":714},"quick-start",[554,716,717],{},"One middleware, all requests identified:",[600,719,720,941,1171,1324,1494,1638,1795,2003],{},[603,721,726],{"className":722,"code":723,"filename":724,"language":725,"meta":609,"style":609},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createAuthMiddleware } from 'evlog\u002Fbetter-auth'\n\nconst identify = createAuthMiddleware(auth, {\n  exclude: ['\u002Fapi\u002Fauth\u002F**'],\n})\n\nexport default defineEventHandler(async (event) => {\n  if (!event.context.log) return\n  await identify(event.context.log, event.headers, event.path)\n})\n","server\u002Fmiddleware\u002Fauth-identify.ts (Nuxt)","typescript",[557,727,728,756,763,788,815,824,829,862,892,934],{"__ignoreMap":609},[613,729,730,734,738,742,745,748,751,753],{"class":615,"line":616},[613,731,733],{"class":732},"s7zQu","import",[613,735,737],{"class":736},"sMK4o"," {",[613,739,741],{"class":740},"sTEyZ"," createAuthMiddleware",[613,743,744],{"class":736}," }",[613,746,747],{"class":732}," from",[613,749,750],{"class":736}," '",[613,752,559],{"class":622},[613,754,755],{"class":736},"'\n",[613,757,759],{"class":615,"line":758},2,[613,760,762],{"emptyLinePlaceholder":761},true,"\n",[613,764,766,770,773,776,779,782,785],{"class":615,"line":765},3,[613,767,769],{"class":768},"spNyl","const",[613,771,772],{"class":740}," identify ",[613,774,775],{"class":736},"=",[613,777,741],{"class":778},"s2Zo4",[613,780,781],{"class":740},"(auth",[613,783,784],{"class":736},",",[613,786,787],{"class":736}," {\n",[613,789,791,795,798,801,804,807,809,812],{"class":615,"line":790},4,[613,792,794],{"class":793},"swJcz","  exclude",[613,796,797],{"class":736},":",[613,799,800],{"class":740}," [",[613,802,803],{"class":736},"'",[613,805,806],{"class":622},"\u002Fapi\u002Fauth\u002F**",[613,808,803],{"class":736},[613,810,811],{"class":740},"]",[613,813,814],{"class":736},",\n",[613,816,818,821],{"class":615,"line":817},5,[613,819,820],{"class":736},"}",[613,822,823],{"class":740},")\n",[613,825,827],{"class":615,"line":826},6,[613,828,762],{"emptyLinePlaceholder":761},[613,830,832,835,838,841,844,847,850,854,857,860],{"class":615,"line":831},7,[613,833,834],{"class":732},"export",[613,836,837],{"class":732}," default",[613,839,840],{"class":778}," defineEventHandler",[613,842,843],{"class":740},"(",[613,845,846],{"class":768},"async",[613,848,849],{"class":736}," (",[613,851,853],{"class":852},"sHdIc","event",[613,855,856],{"class":736},")",[613,858,859],{"class":768}," =>",[613,861,787],{"class":736},[613,863,865,868,870,873,875,878,881,883,886,889],{"class":615,"line":864},8,[613,866,867],{"class":732},"  if",[613,869,849],{"class":793},[613,871,872],{"class":736},"!",[613,874,853],{"class":740},[613,876,877],{"class":736},".",[613,879,880],{"class":740},"context",[613,882,877],{"class":736},[613,884,885],{"class":740},"log",[613,887,888],{"class":793},") ",[613,890,891],{"class":732},"return\n",[613,893,895,898,901,903,905,907,909,911,913,915,918,920,923,925,927,929,932],{"class":615,"line":894},9,[613,896,897],{"class":732},"  await",[613,899,900],{"class":778}," identify",[613,902,843],{"class":793},[613,904,853],{"class":740},[613,906,877],{"class":736},[613,908,880],{"class":740},[613,910,877],{"class":736},[613,912,885],{"class":740},[613,914,784],{"class":736},[613,916,917],{"class":740}," event",[613,919,877],{"class":736},[613,921,922],{"class":740},"headers",[613,924,784],{"class":736},[613,926,917],{"class":740},[613,928,877],{"class":736},[613,930,931],{"class":740},"path",[613,933,823],{"class":793},[613,935,937,939],{"class":615,"line":936},10,[613,938,820],{"class":736},[613,940,823],{"class":740},[603,942,945],{"className":722,"code":943,"filename":944,"language":725,"meta":609,"style":609},"import { withEvlog, useLogger } from '@\u002Flib\u002Fevlog'\nimport { createAuthMiddleware } from 'evlog\u002Fbetter-auth'\nimport { auth } from '@\u002Flib\u002Fauth'\n\nconst identify = createAuthMiddleware(auth)\n\nexport const POST = withEvlog(async (request: Request) => {\n  const log = useLogger()\n  await identify(log, request.headers)\n  log.set({ action: 'checkout' })\n  return Response.json({ success: true })\n})\n","app\u002Fapi\u002Fcheckout\u002Froute.ts (Next.js)",[557,946,947,972,990,1010,1014,1027,1031,1065,1081,1102,1133,1164],{"__ignoreMap":609},[613,948,949,951,953,956,958,961,963,965,967,970],{"class":615,"line":616},[613,950,733],{"class":732},[613,952,737],{"class":736},[613,954,955],{"class":740}," withEvlog",[613,957,784],{"class":736},[613,959,960],{"class":740}," useLogger",[613,962,744],{"class":736},[613,964,747],{"class":732},[613,966,750],{"class":736},[613,968,969],{"class":622},"@\u002Flib\u002Fevlog",[613,971,755],{"class":736},[613,973,974,976,978,980,982,984,986,988],{"class":615,"line":758},[613,975,733],{"class":732},[613,977,737],{"class":736},[613,979,741],{"class":740},[613,981,744],{"class":736},[613,983,747],{"class":732},[613,985,750],{"class":736},[613,987,559],{"class":622},[613,989,755],{"class":736},[613,991,992,994,996,999,1001,1003,1005,1008],{"class":615,"line":765},[613,993,733],{"class":732},[613,995,737],{"class":736},[613,997,998],{"class":740}," auth",[613,1000,744],{"class":736},[613,1002,747],{"class":732},[613,1004,750],{"class":736},[613,1006,1007],{"class":622},"@\u002Flib\u002Fauth",[613,1009,755],{"class":736},[613,1011,1012],{"class":615,"line":790},[613,1013,762],{"emptyLinePlaceholder":761},[613,1015,1016,1018,1020,1022,1024],{"class":615,"line":817},[613,1017,769],{"class":768},[613,1019,772],{"class":740},[613,1021,775],{"class":736},[613,1023,741],{"class":778},[613,1025,1026],{"class":740},"(auth)\n",[613,1028,1029],{"class":615,"line":826},[613,1030,762],{"emptyLinePlaceholder":761},[613,1032,1033,1035,1038,1041,1043,1045,1047,1049,1051,1054,1056,1059,1061,1063],{"class":615,"line":831},[613,1034,834],{"class":732},[613,1036,1037],{"class":768}," const",[613,1039,1040],{"class":740}," POST ",[613,1042,775],{"class":736},[613,1044,955],{"class":778},[613,1046,843],{"class":740},[613,1048,846],{"class":768},[613,1050,849],{"class":736},[613,1052,1053],{"class":852},"request",[613,1055,797],{"class":736},[613,1057,1058],{"class":619}," Request",[613,1060,856],{"class":736},[613,1062,859],{"class":768},[613,1064,787],{"class":736},[613,1066,1067,1070,1073,1076,1078],{"class":615,"line":864},[613,1068,1069],{"class":768},"  const",[613,1071,1072],{"class":740}," log",[613,1074,1075],{"class":736}," =",[613,1077,960],{"class":778},[613,1079,1080],{"class":793},"()\n",[613,1082,1083,1085,1087,1089,1091,1093,1096,1098,1100],{"class":615,"line":894},[613,1084,897],{"class":732},[613,1086,900],{"class":778},[613,1088,843],{"class":793},[613,1090,885],{"class":740},[613,1092,784],{"class":736},[613,1094,1095],{"class":740}," request",[613,1097,877],{"class":736},[613,1099,922],{"class":740},[613,1101,823],{"class":793},[613,1103,1104,1107,1109,1112,1114,1117,1120,1122,1124,1127,1129,1131],{"class":615,"line":936},[613,1105,1106],{"class":740},"  log",[613,1108,877],{"class":736},[613,1110,1111],{"class":778},"set",[613,1113,843],{"class":793},[613,1115,1116],{"class":736},"{",[613,1118,1119],{"class":793}," action",[613,1121,797],{"class":736},[613,1123,750],{"class":736},[613,1125,1126],{"class":622},"checkout",[613,1128,803],{"class":736},[613,1130,744],{"class":736},[613,1132,823],{"class":793},[613,1134,1136,1139,1142,1144,1147,1149,1151,1154,1156,1160,1162],{"class":615,"line":1135},11,[613,1137,1138],{"class":732},"  return",[613,1140,1141],{"class":740}," Response",[613,1143,877],{"class":736},[613,1145,1146],{"class":778},"json",[613,1148,843],{"class":793},[613,1150,1116],{"class":736},[613,1152,1153],{"class":793}," success",[613,1155,797],{"class":736},[613,1157,1159],{"class":1158},"sfNiH"," true",[613,1161,744],{"class":736},[613,1163,823],{"class":793},[613,1165,1167,1169],{"class":615,"line":1166},12,[613,1168,820],{"class":736},[613,1170,823],{"class":740},[603,1172,1175],{"className":722,"code":1173,"filename":1174,"language":725,"meta":609,"style":609},"import { createAuthMiddleware } from 'evlog\u002Fbetter-auth'\n\nconst identify = createAuthMiddleware(auth, {\n  exclude: ['\u002Fapi\u002Fauth\u002F**'],\n})\n\napp.use(async (req, res, next) => {\n  await identify(req.log, req.headers, req.path)\n  next()\n})\n","src\u002Findex.ts (Express)",[557,1176,1177,1195,1199,1215,1233,1239,1243,1278,1311,1318],{"__ignoreMap":609},[613,1178,1179,1181,1183,1185,1187,1189,1191,1193],{"class":615,"line":616},[613,1180,733],{"class":732},[613,1182,737],{"class":736},[613,1184,741],{"class":740},[613,1186,744],{"class":736},[613,1188,747],{"class":732},[613,1190,750],{"class":736},[613,1192,559],{"class":622},[613,1194,755],{"class":736},[613,1196,1197],{"class":615,"line":758},[613,1198,762],{"emptyLinePlaceholder":761},[613,1200,1201,1203,1205,1207,1209,1211,1213],{"class":615,"line":765},[613,1202,769],{"class":768},[613,1204,772],{"class":740},[613,1206,775],{"class":736},[613,1208,741],{"class":778},[613,1210,781],{"class":740},[613,1212,784],{"class":736},[613,1214,787],{"class":736},[613,1216,1217,1219,1221,1223,1225,1227,1229,1231],{"class":615,"line":790},[613,1218,794],{"class":793},[613,1220,797],{"class":736},[613,1222,800],{"class":740},[613,1224,803],{"class":736},[613,1226,806],{"class":622},[613,1228,803],{"class":736},[613,1230,811],{"class":740},[613,1232,814],{"class":736},[613,1234,1235,1237],{"class":615,"line":817},[613,1236,820],{"class":736},[613,1238,823],{"class":740},[613,1240,1241],{"class":615,"line":826},[613,1242,762],{"emptyLinePlaceholder":761},[613,1244,1245,1248,1250,1253,1255,1257,1259,1262,1264,1267,1269,1272,1274,1276],{"class":615,"line":831},[613,1246,1247],{"class":740},"app",[613,1249,877],{"class":736},[613,1251,1252],{"class":778},"use",[613,1254,843],{"class":740},[613,1256,846],{"class":768},[613,1258,849],{"class":736},[613,1260,1261],{"class":852},"req",[613,1263,784],{"class":736},[613,1265,1266],{"class":852}," res",[613,1268,784],{"class":736},[613,1270,1271],{"class":852}," next",[613,1273,856],{"class":736},[613,1275,859],{"class":768},[613,1277,787],{"class":736},[613,1279,1280,1282,1284,1286,1288,1290,1292,1294,1297,1299,1301,1303,1305,1307,1309],{"class":615,"line":864},[613,1281,897],{"class":732},[613,1283,900],{"class":778},[613,1285,843],{"class":793},[613,1287,1261],{"class":740},[613,1289,877],{"class":736},[613,1291,885],{"class":740},[613,1293,784],{"class":736},[613,1295,1296],{"class":740}," req",[613,1298,877],{"class":736},[613,1300,922],{"class":740},[613,1302,784],{"class":736},[613,1304,1296],{"class":740},[613,1306,877],{"class":736},[613,1308,931],{"class":740},[613,1310,823],{"class":793},[613,1312,1313,1316],{"class":615,"line":894},[613,1314,1315],{"class":778},"  next",[613,1317,1080],{"class":793},[613,1319,1320,1322],{"class":615,"line":936},[613,1321,820],{"class":736},[613,1323,823],{"class":740},[603,1325,1328],{"className":722,"code":1326,"filename":1327,"language":725,"meta":609,"style":609},"import { createAuthMiddleware } from 'evlog\u002Fbetter-auth'\n\nconst identify = createAuthMiddleware(auth, {\n  exclude: ['\u002Fapi\u002Fauth\u002F**'],\n})\n\napp.use(async (c, next) => {\n  await identify(c.get('log'), c.req.raw.headers, c.req.path)\n  await next()\n})\n","src\u002Findex.ts (Hono)",[557,1329,1330,1348,1352,1368,1386,1392,1396,1423,1480,1488],{"__ignoreMap":609},[613,1331,1332,1334,1336,1338,1340,1342,1344,1346],{"class":615,"line":616},[613,1333,733],{"class":732},[613,1335,737],{"class":736},[613,1337,741],{"class":740},[613,1339,744],{"class":736},[613,1341,747],{"class":732},[613,1343,750],{"class":736},[613,1345,559],{"class":622},[613,1347,755],{"class":736},[613,1349,1350],{"class":615,"line":758},[613,1351,762],{"emptyLinePlaceholder":761},[613,1353,1354,1356,1358,1360,1362,1364,1366],{"class":615,"line":765},[613,1355,769],{"class":768},[613,1357,772],{"class":740},[613,1359,775],{"class":736},[613,1361,741],{"class":778},[613,1363,781],{"class":740},[613,1365,784],{"class":736},[613,1367,787],{"class":736},[613,1369,1370,1372,1374,1376,1378,1380,1382,1384],{"class":615,"line":790},[613,1371,794],{"class":793},[613,1373,797],{"class":736},[613,1375,800],{"class":740},[613,1377,803],{"class":736},[613,1379,806],{"class":622},[613,1381,803],{"class":736},[613,1383,811],{"class":740},[613,1385,814],{"class":736},[613,1387,1388,1390],{"class":615,"line":817},[613,1389,820],{"class":736},[613,1391,823],{"class":740},[613,1393,1394],{"class":615,"line":826},[613,1395,762],{"emptyLinePlaceholder":761},[613,1397,1398,1400,1402,1404,1406,1408,1410,1413,1415,1417,1419,1421],{"class":615,"line":831},[613,1399,1247],{"class":740},[613,1401,877],{"class":736},[613,1403,1252],{"class":778},[613,1405,843],{"class":740},[613,1407,846],{"class":768},[613,1409,849],{"class":736},[613,1411,1412],{"class":852},"c",[613,1414,784],{"class":736},[613,1416,1271],{"class":852},[613,1418,856],{"class":736},[613,1420,859],{"class":768},[613,1422,787],{"class":736},[613,1424,1425,1427,1429,1431,1433,1435,1438,1440,1442,1444,1446,1448,1450,1453,1455,1457,1459,1462,1464,1466,1468,1470,1472,1474,1476,1478],{"class":615,"line":864},[613,1426,897],{"class":732},[613,1428,900],{"class":778},[613,1430,843],{"class":793},[613,1432,1412],{"class":740},[613,1434,877],{"class":736},[613,1436,1437],{"class":778},"get",[613,1439,843],{"class":793},[613,1441,803],{"class":736},[613,1443,885],{"class":622},[613,1445,803],{"class":736},[613,1447,856],{"class":793},[613,1449,784],{"class":736},[613,1451,1452],{"class":740}," c",[613,1454,877],{"class":736},[613,1456,1261],{"class":740},[613,1458,877],{"class":736},[613,1460,1461],{"class":740},"raw",[613,1463,877],{"class":736},[613,1465,922],{"class":740},[613,1467,784],{"class":736},[613,1469,1452],{"class":740},[613,1471,877],{"class":736},[613,1473,1261],{"class":740},[613,1475,877],{"class":736},[613,1477,931],{"class":740},[613,1479,823],{"class":793},[613,1481,1482,1484,1486],{"class":615,"line":894},[613,1483,897],{"class":732},[613,1485,1271],{"class":778},[613,1487,1080],{"class":793},[613,1489,1490,1492],{"class":615,"line":936},[613,1491,820],{"class":736},[613,1493,823],{"class":740},[603,1495,1498],{"className":722,"code":1496,"filename":1497,"language":725,"meta":609,"style":609},"import { createAuthMiddleware } from 'evlog\u002Fbetter-auth'\n\nconst identify = createAuthMiddleware(auth, {\n  exclude: ['\u002Fapi\u002Fauth\u002F**'],\n})\n\napp.addHook('onRequest', async (request) => {\n  await identify(request.log, request.headers, request.url)\n})\n","src\u002Findex.ts (Fastify)",[557,1499,1500,1518,1522,1538,1556,1562,1566,1599,1632],{"__ignoreMap":609},[613,1501,1502,1504,1506,1508,1510,1512,1514,1516],{"class":615,"line":616},[613,1503,733],{"class":732},[613,1505,737],{"class":736},[613,1507,741],{"class":740},[613,1509,744],{"class":736},[613,1511,747],{"class":732},[613,1513,750],{"class":736},[613,1515,559],{"class":622},[613,1517,755],{"class":736},[613,1519,1520],{"class":615,"line":758},[613,1521,762],{"emptyLinePlaceholder":761},[613,1523,1524,1526,1528,1530,1532,1534,1536],{"class":615,"line":765},[613,1525,769],{"class":768},[613,1527,772],{"class":740},[613,1529,775],{"class":736},[613,1531,741],{"class":778},[613,1533,781],{"class":740},[613,1535,784],{"class":736},[613,1537,787],{"class":736},[613,1539,1540,1542,1544,1546,1548,1550,1552,1554],{"class":615,"line":790},[613,1541,794],{"class":793},[613,1543,797],{"class":736},[613,1545,800],{"class":740},[613,1547,803],{"class":736},[613,1549,806],{"class":622},[613,1551,803],{"class":736},[613,1553,811],{"class":740},[613,1555,814],{"class":736},[613,1557,1558,1560],{"class":615,"line":817},[613,1559,820],{"class":736},[613,1561,823],{"class":740},[613,1563,1564],{"class":615,"line":826},[613,1565,762],{"emptyLinePlaceholder":761},[613,1567,1568,1570,1572,1575,1577,1579,1582,1584,1586,1589,1591,1593,1595,1597],{"class":615,"line":831},[613,1569,1247],{"class":740},[613,1571,877],{"class":736},[613,1573,1574],{"class":778},"addHook",[613,1576,843],{"class":740},[613,1578,803],{"class":736},[613,1580,1581],{"class":622},"onRequest",[613,1583,803],{"class":736},[613,1585,784],{"class":736},[613,1587,1588],{"class":768}," async",[613,1590,849],{"class":736},[613,1592,1053],{"class":852},[613,1594,856],{"class":736},[613,1596,859],{"class":768},[613,1598,787],{"class":736},[613,1600,1601,1603,1605,1607,1609,1611,1613,1615,1617,1619,1621,1623,1625,1627,1630],{"class":615,"line":864},[613,1602,897],{"class":732},[613,1604,900],{"class":778},[613,1606,843],{"class":793},[613,1608,1053],{"class":740},[613,1610,877],{"class":736},[613,1612,885],{"class":740},[613,1614,784],{"class":736},[613,1616,1095],{"class":740},[613,1618,877],{"class":736},[613,1620,922],{"class":740},[613,1622,784],{"class":736},[613,1624,1095],{"class":740},[613,1626,877],{"class":736},[613,1628,1629],{"class":740},"url",[613,1631,823],{"class":793},[613,1633,1634,1636],{"class":615,"line":894},[613,1635,820],{"class":736},[613,1637,823],{"class":740},[603,1639,1642],{"className":722,"code":1640,"filename":1641,"language":725,"meta":609,"style":609},"import { createAuthMiddleware } from 'evlog\u002Fbetter-auth'\n\nconst identify = createAuthMiddleware(auth, {\n  exclude: ['\u002Fapi\u002Fauth\u002F**'],\n})\n\napp.derive(async ({ log, request }) => {\n  await identify(log, request.headers, new URL(request.url).pathname)\n  return {}\n})\n","src\u002Findex.ts (Elysia)",[557,1643,1644,1662,1666,1682,1700,1706,1710,1739,1782,1789],{"__ignoreMap":609},[613,1645,1646,1648,1650,1652,1654,1656,1658,1660],{"class":615,"line":616},[613,1647,733],{"class":732},[613,1649,737],{"class":736},[613,1651,741],{"class":740},[613,1653,744],{"class":736},[613,1655,747],{"class":732},[613,1657,750],{"class":736},[613,1659,559],{"class":622},[613,1661,755],{"class":736},[613,1663,1664],{"class":615,"line":758},[613,1665,762],{"emptyLinePlaceholder":761},[613,1667,1668,1670,1672,1674,1676,1678,1680],{"class":615,"line":765},[613,1669,769],{"class":768},[613,1671,772],{"class":740},[613,1673,775],{"class":736},[613,1675,741],{"class":778},[613,1677,781],{"class":740},[613,1679,784],{"class":736},[613,1681,787],{"class":736},[613,1683,1684,1686,1688,1690,1692,1694,1696,1698],{"class":615,"line":790},[613,1685,794],{"class":793},[613,1687,797],{"class":736},[613,1689,800],{"class":740},[613,1691,803],{"class":736},[613,1693,806],{"class":622},[613,1695,803],{"class":736},[613,1697,811],{"class":740},[613,1699,814],{"class":736},[613,1701,1702,1704],{"class":615,"line":817},[613,1703,820],{"class":736},[613,1705,823],{"class":740},[613,1707,1708],{"class":615,"line":826},[613,1709,762],{"emptyLinePlaceholder":761},[613,1711,1712,1714,1716,1719,1721,1723,1726,1728,1730,1732,1735,1737],{"class":615,"line":831},[613,1713,1247],{"class":740},[613,1715,877],{"class":736},[613,1717,1718],{"class":778},"derive",[613,1720,843],{"class":740},[613,1722,846],{"class":768},[613,1724,1725],{"class":736}," ({",[613,1727,1072],{"class":852},[613,1729,784],{"class":736},[613,1731,1095],{"class":852},[613,1733,1734],{"class":736}," })",[613,1736,859],{"class":768},[613,1738,787],{"class":736},[613,1740,1741,1743,1745,1747,1749,1751,1753,1755,1757,1759,1762,1765,1767,1769,1771,1773,1775,1777,1780],{"class":615,"line":864},[613,1742,897],{"class":732},[613,1744,900],{"class":778},[613,1746,843],{"class":793},[613,1748,885],{"class":740},[613,1750,784],{"class":736},[613,1752,1095],{"class":740},[613,1754,877],{"class":736},[613,1756,922],{"class":740},[613,1758,784],{"class":736},[613,1760,1761],{"class":736}," new",[613,1763,1764],{"class":778}," URL",[613,1766,843],{"class":793},[613,1768,1053],{"class":740},[613,1770,877],{"class":736},[613,1772,1629],{"class":740},[613,1774,856],{"class":793},[613,1776,877],{"class":736},[613,1778,1779],{"class":740},"pathname",[613,1781,823],{"class":793},[613,1783,1784,1786],{"class":615,"line":894},[613,1785,1138],{"class":732},[613,1787,1788],{"class":736}," {}\n",[613,1790,1791,1793],{"class":615,"line":936},[613,1792,820],{"class":736},[613,1794,823],{"class":740},[603,1796,1799],{"className":722,"code":1797,"filename":1798,"language":725,"meta":609,"style":609},"import { createAuthMiddleware } from 'evlog\u002Fbetter-auth'\nimport { useLogger } from 'evlog\u002Fnestjs'\n\nconst identify = createAuthMiddleware(auth, {\n  exclude: ['\u002Fapi\u002Fauth\u002F**'],\n})\n\n@Injectable()\nexport class AuthIdentifyMiddleware implements NestMiddleware {\n  async use(req: Request, res: Response, next: NextFunction) {\n    await identify(useLogger(), req.headers, req.path)\n    next()\n  }\n}\n","src\u002Fauth-identify.middleware.ts (NestJS)",[557,1800,1801,1819,1838,1842,1858,1876,1882,1886,1896,1914,1951,1984,1991,1997],{"__ignoreMap":609},[613,1802,1803,1805,1807,1809,1811,1813,1815,1817],{"class":615,"line":616},[613,1804,733],{"class":732},[613,1806,737],{"class":736},[613,1808,741],{"class":740},[613,1810,744],{"class":736},[613,1812,747],{"class":732},[613,1814,750],{"class":736},[613,1816,559],{"class":622},[613,1818,755],{"class":736},[613,1820,1821,1823,1825,1827,1829,1831,1833,1836],{"class":615,"line":758},[613,1822,733],{"class":732},[613,1824,737],{"class":736},[613,1826,960],{"class":740},[613,1828,744],{"class":736},[613,1830,747],{"class":732},[613,1832,750],{"class":736},[613,1834,1835],{"class":622},"evlog\u002Fnestjs",[613,1837,755],{"class":736},[613,1839,1840],{"class":615,"line":765},[613,1841,762],{"emptyLinePlaceholder":761},[613,1843,1844,1846,1848,1850,1852,1854,1856],{"class":615,"line":790},[613,1845,769],{"class":768},[613,1847,772],{"class":740},[613,1849,775],{"class":736},[613,1851,741],{"class":778},[613,1853,781],{"class":740},[613,1855,784],{"class":736},[613,1857,787],{"class":736},[613,1859,1860,1862,1864,1866,1868,1870,1872,1874],{"class":615,"line":817},[613,1861,794],{"class":793},[613,1863,797],{"class":736},[613,1865,800],{"class":740},[613,1867,803],{"class":736},[613,1869,806],{"class":622},[613,1871,803],{"class":736},[613,1873,811],{"class":740},[613,1875,814],{"class":736},[613,1877,1878,1880],{"class":615,"line":826},[613,1879,820],{"class":736},[613,1881,823],{"class":740},[613,1883,1884],{"class":615,"line":831},[613,1885,762],{"emptyLinePlaceholder":761},[613,1887,1888,1891,1894],{"class":615,"line":864},[613,1889,1890],{"class":736},"@",[613,1892,1893],{"class":778},"Injectable",[613,1895,1080],{"class":740},[613,1897,1898,1900,1903,1906,1909,1912],{"class":615,"line":894},[613,1899,834],{"class":732},[613,1901,1902],{"class":768}," class",[613,1904,1905],{"class":619}," AuthIdentifyMiddleware",[613,1907,1908],{"class":768}," implements",[613,1910,1911],{"class":619}," NestMiddleware",[613,1913,787],{"class":736},[613,1915,1916,1919,1922,1924,1926,1928,1930,1932,1934,1936,1938,1940,1942,1944,1947,1949],{"class":615,"line":936},[613,1917,1918],{"class":768},"  async",[613,1920,1921],{"class":793}," use",[613,1923,843],{"class":736},[613,1925,1261],{"class":852},[613,1927,797],{"class":736},[613,1929,1058],{"class":619},[613,1931,784],{"class":736},[613,1933,1266],{"class":852},[613,1935,797],{"class":736},[613,1937,1141],{"class":619},[613,1939,784],{"class":736},[613,1941,1271],{"class":852},[613,1943,797],{"class":736},[613,1945,1946],{"class":619}," NextFunction",[613,1948,856],{"class":736},[613,1950,787],{"class":736},[613,1952,1953,1956,1958,1960,1963,1966,1968,1970,1972,1974,1976,1978,1980,1982],{"class":615,"line":1135},[613,1954,1955],{"class":732},"    await",[613,1957,900],{"class":778},[613,1959,843],{"class":793},[613,1961,1962],{"class":778},"useLogger",[613,1964,1965],{"class":793},"()",[613,1967,784],{"class":736},[613,1969,1296],{"class":740},[613,1971,877],{"class":736},[613,1973,922],{"class":740},[613,1975,784],{"class":736},[613,1977,1296],{"class":740},[613,1979,877],{"class":736},[613,1981,931],{"class":740},[613,1983,823],{"class":793},[613,1985,1986,1989],{"class":615,"line":1166},[613,1987,1988],{"class":778},"    next",[613,1990,1080],{"class":793},[613,1992,1994],{"class":615,"line":1993},13,[613,1995,1996],{"class":736},"  }\n",[613,1998,2000],{"class":615,"line":1999},14,[613,2001,2002],{"class":736},"}\n",[603,2004,2007],{"className":722,"code":2005,"filename":2006,"language":725,"meta":609,"style":609},"import { identifyUser } from 'evlog\u002Fbetter-auth'\nimport { createLogger } from 'evlog'\n\nconst log = createLogger()\nconst session = await auth.api.getSession({ headers })\nif (session) identifyUser(log, session)\nlog.emit()\n","scripts\u002Fsync-job.ts (Standalone)",[557,2008,2009,2028,2047,2051,2064,2099,2118],{"__ignoreMap":609},[613,2010,2011,2013,2015,2018,2020,2022,2024,2026],{"class":615,"line":616},[613,2012,733],{"class":732},[613,2014,737],{"class":736},[613,2016,2017],{"class":740}," identifyUser",[613,2019,744],{"class":736},[613,2021,747],{"class":732},[613,2023,750],{"class":736},[613,2025,559],{"class":622},[613,2027,755],{"class":736},[613,2029,2030,2032,2034,2037,2039,2041,2043,2045],{"class":615,"line":758},[613,2031,733],{"class":732},[613,2033,737],{"class":736},[613,2035,2036],{"class":740}," createLogger",[613,2038,744],{"class":736},[613,2040,747],{"class":732},[613,2042,750],{"class":736},[613,2044,587],{"class":622},[613,2046,755],{"class":736},[613,2048,2049],{"class":615,"line":765},[613,2050,762],{"emptyLinePlaceholder":761},[613,2052,2053,2055,2058,2060,2062],{"class":615,"line":790},[613,2054,769],{"class":768},[613,2056,2057],{"class":740}," log ",[613,2059,775],{"class":736},[613,2061,2036],{"class":778},[613,2063,1080],{"class":740},[613,2065,2066,2068,2071,2073,2076,2078,2080,2083,2085,2088,2090,2092,2095,2097],{"class":615,"line":817},[613,2067,769],{"class":768},[613,2069,2070],{"class":740}," session ",[613,2072,775],{"class":736},[613,2074,2075],{"class":732}," await",[613,2077,998],{"class":740},[613,2079,877],{"class":736},[613,2081,2082],{"class":740},"api",[613,2084,877],{"class":736},[613,2086,2087],{"class":778},"getSession",[613,2089,843],{"class":740},[613,2091,1116],{"class":736},[613,2093,2094],{"class":740}," headers ",[613,2096,820],{"class":736},[613,2098,823],{"class":740},[613,2100,2101,2104,2107,2110,2113,2115],{"class":615,"line":826},[613,2102,2103],{"class":732},"if",[613,2105,2106],{"class":740}," (session) ",[613,2108,2109],{"class":778},"identifyUser",[613,2111,2112],{"class":740},"(log",[613,2114,784],{"class":736},[613,2116,2117],{"class":740}," session)\n",[613,2119,2120,2122,2124,2127],{"class":615,"line":831},[613,2121,885],{"class":740},[613,2123,877],{"class":736},[613,2125,2126],{"class":778},"emit",[613,2128,1080],{"class":740},[554,2130,2131],{},"Your wide event now includes the user:",[600,2133,2134,2311],{},[603,2135,2139],{"className":2136,"code":2137,"filename":2138,"language":1146,"meta":609,"style":609},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"level\": \"info\",\n  \"method\": \"POST\",\n  \"path\": \"\u002Fapi\u002Fcheckout\",\n  \"status\": 200,\n  \"duration\": \"120ms\",\n  \"requestId\": \"a5669202-7765-4f59-b6f0-b9f40ce71599\",\n  \"cart\": { \"items\": 3, \"total\": 9999 }\n}\n","Before — anonymous",[557,2140,2141,2146,2169,2189,2208,2225,2245,2265,2307],{"__ignoreMap":609},[613,2142,2143],{"class":615,"line":616},[613,2144,2145],{"class":736},"{\n",[613,2147,2148,2151,2154,2157,2159,2162,2165,2167],{"class":615,"line":758},[613,2149,2150],{"class":736},"  \"",[613,2152,2153],{"class":768},"level",[613,2155,2156],{"class":736},"\"",[613,2158,797],{"class":736},[613,2160,2161],{"class":736}," \"",[613,2163,2164],{"class":622},"info",[613,2166,2156],{"class":736},[613,2168,814],{"class":736},[613,2170,2171,2173,2176,2178,2180,2182,2185,2187],{"class":615,"line":765},[613,2172,2150],{"class":736},[613,2174,2175],{"class":768},"method",[613,2177,2156],{"class":736},[613,2179,797],{"class":736},[613,2181,2161],{"class":736},[613,2183,2184],{"class":622},"POST",[613,2186,2156],{"class":736},[613,2188,814],{"class":736},[613,2190,2191,2193,2195,2197,2199,2201,2204,2206],{"class":615,"line":790},[613,2192,2150],{"class":736},[613,2194,931],{"class":768},[613,2196,2156],{"class":736},[613,2198,797],{"class":736},[613,2200,2161],{"class":736},[613,2202,2203],{"class":622},"\u002Fapi\u002Fcheckout",[613,2205,2156],{"class":736},[613,2207,814],{"class":736},[613,2209,2210,2212,2215,2217,2219,2223],{"class":615,"line":817},[613,2211,2150],{"class":736},[613,2213,2214],{"class":768},"status",[613,2216,2156],{"class":736},[613,2218,797],{"class":736},[613,2220,2222],{"class":2221},"sbssI"," 200",[613,2224,814],{"class":736},[613,2226,2227,2229,2232,2234,2236,2238,2241,2243],{"class":615,"line":826},[613,2228,2150],{"class":736},[613,2230,2231],{"class":768},"duration",[613,2233,2156],{"class":736},[613,2235,797],{"class":736},[613,2237,2161],{"class":736},[613,2239,2240],{"class":622},"120ms",[613,2242,2156],{"class":736},[613,2244,814],{"class":736},[613,2246,2247,2249,2252,2254,2256,2258,2261,2263],{"class":615,"line":831},[613,2248,2150],{"class":736},[613,2250,2251],{"class":768},"requestId",[613,2253,2156],{"class":736},[613,2255,797],{"class":736},[613,2257,2161],{"class":736},[613,2259,2260],{"class":622},"a5669202-7765-4f59-b6f0-b9f40ce71599",[613,2262,2156],{"class":736},[613,2264,814],{"class":736},[613,2266,2267,2269,2272,2274,2276,2278,2280,2283,2285,2287,2290,2292,2294,2297,2299,2301,2304],{"class":615,"line":864},[613,2268,2150],{"class":736},[613,2270,2271],{"class":768},"cart",[613,2273,2156],{"class":736},[613,2275,797],{"class":736},[613,2277,737],{"class":736},[613,2279,2161],{"class":736},[613,2281,2282],{"class":619},"items",[613,2284,2156],{"class":736},[613,2286,797],{"class":736},[613,2288,2289],{"class":2221}," 3",[613,2291,784],{"class":736},[613,2293,2161],{"class":736},[613,2295,2296],{"class":619},"total",[613,2298,2156],{"class":736},[613,2300,797],{"class":736},[613,2302,2303],{"class":2221}," 9999",[613,2305,2306],{"class":736}," }\n",[613,2308,2309],{"class":615,"line":894},[613,2310,2002],{"class":736},[603,2312,2315],{"className":2136,"code":2313,"filename":2314,"language":1146,"meta":609,"style":609},"{\n  \"level\": \"info\",\n  \"method\": \"POST\",\n  \"path\": \"\u002Fapi\u002Fcheckout\",\n  \"status\": 200,\n  \"duration\": \"120ms\",\n  \"requestId\": \"a5669202-7765-4f59-b6f0-b9f40ce71599\",\n  \"userId\": \"QBX9tPjJQExWawAbNll75\",\n  \"user\": {\n    \"id\": \"QBX9tPjJQExWawAbNll75\",\n    \"name\": \"Hugo Richard\",\n    \"email\": \"hugo@example.com\",\n    \"emailVerified\": true,\n    \"createdAt\": \"2024-01-15T10:00:00.000Z\"\n  },\n  \"session\": {\n    \"id\": \"Xhmh6TxKJQrVKFX0Y0II\",\n    \"expiresAt\": \"2024-01-22T10:00:00.000Z\",\n    \"ipAddress\": \"192.168.1.42\",\n    \"userAgent\": \"Mozilla\u002F5.0 (Macintosh; Intel Mac OS X 10_15_7)\",\n    \"createdAt\": \"2024-01-15T10:00:00.000Z\"\n  },\n  \"auth\": {\n    \"resolvedIn\": 12,\n    \"identified\": true\n  },\n  \"cart\": { \"items\": 3, \"total\": 9999 }\n}\n","After — identified",[557,2316,2317,2321,2339,2357,2375,2389,2407,2425,2445,2458,2478,2498,2518,2532,2551,2557,2571,2591,2612,2633,2654,2671,2676,2690,2707,2722,2727,2764],{"__ignoreMap":609},[613,2318,2319],{"class":615,"line":616},[613,2320,2145],{"class":736},[613,2322,2323,2325,2327,2329,2331,2333,2335,2337],{"class":615,"line":758},[613,2324,2150],{"class":736},[613,2326,2153],{"class":768},[613,2328,2156],{"class":736},[613,2330,797],{"class":736},[613,2332,2161],{"class":736},[613,2334,2164],{"class":622},[613,2336,2156],{"class":736},[613,2338,814],{"class":736},[613,2340,2341,2343,2345,2347,2349,2351,2353,2355],{"class":615,"line":765},[613,2342,2150],{"class":736},[613,2344,2175],{"class":768},[613,2346,2156],{"class":736},[613,2348,797],{"class":736},[613,2350,2161],{"class":736},[613,2352,2184],{"class":622},[613,2354,2156],{"class":736},[613,2356,814],{"class":736},[613,2358,2359,2361,2363,2365,2367,2369,2371,2373],{"class":615,"line":790},[613,2360,2150],{"class":736},[613,2362,931],{"class":768},[613,2364,2156],{"class":736},[613,2366,797],{"class":736},[613,2368,2161],{"class":736},[613,2370,2203],{"class":622},[613,2372,2156],{"class":736},[613,2374,814],{"class":736},[613,2376,2377,2379,2381,2383,2385,2387],{"class":615,"line":817},[613,2378,2150],{"class":736},[613,2380,2214],{"class":768},[613,2382,2156],{"class":736},[613,2384,797],{"class":736},[613,2386,2222],{"class":2221},[613,2388,814],{"class":736},[613,2390,2391,2393,2395,2397,2399,2401,2403,2405],{"class":615,"line":826},[613,2392,2150],{"class":736},[613,2394,2231],{"class":768},[613,2396,2156],{"class":736},[613,2398,797],{"class":736},[613,2400,2161],{"class":736},[613,2402,2240],{"class":622},[613,2404,2156],{"class":736},[613,2406,814],{"class":736},[613,2408,2409,2411,2413,2415,2417,2419,2421,2423],{"class":615,"line":831},[613,2410,2150],{"class":736},[613,2412,2251],{"class":768},[613,2414,2156],{"class":736},[613,2416,797],{"class":736},[613,2418,2161],{"class":736},[613,2420,2260],{"class":622},[613,2422,2156],{"class":736},[613,2424,814],{"class":736},[613,2426,2427,2429,2432,2434,2436,2438,2441,2443],{"class":615,"line":864},[613,2428,2150],{"class":736},[613,2430,2431],{"class":768},"userId",[613,2433,2156],{"class":736},[613,2435,797],{"class":736},[613,2437,2161],{"class":736},[613,2439,2440],{"class":622},"QBX9tPjJQExWawAbNll75",[613,2442,2156],{"class":736},[613,2444,814],{"class":736},[613,2446,2447,2449,2452,2454,2456],{"class":615,"line":894},[613,2448,2150],{"class":736},[613,2450,2451],{"class":768},"user",[613,2453,2156],{"class":736},[613,2455,797],{"class":736},[613,2457,787],{"class":736},[613,2459,2460,2463,2466,2468,2470,2472,2474,2476],{"class":615,"line":936},[613,2461,2462],{"class":736},"    \"",[613,2464,2465],{"class":619},"id",[613,2467,2156],{"class":736},[613,2469,797],{"class":736},[613,2471,2161],{"class":736},[613,2473,2440],{"class":622},[613,2475,2156],{"class":736},[613,2477,814],{"class":736},[613,2479,2480,2482,2485,2487,2489,2491,2494,2496],{"class":615,"line":1135},[613,2481,2462],{"class":736},[613,2483,2484],{"class":619},"name",[613,2486,2156],{"class":736},[613,2488,797],{"class":736},[613,2490,2161],{"class":736},[613,2492,2493],{"class":622},"Hugo Richard",[613,2495,2156],{"class":736},[613,2497,814],{"class":736},[613,2499,2500,2502,2505,2507,2509,2511,2514,2516],{"class":615,"line":1166},[613,2501,2462],{"class":736},[613,2503,2504],{"class":619},"email",[613,2506,2156],{"class":736},[613,2508,797],{"class":736},[613,2510,2161],{"class":736},[613,2512,2513],{"class":622},"hugo@example.com",[613,2515,2156],{"class":736},[613,2517,814],{"class":736},[613,2519,2520,2522,2525,2527,2529],{"class":615,"line":1993},[613,2521,2462],{"class":736},[613,2523,2524],{"class":619},"emailVerified",[613,2526,2156],{"class":736},[613,2528,797],{"class":736},[613,2530,2531],{"class":736}," true,\n",[613,2533,2534,2536,2539,2541,2543,2545,2548],{"class":615,"line":1999},[613,2535,2462],{"class":736},[613,2537,2538],{"class":619},"createdAt",[613,2540,2156],{"class":736},[613,2542,797],{"class":736},[613,2544,2161],{"class":736},[613,2546,2547],{"class":622},"2024-01-15T10:00:00.000Z",[613,2549,2550],{"class":736},"\"\n",[613,2552,2554],{"class":615,"line":2553},15,[613,2555,2556],{"class":736},"  },\n",[613,2558,2560,2562,2565,2567,2569],{"class":615,"line":2559},16,[613,2561,2150],{"class":736},[613,2563,2564],{"class":768},"session",[613,2566,2156],{"class":736},[613,2568,797],{"class":736},[613,2570,787],{"class":736},[613,2572,2574,2576,2578,2580,2582,2584,2587,2589],{"class":615,"line":2573},17,[613,2575,2462],{"class":736},[613,2577,2465],{"class":619},[613,2579,2156],{"class":736},[613,2581,797],{"class":736},[613,2583,2161],{"class":736},[613,2585,2586],{"class":622},"Xhmh6TxKJQrVKFX0Y0II",[613,2588,2156],{"class":736},[613,2590,814],{"class":736},[613,2592,2594,2596,2599,2601,2603,2605,2608,2610],{"class":615,"line":2593},18,[613,2595,2462],{"class":736},[613,2597,2598],{"class":619},"expiresAt",[613,2600,2156],{"class":736},[613,2602,797],{"class":736},[613,2604,2161],{"class":736},[613,2606,2607],{"class":622},"2024-01-22T10:00:00.000Z",[613,2609,2156],{"class":736},[613,2611,814],{"class":736},[613,2613,2615,2617,2620,2622,2624,2626,2629,2631],{"class":615,"line":2614},19,[613,2616,2462],{"class":736},[613,2618,2619],{"class":619},"ipAddress",[613,2621,2156],{"class":736},[613,2623,797],{"class":736},[613,2625,2161],{"class":736},[613,2627,2628],{"class":622},"192.168.1.42",[613,2630,2156],{"class":736},[613,2632,814],{"class":736},[613,2634,2636,2638,2641,2643,2645,2647,2650,2652],{"class":615,"line":2635},20,[613,2637,2462],{"class":736},[613,2639,2640],{"class":619},"userAgent",[613,2642,2156],{"class":736},[613,2644,797],{"class":736},[613,2646,2161],{"class":736},[613,2648,2649],{"class":622},"Mozilla\u002F5.0 (Macintosh; Intel Mac OS X 10_15_7)",[613,2651,2156],{"class":736},[613,2653,814],{"class":736},[613,2655,2657,2659,2661,2663,2665,2667,2669],{"class":615,"line":2656},21,[613,2658,2462],{"class":736},[613,2660,2538],{"class":619},[613,2662,2156],{"class":736},[613,2664,797],{"class":736},[613,2666,2161],{"class":736},[613,2668,2547],{"class":622},[613,2670,2550],{"class":736},[613,2672,2674],{"class":615,"line":2673},22,[613,2675,2556],{"class":736},[613,2677,2679,2681,2684,2686,2688],{"class":615,"line":2678},23,[613,2680,2150],{"class":736},[613,2682,2683],{"class":768},"auth",[613,2685,2156],{"class":736},[613,2687,797],{"class":736},[613,2689,787],{"class":736},[613,2691,2693,2695,2698,2700,2702,2705],{"class":615,"line":2692},24,[613,2694,2462],{"class":736},[613,2696,2697],{"class":619},"resolvedIn",[613,2699,2156],{"class":736},[613,2701,797],{"class":736},[613,2703,2704],{"class":2221}," 12",[613,2706,814],{"class":736},[613,2708,2710,2712,2715,2717,2719],{"class":615,"line":2709},25,[613,2711,2462],{"class":736},[613,2713,2714],{"class":619},"identified",[613,2716,2156],{"class":736},[613,2718,797],{"class":736},[613,2720,2721],{"class":736}," true\n",[613,2723,2725],{"class":615,"line":2724},26,[613,2726,2556],{"class":736},[613,2728,2730,2732,2734,2736,2738,2740,2742,2744,2746,2748,2750,2752,2754,2756,2758,2760,2762],{"class":615,"line":2729},27,[613,2731,2150],{"class":736},[613,2733,2271],{"class":768},[613,2735,2156],{"class":736},[613,2737,797],{"class":736},[613,2739,737],{"class":736},[613,2741,2161],{"class":736},[613,2743,2282],{"class":619},[613,2745,2156],{"class":736},[613,2747,797],{"class":736},[613,2749,2289],{"class":2221},[613,2751,784],{"class":736},[613,2753,2161],{"class":736},[613,2755,2296],{"class":619},[613,2757,2156],{"class":736},[613,2759,797],{"class":736},[613,2761,2303],{"class":2221},[613,2763,2306],{"class":736},[613,2765,2767],{"class":615,"line":2766},28,[613,2768,2002],{"class":736},[566,2770,2772],{"id":2771},"how-it-works","How It Works",[2774,2775],"better-auth-identify",{},[554,2777,2778,2779,2782,2783,2786,2787,2790],{},"The integration resolves the Better Auth session from request cookies, extracts a safe whitelist of user and session fields, sets them on the logger, then fires the ",[557,2780,2781],{},"onIdentify"," (or ",[557,2784,2785],{},"onAnonymous",") hook. Auth routes are skipped by default. Resolution timing is captured on ",[557,2788,2789],{},"auth.resolvedIn",", so you can chart auth latency alongside the rest of the wide event.",[566,2792,2794],{"id":2793},"where-to-next","Where to next",[2796,2797,2798,2802,2813,2820],"card-group",{},[2799,2800,2801],"card",{"icon":112,"title":109,"to":110},"The core building block — extract safe fields, mask emails, capture plugin data (organizations, roles, 2FA).",[2799,2803,2804,2805,2808,2809,2812],{"icon":117,"title":114,"to":115},"Filter routes with ",[557,2806,2807],{},"include","\u002F",[557,2810,2811],{},"exclude",", react to identification with lifecycle hooks, and tune behaviour per app.",[2799,2814,2815,2816,2819],{"icon":69,"title":119,"to":120},"Mirror the user identity into client-side logs with ",[557,2817,2818],{},"setIdentity"," and the Better Auth client.",[2799,2821,2822],{"icon":126,"title":123,"to":124},"Watch session resolution time, enable session caching, and combine with the AI SDK integration.",[566,2824,2826],{"id":2825},"public-api","Public API",[2828,2829,2830,2843],"table",{},[2831,2832,2833],"thead",{},[2834,2835,2836,2840],"tr",{},[2837,2838,2839],"th",{},"Export",[2837,2841,2842],{},"Description",[2844,2845,2846,2861,2875,2891],"tbody",{},[2834,2847,2848,2854],{},[2849,2850,2851],"td",{},[557,2852,2853],{},"identifyUser(log, session)",[2849,2855,2856,2857,2860],{},"Core helper — extracts safe fields from a session and sets them on the logger. Returns ",[557,2858,2859],{},"true"," if identified.",[2834,2862,2863,2868],{},[2849,2864,2865],{},[557,2866,2867],{},"createAuthMiddleware(auth)",[2849,2869,2870,2871,2874],{},"Returns an async ",[557,2872,2873],{},"(log, headers, path?) => Promise\u003Cboolean>"," function with route filtering, timing, and hooks.",[2834,2876,2877,2882],{},[2849,2878,2879],{},[557,2880,2881],{},"createAuthIdentifier(auth)",[2849,2883,2884,2885,2887,2888,877],{},"Nitro ",[557,2886,1053],{}," hook factory for standalone Nitro apps. See ",[574,2889,123],{"href":2890},"\u002Flogging\u002Fbetter-auth\u002Fperformance#standalone-nitro",[2834,2892,2893,2898],{},[2849,2894,2895],{},[557,2896,2897],{},"maskEmail(email)",[2849,2899,2900,2901,2903,2904,877],{},"Mask an email: ",[557,2902,2513],{}," → ",[557,2905,2906],{},"h***@example.com",[2908,2909,2910],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":609,"searchDepth":758,"depth":758,"links":2912},[2913,2914,2915,2916,2917],{"id":568,"depth":758,"text":569},{"id":714,"depth":758,"text":20},{"id":2771,"depth":758,"text":2772},{"id":2793,"depth":758,"text":2794},{"id":2825,"depth":758,"text":2826},"Automatically identify users on every request. Every wide event includes who made the request — userId, user profile, and session metadata — with zero manual work.","md",[2921,2924,2925,2926],{"label":109,"icon":112,"to":110,"color":2922,"variant":2923},"neutral","subtle",{"label":114,"icon":117,"to":115,"color":2922,"variant":2923},{"label":119,"icon":69,"to":120,"color":2922,"variant":2923},{"label":123,"icon":126,"to":124,"color":2922,"variant":2923},{},{"title":41,"icon":44},{"title":549,"description":2918},"fNlaxqdbthr0UcMrZ4EfVuU28oXl2XfDl-gpLrTrS88",[2932,2934],{"title":95,"path":96,"stem":97,"description":2933,"icon":98,"children":-1},"Add tool execution timing and total wall time with createEvlogIntegration. Compose with other middleware like supermemory or guardrails.",{"title":109,"path":110,"stem":111,"description":2935,"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.",1778338246498]