@masheev/better-auth 0.0.0-stage → 1.7.5

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 (465) hide show
  1. package/LICENSE.md +20 -0
  2. package/README.md +31 -2
  3. package/TYPE-PATCH-NOTICE.md +9 -0
  4. package/TYPE-PATCH-PROVENANCE.json +267 -0
  5. package/dist/_virtual/_rolldown/runtime.mjs +27 -0
  6. package/dist/adapters/drizzle-adapter/index.d.mts +1 -0
  7. package/dist/adapters/drizzle-adapter/index.mjs +2 -0
  8. package/dist/adapters/index.d.mts +26 -0
  9. package/dist/adapters/index.mjs +9 -0
  10. package/dist/adapters/kysely-adapter/index.d.mts +1 -0
  11. package/dist/adapters/kysely-adapter/index.mjs +2 -0
  12. package/dist/adapters/memory-adapter/index.d.mts +1 -0
  13. package/dist/adapters/memory-adapter/index.mjs +2 -0
  14. package/dist/adapters/mongodb-adapter/index.d.mts +1 -0
  15. package/dist/adapters/mongodb-adapter/index.mjs +2 -0
  16. package/dist/adapters/prisma-adapter/index.d.mts +1 -0
  17. package/dist/adapters/prisma-adapter/index.mjs +2 -0
  18. package/dist/api/dispatch.d.mts +34 -0
  19. package/dist/api/dispatch.mjs +275 -0
  20. package/dist/api/index.d.mts +4053 -0
  21. package/dist/api/index.mjs +220 -0
  22. package/dist/api/middlewares/authorization.d.mts +69 -0
  23. package/dist/api/middlewares/authorization.mjs +78 -0
  24. package/dist/api/middlewares/index.d.mts +2 -0
  25. package/dist/api/middlewares/origin-check.d.mts +17 -0
  26. package/dist/api/middlewares/origin-check.mjs +155 -0
  27. package/dist/api/rate-limiter/index.mjs +318 -0
  28. package/dist/api/routes/account.d.mts +413 -0
  29. package/dist/api/routes/account.mjs +619 -0
  30. package/dist/api/routes/callback.d.mts +32 -0
  31. package/dist/api/routes/callback.mjs +261 -0
  32. package/dist/api/routes/email-verification.d.mts +160 -0
  33. package/dist/api/routes/email-verification.mjs +324 -0
  34. package/dist/api/routes/error.d.mts +27 -0
  35. package/dist/api/routes/error.mjs +387 -0
  36. package/dist/api/routes/index.d.mts +12 -0
  37. package/dist/api/routes/ok.d.mts +35 -0
  38. package/dist/api/routes/ok.mjs +27 -0
  39. package/dist/api/routes/password.d.mts +182 -0
  40. package/dist/api/routes/password.mjs +206 -0
  41. package/dist/api/routes/session.d.mts +450 -0
  42. package/dist/api/routes/session.mjs +481 -0
  43. package/dist/api/routes/sign-in.d.mts +186 -0
  44. package/dist/api/routes/sign-in.mjs +368 -0
  45. package/dist/api/routes/sign-out.d.mts +51 -0
  46. package/dist/api/routes/sign-out.mjs +96 -0
  47. package/dist/api/routes/sign-up.d.mts +159 -0
  48. package/dist/api/routes/sign-up.mjs +275 -0
  49. package/dist/api/routes/update-session.d.mts +74 -0
  50. package/dist/api/routes/update-session.mjs +57 -0
  51. package/dist/api/routes/update-user.d.mts +428 -0
  52. package/dist/api/routes/update-user.mjs +522 -0
  53. package/dist/api/state/oauth.d.mts +53 -0
  54. package/dist/api/state/oauth.mjs +38 -0
  55. package/dist/api/state/should-session-refresh.d.mts +12 -0
  56. package/dist/api/state/should-session-refresh.mjs +13 -0
  57. package/dist/api/to-auth-endpoints.mjs +60 -0
  58. package/dist/auth/base.mjs +66 -0
  59. package/dist/auth/full.d.mts +28 -0
  60. package/dist/auth/full.mjs +29 -0
  61. package/dist/auth/minimal.d.mts +10 -0
  62. package/dist/auth/minimal.mjs +11 -0
  63. package/dist/auth/trusted-origins.mjs +106 -0
  64. package/dist/client/broadcast-channel.d.mts +19 -0
  65. package/dist/client/broadcast-channel.mjs +44 -0
  66. package/dist/client/config.d.mts +90 -0
  67. package/dist/client/config.mjs +113 -0
  68. package/dist/client/equality.d.mts +19 -0
  69. package/dist/client/equality.mjs +42 -0
  70. package/dist/client/fetch-plugins.mjs +17 -0
  71. package/dist/client/focus-manager.d.mts +10 -0
  72. package/dist/client/focus-manager.mjs +30 -0
  73. package/dist/client/index.d.mts +35 -0
  74. package/dist/client/index.mjs +22 -0
  75. package/dist/client/lynx/index.d.mts +43 -0
  76. package/dist/client/lynx/index.mjs +22 -0
  77. package/dist/client/lynx/lynx-store.d.mts +46 -0
  78. package/dist/client/lynx/lynx-store.mjs +44 -0
  79. package/dist/client/online-manager.d.mts +11 -0
  80. package/dist/client/online-manager.mjs +33 -0
  81. package/dist/client/parser.d.mts +10 -0
  82. package/dist/client/parser.mjs +70 -0
  83. package/dist/client/path-to-object.d.mts +113 -0
  84. package/dist/client/plugins/index.d.mts +44 -0
  85. package/dist/client/plugins/index.mjs +30 -0
  86. package/dist/client/plugins/infer-plugin.d.mts +16 -0
  87. package/dist/client/plugins/infer-plugin.mjs +11 -0
  88. package/dist/client/proxy.mjs +78 -0
  89. package/dist/client/query.d.mts +23 -0
  90. package/dist/client/query.mjs +124 -0
  91. package/dist/client/react/index.d.mts +44 -0
  92. package/dist/client/react/index.mjs +22 -0
  93. package/dist/client/react/react-store.d.mts +46 -0
  94. package/dist/client/react/react-store.mjs +44 -0
  95. package/dist/client/session-atom.d.mts +11 -0
  96. package/dist/client/session-atom.mjs +178 -0
  97. package/dist/client/session-refresh.d.mts +20 -0
  98. package/dist/client/session-refresh.mjs +131 -0
  99. package/dist/client/solid/index.d.mts +44 -0
  100. package/dist/client/solid/index.mjs +22 -0
  101. package/dist/client/solid/solid-store.mjs +21 -0
  102. package/dist/client/svelte/index.d.mts +44 -0
  103. package/dist/client/svelte/index.mjs +18 -0
  104. package/dist/client/types.d.mts +51 -0
  105. package/dist/client/vanilla.d.mts +42 -0
  106. package/dist/client/vanilla.mjs +18 -0
  107. package/dist/client/vue/index.d.mts +67 -0
  108. package/dist/client/vue/index.mjs +54 -0
  109. package/dist/client/vue/vue-store.mjs +23 -0
  110. package/dist/context/create-context.mjs +235 -0
  111. package/dist/context/helpers.mjs +158 -0
  112. package/dist/context/init-minimal.mjs +17 -0
  113. package/dist/context/init.mjs +19 -0
  114. package/dist/context/secret-utils.mjs +53 -0
  115. package/dist/context/store-capabilities.mjs +12 -0
  116. package/dist/cookies/cache.mjs +33 -0
  117. package/dist/cookies/cookie-utils.d.mts +72 -0
  118. package/dist/cookies/cookie-utils.mjs +203 -0
  119. package/dist/cookies/index.d.mts +124 -0
  120. package/dist/cookies/index.mjs +350 -0
  121. package/dist/cookies/jwt.mjs +44 -0
  122. package/dist/cookies/session-store.d.mts +32 -0
  123. package/dist/cookies/session-store.mjs +183 -0
  124. package/dist/crypto/buffer.d.mts +7 -0
  125. package/dist/crypto/buffer.mjs +16 -0
  126. package/dist/crypto/index.d.mts +32 -0
  127. package/dist/crypto/index.mjs +69 -0
  128. package/dist/crypto/jwt.d.mts +9 -0
  129. package/dist/crypto/jwt.mjs +141 -0
  130. package/dist/crypto/password.d.mts +13 -0
  131. package/dist/crypto/password.mjs +14 -0
  132. package/dist/crypto/random.d.mts +4 -0
  133. package/dist/crypto/random.mjs +5 -0
  134. package/dist/db/adapter-base.d.mts +7 -0
  135. package/dist/db/adapter-base.mjs +25 -0
  136. package/dist/db/adapter-kysely.d.mts +7 -0
  137. package/dist/db/adapter-kysely.mjs +17 -0
  138. package/dist/db/field-converter.d.mts +7 -0
  139. package/dist/db/field-converter.mjs +19 -0
  140. package/dist/db/field.d.mts +41 -0
  141. package/dist/db/get-migration.d.mts +56 -0
  142. package/dist/db/get-migration.mjs +685 -0
  143. package/dist/db/get-schema.d.mts +13 -0
  144. package/dist/db/get-schema.mjs +39 -0
  145. package/dist/db/index.d.mts +10 -0
  146. package/dist/db/index.mjs +35 -0
  147. package/dist/db/internal-adapter.d.mts +14 -0
  148. package/dist/db/internal-adapter.mjs +951 -0
  149. package/dist/db/revoke-unproven-account-access.d.mts +21 -0
  150. package/dist/db/revoke-unproven-account-access.mjs +58 -0
  151. package/dist/db/schema.d.mts +62 -0
  152. package/dist/db/schema.mjs +161 -0
  153. package/dist/db/to-zod.d.mts +35 -0
  154. package/dist/db/to-zod.mjs +23 -0
  155. package/dist/db/verification-token-storage.mjs +25 -0
  156. package/dist/db/with-hooks.d.mts +37 -0
  157. package/dist/db/with-hooks.mjs +255 -0
  158. package/dist/index.d.mts +30 -0
  159. package/dist/index.mjs +17 -0
  160. package/dist/integrations/cookie-plugin-guard.mjs +18 -0
  161. package/dist/integrations/next-js.d.mts +29 -0
  162. package/dist/integrations/next-js.mjs +105 -0
  163. package/dist/integrations/node.d.mts +11 -0
  164. package/dist/integrations/node.mjs +13 -0
  165. package/dist/integrations/solid-start.d.mts +22 -0
  166. package/dist/integrations/solid-start.mjs +15 -0
  167. package/dist/integrations/svelte-kit.d.mts +38 -0
  168. package/dist/integrations/svelte-kit.mjs +57 -0
  169. package/dist/integrations/tanstack-start-solid.d.mts +33 -0
  170. package/dist/integrations/tanstack-start-solid.mjs +57 -0
  171. package/dist/integrations/tanstack-start.d.mts +33 -0
  172. package/dist/integrations/tanstack-start.mjs +57 -0
  173. package/dist/oauth2/account-key.mjs +43 -0
  174. package/dist/oauth2/errors.mjs +49 -0
  175. package/dist/oauth2/index.d.mts +5 -0
  176. package/dist/oauth2/index.mjs +5 -0
  177. package/dist/oauth2/link-account.d.mts +96 -0
  178. package/dist/oauth2/link-account.mjs +329 -0
  179. package/dist/oauth2/state.d.mts +54 -0
  180. package/dist/oauth2/state.mjs +67 -0
  181. package/dist/oauth2/utils.d.mts +11 -0
  182. package/dist/oauth2/utils.mjs +33 -0
  183. package/dist/package.mjs +4 -0
  184. package/dist/plugins/access/access.d.mts +17 -0
  185. package/dist/plugins/access/access.mjs +78 -0
  186. package/dist/plugins/access/index.d.mts +3 -0
  187. package/dist/plugins/access/index.mjs +2 -0
  188. package/dist/plugins/access/types.d.mts +24 -0
  189. package/dist/plugins/additional-fields/client.d.mts +100 -0
  190. package/dist/plugins/additional-fields/client.mjs +11 -0
  191. package/dist/plugins/admin/access/index.d.mts +2 -0
  192. package/dist/plugins/admin/access/index.mjs +2 -0
  193. package/dist/plugins/admin/access/statement.d.mts +51 -0
  194. package/dist/plugins/admin/access/statement.mjs +52 -0
  195. package/dist/plugins/admin/admin.d.mts +911 -0
  196. package/dist/plugins/admin/admin.mjs +89 -0
  197. package/dist/plugins/admin/client.d.mts +81 -0
  198. package/dist/plugins/admin/client.mjs +39 -0
  199. package/dist/plugins/admin/error-codes.d.mts +30 -0
  200. package/dist/plugins/admin/error-codes.mjs +29 -0
  201. package/dist/plugins/admin/has-permission.mjs +12 -0
  202. package/dist/plugins/admin/index.d.mts +3 -0
  203. package/dist/plugins/admin/index.mjs +2 -0
  204. package/dist/plugins/admin/routes.mjs +919 -0
  205. package/dist/plugins/admin/schema.d.mts +40 -0
  206. package/dist/plugins/admin/schema.mjs +33 -0
  207. package/dist/plugins/admin/types.d.mts +88 -0
  208. package/dist/plugins/anonymous/client.d.mts +32 -0
  209. package/dist/plugins/anonymous/client.mjs +21 -0
  210. package/dist/plugins/anonymous/error-codes.d.mts +15 -0
  211. package/dist/plugins/anonymous/error-codes.mjs +14 -0
  212. package/dist/plugins/anonymous/index.d.mts +175 -0
  213. package/dist/plugins/anonymous/index.mjs +219 -0
  214. package/dist/plugins/anonymous/schema.d.mts +15 -0
  215. package/dist/plugins/anonymous/schema.mjs +9 -0
  216. package/dist/plugins/anonymous/types.d.mts +65 -0
  217. package/dist/plugins/bearer/index.d.mts +45 -0
  218. package/dist/plugins/bearer/index.mjs +74 -0
  219. package/dist/plugins/captcha/constants.d.mts +9 -0
  220. package/dist/plugins/captcha/constants.mjs +27 -0
  221. package/dist/plugins/captcha/error-codes.mjs +13 -0
  222. package/dist/plugins/captcha/index.d.mts +27 -0
  223. package/dist/plugins/captcha/index.mjs +79 -0
  224. package/dist/plugins/captcha/types.d.mts +52 -0
  225. package/dist/plugins/captcha/utils.mjs +9 -0
  226. package/dist/plugins/captcha/verify-handlers/captchafox.mjs +27 -0
  227. package/dist/plugins/captcha/verify-handlers/cloudflare-turnstile.mjs +47 -0
  228. package/dist/plugins/captcha/verify-handlers/google-recaptcha.mjs +32 -0
  229. package/dist/plugins/captcha/verify-handlers/h-captcha.mjs +27 -0
  230. package/dist/plugins/custom-session/client.d.mts +17 -0
  231. package/dist/plugins/custom-session/client.mjs +7 -0
  232. package/dist/plugins/custom-session/index.d.mts +73 -0
  233. package/dist/plugins/custom-session/index.mjs +65 -0
  234. package/dist/plugins/device-authorization/client.d.mts +17 -0
  235. package/dist/plugins/device-authorization/client.mjs +18 -0
  236. package/dist/plugins/device-authorization/error-codes.mjs +19 -0
  237. package/dist/plugins/device-authorization/index.d.mts +558 -0
  238. package/dist/plugins/device-authorization/index.mjs +87 -0
  239. package/dist/plugins/device-authorization/routes.d.mts +32 -0
  240. package/dist/plugins/device-authorization/routes.mjs +725 -0
  241. package/dist/plugins/device-authorization/schema.d.mts +18 -0
  242. package/dist/plugins/device-authorization/schema.mjs +63 -0
  243. package/dist/plugins/email-otp/client.d.mts +21 -0
  244. package/dist/plugins/email-otp/client.mjs +17 -0
  245. package/dist/plugins/email-otp/error-codes.d.mts +10 -0
  246. package/dist/plugins/email-otp/error-codes.mjs +9 -0
  247. package/dist/plugins/email-otp/index.d.mts +551 -0
  248. package/dist/plugins/email-otp/index.mjs +145 -0
  249. package/dist/plugins/email-otp/otp-token.mjs +55 -0
  250. package/dist/plugins/email-otp/routes.mjs +784 -0
  251. package/dist/plugins/email-otp/types.d.mts +109 -0
  252. package/dist/plugins/email-otp/utils.mjs +17 -0
  253. package/dist/plugins/generic-oauth/error-codes.mjs +8 -0
  254. package/dist/plugins/generic-oauth/index.d.mts +52 -0
  255. package/dist/plugins/generic-oauth/index.mjs +279 -0
  256. package/dist/plugins/generic-oauth/providers/auth0.d.mts +36 -0
  257. package/dist/plugins/generic-oauth/providers/auth0.mjs +49 -0
  258. package/dist/plugins/generic-oauth/providers/gumroad.d.mts +31 -0
  259. package/dist/plugins/generic-oauth/providers/gumroad.mjs +62 -0
  260. package/dist/plugins/generic-oauth/providers/hubspot.d.mts +36 -0
  261. package/dist/plugins/generic-oauth/providers/hubspot.mjs +62 -0
  262. package/dist/plugins/generic-oauth/providers/index.d.mts +10 -0
  263. package/dist/plugins/generic-oauth/providers/keycloak.d.mts +36 -0
  264. package/dist/plugins/generic-oauth/providers/keycloak.mjs +47 -0
  265. package/dist/plugins/generic-oauth/providers/line.d.mts +54 -0
  266. package/dist/plugins/generic-oauth/providers/line.mjs +93 -0
  267. package/dist/plugins/generic-oauth/providers/microsoft-entra-id.d.mts +39 -0
  268. package/dist/plugins/generic-oauth/providers/microsoft-entra-id.mjs +104 -0
  269. package/dist/plugins/generic-oauth/providers/okta.d.mts +36 -0
  270. package/dist/plugins/generic-oauth/providers/okta.mjs +47 -0
  271. package/dist/plugins/generic-oauth/providers/patreon.d.mts +29 -0
  272. package/dist/plugins/generic-oauth/providers/patreon.mjs +61 -0
  273. package/dist/plugins/generic-oauth/providers/slack.d.mts +29 -0
  274. package/dist/plugins/generic-oauth/providers/slack.mjs +63 -0
  275. package/dist/plugins/generic-oauth/providers/yandex.d.mts +29 -0
  276. package/dist/plugins/generic-oauth/providers/yandex.mjs +67 -0
  277. package/dist/plugins/generic-oauth/types.d.mts +268 -0
  278. package/dist/plugins/haveibeenpwned/index.d.mts +63 -0
  279. package/dist/plugins/haveibeenpwned/index.mjs +81 -0
  280. package/dist/plugins/index.d.mts +69 -0
  281. package/dist/plugins/index.mjs +49 -0
  282. package/dist/plugins/jwt/adapter.mjs +68 -0
  283. package/dist/plugins/jwt/client.d.mts +41 -0
  284. package/dist/plugins/jwt/client.mjs +19 -0
  285. package/dist/plugins/jwt/cookie-cache.mjs +77 -0
  286. package/dist/plugins/jwt/index.d.mts +246 -0
  287. package/dist/plugins/jwt/index.mjs +214 -0
  288. package/dist/plugins/jwt/schema.d.mts +33 -0
  289. package/dist/plugins/jwt/schema.mjs +29 -0
  290. package/dist/plugins/jwt/sign.d.mts +128 -0
  291. package/dist/plugins/jwt/sign.mjs +130 -0
  292. package/dist/plugins/jwt/types.d.mts +256 -0
  293. package/dist/plugins/jwt/utils.d.mts +41 -0
  294. package/dist/plugins/jwt/utils.mjs +64 -0
  295. package/dist/plugins/jwt/verify.d.mts +11 -0
  296. package/dist/plugins/jwt/verify.mjs +45 -0
  297. package/dist/plugins/last-login-method/client.d.mts +48 -0
  298. package/dist/plugins/last-login-method/client.mjs +48 -0
  299. package/dist/plugins/last-login-method/index.d.mts +127 -0
  300. package/dist/plugins/last-login-method/index.mjs +98 -0
  301. package/dist/plugins/magic-link/client.d.mts +10 -0
  302. package/dist/plugins/magic-link/client.mjs +11 -0
  303. package/dist/plugins/magic-link/index.d.mts +213 -0
  304. package/dist/plugins/magic-link/index.mjs +208 -0
  305. package/dist/plugins/magic-link/utils.mjs +9 -0
  306. package/dist/plugins/multi-session/client.d.mts +19 -0
  307. package/dist/plugins/multi-session/client.mjs +19 -0
  308. package/dist/plugins/multi-session/error-codes.d.mts +8 -0
  309. package/dist/plugins/multi-session/error-codes.mjs +5 -0
  310. package/dist/plugins/multi-session/index.d.mts +212 -0
  311. package/dist/plugins/multi-session/index.mjs +217 -0
  312. package/dist/plugins/oauth-popup/client.d.mts +82 -0
  313. package/dist/plugins/oauth-popup/client.mjs +203 -0
  314. package/dist/plugins/oauth-popup/constants.d.mts +11 -0
  315. package/dist/plugins/oauth-popup/constants.mjs +11 -0
  316. package/dist/plugins/oauth-popup/error-codes.d.mts +11 -0
  317. package/dist/plugins/oauth-popup/error-codes.mjs +10 -0
  318. package/dist/plugins/oauth-popup/index.d.mts +67 -0
  319. package/dist/plugins/oauth-popup/index.mjs +232 -0
  320. package/dist/plugins/oauth-popup/types.d.mts +30 -0
  321. package/dist/plugins/oauth-proxy/index.d.mts +130 -0
  322. package/dist/plugins/oauth-proxy/index.mjs +407 -0
  323. package/dist/plugins/oauth-proxy/utils.mjs +55 -0
  324. package/dist/plugins/one-tap/client.d.mts +174 -0
  325. package/dist/plugins/one-tap/client.mjs +208 -0
  326. package/dist/plugins/one-tap/index.d.mts +82 -0
  327. package/dist/plugins/one-tap/index.mjs +100 -0
  328. package/dist/plugins/one-time-token/client.d.mts +10 -0
  329. package/dist/plugins/one-time-token/client.mjs +11 -0
  330. package/dist/plugins/one-time-token/index.d.mts +132 -0
  331. package/dist/plugins/one-time-token/index.mjs +107 -0
  332. package/dist/plugins/one-time-token/utils.mjs +9 -0
  333. package/dist/plugins/open-api/generator.d.mts +126 -0
  334. package/dist/plugins/open-api/generator.mjs +557 -0
  335. package/dist/plugins/open-api/index.d.mts +97 -0
  336. package/dist/plugins/open-api/index.mjs +65 -0
  337. package/dist/plugins/open-api/logo.mjs +13 -0
  338. package/dist/plugins/organization/access/index.d.mts +2 -0
  339. package/dist/plugins/organization/access/index.mjs +2 -0
  340. package/dist/plugins/organization/access/statement.d.mts +113 -0
  341. package/dist/plugins/organization/access/statement.mjs +77 -0
  342. package/dist/plugins/organization/adapter.d.mts +815 -0
  343. package/dist/plugins/organization/adapter.mjs +813 -0
  344. package/dist/plugins/organization/call.mjs +15 -0
  345. package/dist/plugins/organization/client.d.mts +375 -0
  346. package/dist/plugins/organization/client.mjs +104 -0
  347. package/dist/plugins/organization/error-codes.d.mts +66 -0
  348. package/dist/plugins/organization/error-codes.mjs +65 -0
  349. package/dist/plugins/organization/has-permission.d.mts +17 -0
  350. package/dist/plugins/organization/has-permission.mjs +34 -0
  351. package/dist/plugins/organization/index.d.mts +6 -0
  352. package/dist/plugins/organization/index.mjs +4 -0
  353. package/dist/plugins/organization/organization.d.mts +420 -0
  354. package/dist/plugins/organization/organization.mjs +886 -0
  355. package/dist/plugins/organization/permission.d.mts +15 -0
  356. package/dist/plugins/organization/permission.mjs +14 -0
  357. package/dist/plugins/organization/routes/crud-access-control.d.mts +511 -0
  358. package/dist/plugins/organization/routes/crud-access-control.mjs +674 -0
  359. package/dist/plugins/organization/routes/crud-invites.d.mts +1154 -0
  360. package/dist/plugins/organization/routes/crud-invites.mjs +602 -0
  361. package/dist/plugins/organization/routes/crud-members.d.mts +1057 -0
  362. package/dist/plugins/organization/routes/crud-members.mjs +518 -0
  363. package/dist/plugins/organization/routes/crud-org.d.mts +918 -0
  364. package/dist/plugins/organization/routes/crud-org.mjs +455 -0
  365. package/dist/plugins/organization/routes/crud-team.d.mts +1238 -0
  366. package/dist/plugins/organization/routes/crud-team.mjs +766 -0
  367. package/dist/plugins/organization/schema.d.mts +390 -0
  368. package/dist/plugins/organization/schema.mjs +65 -0
  369. package/dist/plugins/organization/types.d.mts +691 -0
  370. package/dist/plugins/phone-number/client.d.mts +31 -0
  371. package/dist/plugins/phone-number/client.mjs +19 -0
  372. package/dist/plugins/phone-number/error-codes.d.mts +19 -0
  373. package/dist/plugins/phone-number/error-codes.mjs +18 -0
  374. package/dist/plugins/phone-number/index.d.mts +360 -0
  375. package/dist/plugins/phone-number/index.mjs +57 -0
  376. package/dist/plugins/phone-number/routes.mjs +529 -0
  377. package/dist/plugins/phone-number/schema.d.mts +22 -0
  378. package/dist/plugins/phone-number/schema.mjs +18 -0
  379. package/dist/plugins/phone-number/types.d.mts +116 -0
  380. package/dist/plugins/siwe/client.d.mts +14 -0
  381. package/dist/plugins/siwe/client.mjs +15 -0
  382. package/dist/plugins/siwe/index.d.mts +62 -0
  383. package/dist/plugins/siwe/index.mjs +272 -0
  384. package/dist/plugins/siwe/parse-message.mjs +60 -0
  385. package/dist/plugins/siwe/schema.d.mts +35 -0
  386. package/dist/plugins/siwe/schema.mjs +30 -0
  387. package/dist/plugins/siwe/types.d.mts +43 -0
  388. package/dist/plugins/test-utils/auth-helpers.mjs +33 -0
  389. package/dist/plugins/test-utils/cookie-builder.mjs +55 -0
  390. package/dist/plugins/test-utils/db-helpers.mjs +65 -0
  391. package/dist/plugins/test-utils/factories.mjs +38 -0
  392. package/dist/plugins/test-utils/index.d.mts +73 -0
  393. package/dist/plugins/test-utils/index.mjs +97 -0
  394. package/dist/plugins/test-utils/otp-sink.mjs +21 -0
  395. package/dist/plugins/test-utils/types.d.mts +51 -0
  396. package/dist/plugins/two-factor/backup-codes/index.d.mts +291 -0
  397. package/dist/plugins/two-factor/backup-codes/index.mjs +341 -0
  398. package/dist/plugins/two-factor/client.d.mts +76 -0
  399. package/dist/plugins/two-factor/client.mjs +41 -0
  400. package/dist/plugins/two-factor/constant.mjs +6 -0
  401. package/dist/plugins/two-factor/error-code.d.mts +20 -0
  402. package/dist/plugins/two-factor/error-code.mjs +19 -0
  403. package/dist/plugins/two-factor/index.d.mts +720 -0
  404. package/dist/plugins/two-factor/index.mjs +349 -0
  405. package/dist/plugins/two-factor/otp/index.d.mts +216 -0
  406. package/dist/plugins/two-factor/otp/index.mjs +252 -0
  407. package/dist/plugins/two-factor/schema.d.mts +59 -0
  408. package/dist/plugins/two-factor/schema.mjs +53 -0
  409. package/dist/plugins/two-factor/totp/index.d.mts +219 -0
  410. package/dist/plugins/two-factor/totp/index.mjs +230 -0
  411. package/dist/plugins/two-factor/types.d.mts +111 -0
  412. package/dist/plugins/two-factor/utils.mjs +9 -0
  413. package/dist/plugins/two-factor/verify-two-factor.mjs +205 -0
  414. package/dist/plugins/username/client.d.mts +38 -0
  415. package/dist/plugins/username/client.mjs +17 -0
  416. package/dist/plugins/username/error-codes.d.mts +16 -0
  417. package/dist/plugins/username/error-codes.mjs +15 -0
  418. package/dist/plugins/username/index.d.mts +326 -0
  419. package/dist/plugins/username/index.mjs +312 -0
  420. package/dist/plugins/username/schema.d.mts +50 -0
  421. package/dist/plugins/username/schema.mjs +25 -0
  422. package/dist/social-providers/index.d.mts +1 -0
  423. package/dist/social-providers/index.mjs +2 -0
  424. package/dist/state.d.mts +48 -0
  425. package/dist/state.mjs +149 -0
  426. package/dist/test-utils/headers.d.mts +8 -0
  427. package/dist/test-utils/headers.mjs +17 -0
  428. package/dist/test-utils/http-test-instance.d.mts +413 -0
  429. package/dist/test-utils/http-test-instance.mjs +107 -0
  430. package/dist/test-utils/index.d.mts +4 -0
  431. package/dist/test-utils/index.mjs +4 -0
  432. package/dist/test-utils/test-instance.d.mts +56 -0
  433. package/dist/test-utils/test-instance.mjs +242 -0
  434. package/dist/types/adapter.d.mts +2 -0
  435. package/dist/types/api.d.mts +28 -0
  436. package/dist/types/auth.d.mts +32 -0
  437. package/dist/types/helper.d.mts +26 -0
  438. package/dist/types/index.d.mts +10 -0
  439. package/dist/types/index.mjs +1 -0
  440. package/dist/types/models.d.mts +10 -0
  441. package/dist/types/plugins.d.mts +19 -0
  442. package/dist/utils/boolean.mjs +6 -0
  443. package/dist/utils/constants.mjs +4 -0
  444. package/dist/utils/date.mjs +6 -0
  445. package/dist/utils/hashing.mjs +18 -0
  446. package/dist/utils/hide-metadata.d.mts +6 -0
  447. package/dist/utils/hide-metadata.mjs +4 -0
  448. package/dist/utils/index.d.mts +4 -0
  449. package/dist/utils/is-api-error.d.mts +2 -0
  450. package/dist/utils/is-api-error.mjs +2 -0
  451. package/dist/utils/is-atom.mjs +6 -0
  452. package/dist/utils/is-promise.mjs +6 -0
  453. package/dist/utils/middleware-response.mjs +7 -0
  454. package/dist/utils/password.mjs +32 -0
  455. package/dist/utils/plugin-helper.mjs +14 -0
  456. package/dist/utils/request.mjs +23 -0
  457. package/dist/utils/shim.mjs +22 -0
  458. package/dist/utils/time.d.mts +48 -0
  459. package/dist/utils/time.mjs +98 -0
  460. package/dist/utils/url.d.mts +78 -0
  461. package/dist/utils/url.mjs +238 -0
  462. package/dist/utils/validate-user-info.mjs +44 -0
  463. package/dist/utils/wildcard.mjs +106 -0
  464. package/dist/version.mjs +5 -0
  465. package/package.json +595 -3
