@better-auth-ui/react 1.6.3 → 1.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (346) hide show
  1. package/dist/components/auth/auth-provider.d.ts +23 -8
  2. package/dist/components/auth/auth-provider.js +32 -17
  3. package/dist/components/{email → auth/email}/email-changed.js +2 -2
  4. package/dist/components/{email → auth/email}/email-localization.js +1 -1
  5. package/dist/components/{email → auth/email}/email-styles.js +1 -1
  6. package/dist/components/{email → auth/email}/email-verification.js +2 -2
  7. package/dist/components/{email → auth/email}/magic-link.js +2 -2
  8. package/dist/components/{email → auth/email}/new-device.js +2 -2
  9. package/dist/components/{email → auth/email}/otp-email.js +2 -2
  10. package/dist/components/{email → auth/email}/password-changed.js +2 -2
  11. package/dist/components/{email → auth/email}/reset-password.js +2 -2
  12. package/dist/email.d.ts +1 -0
  13. package/dist/email.js +11 -0
  14. package/dist/hooks/auth/use-authenticate.d.ts +5 -28
  15. package/dist/hooks/auth/use-authenticate.js +12 -12
  16. package/dist/hooks/auth/use-user.d.ts +19 -314
  17. package/dist/hooks/auth/use-user.js +5 -5
  18. package/dist/hooks/use-auth-mutation.d.ts +12 -7
  19. package/dist/hooks/use-auth-plugin.d.ts +31 -0
  20. package/dist/hooks/use-auth-plugin.js +10 -0
  21. package/dist/hooks/use-auth-query.d.ts +3 -3
  22. package/dist/index.d.ts +33 -32
  23. package/dist/index.js +74 -83
  24. package/dist/lib/auth-client.d.ts +23 -3687
  25. package/dist/lib/auth-plugin.d.ts +59 -0
  26. package/dist/lib/auth-server.d.ts +16 -0
  27. package/dist/mutations/auth/request-password-reset-mutation.d.ts +26 -0
  28. package/dist/mutations/auth/request-password-reset-mutation.js +24 -0
  29. package/dist/mutations/auth/reset-password-mutation.d.ts +25 -0
  30. package/dist/mutations/auth/reset-password-mutation.js +24 -0
  31. package/dist/mutations/auth/send-verification-email-mutation.d.ts +24 -0
  32. package/dist/mutations/auth/send-verification-email-mutation.js +24 -0
  33. package/dist/mutations/auth/sign-in-email-mutation.d.ts +71 -0
  34. package/dist/mutations/auth/sign-in-email-mutation.js +29 -0
  35. package/dist/mutations/auth/sign-in-social-mutation.d.ts +77 -0
  36. package/dist/mutations/auth/sign-in-social-mutation.js +24 -0
  37. package/dist/mutations/auth/sign-out-mutation.d.ts +25 -0
  38. package/dist/mutations/auth/sign-out-mutation.js +28 -0
  39. package/dist/mutations/auth/sign-up-email-mutation.d.ts +105 -0
  40. package/dist/mutations/auth/sign-up-email-mutation.js +29 -0
  41. package/dist/mutations/auth-mutation-options.d.ts +37 -20
  42. package/dist/mutations/auth-mutation-options.js +2 -2
  43. package/dist/mutations/magic-link/sign-in-magic-link-mutation.d.ts +24 -0
  44. package/dist/mutations/magic-link/sign-in-magic-link-mutation.js +24 -0
  45. package/dist/mutations/multi-session/revoke-multi-session-mutation.d.ts +25 -0
  46. package/dist/mutations/multi-session/revoke-multi-session-mutation.js +29 -0
  47. package/dist/mutations/multi-session/set-active-session-mutation.d.ts +62 -0
  48. package/dist/mutations/multi-session/set-active-session-mutation.js +31 -0
  49. package/dist/mutations/passkey/add-passkey-mutation.d.ts +71 -0
  50. package/dist/mutations/passkey/add-passkey-mutation.js +29 -0
  51. package/dist/mutations/passkey/delete-passkey-mutation.d.ts +25 -0
  52. package/dist/mutations/passkey/delete-passkey-mutation.js +29 -0
  53. package/dist/mutations/passkey/sign-in-passkey-mutation.d.ts +105 -0
  54. package/dist/mutations/passkey/sign-in-passkey-mutation.js +29 -0
  55. package/dist/mutations/settings/change-email-mutation.d.ts +25 -0
  56. package/dist/mutations/settings/change-email-mutation.js +29 -0
  57. package/dist/mutations/settings/change-password-mutation.d.ts +78 -0
  58. package/dist/mutations/settings/change-password-mutation.js +24 -0
  59. package/dist/mutations/settings/delete-user-mutation.d.ts +26 -0
  60. package/dist/mutations/settings/delete-user-mutation.js +24 -0
  61. package/dist/mutations/settings/link-social-mutation.d.ts +26 -0
  62. package/dist/mutations/settings/link-social-mutation.js +24 -0
  63. package/dist/mutations/settings/revoke-session-mutation.d.ts +25 -0
  64. package/dist/mutations/settings/revoke-session-mutation.js +29 -0
  65. package/dist/mutations/settings/unlink-account-mutation.d.ts +25 -0
  66. package/dist/mutations/settings/unlink-account-mutation.js +29 -0
  67. package/dist/mutations/settings/update-user-mutation.d.ts +25 -0
  68. package/dist/mutations/settings/update-user-mutation.js +35 -0
  69. package/dist/mutations/username/is-username-available-mutation.d.ts +27 -0
  70. package/dist/mutations/username/is-username-available-mutation.js +24 -0
  71. package/dist/mutations/username/sign-in-username-mutation.d.ts +75 -0
  72. package/dist/mutations/username/sign-in-username-mutation.js +29 -0
  73. package/dist/queries/auth/session-query.d.ts +71 -0
  74. package/dist/queries/auth/session-query.js +30 -0
  75. package/dist/queries/auth-query-options.d.ts +26 -15
  76. package/dist/queries/multi-session/list-device-sessions-query.d.ts +76 -0
  77. package/dist/queries/multi-session/list-device-sessions-query.js +31 -0
  78. package/dist/queries/passkey/list-passkeys-query.d.ts +74 -0
  79. package/dist/queries/passkey/list-passkeys-query.js +31 -0
  80. package/dist/queries/settings/account-info-query.d.ts +85 -0
  81. package/dist/queries/settings/account-info-query.js +31 -0
  82. package/dist/queries/settings/list-accounts-query.d.ts +76 -0
  83. package/dist/queries/settings/list-accounts-query.js +31 -0
  84. package/dist/queries/settings/list-sessions-query.d.ts +74 -0
  85. package/dist/queries/settings/list-sessions-query.js +31 -0
  86. package/dist/server/queries/auth/session-query.d.ts +57 -0
  87. package/dist/server/queries/auth/session-query.js +13 -0
  88. package/dist/server/queries/multi-session/list-device-sessions-query.d.ts +60 -0
  89. package/dist/server/queries/multi-session/list-device-sessions-query.js +12 -0
  90. package/dist/server/queries/passkey/list-passkeys-query.d.ts +60 -0
  91. package/dist/server/queries/passkey/list-passkeys-query.js +12 -0
  92. package/dist/server/queries/settings/account-info-query.d.ts +68 -0
  93. package/dist/server/queries/settings/account-info-query.js +12 -0
  94. package/dist/server/queries/settings/list-accounts-query.d.ts +60 -0
  95. package/dist/server/queries/settings/list-accounts-query.js +12 -0
  96. package/dist/server/queries/settings/list-sessions-query.d.ts +60 -0
  97. package/dist/server/queries/settings/list-sessions-query.js +12 -0
  98. package/dist/server.d.ts +7 -0
  99. package/dist/server.js +7 -0
  100. package/package.json +24 -22
  101. package/src/components/auth/auth-provider.tsx +87 -24
  102. package/src/components/{email → auth/email}/email-changed.tsx +1 -1
  103. package/src/components/{email → auth/email}/email-verification.tsx +1 -1
  104. package/src/components/{email → auth/email}/magic-link.tsx +1 -1
  105. package/src/components/{email → auth/email}/new-device.tsx +1 -1
  106. package/src/components/{email → auth/email}/otp-email.tsx +1 -1
  107. package/src/components/{email → auth/email}/password-changed.tsx +1 -1
  108. package/src/components/{email → auth/email}/reset-password.tsx +1 -1
  109. package/src/email.ts +1 -0
  110. package/src/hooks/auth/use-authenticate.ts +12 -6
  111. package/src/hooks/auth/use-user.ts +14 -9
  112. package/src/hooks/use-auth-mutation.ts +30 -12
  113. package/src/hooks/use-auth-plugin.ts +50 -0
  114. package/src/hooks/use-auth-query.ts +11 -7
  115. package/src/index.ts +33 -32
  116. package/src/lib/auth-client.ts +33 -31
  117. package/src/lib/auth-plugin.ts +75 -0
  118. package/src/lib/auth-server.ts +30 -0
  119. package/src/mutations/auth/request-password-reset-mutation.ts +58 -0
  120. package/src/mutations/auth/reset-password-mutation.ts +60 -0
  121. package/src/mutations/auth/send-verification-email-mutation.ts +58 -0
  122. package/src/mutations/auth/sign-in-email-mutation.ts +78 -0
  123. package/src/mutations/auth/sign-in-social-mutation.ts +64 -0
  124. package/src/mutations/auth/sign-out-mutation.ts +71 -0
  125. package/src/mutations/auth/sign-up-email-mutation.ts +74 -0
  126. package/src/mutations/auth-mutation-options.ts +83 -38
  127. package/src/mutations/magic-link/sign-in-magic-link-mutation.ts +59 -0
  128. package/src/mutations/multi-session/revoke-multi-session-mutation.ts +70 -0
  129. package/src/mutations/multi-session/set-active-session-mutation.ts +98 -0
  130. package/src/mutations/passkey/add-passkey-mutation.ts +66 -0
  131. package/src/mutations/passkey/delete-passkey-mutation.ts +66 -0
  132. package/src/mutations/passkey/sign-in-passkey-mutation.ts +74 -0
  133. package/src/mutations/settings/change-email-mutation.ts +67 -0
  134. package/src/mutations/settings/change-password-mutation.ts +59 -0
  135. package/src/mutations/settings/delete-user-mutation.ts +59 -0
  136. package/src/mutations/settings/link-social-mutation.ts +59 -0
  137. package/src/mutations/settings/revoke-session-mutation.ts +69 -0
  138. package/src/mutations/settings/unlink-account-mutation.ts +67 -0
  139. package/src/mutations/settings/update-user-mutation.ts +82 -0
  140. package/src/mutations/username/is-username-available-mutation.ts +62 -0
  141. package/src/mutations/username/sign-in-username-mutation.ts +74 -0
  142. package/src/queries/auth/session-query.ts +135 -0
  143. package/src/queries/auth-query-options.ts +61 -12
  144. package/src/queries/multi-session/list-device-sessions-query.ts +177 -0
  145. package/src/queries/passkey/list-passkeys-query.ts +154 -0
  146. package/src/queries/settings/account-info-query.ts +158 -0
  147. package/src/queries/settings/list-accounts-query.ts +156 -0
  148. package/src/queries/settings/list-sessions-query.ts +154 -0
  149. package/src/server/queries/auth/session-query.ts +94 -0
  150. package/src/server/queries/multi-session/list-device-sessions-query.ts +102 -0
  151. package/src/server/queries/passkey/list-passkeys-query.ts +100 -0
  152. package/src/server/queries/settings/account-info-query.ts +101 -0
  153. package/src/server/queries/settings/list-accounts-query.ts +101 -0
  154. package/src/server/queries/settings/list-sessions-query.ts +101 -0
  155. package/src/server.ts +7 -0
  156. package/dist/core.d.ts +0 -1
  157. package/dist/core.js +0 -1
  158. package/dist/hooks/auth/use-is-username-available.d.ts +0 -20
  159. package/dist/hooks/auth/use-is-username-available.js +0 -13
  160. package/dist/hooks/auth/use-request-password-reset.d.ts +0 -21
  161. package/dist/hooks/auth/use-request-password-reset.js +0 -13
  162. package/dist/hooks/auth/use-reset-password.d.ts +0 -23
  163. package/dist/hooks/auth/use-reset-password.js +0 -13
  164. package/dist/hooks/auth/use-send-verification-email.d.ts +0 -19
  165. package/dist/hooks/auth/use-send-verification-email.js +0 -13
  166. package/dist/hooks/auth/use-session.d.ts +0 -35
  167. package/dist/hooks/auth/use-session.js +0 -16
  168. package/dist/hooks/auth/use-sign-in-email.d.ts +0 -26
  169. package/dist/hooks/auth/use-sign-in-email.js +0 -17
  170. package/dist/hooks/auth/use-sign-in-magic-link.d.ts +0 -27
  171. package/dist/hooks/auth/use-sign-in-magic-link.js +0 -13
  172. package/dist/hooks/auth/use-sign-in-passkey.d.ts +0 -21
  173. package/dist/hooks/auth/use-sign-in-passkey.js +0 -17
  174. package/dist/hooks/auth/use-sign-in-social.d.ts +0 -63
  175. package/dist/hooks/auth/use-sign-in-social.js +0 -13
  176. package/dist/hooks/auth/use-sign-in-username.d.ts +0 -25
  177. package/dist/hooks/auth/use-sign-in-username.js +0 -17
  178. package/dist/hooks/auth/use-sign-out.d.ts +0 -18
  179. package/dist/hooks/auth/use-sign-out.js +0 -16
  180. package/dist/hooks/auth/use-sign-up-email.d.ts +0 -1186
  181. package/dist/hooks/auth/use-sign-up-email.js +0 -17
  182. package/dist/hooks/settings/use-account-info.d.ts +0 -17
  183. package/dist/hooks/settings/use-account-info.js +0 -18
  184. package/dist/hooks/settings/use-add-passkey.d.ts +0 -21
  185. package/dist/hooks/settings/use-add-passkey.js +0 -17
  186. package/dist/hooks/settings/use-change-email.d.ts +0 -21
  187. package/dist/hooks/settings/use-change-email.js +0 -17
  188. package/dist/hooks/settings/use-change-password.d.ts +0 -21
  189. package/dist/hooks/settings/use-change-password.js +0 -13
  190. package/dist/hooks/settings/use-delete-passkey.d.ts +0 -19
  191. package/dist/hooks/settings/use-delete-passkey.js +0 -17
  192. package/dist/hooks/settings/use-delete-user.d.ts +0 -24
  193. package/dist/hooks/settings/use-delete-user.js +0 -13
  194. package/dist/hooks/settings/use-link-social.d.ts +0 -43
  195. package/dist/hooks/settings/use-link-social.js +0 -13
  196. package/dist/hooks/settings/use-list-accounts.d.ts +0 -22
  197. package/dist/hooks/settings/use-list-accounts.js +0 -15
  198. package/dist/hooks/settings/use-list-device-sessions.d.ts +0 -34
  199. package/dist/hooks/settings/use-list-device-sessions.js +0 -15
  200. package/dist/hooks/settings/use-list-sessions.d.ts +0 -23
  201. package/dist/hooks/settings/use-list-sessions.js +0 -15
  202. package/dist/hooks/settings/use-list-user-passkeys.d.ts +0 -14
  203. package/dist/hooks/settings/use-list-user-passkeys.js +0 -15
  204. package/dist/hooks/settings/use-revoke-multi-session.d.ts +0 -19
  205. package/dist/hooks/settings/use-revoke-multi-session.js +0 -17
  206. package/dist/hooks/settings/use-revoke-session.d.ts +0 -19
  207. package/dist/hooks/settings/use-revoke-session.js +0 -17
  208. package/dist/hooks/settings/use-set-active-session.d.ts +0 -20
  209. package/dist/hooks/settings/use-set-active-session.js +0 -20
  210. package/dist/hooks/settings/use-unlink-account.d.ts +0 -21
  211. package/dist/hooks/settings/use-unlink-account.js +0 -17
  212. package/dist/hooks/settings/use-update-user.d.ts +0 -1185
  213. package/dist/hooks/settings/use-update-user.js +0 -24
  214. package/dist/lib/auth-client.js +0 -11
  215. package/dist/lib/auth-config.d.ts +0 -43
  216. package/dist/lib/auth-context.d.ts +0 -2
  217. package/dist/lib/auth-context.js +0 -6
  218. package/dist/mutations/auth/is-username-available-options.d.ts +0 -19
  219. package/dist/mutations/auth/is-username-available-options.js +0 -7
  220. package/dist/mutations/auth/request-password-reset-options.d.ts +0 -15
  221. package/dist/mutations/auth/request-password-reset-options.js +0 -7
  222. package/dist/mutations/auth/reset-password-options.d.ts +0 -17
  223. package/dist/mutations/auth/reset-password-options.js +0 -7
  224. package/dist/mutations/auth/send-verification-email-options.d.ts +0 -15
  225. package/dist/mutations/auth/send-verification-email-options.js +0 -7
  226. package/dist/mutations/auth/sign-in-email-options.d.ts +0 -23
  227. package/dist/mutations/auth/sign-in-email-options.js +0 -11
  228. package/dist/mutations/auth/sign-in-magic-link-options.d.ts +0 -23
  229. package/dist/mutations/auth/sign-in-magic-link-options.js +0 -11
  230. package/dist/mutations/auth/sign-in-passkey-options.d.ts +0 -15
  231. package/dist/mutations/auth/sign-in-passkey-options.js +0 -11
  232. package/dist/mutations/auth/sign-in-social-options.d.ts +0 -61
  233. package/dist/mutations/auth/sign-in-social-options.js +0 -11
  234. package/dist/mutations/auth/sign-in-username-options.d.ts +0 -19
  235. package/dist/mutations/auth/sign-in-username-options.js +0 -11
  236. package/dist/mutations/auth/sign-out-options.d.ts +0 -12
  237. package/dist/mutations/auth/sign-out-options.js +0 -7
  238. package/dist/mutations/auth/sign-up-email-options.d.ts +0 -1180
  239. package/dist/mutations/auth/sign-up-email-options.js +0 -11
  240. package/dist/mutations/settings/add-passkey-options.d.ts +0 -15
  241. package/dist/mutations/settings/add-passkey-options.js +0 -11
  242. package/dist/mutations/settings/change-email-options.d.ts +0 -15
  243. package/dist/mutations/settings/change-email-options.js +0 -7
  244. package/dist/mutations/settings/change-password-options.d.ts +0 -17
  245. package/dist/mutations/settings/change-password-options.js +0 -7
  246. package/dist/mutations/settings/delete-passkey-options.d.ts +0 -13
  247. package/dist/mutations/settings/delete-passkey-options.js +0 -11
  248. package/dist/mutations/settings/delete-user-options.d.ts +0 -20
  249. package/dist/mutations/settings/delete-user-options.js +0 -7
  250. package/dist/mutations/settings/link-social-options.d.ts +0 -39
  251. package/dist/mutations/settings/link-social-options.js +0 -7
  252. package/dist/mutations/settings/revoke-multi-session-options.d.ts +0 -13
  253. package/dist/mutations/settings/revoke-multi-session-options.js +0 -11
  254. package/dist/mutations/settings/revoke-session-options.d.ts +0 -13
  255. package/dist/mutations/settings/revoke-session-options.js +0 -7
  256. package/dist/mutations/settings/set-active-session-options.d.ts +0 -13
  257. package/dist/mutations/settings/set-active-session-options.js +0 -11
  258. package/dist/mutations/settings/unlink-account-options.d.ts +0 -15
  259. package/dist/mutations/settings/unlink-account-options.js +0 -7
  260. package/dist/mutations/settings/update-user-options.d.ts +0 -1182
  261. package/dist/mutations/settings/update-user-options.js +0 -7
  262. package/dist/queries/auth/session-options.d.ts +0 -110
  263. package/dist/queries/auth/session-options.js +0 -7
  264. package/dist/queries/settings/account-info-options.d.ts +0 -32
  265. package/dist/queries/settings/account-info-options.js +0 -12
  266. package/dist/queries/settings/list-accounts-options.d.ts +0 -53
  267. package/dist/queries/settings/list-accounts-options.js +0 -12
  268. package/dist/queries/settings/list-device-sessions-options.d.ts +0 -99
  269. package/dist/queries/settings/list-device-sessions-options.js +0 -12
  270. package/dist/queries/settings/list-sessions-options.d.ts +0 -54
  271. package/dist/queries/settings/list-sessions-options.js +0 -12
  272. package/dist/queries/settings/list-user-passkeys-options.d.ts +0 -18
  273. package/dist/queries/settings/list-user-passkeys-options.js +0 -12
  274. package/src/core.ts +0 -1
  275. package/src/hooks/auth/use-is-username-available.ts +0 -31
  276. package/src/hooks/auth/use-request-password-reset.ts +0 -33
  277. package/src/hooks/auth/use-reset-password.ts +0 -31
  278. package/src/hooks/auth/use-send-verification-email.ts +0 -31
  279. package/src/hooks/auth/use-session.ts +0 -31
  280. package/src/hooks/auth/use-sign-in-email.ts +0 -41
  281. package/src/hooks/auth/use-sign-in-magic-link.ts +0 -29
  282. package/src/hooks/auth/use-sign-in-passkey.ts +0 -40
  283. package/src/hooks/auth/use-sign-in-social.ts +0 -31
  284. package/src/hooks/auth/use-sign-in-username.ts +0 -40
  285. package/src/hooks/auth/use-sign-out.ts +0 -34
  286. package/src/hooks/auth/use-sign-up-email.ts +0 -40
  287. package/src/hooks/settings/use-account-info.ts +0 -40
  288. package/src/hooks/settings/use-add-passkey.ts +0 -37
  289. package/src/hooks/settings/use-change-email.ts +0 -37
  290. package/src/hooks/settings/use-change-password.ts +0 -29
  291. package/src/hooks/settings/use-delete-passkey.ts +0 -37
  292. package/src/hooks/settings/use-delete-user.ts +0 -29
  293. package/src/hooks/settings/use-link-social.ts +0 -29
  294. package/src/hooks/settings/use-list-accounts.ts +0 -39
  295. package/src/hooks/settings/use-list-device-sessions.ts +0 -39
  296. package/src/hooks/settings/use-list-sessions.ts +0 -39
  297. package/src/hooks/settings/use-list-user-passkeys.ts +0 -39
  298. package/src/hooks/settings/use-revoke-multi-session.ts +0 -39
  299. package/src/hooks/settings/use-revoke-session.ts +0 -39
  300. package/src/hooks/settings/use-set-active-session.ts +0 -58
  301. package/src/hooks/settings/use-unlink-account.ts +0 -37
  302. package/src/hooks/settings/use-update-user.ts +0 -50
  303. package/src/lib/auth-config.ts +0 -48
  304. package/src/lib/auth-context.ts +0 -6
  305. package/src/mutations/auth/is-username-available-options.ts +0 -18
  306. package/src/mutations/auth/request-password-reset-options.ts +0 -14
  307. package/src/mutations/auth/reset-password-options.ts +0 -14
  308. package/src/mutations/auth/send-verification-email-options.ts +0 -14
  309. package/src/mutations/auth/sign-in-email-options.ts +0 -19
  310. package/src/mutations/auth/sign-in-magic-link-options.ts +0 -15
  311. package/src/mutations/auth/sign-in-passkey-options.ts +0 -15
  312. package/src/mutations/auth/sign-in-social-options.ts +0 -19
  313. package/src/mutations/auth/sign-in-username-options.ts +0 -15
  314. package/src/mutations/auth/sign-out-options.ts +0 -11
  315. package/src/mutations/auth/sign-up-email-options.ts +0 -15
  316. package/src/mutations/settings/add-passkey-options.ts +0 -15
  317. package/src/mutations/settings/change-email-options.ts +0 -11
  318. package/src/mutations/settings/change-password-options.ts +0 -14
  319. package/src/mutations/settings/delete-passkey-options.ts +0 -15
  320. package/src/mutations/settings/delete-user-options.ts +0 -11
  321. package/src/mutations/settings/link-social-options.ts +0 -11
  322. package/src/mutations/settings/revoke-multi-session-options.ts +0 -15
  323. package/src/mutations/settings/revoke-session-options.ts +0 -14
  324. package/src/mutations/settings/set-active-session-options.ts +0 -15
  325. package/src/mutations/settings/unlink-account-options.ts +0 -14
  326. package/src/mutations/settings/update-user-options.ts +0 -15
  327. package/src/queries/auth/session-options.ts +0 -18
  328. package/src/queries/settings/account-info-options.ts +0 -25
  329. package/src/queries/settings/list-accounts-options.ts +0 -26
  330. package/src/queries/settings/list-device-sessions-options.ts +0 -24
  331. package/src/queries/settings/list-sessions-options.ts +0 -23
  332. package/src/queries/settings/list-user-passkeys-options.ts +0 -23
  333. /package/dist/components/{email → auth/email}/email-changed.d.ts +0 -0
  334. /package/dist/components/{email → auth/email}/email-localization.d.ts +0 -0
  335. /package/dist/components/{email → auth/email}/email-styles.d.ts +0 -0
  336. /package/dist/components/{email → auth/email}/email-verification.d.ts +0 -0
  337. /package/dist/components/{email → auth/email}/index.d.ts +0 -0
  338. /package/dist/components/{email → auth/email}/index.js +0 -0
  339. /package/dist/components/{email → auth/email}/magic-link.d.ts +0 -0
  340. /package/dist/components/{email → auth/email}/new-device.d.ts +0 -0
  341. /package/dist/components/{email → auth/email}/otp-email.d.ts +0 -0
  342. /package/dist/components/{email → auth/email}/password-changed.d.ts +0 -0
  343. /package/dist/components/{email → auth/email}/reset-password.d.ts +0 -0
  344. /package/src/components/{email → auth/email}/email-localization.tsx +0 -0
  345. /package/src/components/{email → auth/email}/email-styles.tsx +0 -0
  346. /package/src/components/{email → auth/email}/index.ts +0 -0
