[{"data":1,"prerenderedAt":1368},["ShallowReactive",2],{"navigation_docs":3,"-use-cases-better-auth-client-sync":434,"-use-cases-better-auth-client-sync-surround":1363},[4,30,80,240,348,403],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Start","\u002Fstart","1.start",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Learn","\u002Flearn","2.learn",[35,40,45,50,55,60,65,70,75],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":61,"path":62,"stem":63,"icon":64},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":66,"path":67,"stem":68,"icon":69},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":71,"path":72,"stem":73,"icon":74},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":76,"path":77,"stem":78,"icon":79},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":81,"path":82,"stem":83,"children":84,"page":29},"Integrate","\u002Fintegrate","3.integrate",[85,89,152],{"title":36,"path":86,"stem":87,"icon":88},"\u002Fintegrate\u002Foverview","3.integrate\u002F0.overview","i-lucide-plug",{"title":90,"path":91,"stem":92,"children":93,"page":29},"Adapters","\u002Fintegrate\u002Fadapters","3.integrate\u002Fadapters",[94,97,137],{"title":36,"path":95,"stem":96,"icon":39},"\u002Fintegrate\u002Fadapters\u002Foverview","3.integrate\u002Fadapters\u002F01.overview",{"title":98,"path":99,"stem":100,"children":101,"page":29},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","3.integrate\u002Fadapters\u002Fcloud",[102,107,112,117,122,127,132],{"title":103,"path":104,"stem":105,"icon":106},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","3.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":108,"path":109,"stem":110,"icon":111},"OTLP","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fotlp","3.integrate\u002Fadapters\u002Fcloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":113,"path":114,"stem":115,"icon":116},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","3.integrate\u002Fadapters\u002Fcloud\u002F03.posthog","i-simple-icons-posthog",{"title":118,"path":119,"stem":120,"icon":121},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","3.integrate\u002Fadapters\u002Fcloud\u002F04.sentry","i-simple-icons-sentry",{"title":123,"path":124,"stem":125,"icon":126},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","3.integrate\u002Fadapters\u002Fcloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":128,"path":129,"stem":130,"icon":131},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","3.integrate\u002Fadapters\u002Fcloud\u002F06.datadog","i-simple-icons-datadog",{"title":133,"path":134,"stem":135,"icon":136},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fhyperdx","3.integrate\u002Fadapters\u002Fcloud\u002F07.hyperdx","i-custom-hyperdx",{"title":138,"path":139,"stem":140,"children":141,"page":29},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","3.integrate\u002Fadapters\u002Fself-hosted",[142,147],{"title":143,"path":144,"stem":145,"icon":146},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","3.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":148,"path":149,"stem":150,"icon":151},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","3.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":153,"path":154,"stem":155,"children":156,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","3.integrate\u002Fframeworks",[157,161,166,171,176,181,186,191,196,201,206,211,216,221,225,230,235],{"title":36,"path":158,"stem":159,"icon":160},"\u002Fintegrate\u002Fframeworks\u002Foverview","3.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":162,"path":163,"stem":164,"icon":165},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","3.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":167,"path":168,"stem":169,"icon":170},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","3.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":172,"path":173,"stem":174,"icon":175},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","3.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":177,"path":178,"stem":179,"icon":180},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","3.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":182,"path":183,"stem":184,"icon":185},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","3.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":187,"path":188,"stem":189,"icon":190},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","3.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":192,"path":193,"stem":194,"icon":195},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","3.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":197,"path":198,"stem":199,"icon":200},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","3.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":202,"path":203,"stem":204,"icon":205},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","3.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":207,"path":208,"stem":209,"icon":210},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","3.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":212,"path":213,"stem":214,"icon":215},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","3.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":217,"path":218,"stem":219,"icon":220},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","3.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":222,"path":223,"stem":224,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","3.integrate\u002Fframeworks\u002F13.standalone",{"title":226,"path":227,"stem":228,"icon":229},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","3.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":231,"path":232,"stem":233,"icon":234},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","3.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":236,"path":237,"stem":238,"icon":239},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","3.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":241,"path":242,"stem":243,"children":244,"page":29},"Use Cases","\u002Fuse-cases","4.use-cases",[245,249,254,283,311,343],{"title":36,"path":246,"stem":247,"icon":248},"\u002Fuse-cases\u002Foverview","4.use-cases\u002F0.overview","i-lucide-list-checks",{"title":250,"path":251,"stem":252,"icon":253},"Client Logging","\u002Fuse-cases\u002Fclient-logging","4.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":255,"icon":256,"path":257,"stem":258,"children":259,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","4.use-cases\u002F2.ai-sdk",[260,263,268,273,278],{"title":36,"path":261,"stem":262,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","4.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":264,"path":265,"stem":266,"icon":267},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","4.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":269,"path":270,"stem":271,"icon":272},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","4.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":274,"path":275,"stem":276,"icon":277},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","4.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":279,"path":280,"stem":281,"icon":282},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","4.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":284,"icon":285,"path":286,"stem":287,"children":288,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","4.use-cases\u002F3.better-auth",[289,292,297,302,306],{"title":36,"path":290,"stem":291,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","4.use-cases\u002F3.better-auth\u002F01.overview",{"title":293,"path":294,"stem":295,"icon":296},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","4.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":298,"path":299,"stem":300,"icon":301},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","4.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":303,"path":304,"stem":305,"icon":253},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","4.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":307,"path":308,"stem":309,"icon":310},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","4.use-cases\u002F3.better-auth\u002F05.performance","i-lucide-gauge",{"title":312,"icon":313,"path":314,"stem":315,"children":316,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","4.use-cases\u002F4.audit",[317,320,325,330,335,339],{"title":36,"path":318,"stem":319,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","4.use-cases\u002F4.audit\u002F01.overview",{"title":321,"path":322,"stem":323,"icon":324},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","4.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":326,"path":327,"stem":328,"icon":329},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","4.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":331,"path":332,"stem":333,"icon":334},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","4.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":336,"path":337,"stem":338,"icon":313},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","4.use-cases\u002F4.audit\u002F05.compliance",{"title":340,"path":341,"stem":342,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","4.use-cases\u002F4.audit\u002F06.recipes",{"title":344,"path":345,"stem":346,"icon":347},"Enrichers","\u002Fuse-cases\u002Fenrichers","4.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":349,"path":350,"stem":351,"children":352,"page":29},"Extend","\u002Fextend","5.extend",[353,357,362,367,372,376,380,384,388,393,398],{"title":36,"path":354,"stem":355,"icon":356},"\u002Fextend\u002Foverview","5.extend\u002F0.overview","i-lucide-blocks",{"title":358,"path":359,"stem":360,"icon":361},"Stream","\u002Fextend\u002Fstream","5.extend\u002F1.stream","i-lucide-radio-tower",{"title":363,"path":364,"stem":365,"icon":366},"Custom framework","\u002Fextend\u002Fcustom-framework","5.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":368,"path":369,"stem":370,"icon":371},"FS reader","\u002Fextend\u002Ffs-reader","5.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":340,"path":373,"stem":374,"icon":375},"\u002Fextend\u002Fconsumer-recipes","5.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":377,"path":378,"stem":379,"icon":356},"Plugins","\u002Fextend\u002Fplugins","5.extend\u002F4.plugins",{"title":381,"path":382,"stem":383,"icon":347},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","5.extend\u002F5.custom-enrichers",{"title":385,"path":386,"stem":387,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","5.extend\u002F6.tail-sampling",{"title":389,"path":390,"stem":391,"icon":392},"Identity headers","\u002Fextend\u002Fidentity-headers","5.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":394,"path":395,"stem":396,"icon":397},"Custom drains","\u002Fextend\u002Fcustom-drains","5.extend\u002F8.custom-drains","i-lucide-share-2",{"title":399,"path":400,"stem":401,"icon":402},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","5.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":404,"path":405,"stem":406,"children":407,"page":29},"Reference","\u002Freference","6.reference",[408,413,416,421,425,430],{"title":409,"path":410,"stem":411,"icon":412},"Configuration","\u002Freference\u002Fconfiguration","6.reference\u002F1.configuration","i-lucide-settings",{"title":307,"path":414,"stem":415,"icon":310},"\u002Freference\u002Fperformance","6.reference\u002F2.performance",{"title":417,"path":418,"stem":419,"icon":420},"Vite Plugin","\u002Freference\u002Fvite-plugin","6.reference\u002F3.vite-plugin","i-custom-vite",{"title":422,"path":423,"stem":424,"icon":313},"Best Practices","\u002Freference\u002Fbest-practices","6.reference\u002F4.best-practices",{"title":426,"path":427,"stem":428,"icon":429},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","6.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":431,"path":432,"stem":433,"icon":347},"Agent Skills","\u002Freference\u002Fagent-skills","6.reference\u002F6.agent-skills",{"id":435,"title":436,"body":437,"description":1351,"extension":1352,"links":1353,"meta":1359,"navigation":1360,"path":304,"seo":1361,"stem":305,"__hash__":1362},"docs\u002F4.use-cases\u002F3.better-auth\u002F04.client-sync.md","Client Identity Sync",{"type":438,"value":439,"toc":1345},"minimark",[440,449,454,714,717,755,759,986,993,997,1192,1199,1203,1206,1325,1341],[441,442,443,444,448],"p",{},"The middleware identifies users on the server. To get the same identity on ",[445,446,447],"strong",{},"client-side logs"," (clicks, navigation, errors caught in the browser), watch the Better Auth session and forward the user to evlog's client identity store.",[450,451,453],"h2",{"id":452},"vue-nuxt","Vue \u002F Nuxt",[455,456,462],"pre",{"className":457,"code":458,"filename":459,"language":460,"meta":461,"style":461},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { authClient } from '~\u002Flib\u002Fauth-client'\n\nexport function useAuthIdentity() {\n  const session = authClient.useSession()\n\n  watch(() => session.value?.data?.user, (user) => {\n    if (user) {\n      setIdentity({ userId: user.id, userName: user.name })\n    } else {\n      clearIdentity()\n    }\n  }, { immediate: true })\n}\n","composables\u002FuseAuthIdentity.ts","typescript","",[463,464,465,498,505,525,549,554,602,618,662,673,681,687,708],"code",{"__ignoreMap":461},[466,467,470,474,478,482,485,488,491,495],"span",{"class":468,"line":469},"line",1,[466,471,473],{"class":472},"s7zQu","import",[466,475,477],{"class":476},"sMK4o"," {",[466,479,481],{"class":480},"sTEyZ"," authClient",[466,483,484],{"class":476}," }",[466,486,487],{"class":472}," from",[466,489,490],{"class":476}," '",[466,492,494],{"class":493},"sfazB","~\u002Flib\u002Fauth-client",[466,496,497],{"class":476},"'\n",[466,499,501],{"class":468,"line":500},2,[466,502,504],{"emptyLinePlaceholder":503},true,"\n",[466,506,508,511,515,519,522],{"class":468,"line":507},3,[466,509,510],{"class":472},"export",[466,512,514],{"class":513},"spNyl"," function",[466,516,518],{"class":517},"s2Zo4"," useAuthIdentity",[466,520,521],{"class":476},"()",[466,523,524],{"class":476}," {\n",[466,526,528,531,534,537,539,542,545],{"class":468,"line":527},4,[466,529,530],{"class":513},"  const",[466,532,533],{"class":480}," session",[466,535,536],{"class":476}," =",[466,538,481],{"class":480},[466,540,541],{"class":476},".",[466,543,544],{"class":517},"useSession",[466,546,548],{"class":547},"swJcz","()\n",[466,550,552],{"class":468,"line":551},5,[466,553,504],{"emptyLinePlaceholder":503},[466,555,557,560,563,565,568,570,572,575,578,581,583,586,589,592,595,598,600],{"class":468,"line":556},6,[466,558,559],{"class":517},"  watch",[466,561,562],{"class":547},"(",[466,564,521],{"class":476},[466,566,567],{"class":513}," =>",[466,569,533],{"class":480},[466,571,541],{"class":476},[466,573,574],{"class":480},"value",[466,576,577],{"class":476},"?.",[466,579,580],{"class":480},"data",[466,582,577],{"class":476},[466,584,585],{"class":480},"user",[466,587,588],{"class":476},",",[466,590,591],{"class":476}," (",[466,593,585],{"class":594},"sHdIc",[466,596,597],{"class":476},")",[466,599,567],{"class":513},[466,601,524],{"class":476},[466,603,605,608,610,612,615],{"class":468,"line":604},7,[466,606,607],{"class":472},"    if",[466,609,591],{"class":547},[466,611,585],{"class":480},[466,613,614],{"class":547},") ",[466,616,617],{"class":476},"{\n",[466,619,621,624,626,629,632,635,638,640,643,645,648,650,652,654,657,659],{"class":468,"line":620},8,[466,622,623],{"class":517},"      setIdentity",[466,625,562],{"class":547},[466,627,628],{"class":476},"{",[466,630,631],{"class":547}," userId",[466,633,634],{"class":476},":",[466,636,637],{"class":480}," user",[466,639,541],{"class":476},[466,641,642],{"class":480},"id",[466,644,588],{"class":476},[466,646,647],{"class":547}," userName",[466,649,634],{"class":476},[466,651,637],{"class":480},[466,653,541],{"class":476},[466,655,656],{"class":480},"name",[466,658,484],{"class":476},[466,660,661],{"class":547},")\n",[466,663,665,668,671],{"class":468,"line":664},9,[466,666,667],{"class":476},"    }",[466,669,670],{"class":472}," else",[466,672,524],{"class":476},[466,674,676,679],{"class":468,"line":675},10,[466,677,678],{"class":517},"      clearIdentity",[466,680,548],{"class":547},[466,682,684],{"class":468,"line":683},11,[466,685,686],{"class":476},"    }\n",[466,688,690,693,695,698,700,704,706],{"class":468,"line":689},12,[466,691,692],{"class":476},"  },",[466,694,477],{"class":476},[466,696,697],{"class":547}," immediate",[466,699,634],{"class":476},[466,701,703],{"class":702},"sfNiH"," true",[466,705,484],{"class":476},[466,707,661],{"class":547},[466,709,711],{"class":468,"line":710},13,[466,712,713],{"class":476},"}\n",[441,715,716],{},"Call it once in your root layout:",[455,718,723],{"className":719,"code":720,"filename":721,"language":722,"meta":461,"style":461},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup>\nuseAuthIdentity()\n\u003C\u002Fscript>\n","app.vue","vue",[463,724,725,739,746],{"__ignoreMap":461},[466,726,727,730,733,736],{"class":468,"line":469},[466,728,729],{"class":476},"\u003C",[466,731,732],{"class":547},"script",[466,734,735],{"class":513}," setup",[466,737,738],{"class":476},">\n",[466,740,741,744],{"class":468,"line":500},[466,742,743],{"class":517},"useAuthIdentity",[466,745,548],{"class":480},[466,747,748,751,753],{"class":468,"line":507},[466,749,750],{"class":476},"\u003C\u002F",[466,752,732],{"class":547},[466,754,738],{"class":476},[450,756,758],{"id":757},"react","React",[455,760,765],{"className":761,"code":762,"filename":763,"language":764,"meta":461,"style":461},"language-tsx shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { useEffect } from 'react'\nimport { setIdentity, clearIdentity } from 'evlog\u002Fhttp'\nimport { authClient } from '@\u002Flib\u002Fauth-client'\n\nexport function useAuthIdentity() {\n  const { data } = authClient.useSession()\n\n  useEffect(() => {\n    if (data?.user) {\n      setIdentity({ userId: data.user.id, userName: data.user.name })\n    } else {\n      clearIdentity()\n    }\n  }, [data?.user?.id])\n}\n","hooks\u002FuseAuthIdentity.tsx","tsx",[463,766,767,786,811,830,834,846,867,871,884,900,942,950,956,960,981],{"__ignoreMap":461},[466,768,769,771,773,776,778,780,782,784],{"class":468,"line":469},[466,770,473],{"class":472},[466,772,477],{"class":476},[466,774,775],{"class":480}," useEffect",[466,777,484],{"class":476},[466,779,487],{"class":472},[466,781,490],{"class":476},[466,783,757],{"class":493},[466,785,497],{"class":476},[466,787,788,790,792,795,797,800,802,804,806,809],{"class":468,"line":500},[466,789,473],{"class":472},[466,791,477],{"class":476},[466,793,794],{"class":480}," setIdentity",[466,796,588],{"class":476},[466,798,799],{"class":480}," clearIdentity",[466,801,484],{"class":476},[466,803,487],{"class":472},[466,805,490],{"class":476},[466,807,808],{"class":493},"evlog\u002Fhttp",[466,810,497],{"class":476},[466,812,813,815,817,819,821,823,825,828],{"class":468,"line":507},[466,814,473],{"class":472},[466,816,477],{"class":476},[466,818,481],{"class":480},[466,820,484],{"class":476},[466,822,487],{"class":472},[466,824,490],{"class":476},[466,826,827],{"class":493},"@\u002Flib\u002Fauth-client",[466,829,497],{"class":476},[466,831,832],{"class":468,"line":527},[466,833,504],{"emptyLinePlaceholder":503},[466,835,836,838,840,842,844],{"class":468,"line":551},[466,837,510],{"class":472},[466,839,514],{"class":513},[466,841,518],{"class":517},[466,843,521],{"class":476},[466,845,524],{"class":476},[466,847,848,850,852,855,857,859,861,863,865],{"class":468,"line":556},[466,849,530],{"class":513},[466,851,477],{"class":476},[466,853,854],{"class":480}," data",[466,856,484],{"class":476},[466,858,536],{"class":476},[466,860,481],{"class":480},[466,862,541],{"class":476},[466,864,544],{"class":517},[466,866,548],{"class":547},[466,868,869],{"class":468,"line":604},[466,870,504],{"emptyLinePlaceholder":503},[466,872,873,876,878,880,882],{"class":468,"line":620},[466,874,875],{"class":517},"  useEffect",[466,877,562],{"class":547},[466,879,521],{"class":476},[466,881,567],{"class":513},[466,883,524],{"class":476},[466,885,886,888,890,892,894,896,898],{"class":468,"line":664},[466,887,607],{"class":472},[466,889,591],{"class":547},[466,891,580],{"class":480},[466,893,577],{"class":476},[466,895,585],{"class":480},[466,897,614],{"class":547},[466,899,617],{"class":476},[466,901,902,904,906,908,910,912,914,916,918,920,922,924,926,928,930,932,934,936,938,940],{"class":468,"line":675},[466,903,623],{"class":517},[466,905,562],{"class":547},[466,907,628],{"class":476},[466,909,631],{"class":547},[466,911,634],{"class":476},[466,913,854],{"class":480},[466,915,541],{"class":476},[466,917,585],{"class":480},[466,919,541],{"class":476},[466,921,642],{"class":480},[466,923,588],{"class":476},[466,925,647],{"class":547},[466,927,634],{"class":476},[466,929,854],{"class":480},[466,931,541],{"class":476},[466,933,585],{"class":480},[466,935,541],{"class":476},[466,937,656],{"class":480},[466,939,484],{"class":476},[466,941,661],{"class":547},[466,943,944,946,948],{"class":468,"line":683},[466,945,667],{"class":476},[466,947,670],{"class":472},[466,949,524],{"class":476},[466,951,952,954],{"class":468,"line":689},[466,953,678],{"class":517},[466,955,548],{"class":547},[466,957,958],{"class":468,"line":710},[466,959,686],{"class":476},[466,961,963,965,968,970,972,974,976,978],{"class":468,"line":962},14,[466,964,692],{"class":476},[466,966,967],{"class":547}," [",[466,969,580],{"class":480},[466,971,577],{"class":476},[466,973,585],{"class":480},[466,975,577],{"class":476},[466,977,642],{"class":480},[466,979,980],{"class":547},"])\n",[466,982,984],{"class":468,"line":983},15,[466,985,713],{"class":476},[441,987,988,989,992],{},"Wire it up at the root of your app (in ",[463,990,991],{},"_app.tsx",", the root layout, or a top-level provider).",[450,994,996],{"id":995},"svelte","Svelte",[455,998,1001],{"className":457,"code":999,"filename":1000,"language":460,"meta":461,"style":461},"import { setIdentity, clearIdentity } from 'evlog\u002Fhttp'\nimport { authClient } from '$lib\u002Fauth-client'\n\nexport function setupAuthIdentity() {\n  const session = authClient.useSession()\n\n  session.subscribe(({ data }) => {\n    if (data?.user) {\n      setIdentity({ userId: data.user.id, userName: data.user.name })\n    } else {\n      clearIdentity()\n    }\n  })\n}\n","src\u002Flib\u002Fauth-identity.ts",[463,1002,1003,1025,1044,1048,1061,1077,1081,1105,1121,1163,1171,1177,1181,1188],{"__ignoreMap":461},[466,1004,1005,1007,1009,1011,1013,1015,1017,1019,1021,1023],{"class":468,"line":469},[466,1006,473],{"class":472},[466,1008,477],{"class":476},[466,1010,794],{"class":480},[466,1012,588],{"class":476},[466,1014,799],{"class":480},[466,1016,484],{"class":476},[466,1018,487],{"class":472},[466,1020,490],{"class":476},[466,1022,808],{"class":493},[466,1024,497],{"class":476},[466,1026,1027,1029,1031,1033,1035,1037,1039,1042],{"class":468,"line":500},[466,1028,473],{"class":472},[466,1030,477],{"class":476},[466,1032,481],{"class":480},[466,1034,484],{"class":476},[466,1036,487],{"class":472},[466,1038,490],{"class":476},[466,1040,1041],{"class":493},"$lib\u002Fauth-client",[466,1043,497],{"class":476},[466,1045,1046],{"class":468,"line":507},[466,1047,504],{"emptyLinePlaceholder":503},[466,1049,1050,1052,1054,1057,1059],{"class":468,"line":527},[466,1051,510],{"class":472},[466,1053,514],{"class":513},[466,1055,1056],{"class":517}," setupAuthIdentity",[466,1058,521],{"class":476},[466,1060,524],{"class":476},[466,1062,1063,1065,1067,1069,1071,1073,1075],{"class":468,"line":551},[466,1064,530],{"class":513},[466,1066,533],{"class":480},[466,1068,536],{"class":476},[466,1070,481],{"class":480},[466,1072,541],{"class":476},[466,1074,544],{"class":517},[466,1076,548],{"class":547},[466,1078,1079],{"class":468,"line":556},[466,1080,504],{"emptyLinePlaceholder":503},[466,1082,1083,1086,1088,1091,1093,1096,1098,1101,1103],{"class":468,"line":604},[466,1084,1085],{"class":480},"  session",[466,1087,541],{"class":476},[466,1089,1090],{"class":517},"subscribe",[466,1092,562],{"class":547},[466,1094,1095],{"class":476},"({",[466,1097,854],{"class":594},[466,1099,1100],{"class":476}," })",[466,1102,567],{"class":513},[466,1104,524],{"class":476},[466,1106,1107,1109,1111,1113,1115,1117,1119],{"class":468,"line":620},[466,1108,607],{"class":472},[466,1110,591],{"class":547},[466,1112,580],{"class":480},[466,1114,577],{"class":476},[466,1116,585],{"class":480},[466,1118,614],{"class":547},[466,1120,617],{"class":476},[466,1122,1123,1125,1127,1129,1131,1133,1135,1137,1139,1141,1143,1145,1147,1149,1151,1153,1155,1157,1159,1161],{"class":468,"line":664},[466,1124,623],{"class":517},[466,1126,562],{"class":547},[466,1128,628],{"class":476},[466,1130,631],{"class":547},[466,1132,634],{"class":476},[466,1134,854],{"class":480},[466,1136,541],{"class":476},[466,1138,585],{"class":480},[466,1140,541],{"class":476},[466,1142,642],{"class":480},[466,1144,588],{"class":476},[466,1146,647],{"class":547},[466,1148,634],{"class":476},[466,1150,854],{"class":480},[466,1152,541],{"class":476},[466,1154,585],{"class":480},[466,1156,541],{"class":476},[466,1158,656],{"class":480},[466,1160,484],{"class":476},[466,1162,661],{"class":547},[466,1164,1165,1167,1169],{"class":468,"line":675},[466,1166,667],{"class":476},[466,1168,670],{"class":472},[466,1170,524],{"class":476},[466,1172,1173,1175],{"class":468,"line":683},[466,1174,678],{"class":517},[466,1176,548],{"class":547},[466,1178,1179],{"class":468,"line":689},[466,1180,686],{"class":476},[466,1182,1183,1186],{"class":468,"line":710},[466,1184,1185],{"class":476},"  }",[466,1187,661],{"class":547},[466,1189,1190],{"class":468,"line":962},[466,1191,713],{"class":476},[441,1193,1194,1195,1198],{},"Run ",[463,1196,1197],{},"setupAuthIdentity()"," once when the app boots.",[450,1200,1202],{"id":1201},"output","Output",[441,1204,1205],{},"Client-side logs now include the user identity:",[455,1207,1212],{"className":1208,"code":1209,"filename":1210,"language":1211,"meta":461,"style":461},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"level\": \"info\",\n  \"tag\": \"checkout\",\n  \"message\": \"User clicked checkout\",\n  \"userId\": \"QBX9tPjJQExWawAbNll75\",\n  \"userName\": \"Hugo Richard\"\n}\n","Client Log","json",[463,1213,1214,1218,1242,1262,1282,1302,1321],{"__ignoreMap":461},[466,1215,1216],{"class":468,"line":469},[466,1217,617],{"class":476},[466,1219,1220,1223,1226,1229,1231,1234,1237,1239],{"class":468,"line":500},[466,1221,1222],{"class":476},"  \"",[466,1224,1225],{"class":513},"level",[466,1227,1228],{"class":476},"\"",[466,1230,634],{"class":476},[466,1232,1233],{"class":476}," \"",[466,1235,1236],{"class":493},"info",[466,1238,1228],{"class":476},[466,1240,1241],{"class":476},",\n",[466,1243,1244,1246,1249,1251,1253,1255,1258,1260],{"class":468,"line":507},[466,1245,1222],{"class":476},[466,1247,1248],{"class":513},"tag",[466,1250,1228],{"class":476},[466,1252,634],{"class":476},[466,1254,1233],{"class":476},[466,1256,1257],{"class":493},"checkout",[466,1259,1228],{"class":476},[466,1261,1241],{"class":476},[466,1263,1264,1266,1269,1271,1273,1275,1278,1280],{"class":468,"line":527},[466,1265,1222],{"class":476},[466,1267,1268],{"class":513},"message",[466,1270,1228],{"class":476},[466,1272,634],{"class":476},[466,1274,1233],{"class":476},[466,1276,1277],{"class":493},"User clicked checkout",[466,1279,1228],{"class":476},[466,1281,1241],{"class":476},[466,1283,1284,1286,1289,1291,1293,1295,1298,1300],{"class":468,"line":551},[466,1285,1222],{"class":476},[466,1287,1288],{"class":513},"userId",[466,1290,1228],{"class":476},[466,1292,634],{"class":476},[466,1294,1233],{"class":476},[466,1296,1297],{"class":493},"QBX9tPjJQExWawAbNll75",[466,1299,1228],{"class":476},[466,1301,1241],{"class":476},[466,1303,1304,1306,1309,1311,1313,1315,1318],{"class":468,"line":556},[466,1305,1222],{"class":476},[466,1307,1308],{"class":513},"userName",[466,1310,1228],{"class":476},[466,1312,634],{"class":476},[466,1314,1233],{"class":476},[466,1316,1317],{"class":493},"Hugo Richard",[466,1319,1320],{"class":476},"\"\n",[466,1322,1323],{"class":468,"line":604},[466,1324,713],{"class":476},[1326,1327,1328,1331,1332,1336,1337,1340],"tip",{},[463,1329,1330],{},"setIdentity"," is part of evlog's ",[1333,1334,1335],"a",{"href":251},"client logging"," layer. The same fields are picked up by the HTTP transport when client logs are forwarded to your server, so a single user shows up identified across browser ",[445,1338,1339],{},"and"," API logs.",[1342,1343,1344],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .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 .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);}",{"title":461,"searchDepth":500,"depth":500,"links":1346},[1347,1348,1349,1350],{"id":452,"depth":500,"text":453},{"id":757,"depth":500,"text":758},{"id":995,"depth":500,"text":996},{"id":1201,"depth":500,"text":1202},"Mirror the server-side user identity into client-side logs by watching the Better Auth session and calling setIdentity.","md",[1354,1357],{"label":36,"icon":39,"to":290,"color":1355,"variant":1356},"neutral","subtle",{"label":250,"icon":1358,"to":251,"color":1355,"variant":1356},"i-lucide-monitor-dot",{},{"title":303,"icon":253},{"title":436,"description":1351},"sJEJlejAja_J96L8yvmIttC_iI0gol_zZ55GYdBMqBw",[1364,1366],{"title":298,"path":299,"stem":300,"description":1365,"icon":301,"children":-1},"Framework-agnostic factory with route filtering, session timing, and lifecycle hooks. Call it once at startup and reuse across requests.",{"title":307,"path":308,"stem":309,"description":1367,"icon":310,"children":-1},"Watch session resolution time, enable session caching, wire the standalone Nitro hook, and combine with the AI SDK integration.",1778446112578]