@@ -0,0 +1,174 @@
1
+ import { BetterAuthClientOptions, ClientFetchOption, ClientStore } from "@better-auth/core";
2
+ import * as _$_better_fetch_fetch0 from "@better-fetch/fetch";
3
+ import { BetterFetch } from "@better-fetch/fetch";
4
+
5
+ //#region src/plugins/one-tap/client.d.ts
6
+ declare global {
7
+ interface Window {
8
+ googleScriptInitialized?: boolean | undefined;
9
+ }
10
+ }
11
+ interface GsiButtonConfiguration {
12
+ /**
13
+ * The button type: icon, or standard button.
14
+ */
15
+ type: "standard" | "icon";
16
+ /**
17
+ * The button theme. For example, filled_blue or filled_black.
18
+ * outline A standard button theme:
19
+ * filled_blue A blue-filled button theme:
20
+ * filled_black A black-filled button theme:
21
+ */
22
+ theme?: "outline" | "filled_blue" | "filled_black";
23
+ /**
24
+ * The button size. For example, small or large.
25
+ */
26
+ size?: "small" | "medium" | "large";
27
+ /**
28
+ * The button text. The default value is signin_with.
29
+ * There are no visual differences for the text of icon buttons that
30
+ * have different text attributes. The only exception is when the
31
+ * text is read for screen accessibility.
32
+ *
33
+ * signin_with The button text is “Sign in with Google”:
34
+ * signup_with The button text is “Sign up with Google”:
35
+ * continue_with The button text is “Continue with Google”:
36
+ * signup_with The button text is “Sign in”:
37
+ */
38
+ text?: "signin_with" | "signup_with" | "continue_with" | "signin";
39
+ /**
40
+ * The button shape. The default value is rectangular.
41
+ */
42
+ shape?: "rectangular" | "pill" | "circle" | "square";
43
+ /**
44
+ * The alignment of the Google logo. The default value is left.
45
+ * This attribute only applies to the standard button type.
46
+ */
47
+ logo_alignment?: "left" | "center";
48
+ /**
49
+ * The minimum button width, in pixels. The maximum width is 400
50
+ * pixels.
51
+ */
52
+ width?: number;
53
+ /**
54
+ * The pre-set locale of the button text. If it's not set, the
55
+ * browser's default locale or the Google session user’s preference
56
+ * is used.
57
+ */
58
+ locale?: string;
59
+ /**
60
+ * You can define a JavaScript function to be called when the
61
+ * Sign in with Google button is clicked.
62
+ */
63
+ click_listener?: () => void;
64
+ /**
65
+ * Optional, as multiple Sign in with Google buttons can be
66
+ * rendered on the same page, you can assign each button with a
67
+ * unique string. The same string would return along with the ID
68
+ * token, so you can identify which button user clicked to sign in.
69
+ */
70
+ state?: string;
71
+ }
72
+ interface GoogleOneTapOptions {
73
+ /**
74
+ * Google client ID
75
+ */
76
+ clientId: string;
77
+ /**
78
+ * Auto select the account if the user is already signed in
79
+ */
80
+ autoSelect?: boolean | undefined;
81
+ /**
82
+ * Cancel the flow when the user taps outside the prompt
83
+ *
84
+ * Note: To use this option, disable `promptOptions.fedCM`
85
+ */
86
+ cancelOnTapOutside?: boolean | undefined;
87
+ /**
88
+ * The mode to use for the Google One Tap flow
89
+ *
90
+ * popup: Use a popup window
91
+ * redirect: Redirect the user to the Google One Tap flow
92
+ *
93
+ * @default "popup"
94
+ */
95
+ uxMode?: ("popup" | "redirect") | undefined;
96
+ /**
97
+ * The context to use for the Google One Tap flow.
98
+ *
99
+ * @see {@link https://developers.google.com/identity/gsi/web/reference/js-reference}
100
+ * @default "signin"
101
+ */
102
+ context?: ("signin" | "signup" | "use") | undefined;
103
+ /**
104
+ * Additional configuration options to pass to the Google One Tap API.
105
+ */
106
+ additionalOptions?: Record<string, any> | undefined;
107
+ /**
108
+ * Configuration options for the prompt and exponential backoff behavior.
109
+ */
110
+ promptOptions?: {
111
+ /**
112
+ * Base delay (in milliseconds) for exponential backoff.
113
+ * @default 1000
114
+ */
115
+ baseDelay?: number;
116
+ /**
117
+ * Maximum number of prompt attempts before calling onPromptNotification.
118
+ * @default 5
119
+ */
120
+ maxAttempts?: number;
121
+ /**
122
+ * Whether to support FedCM (Federated Credential Management) support.
123
+ *
124
+ * @see {@link https://developer.chrome.com/docs/identity/fedcm/overview}
125
+ * @default true
126
+ */
127
+ fedCM?: boolean | undefined;
128
+ } | undefined;
129
+ }
130
+ interface GoogleOneTapActionOptions extends Omit<GoogleOneTapOptions, "clientId" | "promptOptions"> {
131
+ fetchOptions?: ClientFetchOption | undefined;
132
+ /**
133
+ * Callback URL.
134
+ */
135
+ callbackURL?: string | undefined;
136
+ /**
137
+ * Optional callback that receives the prompt notification if (or when) the prompt is dismissed or skipped.
138
+ * This lets you render an alternative UI (e.g. a Google Sign-In button) to restart the process.
139
+ */
140
+ onPromptNotification?: ((notification?: any | undefined) => void) | undefined;
141
+ nonce?: string | undefined;
142
+ /**
143
+ * Button mode configuration. When provided, renders a "Sign In with Google" button
144
+ * instead of showing the One Tap prompt.
145
+ */
146
+ button?: {
147
+ /**
148
+ * The HTML element or CSS selector where the button should be rendered.
149
+ * If a string is provided, it will be used as a CSS selector.
150
+ */
151
+ container: HTMLElement | string;
152
+ /**
153
+ * Button configuration options
154
+ */
155
+ config?: GsiButtonConfiguration | undefined;
156
+ } | undefined;
157
+ }
158
+ declare const oneTapClient: (options: GoogleOneTapOptions) => {
159
+ id: "one-tap";
160
+ version: string;
161
+ fetchPlugins: {
162
+ id: string;
163
+ name: string;
164
+ hooks: {
165
+ onResponse(ctx: _$_better_fetch_fetch0.ResponseContext): Promise<void>;
166
+ };
167
+ }[];
168
+ getActions: ($fetch: BetterFetch, _$store: ClientStore, _options: BetterAuthClientOptions | undefined) => {
169
+ oneTap: (opts?: GoogleOneTapActionOptions | undefined, fetchOptions?: ClientFetchOption | undefined) => Promise<void>;
170
+ };
171
+ getAtoms($fetch: BetterFetch): {};
172
+ };
173
+ //#endregion
174
+ export { GoogleOneTapActionOptions, GoogleOneTapOptions, GsiButtonConfiguration, oneTapClient };
@@ -0,0 +1,208 @@
1
+ import { PACKAGE_VERSION } from "../../version.mjs";
2
+ import { isSafeUrlScheme } from "@better-auth/core/utils/url";
3
+ //#region src/plugins/one-tap/client.ts
4
+ let isRequestInProgress = false;
5
+ function isFedCMSupported() {
6
+ return typeof window !== "undefined" && "IdentityCredential" in window;
7
+ }
8
+ /**
9
+ * Reasons that should NOT trigger a retry.
10
+ * @see https://developers.google.com/identity/gsi/web/reference/js-reference
11
+ */
12
+ const noRetryReasons = {
13
+ dismissed: ["credential_returned", "cancel_called"],
14
+ skipped: ["user_cancel", "tap_outside"]
15
+ };
16
+ const oneTapClient = (options) => {
17
+ return {
18
+ id: "one-tap",
19
+ version: PACKAGE_VERSION,
20
+ fetchPlugins: [{
21
+ id: "fedcm-signout-handle",
22
+ name: "FedCM Sign-Out Handler",
23
+ hooks: { async onResponse(ctx) {
24
+ if (!ctx.request.url.toString().includes("/sign-out")) return;
25
+ if (options.promptOptions?.fedCM === false || !isFedCMSupported()) return;
26
+ navigator.credentials.preventSilentAccess();
27
+ } }
28
+ }],
29
+ getActions: ($fetch, _$store, _options) => {
30
+ return { oneTap: async (opts, fetchOptions) => {
31
+ if (isRequestInProgress) {
32
+ console.warn("A Google One Tap request is already in progress. Please wait.");
33
+ return;
34
+ }
35
+ if (typeof window === "undefined" || !window.document) {
36
+ console.warn("Google One Tap is only available in browser environments");
37
+ return;
38
+ }
39
+ if (opts?.button) {
40
+ await loadGoogleScript();
41
+ const container = typeof opts.button.container === "string" ? document.querySelector(opts.button.container) : opts.button.container;
42
+ if (!container) {
43
+ console.error("Google One Tap: Button container not found", opts.button.container);
44
+ return;
45
+ }
46
+ async function callback(idToken) {
47
+ if ((await $fetch("/one-tap/callback", {
48
+ method: "POST",
49
+ body: {
50
+ idToken,
51
+ callbackURL: opts?.callbackURL
52
+ },
53
+ ...opts?.fetchOptions,
54
+ ...fetchOptions
55
+ }))?.error) return;
56
+ if (!opts?.fetchOptions && !fetchOptions || opts?.callbackURL) {
57
+ const target = opts?.callbackURL ?? "/";
58
+ if (isSafeUrlScheme(target)) window.location.href = target;
59
+ }
60
+ }
61
+ const { autoSelect, cancelOnTapOutside, context } = opts ?? {};
62
+ const contextValue = context ?? options.context ?? "signin";
63
+ const useFedCM = options.promptOptions?.fedCM !== false;
64
+ window.google?.accounts.id.initialize({
65
+ client_id: options.clientId,
66
+ callback: async (response) => {
67
+ try {
68
+ await callback(response.credential);
69
+ } catch (error) {
70
+ console.error("Error during button callback:", error);
71
+ }
72
+ },
73
+ auto_select: autoSelect,
74
+ cancel_on_tap_outside: cancelOnTapOutside,
75
+ context: contextValue,
76
+ ux_mode: opts?.uxMode || "popup",
77
+ nonce: opts?.nonce,
78
+ itp_support: true,
79
+ use_fedcm_for_prompt: useFedCM,
80
+ ...options.additionalOptions
81
+ });
82
+ window.google?.accounts.id.renderButton(container, opts.button.config ?? { type: "icon" });
83
+ return;
84
+ }
85
+ async function callback(idToken) {
86
+ if ((await $fetch("/one-tap/callback", {
87
+ method: "POST",
88
+ body: {
89
+ idToken,
90
+ callbackURL: opts?.callbackURL
91
+ },
92
+ ...opts?.fetchOptions,
93
+ ...fetchOptions
94
+ }))?.error) return;
95
+ if (!opts?.fetchOptions && !fetchOptions || opts?.callbackURL) {
96
+ const target = opts?.callbackURL ?? "/";
97
+ if (isSafeUrlScheme(target)) window.location.href = target;
98
+ }
99
+ }
100
+ const { autoSelect, cancelOnTapOutside, context } = opts ?? {};
101
+ const contextValue = context ?? options.context ?? "signin";
102
+ isRequestInProgress = true;
103
+ try {
104
+ await loadGoogleScript();
105
+ await new Promise((resolve, reject) => {
106
+ let isResolved = false;
107
+ const baseDelay = options.promptOptions?.baseDelay ?? 1e3;
108
+ const maxAttempts = options.promptOptions?.maxAttempts ?? 5;
109
+ const useFedCM = options.promptOptions?.fedCM !== false;
110
+ window.google?.accounts.id.initialize({
111
+ client_id: options.clientId,
112
+ callback: async (response) => {
113
+ isResolved = true;
114
+ try {
115
+ await callback(response.credential);
116
+ resolve();
117
+ } catch (error) {
118
+ console.error("Error during One Tap callback:", error);
119
+ reject(error);
120
+ }
121
+ },
122
+ auto_select: autoSelect,
123
+ cancel_on_tap_outside: cancelOnTapOutside,
124
+ context: contextValue,
125
+ ux_mode: opts?.uxMode || "popup",
126
+ nonce: opts?.nonce,
127
+ /**
128
+ * @see {@link https://developers.google.com/identity/gsi/web/guides/overview}
129
+ */
130
+ itp_support: true,
131
+ use_fedcm_for_prompt: useFedCM,
132
+ ...options.additionalOptions
133
+ });
134
+ const handlePrompt = (attempt) => {
135
+ if (isResolved) return;
136
+ window.google?.accounts.id.prompt((notification) => {
137
+ if (isResolved) return;
138
+ if (notification.isDismissedMoment?.()) {
139
+ const reason = notification.getDismissedReason?.();
140
+ if (noRetryReasons.dismissed.includes(reason)) {
141
+ opts?.onPromptNotification?.(notification);
142
+ resolve();
143
+ return;
144
+ }
145
+ if (attempt < maxAttempts) {
146
+ const delay = Math.pow(2, attempt) * baseDelay;
147
+ setTimeout(() => handlePrompt(attempt + 1), delay);
148
+ } else {
149
+ opts?.onPromptNotification?.(notification);
150
+ resolve();
151
+ }
152
+ } else if (notification.isSkippedMoment?.()) {
153
+ const reason = notification.getSkippedReason?.();
154
+ if (!reason || noRetryReasons.skipped.includes(reason)) {
155
+ opts?.onPromptNotification?.(notification);
156
+ resolve();
157
+ return;
158
+ }
159
+ if (attempt < maxAttempts) {
160
+ const delay = Math.pow(2, attempt) * baseDelay;
161
+ setTimeout(() => handlePrompt(attempt + 1), delay);
162
+ } else {
163
+ opts?.onPromptNotification?.(notification);
164
+ resolve();
165
+ }
166
+ } else if (notification.isNotDisplayed?.()) {
167
+ opts?.onPromptNotification?.(notification);
168
+ resolve();
169
+ }
170
+ });
171
+ };
172
+ handlePrompt(0);
173
+ });
174
+ } catch (error) {
175
+ console.error("Error during Google One Tap flow:", error);
176
+ throw error;
177
+ } finally {
178
+ isRequestInProgress = false;
179
+ }
180
+ } };
181
+ },
182
+ getAtoms($fetch) {
183
+ return {};
184
+ }
185
+ };
186
+ };
187
+ const loadGoogleScript = () => {
188
+ return new Promise((resolve, reject) => {
189
+ if (window.googleScriptInitialized) {
190
+ resolve();
191
+ return;
192
+ }
193
+ const script = document.createElement("script");
194
+ script.src = "https://accounts.google.com/gsi/client";
195
+ script.async = true;
196
+ script.defer = true;
197
+ script.onload = () => {
198
+ window.googleScriptInitialized = true;
199
+ resolve();
200
+ };
201
+ script.onerror = () => {
202
+ reject(/* @__PURE__ */ new Error("Failed to load Google Identity Services script"));
203
+ };
204
+ document.head.appendChild(script);
205
+ });
206
+ };
207
+ //#endregion
208
+ export { oneTapClient };
@@ -0,0 +1,82 @@
1
+ import * as _$better_call0 from "better-call";
2
+ import * as z from "zod";
3
+
4
+ //#region src/plugins/one-tap/index.d.ts
5
+ declare module "@better-auth/core" {
6
+ interface BetterAuthPluginRegistry<AuthOptions, Options> {
7
+ "one-tap": {
8
+ creator: typeof oneTap;
9
+ };
10
+ }
11
+ }
12
+ interface OneTapOptions {
13
+ /**
14
+ * Disable the signup flow
15
+ *
16
+ * @default false
17
+ */
18
+ disableSignup?: boolean | undefined;
19
+ /**
20
+ * Google Client ID
21
+ *
22
+ * If a client ID is provided in the social provider configuration,
23
+ * it will be used.
24
+ */
25
+ clientId?: string | undefined;
26
+ }
27
+ declare const oneTap: (options?: OneTapOptions | undefined) => {
28
+ id: "one-tap";
29
+ version: string;
30
+ endpoints: {
31
+ oneTapCallback: _$better_call0.StrictEndpoint<"/one-tap/callback", {
32
+ method: "POST";
33
+ body: z.ZodObject<{
34
+ idToken: z.ZodString;
35
+ callbackURL: z.ZodOptional<z.ZodString>;
36
+ }, z.core.$strip>;
37
+ metadata: {
38
+ openapi: {
39
+ summary: string;
40
+ description: string;
41
+ responses: {
42
+ 200: {
43
+ description: string;
44
+ content: {
45
+ "application/json": {
46
+ schema: {
47
+ type: "object";
48
+ properties: {
49
+ session: {
50
+ $ref: string;
51
+ };
52
+ user: {
53
+ $ref: string;
54
+ };
55
+ };
56
+ };
57
+ };
58
+ };
59
+ };
60
+ 400: {
61
+ description: string;
62
+ };
63
+ };
64
+ };
65
+ };
66
+ }, {
67
+ token: string;
68
+ user: {
69
+ id: string;
70
+ createdAt: Date;
71
+ updatedAt: Date;
72
+ email: string;
73
+ emailVerified: boolean;
74
+ name: string;
75
+ image?: string | null | undefined;
76
+ };
77
+ }>;
78
+ };
79
+ options: OneTapOptions | undefined;
80
+ };
81
+ //#endregion
82
+ export { OneTapOptions, oneTap };
@@ -0,0 +1,100 @@
1
+ import { parseUserOutput } from "../../db/schema.mjs";
2
+ import { setSessionCookie } from "../../cookies/index.mjs";
3
+ import { OAUTH_CALLBACK_ERROR_CODES } from "../../oauth2/errors.mjs";
4
+ import { handleOAuthUserInfo } from "../../oauth2/link-account.mjs";
5
+ import { APIError as APIError$1 } from "../../api/index.mjs";
6
+ import { PACKAGE_VERSION } from "../../version.mjs";
7
+ import { toBoolean } from "../../utils/boolean.mjs";
8
+ import { BASE_ERROR_CODES } from "@better-auth/core/error";
9
+ import { isGoogleHostedDomainAllowed, verifyGoogleIdToken } from "@better-auth/core/social-providers";
10
+ import { createAuthEndpoint } from "@better-auth/core/api";
11
+ import * as z from "zod";
12
+ //#region src/plugins/one-tap/index.ts
13
+ const oneTapCallbackBodySchema = z.object({
14
+ idToken: z.string().meta({ description: "Google ID token, which the client obtains from the One Tap API" }),
15
+ /**
16
+ * Sent so the global origin-check middleware validates the post-login
17
+ * redirect target against `trustedOrigins`. Without it the client performs
18
+ * an unvalidated `window.location` redirect, which is an open redirect.
19
+ */
20
+ callbackURL: z.string().meta({ description: "URL to redirect to after a successful sign-in" }).optional()
21
+ });
22
+ const oneTap = (options) => ({
23
+ id: "one-tap",
24
+ version: PACKAGE_VERSION,
25
+ endpoints: { oneTapCallback: createAuthEndpoint("/one-tap/callback", {
26
+ method: "POST",
27
+ body: oneTapCallbackBodySchema,
28
+ metadata: { openapi: {
29
+ summary: "One tap callback",
30
+ description: "Use this endpoint to authenticate with Google One Tap",
31
+ responses: {
32
+ 200: {
33
+ description: "Successful response",
34
+ content: { "application/json": { schema: {
35
+ type: "object",
36
+ properties: {
37
+ session: { $ref: "#/components/schemas/Session" },
38
+ user: { $ref: "#/components/schemas/User" }
39
+ }
40
+ } } }
41
+ },
42
+ 400: { description: "Invalid token" }
43
+ }
44
+ } }
45
+ }, async (ctx) => {
46
+ const { idToken } = ctx.body;
47
+ const googleProvider = typeof ctx.context.options.socialProviders?.google === "function" ? await ctx.context.options.socialProviders?.google() : ctx.context.options.socialProviders?.google;
48
+ const audience = options?.clientId || googleProvider?.clientId;
49
+ if (!audience || Array.isArray(audience) && audience.length === 0) throw new APIError$1("BAD_REQUEST", { message: "Google client ID is required for One Tap. Set it on the oneTap plugin (clientId) or on socialProviders.google." });
50
+ const payload = await verifyGoogleIdToken({
51
+ token: idToken,
52
+ audience
53
+ });
54
+ if (!payload) throw new APIError$1("BAD_REQUEST", { message: "invalid id token" });
55
+ if (!payload.sub) throw new APIError$1("BAD_REQUEST", { message: "invalid id token" });
56
+ const configuredHostedDomain = googleProvider?.hd;
57
+ if (!isGoogleHostedDomainAllowed(configuredHostedDomain, payload.hd)) {
58
+ ctx.context.logger.error(`Google One Tap sign-in rejected: id token hosted domain (hd) "${payload.hd ?? "<missing>"}" does not satisfy the configured "hd" option "${configuredHostedDomain}".`);
59
+ throw new APIError$1("BAD_REQUEST", { message: "invalid id token" });
60
+ }
61
+ const { email: rawEmail, email_verified, name, picture, sub } = payload;
62
+ if (typeof rawEmail !== "string" || !rawEmail) throw new APIError$1("BAD_REQUEST", { message: "Email not available in token" });
63
+ if (typeof sub !== "string" || !sub) throw new APIError$1("BAD_REQUEST", { message: "invalid id token" });
64
+ const result = await handleOAuthUserInfo(ctx, {
65
+ userInfo: {
66
+ id: sub,
67
+ email: rawEmail.toLowerCase(),
68
+ emailVerified: typeof email_verified === "boolean" ? email_verified : toBoolean(email_verified),
69
+ name: typeof name === "string" ? name : "",
70
+ image: typeof picture === "string" ? picture : void 0
71
+ },
72
+ account: {
73
+ providerId: "google",
74
+ accountId: sub,
75
+ idToken,
76
+ scope: "openid,profile,email"
77
+ },
78
+ disableSignUp: options?.disableSignup || googleProvider?.disableSignUp,
79
+ source: {
80
+ method: "oauth",
81
+ oauth: {
82
+ providerId: "google",
83
+ profile: payload
84
+ }
85
+ }
86
+ });
87
+ if (result.error) {
88
+ if (result.error === OAUTH_CALLBACK_ERROR_CODES.EMAIL_NOT_VERIFIED) throw APIError$1.from("FORBIDDEN", BASE_ERROR_CODES.EMAIL_NOT_VERIFIED);
89
+ throw new APIError$1("UNAUTHORIZED", { message: result.error });
90
+ }
91
+ await setSessionCookie(ctx, result.data);
92
+ return ctx.json({
93
+ token: result.data.session.token,
94
+ user: parseUserOutput(ctx.context.options, result.data.user)
95
+ });
96
+ }) },
97
+ options
98
+ });
99
+ //#endregion
100
+ export { oneTap };
@@ -0,0 +1,10 @@
1
+ import { OneTimeTokenOptions, oneTimeToken } from "./index.mjs";
2
+
3
+ //#region src/plugins/one-time-token/client.d.ts
4
+ declare const oneTimeTokenClient: () => {
5
+ id: "one-time-token";
6
+ version: string;
7
+ $InferServerPlugin: ReturnType<typeof oneTimeToken>;
8
+ };
9
+ //#endregion
10
+ export { oneTimeTokenClient };
@@ -0,0 +1,11 @@
1
+ import { PACKAGE_VERSION } from "../../version.mjs";
2
+ //#region src/plugins/one-time-token/client.ts
3
+ const oneTimeTokenClient = () => {
4
+ return {
5
+ id: "one-time-token",
6
+ version: PACKAGE_VERSION,
7
+ $InferServerPlugin: {}
8
+ };
9
+ };
10
+ //#endregion
11
+ export { oneTimeTokenClient };