@@ -1,30 +1,57 @@
1
1
  "use client"
2
2
 
3
- import { deepmerge, defaultAuthConfig } from "@better-auth-ui/core"
3
+ import {
4
+ type AdditionalField,
5
+ type AuthConfig,
6
+ type DeepPartial,
7
+ deepmerge,
8
+ defaultAuthConfig
9
+ } from "@better-auth-ui/core"
4
10
  import {
5
11
  QueryClient,
6
12
  QueryClientContext,
7
13
  QueryClientProvider
8
14
  } from "@tanstack/react-query"
9
- import { type PropsWithChildren, useContext } from "react"
15
+ import {
16
+ createContext,
17
+ type PropsWithChildren,
18
+ type ReactNode,
19
+ useContext
20
+ } from "react"
10
21
 
11
- import type { AnyAuthClient } from "../../lib/auth-client"
12
- import type { AnyAuthConfig, AuthConfig } from "../../lib/auth-config"
13
- import { AuthContext } from "../../lib/auth-context"
22
+ import type { AuthClient } from "../../lib/auth-client"
14
23
 
15
- const fallbackQueryClient = new QueryClient()
24
+ const AuthContext = createContext<AuthConfig | undefined>(undefined)
16
25
 
17
- const baseAuthConfig: AnyAuthConfig = {
18
- ...defaultAuthConfig,
19
- Link: (props) => <a {...props} />
26
+ const fallbackQueryClient = new QueryClient({
27
+ defaultOptions: {
28
+ queries: {
29
+ staleTime: 5000
30
+ }
31
+ }
32
+ })
33
+
34
+ declare module "@better-auth-ui/core" {
35
+ interface AuthConfig {
36
+ /**
37
+ * The auth client to use for the authentication context.
38
+ * @remarks `AuthClient`
39
+ */
40
+ authClient: AuthClient
41
+ }
42
+
43
+ /** Widen `AdditionalField.label` to `ReactNode` in the React package. */
44
+ interface AdditionalFieldRegister {
45
+ label: ReactNode
46
+ }
20
47
  }
21
48
 
22
- export type AuthProviderProps = PropsWithChildren<AnyAuthConfig> & {
23
- authClient: AnyAuthClient
49
+ export type AuthProviderProps<TAuthClient = AuthClient> = PropsWithChildren<
50
+ DeepPartial<AuthConfig>
51
+ > & {
52
+ authClient: TAuthClient
24
53
  navigate: (options: { to: string; replace?: boolean }) => void
25
- /**
26
- * TanStack QueryClient to use for your application's queries
27
- */
54
+ /** TanStack QueryClient to use for your application's queries */
28
55
  queryClient?: QueryClient
29
56
  }
30
57
 
@@ -43,33 +70,69 @@ export function AuthProvider({
43
70
  queryClient,
44
71
  ...config
45
72
  }: AuthProviderProps) {
46
- const contextQueryClient = useContext(QueryClientContext)
47
- const resolvedQueryClient =
48
- queryClient || contextQueryClient || fallbackQueryClient
49
-
50
- const mergedConfig = deepmerge(baseAuthConfig, config) as AuthConfig
73
+ const mergedConfig = deepmerge(defaultAuthConfig, {
74
+ ...config,
75
+ viewPaths: {
76
+ auth: {
77
+ ...defaultAuthConfig.viewPaths.auth,
78
+ ...config.viewPaths?.auth
79
+ },
80
+ settings: {
81
+ ...defaultAuthConfig.viewPaths.settings,
82
+ ...config.viewPaths?.settings
83
+ }
84
+ }
85
+ } as AuthConfig)
51
86
 
52
87
  mergedConfig.redirectTo =
53
88
  (typeof window !== "undefined" &&
54
89
  new URLSearchParams(window.location.search).get("redirectTo")?.trim()) ||
55
90
  mergedConfig.redirectTo
56
91
 
92
+ // Merge plugin-contributed `additionalFields` with user-supplied ones.
93
+ // Plugin order is preserved; user-supplied entries with the same `name`
94
+ // override the plugin contribution.
95
+ const fieldsByName = new Map<string, AdditionalField>()
96
+ for (const plugin of mergedConfig.plugins ?? []) {
97
+ for (const field of plugin.additionalFields ?? []) {
98
+ fieldsByName.set(field.name, field)
99
+ }
100
+ }
101
+ for (const field of mergedConfig.additionalFields ?? []) {
102
+ fieldsByName.set(field.name, field)
103
+ }
104
+ mergedConfig.additionalFields = Array.from(fieldsByName.values())
105
+
106
+ const contextQueryClient = useContext(QueryClientContext)
107
+
108
+ if (contextQueryClient) {
109
+ return (
110
+ <AuthContext.Provider value={mergedConfig}>
111
+ {children}
112
+ </AuthContext.Provider>
113
+ )
114
+ }
115
+
57
116
  return (
58
- <AuthContext.Provider value={mergedConfig}>
59
- <QueryClientProvider client={resolvedQueryClient}>
117
+ <QueryClientProvider client={queryClient || fallbackQueryClient}>
118
+ <AuthContext.Provider value={mergedConfig}>
60
119
  {children}
61
- </QueryClientProvider>
62
- </AuthContext.Provider>
120
+ </AuthContext.Provider>
121
+ </QueryClientProvider>
63
122
  )
64
123
  }
65
124
 
66
125
  /**
67
126
  * Accesses the current authentication configuration from AuthContext.
68
127
  *
128
+ * UI packages widen the plugin type globally via the `Register` interface
129
+ * (see module augmentation in `@better-auth-ui/heroui`), so callers don't
130
+ * need to pass a generic.
131
+ *
69
132
  * @returns The merged authentication configuration provided by AuthProvider.
70
133
  * @throws If no AuthProvider is present in the component tree.
71
134
  */
72
- export function useAuth() {
135
+ export function useAuth(): AuthConfig {
73
136
  const context = useContext(AuthContext)
74
137
 
75
138
  if (!context) {
@@ -16,7 +16,7 @@ import {
16
16
  } from "@react-email/components"
17
17
  import type { ReactNode } from "react"
18
18
 
19
- import { cn } from "../../lib/utils"
19
+ import { cn } from "../../../lib/utils"
20
20
  import {
21
21
  type EmailClassNames,
22
22
  type EmailColors,
@@ -16,7 +16,7 @@ import {
16
16
  } from "@react-email/components"
17
17
  import type { ReactNode } from "react"
18
18
 
19
- import { cn } from "../../lib/utils"
19
+ import { cn } from "../../../lib/utils"
20
20
  import {
21
21
  type EmailClassNames,
22
22
  type EmailColors,
@@ -16,7 +16,7 @@ import {
16
16
  } from "@react-email/components"
17
17
  import type { ReactNode } from "react"
18
18
 
19
- import { cn } from "../../lib/utils"
19
+ import { cn } from "../../../lib/utils"
20
20
  import {
21
21
  type EmailClassNames,
22
22
  type EmailColors,
@@ -16,7 +16,7 @@ import {
16
16
  } from "@react-email/components"
17
17
  import type { ReactNode } from "react"
18
18
 
19
- import { cn } from "../../lib/utils"
19
+ import { cn } from "../../../lib/utils"
20
20
  import {
21
21
  type EmailClassNames,
22
22
  type EmailColors,
@@ -15,7 +15,7 @@ import {
15
15
  } from "@react-email/components"
16
16
  import type { ReactNode } from "react"
17
17
 
18
- import { cn } from "../../lib/utils"
18
+ import { cn } from "../../../lib/utils"
19
19
  import {
20
20
  type EmailClassNames,
21
21
  type EmailColors,
@@ -16,7 +16,7 @@ import {
16
16
  } from "@react-email/components"
17
17
  import type { ReactNode } from "react"
18
18
 
19
- import { cn } from "../../lib/utils"
19
+ import { cn } from "../../../lib/utils"
20
20
  import {
21
21
  type EmailClassNames,
22
22
  type EmailColors,
@@ -16,7 +16,7 @@ import {
16
16
  } from "@react-email/components"
17
17
  import type { ReactNode } from "react"
18
18
 
19
- import { cn } from "../../lib/utils"
19
+ import { cn } from "../../../lib/utils"
20
20
  import {
21
21
  type EmailClassNames,
22
22
  type EmailColors,
package/src/email.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "./components/auth/email"
@@ -1,18 +1,24 @@
1
1
  import { useEffect } from "react"
2
2
  import { useAuth } from "../../components/auth/auth-provider"
3
- import { type UseSessionOptions, useSession } from "./use-session"
3
+ import type { AuthClient } from "../../lib/auth-client"
4
+ import {
5
+ type UseSessionOptions,
6
+ useSession
7
+ } from "../../queries/auth/session-query"
4
8
 
5
9
  /**
6
10
  * Calls `useSession` and redirects unauthenticated users to the sign-in page,
7
11
  * preserving the current URL as a `redirectTo` query param.
8
12
  *
9
- * @param options - Better Auth params (`query`, `fetchOptions`) and React
10
- * Query options forwarded to `useQuery`.
11
- * @returns React Query result for the session.
13
+ * @param authClient - The Better Auth client.
14
+ * @param options - `getSession` params & `useQuery` options.
12
15
  */
13
- export function useAuthenticate(options?: UseSessionOptions) {
16
+ export function useAuthenticate<TAuthClient extends AuthClient>(
17
+ authClient: TAuthClient,
18
+ options?: UseSessionOptions<TAuthClient>
19
+ ) {
14
20
  const { basePaths, viewPaths, navigate } = useAuth()
15
- const session = useSession(options)
21
+ const session = useSession(authClient, options)
16
22
 
17
23
  useEffect(() => {
18
24
  if (session.data || session.isPending) return
@@ -1,16 +1,21 @@
1
- import { type UseSessionOptions, useSession } from "./use-session"
1
+ import type { AuthClient } from "../../lib/auth-client"
2
+ import {
3
+ type UseSessionOptions,
4
+ useSession
5
+ } from "../../queries/auth/session-query"
2
6
 
3
7
  /**
4
- * Retrieve the current authenticated user.
8
+ * Retrieve the current authenticated user. Thin wrapper over `useSession`
9
+ * that returns `session.user` as `data`.
5
10
  *
6
- * Thin wrapper over `useSession` that returns `session.user` as `data`.
7
- *
8
- * @param options - Better Auth params (`query`, `fetchOptions`) and React
9
- * Query options forwarded to `useQuery`.
10
- * @returns React Query result with `data` narrowed to the user object.
11
+ * @param authClient - The Better Auth client.
12
+ * @param options - `getSession` params & `useQuery` options.
11
13
  */
12
- export function useUser(options?: UseSessionOptions) {
13
- const { data, ...rest } = useSession(options)
14
+ export function useUser<TAuthClient extends AuthClient>(
15
+ authClient: TAuthClient,
16
+ options?: UseSessionOptions<TAuthClient>
17
+ ) {
18
+ const { data, ...rest } = useSession(authClient, options)
14
19
 
15
20
  return {
16
21
  data: data?.user,
@@ -1,26 +1,44 @@
1
- import { type MutationKey, useMutation } from "@tanstack/react-query"
2
- import { authMutationOptions } from "../mutations/auth-mutation-options"
1
+ import {
2
+ type MutationKey,
3
+ type UseMutationOptions,
4
+ useMutation
5
+ } from "@tanstack/react-query"
6
+ import type { BetterFetchError } from "better-auth/client"
7
+
8
+ import {
9
+ type AuthMutationFn,
10
+ type AuthMutationFnData,
11
+ type AuthMutationFnVariables,
12
+ authMutationOptions
13
+ } from "../mutations/auth-mutation-options"
14
+
15
+ type UseAuthMutationOptions<TFn extends AuthMutationFn> = Omit<
16
+ UseMutationOptions<
17
+ AuthMutationFnData<TFn>,
18
+ BetterFetchError,
19
+ AuthMutationFnVariables<TFn>
20
+ >,
21
+ "mutationKey" | "mutationFn"
22
+ >
3
23
 
4
24
  /**
5
- * Escape-hatch hook for Better Auth endpoints that don't have a purpose-built
6
- * mutation hook in this library yet. Thin wrapper over `useMutation` and
7
- * `authMutationOptions`.
25
+ * Escape-hatch hook for Better Auth write endpoints that don't have a
26
+ * purpose-built mutation hook in this library yet. Thin wrapper over
27
+ * `useMutation` and `authMutationOptions`.
8
28
  *
9
29
  * @param authFn - Better Auth client method (e.g. `authClient.emailOtp.sendVerificationOtp`).
10
- * @param mutationKey - Scope for the mutation cache key.
30
+ * @param mutationKey - Stable key for the mutation. Prefer an entry from
31
+ * `authMutationKeys` over an inline tuple so `useIsMutating` and global
32
+ * `MutationCache` observers line up.
11
33
  * @param options - React Query options forwarded to `useMutation`.
12
34
  */
13
35
  export function useAuthMutation<
14
- // biome-ignore lint/suspicious/noExplicitAny: matches authMutationOptions' widened constraint
15
- TFn extends (...args: any) => any,
36
+ TFn extends AuthMutationFn,
16
37
  const TMutationKey extends MutationKey
17
38
  >(
18
39
  authFn: TFn,
19
40
  mutationKey: TMutationKey,
20
- options?: Omit<
21
- ReturnType<typeof authMutationOptions<TFn, TMutationKey>>,
22
- "mutationKey" | "mutationFn"
23
- >
41
+ options?: UseAuthMutationOptions<TFn>
24
42
  ) {
25
43
  return useMutation({
26
44
  ...authMutationOptions(authFn, mutationKey),
@@ -0,0 +1,50 @@
1
+ "use client"
2
+
3
+ import { useAuth } from "../components/auth/auth-provider"
4
+ import type { AuthPlugin } from "../lib/auth-plugin"
5
+
6
+ /**
7
+ * Plugin factory shape accepted by {@link useAuthPlugin}. The `id` is read as
8
+ * a static property — the factory is never invoked — so plugins with required
9
+ * options (e.g. `themePlugin`'s `setTheme`) can still be looked up.
10
+ *
11
+ * Always produced by `createAuthPlugin` from `@better-auth-ui/core`.
12
+ */
13
+ export type AuthPluginFactory<T extends AuthPlugin = AuthPlugin> = {
14
+ id: string
15
+ // biome-ignore lint/suspicious/noExplicitAny: factory args vary by plugin
16
+ (...args: any[]): T
17
+ }
18
+
19
+ /**
20
+ * Access a registered plugin by passing its factory.
21
+ *
22
+ * Use inside plugin slot components to read plugin state (localization,
23
+ * config, etc.) without prop drilling.
24
+ *
25
+ * Throws if the plugin isn't registered on `AuthProvider` — this is an
26
+ * invariant: plugin slot components only render when their plugin is in
27
+ * `plugins`.
28
+ *
29
+ * @example
30
+ * ```tsx
31
+ * function PasskeyButton() {
32
+ * const { localization } = useAuthPlugin(passkeyPlugin)
33
+ * return <button>{localization.passkey}</button>
34
+ * }
35
+ * ```
36
+ */
37
+ export function useAuthPlugin<T extends AuthPlugin>(
38
+ pluginFactory: AuthPluginFactory<T>
39
+ ): T {
40
+ const { plugins } = useAuth()
41
+ const plugin = plugins?.find((p) => p.id === pluginFactory.id)
42
+
43
+ if (!plugin) {
44
+ throw new Error(
45
+ `[Better Auth UI] useAuthPlugin: plugin "${pluginFactory.id}" is not registered on AuthProvider.`
46
+ )
47
+ }
48
+
49
+ return plugin as T
50
+ }
@@ -1,11 +1,15 @@
1
1
  import { type QueryKey, useQuery } from "@tanstack/react-query"
2
- import { type AuthFn, authQueryOptions } from "../queries/auth-query-options"
2
+ import {
3
+ type AuthQueryFn,
4
+ type AuthQueryOptions,
5
+ authQueryOptions
6
+ } from "../queries/auth-query-options"
3
7
 
4
- type UseAuthQueryOptions<TFn extends AuthFn, TQueryKey extends QueryKey> = Omit<
5
- ReturnType<typeof authQueryOptions<TFn, TQueryKey>>,
6
- "queryKey" | "queryFn"
7
- > &
8
- NonNullable<Parameters<TFn>[0]>
8
+ type UseAuthQueryOptions<
9
+ TFn extends AuthQueryFn,
10
+ TPrefix extends QueryKey
11
+ > = Omit<AuthQueryOptions<TFn, TPrefix>, "queryKey" | "queryFn"> &
12
+ Pick<NonNullable<Parameters<TFn>[0]>, "query" | "fetchOptions">
9
13
 
10
14
  /**
11
15
  * Escape-hatch hook for Better Auth endpoints that don't have a purpose-built
@@ -17,7 +21,7 @@ type UseAuthQueryOptions<TFn extends AuthFn, TQueryKey extends QueryKey> = Omit<
17
21
  * Query options forwarded to `useQuery`.
18
22
  */
19
23
  export function useAuthQuery<
20
- TFn extends AuthFn,
24
+ TFn extends AuthQueryFn,
21
25
  const TQueryKey extends QueryKey
22
26
  >(
23
27
  authFn: TFn,
package/src/index.ts CHANGED
@@ -1,42 +1,43 @@
1
1
  "use client"
2
2
 
3
3
  export * from "./components/auth/auth-provider"
4
- export * from "./components/email"
5
4
  export * from "./components/icons"
6
5
  export * from "./components/settings/account/theme-preview"
7
6
  export * from "./hooks/auth/use-authenticate"
8
- export * from "./hooks/auth/use-is-username-available"
9
- export * from "./hooks/auth/use-request-password-reset"
10
- export * from "./hooks/auth/use-reset-password"
11
- export * from "./hooks/auth/use-send-verification-email"
12
- export * from "./hooks/auth/use-session"
13
- export * from "./hooks/auth/use-sign-in-email"
14
- export * from "./hooks/auth/use-sign-in-magic-link"
15
- export * from "./hooks/auth/use-sign-in-passkey"
16
- export * from "./hooks/auth/use-sign-in-social"
17
- export * from "./hooks/auth/use-sign-in-username"
18
- export * from "./hooks/auth/use-sign-out"
19
- export * from "./hooks/auth/use-sign-up-email"
20
7
  export * from "./hooks/auth/use-user"
21
- export * from "./hooks/settings/use-account-info"
22
- export * from "./hooks/settings/use-add-passkey"
23
- export * from "./hooks/settings/use-change-email"
24
- export * from "./hooks/settings/use-change-password"
25
- export * from "./hooks/settings/use-delete-passkey"
26
- export * from "./hooks/settings/use-delete-user"
27
- export * from "./hooks/settings/use-link-social"
28
- export * from "./hooks/settings/use-list-accounts"
29
- export * from "./hooks/settings/use-list-device-sessions"
30
- export * from "./hooks/settings/use-list-sessions"
31
- export * from "./hooks/settings/use-list-user-passkeys"
32
- export * from "./hooks/settings/use-revoke-multi-session"
33
- export * from "./hooks/settings/use-revoke-session"
34
- export * from "./hooks/settings/use-set-active-session"
35
- export * from "./hooks/settings/use-unlink-account"
36
- export * from "./hooks/settings/use-update-user"
37
8
  export * from "./hooks/use-auth-mutation"
9
+ export * from "./hooks/use-auth-plugin"
38
10
  export * from "./hooks/use-auth-query"
39
- export * from "./lib/auth-client"
40
- export * from "./lib/auth-config"
41
- export * from "./lib/auth-context"
11
+ export type * from "./lib/auth-client"
12
+ export * from "./lib/auth-plugin"
42
13
  export * from "./lib/provider-icons"
14
+ export * from "./mutations/auth/request-password-reset-mutation"
15
+ export * from "./mutations/auth/reset-password-mutation"
16
+ export * from "./mutations/auth/send-verification-email-mutation"
17
+ export * from "./mutations/auth/sign-in-email-mutation"
18
+ export * from "./mutations/auth/sign-in-social-mutation"
19
+ export * from "./mutations/auth/sign-out-mutation"
20
+ export * from "./mutations/auth/sign-up-email-mutation"
21
+ export * from "./mutations/auth-mutation-options"
22
+ export * from "./mutations/magic-link/sign-in-magic-link-mutation"
23
+ export * from "./mutations/multi-session/revoke-multi-session-mutation"
24
+ export * from "./mutations/multi-session/set-active-session-mutation"
25
+ export * from "./mutations/passkey/add-passkey-mutation"
26
+ export * from "./mutations/passkey/delete-passkey-mutation"
27
+ export * from "./mutations/passkey/sign-in-passkey-mutation"
28
+ export * from "./mutations/settings/change-email-mutation"
29
+ export * from "./mutations/settings/change-password-mutation"
30
+ export * from "./mutations/settings/delete-user-mutation"
31
+ export * from "./mutations/settings/link-social-mutation"
32
+ export * from "./mutations/settings/revoke-session-mutation"
33
+ export * from "./mutations/settings/unlink-account-mutation"
34
+ export * from "./mutations/settings/update-user-mutation"
35
+ export * from "./mutations/username/is-username-available-mutation"
36
+ export * from "./mutations/username/sign-in-username-mutation"
37
+ export * from "./queries/auth/session-query"
38
+ export * from "./queries/auth-query-options"
39
+ export * from "./queries/multi-session/list-device-sessions-query"
40
+ export * from "./queries/passkey/list-passkeys-query"
41
+ export * from "./queries/settings/account-info-query"
42
+ export * from "./queries/settings/list-accounts-query"
43
+ export * from "./queries/settings/list-sessions-query"
@@ -1,43 +1,45 @@
1
- import { passkeyClient } from "@better-auth/passkey/client"
2
- import {
1
+ import type { passkeyClient } from "@better-auth/passkey/client"
2
+ import type {
3
3
  magicLinkClient,
4
4
  multiSessionClient,
5
5
  usernameClient
6
6
  } from "better-auth/client/plugins"
7
- import { createAuthClient } from "better-auth/react"
8
- import type { AuthConfig } from "./auth-config"
7
+ import type { createAuthClient } from "better-auth/react"
9
8
 
10
- export type { PathToObject } from "better-auth/client"
9
+ export type AuthClient = ReturnType<typeof createAuthClient>
11
10
 
12
- /**
13
- * Type representing any auth client created with `createAuthClient`.
14
- *
15
- * Used for type flexibility when accepting auth clients that may have different
16
- * plugin configurations or feature sets.
17
- */
18
- export type AnyAuthClient = Omit<ReturnType<typeof createAuthClient>, "signUp">
11
+ // The per-plugin client types below are pure type-level declarations — no
12
+ // runtime code is emitted for them. This avoids relying on `/* @__PURE__ */`
13
+ // being honoured by every downstream bundler (RSC graphs, dev builds,
14
+ // Turbopack, older configs, etc.) and keeps the plugin packages out of
15
+ // consumers' runtime bundles entirely.
19
16
 
20
- const authClient = createAuthClient({
21
- plugins: [
22
- magicLinkClient(),
23
- multiSessionClient(),
24
- passkeyClient(),
25
- usernameClient()
26
- ]
27
- })
17
+ export type MagicLinkAuthClient = ReturnType<
18
+ typeof createAuthClient<{ plugins: [ReturnType<typeof magicLinkClient>] }>
19
+ >
28
20
 
29
- /**
30
- * Type representing the default auth client with plugins enabled.
31
- *
32
- * This is the standard auth client type used throughout the React package
33
- * and includes all required plugins enabled.
34
- */
21
+ export type MultiSessionAuthClient = ReturnType<
22
+ typeof createAuthClient<{ plugins: [ReturnType<typeof multiSessionClient>] }>
23
+ >
35
24
 
36
- type ResolveAuthClient<T> = "AuthClient" extends keyof T
37
- ? T["AuthClient"]
38
- : typeof authClient
25
+ export type PasskeyAuthClient = ReturnType<
26
+ typeof createAuthClient<{ plugins: [ReturnType<typeof passkeyClient>] }>
27
+ >
28
+
29
+ export type UsernameAuthClient = ReturnType<
30
+ typeof createAuthClient<{ plugins: [ReturnType<typeof usernameClient>] }>
31
+ >
39
32
 
40
33
  /**
41
- * The resolved auth client type, either from user augmentation or the default.
34
+ * Unwraps a Better Auth client method's `data` payload.
35
+ *
36
+ * Pass the method type directly, e.g. `TAuthClient["getSession"]` or
37
+ * `TAuthClient["passkey"]["listUserPasskeys"]`. Keeping it method-typed
38
+ * (instead of a path-string utility) preserves IntelliSense on the derived
39
+ * types.
42
40
  */
43
- export type AuthClient = ResolveAuthClient<AuthConfig>
41
+ export type InferData<TMethod> = TMethod extends (
42
+ ...args: infer _Args
43
+ ) => Promise<infer TResult extends { data: unknown }>
44
+ ? TResult["data"]
45
+ : never
@@ -0,0 +1,75 @@
1
+ import type { AuthPluginBase, AuthView } from "@better-auth-ui/core"
2
+ import type { ComponentType, ReactNode } from "react"
3
+
4
+ export type { AuthPluginViewPaths } from "@better-auth-ui/core"
5
+
6
+ /** Props for plugin-contributed auth buttons (e.g. passkey, magic link). */
7
+ export type AuthButtonProps = {
8
+ className?: string
9
+ children?: ReactNode
10
+ /** Current auth view — lets buttons context-switch (e.g. show "back to sign-in"). */
11
+ view?: AuthView
12
+ }
13
+
14
+ /** Props for plugin-contributed cards under `/settings/security`. */
15
+ export type SecurityCardProps = {
16
+ className?: string
17
+ children?: ReactNode
18
+ }
19
+
20
+ /** Props for plugin-contributed cards under `/settings/account`. */
21
+ export type AccountCardProps = {
22
+ className?: string
23
+ children?: ReactNode
24
+ }
25
+
26
+ /** Props for plugin-contributed items in the `UserButton` dropdown. */
27
+ export type UserMenuItemProps = {
28
+ className?: string
29
+ }
30
+
31
+ /** Framework-agnostic slot component shapes. UI packages narrow these via `TComponents`. */
32
+ export type AuthPluginComponents = {
33
+ /** Rendered below the submit button in auth forms. */
34
+ authButtons?: ComponentType<AuthButtonProps>[]
35
+ /** Rendered as cards inside security settings. */
36
+ securityCards?: ComponentType<SecurityCardProps>[]
37
+ /** Rendered as cards inside account settings. */
38
+ accountCards?: ComponentType<AccountCardProps>[]
39
+ /** Rendered as items inside the `UserButton` dropdown. */
40
+ userMenuItems?: ComponentType<UserMenuItemProps>[]
41
+ }
42
+
43
+ /** Plugin view overrides keyed by `AuthPluginViewPaths`. Always replaces the built-in view. */
44
+ export type AuthPluginViews<TAuthViewProps, TSettingsViewProps> = {
45
+ auth?: Record<string, ComponentType<TAuthViewProps>>
46
+ settings?: Record<string, ComponentType<TSettingsViewProps>>
47
+ }
48
+
49
+ /** Conditional view replacements — only used when the built-in flow isn't viable. */
50
+ export type AuthPluginFallbackViews<TAuthViewProps> = {
51
+ auth?: {
52
+ /** Rendered at `/auth/sign-in` when `emailAndPassword.enabled === false`. */
53
+ signIn?: ComponentType<TAuthViewProps>
54
+ }
55
+ }
56
+
57
+ /**
58
+ * UI-aware plugin definition. UI packages bind the generics in their own
59
+ * `AuthPlugin` re-export so plugin authors don't have to.
60
+ *
61
+ * @typeParam TComponents - Slot component shapes (e.g. heroui variant unions).
62
+ * @typeParam TAuthViewProps - Props the `<Auth>` router spreads onto plugin auth views.
63
+ * @typeParam TSettingsViewProps - Props the `<Settings>` router spreads onto plugin settings views.
64
+ */
65
+ export type AuthPlugin<
66
+ TComponents = AuthPluginComponents,
67
+ // biome-ignore lint/suspicious/noExplicitAny: any
68
+ TAuthViewProps = any,
69
+ // biome-ignore lint/suspicious/noExplicitAny: any
70
+ TSettingsViewProps = any
71
+ > = AuthPluginBase &
72
+ TComponents & {
73
+ views?: AuthPluginViews<TAuthViewProps, TSettingsViewProps>
74
+ fallbackViews?: AuthPluginFallbackViews<TAuthViewProps>
75
+ }