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