better-auth 1.2.6-beta.7 → 1.2.7-beta.1

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 (273) hide show
  1. package/dist/adapters/drizzle-adapter/index.cjs +186 -249
  2. package/dist/adapters/drizzle-adapter/index.d.cts +11 -49
  3. package/dist/adapters/drizzle-adapter/index.d.mts +11 -49
  4. package/dist/adapters/drizzle-adapter/index.d.ts +11 -49
  5. package/dist/adapters/drizzle-adapter/index.mjs +186 -249
  6. package/dist/adapters/index.cjs +26 -0
  7. package/dist/adapters/index.d.cts +17 -0
  8. package/dist/adapters/index.d.mts +17 -0
  9. package/dist/adapters/index.d.ts +17 -0
  10. package/dist/adapters/index.mjs +20 -0
  11. package/dist/adapters/kysely-adapter/index.cjs +7 -7
  12. package/dist/adapters/kysely-adapter/index.d.cts +17 -49
  13. package/dist/adapters/kysely-adapter/index.d.mts +17 -49
  14. package/dist/adapters/kysely-adapter/index.d.ts +17 -49
  15. package/dist/adapters/kysely-adapter/index.mjs +8 -8
  16. package/dist/adapters/memory-adapter/index.cjs +7 -8
  17. package/dist/adapters/memory-adapter/index.d.cts +9 -49
  18. package/dist/adapters/memory-adapter/index.d.mts +9 -49
  19. package/dist/adapters/memory-adapter/index.d.ts +9 -49
  20. package/dist/adapters/memory-adapter/index.mjs +8 -9
  21. package/dist/adapters/mongodb-adapter/index.cjs +2 -2
  22. package/dist/adapters/mongodb-adapter/index.d.cts +4 -4
  23. package/dist/adapters/mongodb-adapter/index.d.mts +4 -4
  24. package/dist/adapters/mongodb-adapter/index.d.ts +4 -4
  25. package/dist/adapters/mongodb-adapter/index.mjs +3 -3
  26. package/dist/adapters/prisma-adapter/index.cjs +130 -203
  27. package/dist/adapters/prisma-adapter/index.d.cts +17 -49
  28. package/dist/adapters/prisma-adapter/index.d.mts +17 -49
  29. package/dist/adapters/prisma-adapter/index.d.ts +17 -49
  30. package/dist/adapters/prisma-adapter/index.mjs +131 -204
  31. package/dist/adapters/test.cjs +710 -377
  32. package/dist/adapters/test.d.cts +64 -5
  33. package/dist/adapters/test.d.mts +64 -5
  34. package/dist/adapters/test.d.ts +64 -5
  35. package/dist/adapters/test.mjs +712 -380
  36. package/dist/api/index.cjs +61 -25
  37. package/dist/api/index.d.cts +3 -3
  38. package/dist/api/index.d.mts +3 -3
  39. package/dist/api/index.d.ts +3 -3
  40. package/dist/api/index.mjs +63 -27
  41. package/dist/client/index.d.cts +3 -3
  42. package/dist/client/index.d.mts +3 -3
  43. package/dist/client/index.d.ts +3 -3
  44. package/dist/client/plugins/index.cjs +13 -15
  45. package/dist/client/plugins/index.d.cts +80 -19
  46. package/dist/client/plugins/index.d.mts +80 -19
  47. package/dist/client/plugins/index.d.ts +80 -19
  48. package/dist/client/plugins/index.mjs +13 -16
  49. package/dist/client/react/index.cjs +4 -4
  50. package/dist/client/react/index.d.cts +3 -3
  51. package/dist/client/react/index.d.mts +3 -3
  52. package/dist/client/react/index.d.ts +3 -3
  53. package/dist/client/solid/index.d.cts +3 -3
  54. package/dist/client/solid/index.d.mts +3 -3
  55. package/dist/client/solid/index.d.ts +3 -3
  56. package/dist/client/svelte/index.d.cts +3 -3
  57. package/dist/client/svelte/index.d.mts +3 -3
  58. package/dist/client/svelte/index.d.ts +3 -3
  59. package/dist/client/vue/index.d.cts +3 -3
  60. package/dist/client/vue/index.d.mts +3 -3
  61. package/dist/client/vue/index.d.ts +3 -3
  62. package/dist/cookies/index.cjs +13 -2
  63. package/dist/cookies/index.d.cts +3 -3
  64. package/dist/cookies/index.d.mts +3 -3
  65. package/dist/cookies/index.d.ts +3 -3
  66. package/dist/cookies/index.mjs +13 -2
  67. package/dist/db/index.cjs +6 -5
  68. package/dist/db/index.d.cts +4 -4
  69. package/dist/db/index.d.mts +4 -4
  70. package/dist/db/index.d.ts +4 -4
  71. package/dist/db/index.mjs +7 -6
  72. package/dist/index.cjs +11 -7
  73. package/dist/index.d.cts +4 -4
  74. package/dist/index.d.mts +4 -4
  75. package/dist/index.d.ts +4 -4
  76. package/dist/index.mjs +14 -10
  77. package/dist/integrations/next-js.cjs +4 -5
  78. package/dist/integrations/next-js.d.cts +3 -3
  79. package/dist/integrations/next-js.d.mts +3 -3
  80. package/dist/integrations/next-js.d.ts +3 -3
  81. package/dist/integrations/next-js.mjs +5 -6
  82. package/dist/integrations/node.d.cts +3 -3
  83. package/dist/integrations/node.d.mts +3 -3
  84. package/dist/integrations/node.d.ts +3 -3
  85. package/dist/integrations/react-start.cjs +5 -6
  86. package/dist/integrations/react-start.d.cts +3 -3
  87. package/dist/integrations/react-start.d.mts +3 -3
  88. package/dist/integrations/react-start.d.ts +3 -3
  89. package/dist/integrations/react-start.mjs +6 -7
  90. package/dist/integrations/svelte-kit.d.cts +3 -3
  91. package/dist/integrations/svelte-kit.d.mts +3 -3
  92. package/dist/integrations/svelte-kit.d.ts +3 -3
  93. package/dist/oauth2/index.d.cts +5 -5
  94. package/dist/oauth2/index.d.mts +5 -5
  95. package/dist/oauth2/index.d.ts +5 -5
  96. package/dist/plugins/access/index.d.cts +1 -1
  97. package/dist/plugins/access/index.d.mts +1 -1
  98. package/dist/plugins/access/index.d.ts +1 -1
  99. package/dist/plugins/admin/access/index.d.cts +1 -1
  100. package/dist/plugins/admin/access/index.d.mts +1 -1
  101. package/dist/plugins/admin/access/index.d.ts +1 -1
  102. package/dist/plugins/admin/index.cjs +4 -4
  103. package/dist/plugins/admin/index.d.cts +74 -14
  104. package/dist/plugins/admin/index.d.mts +74 -14
  105. package/dist/plugins/admin/index.d.ts +74 -14
  106. package/dist/plugins/admin/index.mjs +5 -5
  107. package/dist/plugins/anonymous/index.cjs +4 -5
  108. package/dist/plugins/anonymous/index.d.cts +3 -3
  109. package/dist/plugins/anonymous/index.d.mts +3 -3
  110. package/dist/plugins/anonymous/index.d.ts +3 -3
  111. package/dist/plugins/anonymous/index.mjs +5 -6
  112. package/dist/plugins/bearer/index.cjs +2 -2
  113. package/dist/plugins/bearer/index.d.cts +3 -3
  114. package/dist/plugins/bearer/index.d.mts +3 -3
  115. package/dist/plugins/bearer/index.d.ts +3 -3
  116. package/dist/plugins/bearer/index.mjs +3 -3
  117. package/dist/plugins/captcha/index.cjs +110 -45
  118. package/dist/plugins/captcha/index.d.cts +26 -6
  119. package/dist/plugins/captcha/index.d.mts +26 -6
  120. package/dist/plugins/captcha/index.d.ts +26 -6
  121. package/dist/plugins/captcha/index.mjs +110 -45
  122. package/dist/plugins/custom-session/index.cjs +24 -5
  123. package/dist/plugins/custom-session/index.d.cts +25 -6
  124. package/dist/plugins/custom-session/index.d.mts +25 -6
  125. package/dist/plugins/custom-session/index.d.ts +25 -6
  126. package/dist/plugins/custom-session/index.mjs +25 -6
  127. package/dist/plugins/email-otp/index.cjs +96 -30
  128. package/dist/plugins/email-otp/index.d.cts +33 -10
  129. package/dist/plugins/email-otp/index.d.mts +33 -10
  130. package/dist/plugins/email-otp/index.d.ts +33 -10
  131. package/dist/plugins/email-otp/index.mjs +97 -31
  132. package/dist/plugins/generic-oauth/index.cjs +81 -20
  133. package/dist/plugins/generic-oauth/index.d.cts +46 -3
  134. package/dist/plugins/generic-oauth/index.d.mts +46 -3
  135. package/dist/plugins/generic-oauth/index.d.ts +46 -3
  136. package/dist/plugins/generic-oauth/index.mjs +82 -21
  137. package/dist/plugins/haveibeenpwned/index.cjs +98 -0
  138. package/dist/plugins/haveibeenpwned/index.d.cts +36 -0
  139. package/dist/plugins/haveibeenpwned/index.d.mts +36 -0
  140. package/dist/plugins/haveibeenpwned/index.d.ts +36 -0
  141. package/dist/plugins/haveibeenpwned/index.mjs +96 -0
  142. package/dist/plugins/index.cjs +583 -19
  143. package/dist/plugins/index.d.cts +7 -5
  144. package/dist/plugins/index.d.mts +7 -5
  145. package/dist/plugins/index.d.ts +7 -5
  146. package/dist/plugins/index.mjs +583 -21
  147. package/dist/plugins/jwt/index.cjs +45 -21
  148. package/dist/plugins/jwt/index.d.cts +52 -6
  149. package/dist/plugins/jwt/index.d.mts +52 -6
  150. package/dist/plugins/jwt/index.d.ts +52 -6
  151. package/dist/plugins/jwt/index.mjs +46 -22
  152. package/dist/plugins/magic-link/index.cjs +3 -3
  153. package/dist/plugins/magic-link/index.mjs +4 -4
  154. package/dist/plugins/multi-session/index.cjs +3 -3
  155. package/dist/plugins/multi-session/index.d.cts +3 -3
  156. package/dist/plugins/multi-session/index.d.mts +3 -3
  157. package/dist/plugins/multi-session/index.d.ts +3 -3
  158. package/dist/plugins/multi-session/index.mjs +4 -4
  159. package/dist/plugins/oauth-proxy/index.cjs +4 -4
  160. package/dist/plugins/oauth-proxy/index.d.cts +3 -3
  161. package/dist/plugins/oauth-proxy/index.d.mts +3 -3
  162. package/dist/plugins/oauth-proxy/index.d.ts +3 -3
  163. package/dist/plugins/oauth-proxy/index.mjs +5 -5
  164. package/dist/plugins/oidc-provider/index.cjs +227 -8
  165. package/dist/plugins/oidc-provider/index.d.cts +215 -3
  166. package/dist/plugins/oidc-provider/index.d.mts +215 -3
  167. package/dist/plugins/oidc-provider/index.d.ts +215 -3
  168. package/dist/plugins/oidc-provider/index.mjs +228 -9
  169. package/dist/plugins/one-tap/index.cjs +5 -5
  170. package/dist/plugins/one-tap/index.mjs +6 -6
  171. package/dist/plugins/one-time-token/index.cjs +119 -0
  172. package/dist/plugins/one-time-token/index.d.cts +134 -0
  173. package/dist/plugins/one-time-token/index.d.mts +134 -0
  174. package/dist/plugins/one-time-token/index.d.ts +134 -0
  175. package/dist/plugins/one-time-token/index.mjs +117 -0
  176. package/dist/plugins/open-api/index.cjs +3 -3
  177. package/dist/plugins/open-api/index.d.cts +3 -3
  178. package/dist/plugins/open-api/index.d.mts +3 -3
  179. package/dist/plugins/open-api/index.d.ts +3 -3
  180. package/dist/plugins/open-api/index.mjs +4 -4
  181. package/dist/plugins/organization/access/index.d.cts +1 -1
  182. package/dist/plugins/organization/access/index.d.mts +1 -1
  183. package/dist/plugins/organization/access/index.d.ts +1 -1
  184. package/dist/plugins/organization/index.cjs +4 -4
  185. package/dist/plugins/organization/index.d.cts +708 -55
  186. package/dist/plugins/organization/index.d.mts +708 -55
  187. package/dist/plugins/organization/index.d.ts +708 -55
  188. package/dist/plugins/organization/index.mjs +5 -5
  189. package/dist/plugins/passkey/index.cjs +82 -8
  190. package/dist/plugins/passkey/index.d.cts +72 -3
  191. package/dist/plugins/passkey/index.d.mts +72 -3
  192. package/dist/plugins/passkey/index.d.ts +72 -3
  193. package/dist/plugins/passkey/index.mjs +83 -9
  194. package/dist/plugins/phone-number/index.cjs +194 -26
  195. package/dist/plugins/phone-number/index.d.cts +132 -8
  196. package/dist/plugins/phone-number/index.d.mts +132 -8
  197. package/dist/plugins/phone-number/index.d.ts +132 -8
  198. package/dist/plugins/phone-number/index.mjs +195 -27
  199. package/dist/plugins/sso/index.cjs +190 -7
  200. package/dist/plugins/sso/index.d.cts +181 -15
  201. package/dist/plugins/sso/index.d.mts +181 -15
  202. package/dist/plugins/sso/index.d.ts +181 -15
  203. package/dist/plugins/sso/index.mjs +191 -8
  204. package/dist/plugins/two-factor/index.cjs +443 -92
  205. package/dist/plugins/two-factor/index.d.cts +230 -396
  206. package/dist/plugins/two-factor/index.d.mts +230 -396
  207. package/dist/plugins/two-factor/index.d.ts +230 -396
  208. package/dist/plugins/two-factor/index.mjs +431 -80
  209. package/dist/plugins/username/index.cjs +34 -31
  210. package/dist/plugins/username/index.d.cts +15 -12
  211. package/dist/plugins/username/index.d.mts +15 -12
  212. package/dist/plugins/username/index.d.ts +15 -12
  213. package/dist/plugins/username/index.mjs +35 -32
  214. package/dist/shared/better-auth.1DR6suCQ.mjs +307 -0
  215. package/dist/shared/{better-auth.BSsp73pg.cjs → better-auth.B7cZ2juS.cjs} +15 -14
  216. package/dist/shared/{better-auth.bKwabe3I.d.mts → better-auth.B88xucNq.d.mts} +529 -39
  217. package/dist/shared/{better-auth.CApEjVDP.cjs → better-auth.BW8BpneG.cjs} +4 -1
  218. package/dist/shared/{better-auth.BiQsvaIP.d.cts → better-auth.BcU1Kjyq.d.cts} +2051 -518
  219. package/dist/shared/better-auth.BfG24BjZ.cjs +118 -0
  220. package/dist/shared/{better-auth.A3TjrU8G.mjs → better-auth.Bk5IMdhM.mjs} +32 -12
  221. package/dist/shared/{better-auth.D9VnBkRI.mjs → better-auth.Bm9HxIzE.mjs} +47 -24
  222. package/dist/shared/{better-auth.BRf6Iynu.d.ts → better-auth.Bwc-6kOr.d.ts} +1 -1
  223. package/dist/shared/{better-auth.D-oLmHIj.d.mts → better-auth.CA2hFK4N.d.ts} +2051 -518
  224. package/dist/shared/{better-auth.Dmhe30iW.d.mts → better-auth.CGukGrxT.d.cts} +1 -1
  225. package/dist/shared/{better-auth.CsSpq0zL.cjs → better-auth.CHUzBidy.cjs} +46 -23
  226. package/dist/shared/{better-auth.DWRligF8.d.cts → better-auth.CT9J6rD-.d.cts} +539 -7
  227. package/dist/shared/better-auth.CVCo5Z2T.cjs +310 -0
  228. package/dist/shared/{better-auth.D4jH-sJA.mjs → better-auth.CWwVo_61.mjs} +458 -118
  229. package/dist/shared/{better-auth.Bi8FQwDD.d.cts → better-auth.CYegVoq1.d.cts} +1 -1
  230. package/dist/shared/{better-auth.Bi8FQwDD.d.mts → better-auth.CYegVoq1.d.mts} +1 -1
  231. package/dist/shared/{better-auth.Bi8FQwDD.d.ts → better-auth.CYegVoq1.d.ts} +1 -1
  232. package/dist/shared/{better-auth.CepcSj5H.mjs → better-auth.Cc72UxUH.mjs} +1 -2
  233. package/dist/shared/{better-auth.BWp5dztg.d.ts → better-auth.CmN4mlPh.d.ts} +539 -7
  234. package/dist/shared/{better-auth.DH3YjMQH.mjs → better-auth.Cqykj82J.mjs} +1 -1
  235. package/dist/shared/{better-auth.wcdMj2cT.d.mts → better-auth.DIt2e3lu.d.mts} +539 -7
  236. package/dist/shared/{better-auth.BANAxdkL.d.ts → better-auth.DNTAFSt1.d.ts} +529 -39
  237. package/dist/shared/{better-auth.DU2QNVc_.d.ts → better-auth.DQ7OSJbI.d.mts} +2051 -518
  238. package/dist/shared/{better-auth.DLTzKoOS.cjs → better-auth.DSVbLSt7.cjs} +4 -1
  239. package/dist/shared/{better-auth.B2Fw1vhH.d.cts → better-auth.DTiSPWEk.d.cts} +529 -39
  240. package/dist/shared/better-auth.DURsStt9.mjs +116 -0
  241. package/dist/shared/{better-auth.BIjcZ_vt.cjs → better-auth.DYoLD99C.cjs} +31 -11
  242. package/dist/shared/{better-auth.CV1L7TPV.cjs → better-auth.D_ZIX1O8.cjs} +317 -47
  243. package/dist/shared/{better-auth.C5H9XEzZ.cjs → better-auth.DcWKCjjf.cjs} +1 -2
  244. package/dist/shared/{better-auth.BDYXUcLv.cjs → better-auth.Dg0siV5C.cjs} +457 -117
  245. package/dist/shared/better-auth.DjryM8pE.cjs +760 -0
  246. package/dist/shared/{better-auth.DPBQN9Fs.mjs → better-auth.Dn_Ms1Uf.mjs} +318 -48
  247. package/dist/shared/{better-auth.DiG4KL2x.mjs → better-auth.OuYYTHC7.mjs} +4 -1
  248. package/dist/shared/{better-auth.DtC8i3pf.d.cts → better-auth.S1jimRbX.d.mts} +1 -1
  249. package/dist/shared/better-auth.SPmq4a4z.d.mts +344 -0
  250. package/dist/shared/{better-auth.cOCrlspr.mjs → better-auth.bkwPl2G4.mjs} +4 -1
  251. package/dist/shared/better-auth.cp2rC2iM.d.ts +344 -0
  252. package/dist/shared/better-auth.eVy4DZvP.d.cts +344 -0
  253. package/dist/shared/{better-auth.BrOpzmqo.mjs → better-auth.iKoUsdFE.mjs} +15 -14
  254. package/dist/shared/better-auth.rSYJCd3o.mjs +758 -0
  255. package/dist/social-providers/index.cjs +75 -3
  256. package/dist/social-providers/index.d.cts +2 -2
  257. package/dist/social-providers/index.d.mts +2 -2
  258. package/dist/social-providers/index.d.ts +2 -2
  259. package/dist/social-providers/index.mjs +77 -6
  260. package/dist/types/index.d.cts +4 -4
  261. package/dist/types/index.d.mts +4 -4
  262. package/dist/types/index.d.ts +4 -4
  263. package/package.json +42 -5
  264. package/dist/chunks/server.cjs +0 -905
  265. package/dist/chunks/server.mjs +0 -895
  266. package/dist/shared/better-auth.BcoSd9tC.mjs +0 -10
  267. package/dist/shared/better-auth.BnRFp-t0.mjs +0 -405
  268. package/dist/shared/better-auth.C1-vpKly.cjs +0 -12
  269. package/dist/shared/better-auth.ClTSOgiD.mjs +0 -140
  270. package/dist/shared/better-auth.DC8JQbiE.mjs +0 -173
  271. package/dist/shared/better-auth.DWHWPllD.cjs +0 -175
  272. package/dist/shared/better-auth.DqLjzBlO.cjs +0 -408
  273. package/dist/shared/better-auth.m575EIBC.cjs +0 -144
@@ -7,6 +7,7 @@ const socialProviders_index = require('../social-providers/index.cjs');
7
7
  require('@better-auth/utils/random');
8
8
  const state = require('./better-auth.QbbyHMYf.cjs');
9
9
  const logger = require('./better-auth.GpOOav9x.cjs');
10
+ const json = require('./better-auth.D3mtHEZg.cjs');
10
11
  const date = require('./better-auth.C1hdVENX.cjs');
11
12
  const id = require('./better-auth.Bg6iw3ig.cjs');
12
13
  require('@better-auth/utils/hash');
@@ -20,7 +21,7 @@ require('@better-auth/utils');
20
21
  require('@better-auth/utils/hex');
21
22
  require('@noble/hashes/utils');
22
23
  const random = require('./better-auth.CYeOI8C-.cjs');
23
- const schema$1 = require('./better-auth.C5H9XEzZ.cjs');
24
+ const schema$1 = require('./better-auth.DcWKCjjf.cjs');
24
25
  const env = require('./better-auth.DiSjtgs9.cjs');
25
26
  const hmac = require('@better-auth/utils/hmac');
26
27
  require('@better-fetch/fetch');
@@ -28,7 +29,6 @@ require('defu');
28
29
  const jwt = require('./better-auth.BMYo0QR-.cjs');
29
30
  const url = require('./better-auth.C-R0J0n1.cjs');
30
31
  const errors = require('jose/errors');
31
- const json = require('./better-auth.D3mtHEZg.cjs');
32
32
  const binary = require('@better-auth/utils/binary');
33
33
 
34
34
  const optionsMiddleware = betterCall.createMiddleware(async () => {
@@ -323,14 +323,13 @@ const getSession = () => createAuthEndpoint(
323
323
  type: "object",
324
324
  properties: {
325
325
  session: {
326
- type: "object",
327
326
  $ref: "#/components/schemas/Session"
328
327
  },
329
328
  user: {
330
- type: "object",
331
329
  $ref: "#/components/schemas/User"
332
330
  }
333
- }
331
+ },
332
+ required: ["session", "user"]
334
333
  }
335
334
  }
336
335
  }
@@ -406,7 +405,7 @@ const getSession = () => createAuthEndpoint(
406
405
  const updateAge = ctx.context.sessionConfig.updateAge;
407
406
  const sessionIsDueToBeUpdatedDate = session.session.expiresAt.valueOf() - expiresIn * 1e3 + updateAge * 1e3;
408
407
  const shouldBeUpdated = sessionIsDueToBeUpdatedDate <= Date.now();
409
- if (shouldBeUpdated) {
408
+ if (shouldBeUpdated && (!ctx.query?.disableRefresh || !ctx.context.options.session?.disableSessionRefresh)) {
410
409
  const updatedSession = await ctx.context.internalAdapter.updateSession(
411
410
  session.session.token,
412
411
  {
@@ -523,18 +522,7 @@ const listSessions = () => createAuthEndpoint(
523
522
  schema: {
524
523
  type: "array",
525
524
  items: {
526
- type: "object",
527
- properties: {
528
- token: {
529
- type: "string"
530
- },
531
- userId: {
532
- type: "string"
533
- },
534
- expiresAt: {
535
- type: "string"
536
- }
537
- }
525
+ $ref: "#/components/schemas/Session"
538
526
  }
539
527
  }
540
528
  }
@@ -582,13 +570,33 @@ const revokeSession = createAuthEndpoint(
582
570
  type: "object",
583
571
  properties: {
584
572
  token: {
585
- type: "string"
573
+ type: "string",
574
+ description: "The token to revoke"
586
575
  }
587
576
  },
588
577
  required: ["token"]
589
578
  }
590
579
  }
591
580
  }
581
+ },
582
+ responses: {
583
+ "200": {
584
+ description: "Success",
585
+ content: {
586
+ "application/json": {
587
+ schema: {
588
+ type: "object",
589
+ properties: {
590
+ status: {
591
+ type: "boolean",
592
+ description: "Indicates if the session was revoked successfully"
593
+ }
594
+ },
595
+ required: ["status"]
596
+ }
597
+ }
598
+ }
599
+ }
592
600
  }
593
601
  }
594
602
  }
@@ -636,7 +644,8 @@ const revokeSessions = createAuthEndpoint(
636
644
  type: "object",
637
645
  properties: {
638
646
  status: {
639
- type: "boolean"
647
+ type: "boolean",
648
+ description: "Indicates if all sessions were revoked successfully"
640
649
  }
641
650
  },
642
651
  required: ["status"]
@@ -683,9 +692,11 @@ const revokeOtherSessions = createAuthEndpoint(
683
692
  type: "object",
684
693
  properties: {
685
694
  status: {
686
- type: "boolean"
695
+ type: "boolean",
696
+ description: "Indicates if all other sessions were revoked successfully"
687
697
  }
688
- }
698
+ },
699
+ required: ["status"]
689
700
  }
690
701
  }
691
702
  }
@@ -776,11 +787,14 @@ const sendVerificationEmail = createAuthEndpoint(
776
787
  properties: {
777
788
  email: {
778
789
  type: "string",
779
- description: "The email to send the verification email to"
790
+ description: "The email to send the verification email to",
791
+ example: "user@example.com"
780
792
  },
781
793
  callbackURL: {
782
794
  type: "string",
783
- description: "The URL to use for email verification callback"
795
+ description: "The URL to use for email verification callback",
796
+ example: "https://example.com/callback",
797
+ nullable: true
784
798
  }
785
799
  },
786
800
  required: ["email"]
@@ -797,7 +811,26 @@ const sendVerificationEmail = createAuthEndpoint(
797
811
  type: "object",
798
812
  properties: {
799
813
  status: {
800
- type: "boolean"
814
+ type: "boolean",
815
+ description: "Indicates if the email was sent successfully",
816
+ example: true
817
+ }
818
+ }
819
+ }
820
+ }
821
+ }
822
+ },
823
+ "400": {
824
+ description: "Bad Request",
825
+ content: {
826
+ "application/json": {
827
+ schema: {
828
+ type: "object",
829
+ properties: {
830
+ message: {
831
+ type: "string",
832
+ description: "Error message",
833
+ example: "Verification email isn't enabled"
801
834
  }
802
835
  }
803
836
  }
@@ -844,6 +877,26 @@ const verifyEmail = createAuthEndpoint(
844
877
  metadata: {
845
878
  openapi: {
846
879
  description: "Verify the email of the user",
880
+ parameters: [
881
+ {
882
+ name: "token",
883
+ in: "query",
884
+ description: "The token to verify the email",
885
+ required: true,
886
+ schema: {
887
+ type: "string"
888
+ }
889
+ },
890
+ {
891
+ name: "callbackURL",
892
+ in: "query",
893
+ description: "The URL to redirect to after email verification",
894
+ required: false,
895
+ schema: {
896
+ type: "string"
897
+ }
898
+ }
899
+ ],
847
900
  responses: {
848
901
  "200": {
849
902
  description: "Success",
@@ -854,13 +907,52 @@ const verifyEmail = createAuthEndpoint(
854
907
  properties: {
855
908
  user: {
856
909
  type: "object",
857
- ref: "#/components/schemas/User"
910
+ properties: {
911
+ id: {
912
+ type: "string",
913
+ description: "User ID"
914
+ },
915
+ email: {
916
+ type: "string",
917
+ description: "User email"
918
+ },
919
+ name: {
920
+ type: "string",
921
+ description: "User name"
922
+ },
923
+ image: {
924
+ type: "string",
925
+ description: "User image URL"
926
+ },
927
+ emailVerified: {
928
+ type: "boolean",
929
+ description: "Indicates if the user email is verified"
930
+ },
931
+ createdAt: {
932
+ type: "string",
933
+ description: "User creation date"
934
+ },
935
+ updatedAt: {
936
+ type: "string",
937
+ description: "User update date"
938
+ }
939
+ },
940
+ required: [
941
+ "id",
942
+ "email",
943
+ "name",
944
+ "image",
945
+ "emailVerified",
946
+ "createdAt",
947
+ "updatedAt"
948
+ ]
858
949
  },
859
950
  status: {
860
- type: "boolean"
861
- }
862
- },
863
- required: ["user", "status"]
951
+ type: "boolean",
952
+ description: "Indicates if the email was verified successfully"
953
+ },
954
+ required: ["user", "status"]
955
+ }
864
956
  }
865
957
  }
866
958
  }
@@ -982,7 +1074,7 @@ const verifyEmail = createAuthEndpoint(
982
1074
  if (!currentSession || currentSession.user.email !== parsed.email) {
983
1075
  const session = await ctx.context.internalAdapter.createSession(
984
1076
  user.user.id,
985
- ctx.request
1077
+ ctx.headers
986
1078
  );
987
1079
  if (!session) {
988
1080
  throw new betterCall.APIError("INTERNAL_SERVER_ERROR", {
@@ -1020,7 +1112,8 @@ async function handleOAuthUserInfo(c, {
1020
1112
  userInfo,
1021
1113
  account,
1022
1114
  callbackURL,
1023
- disableSignUp
1115
+ disableSignUp,
1116
+ overrideUserInfo
1024
1117
  }) {
1025
1118
  const dbUser = await c.context.internalAdapter.findOAuthUser(
1026
1119
  userInfo.email.toLowerCase(),
@@ -1098,6 +1191,13 @@ async function handleOAuthUserInfo(c, {
1098
1191
  );
1099
1192
  }
1100
1193
  }
1194
+ if (overrideUserInfo) {
1195
+ await c.context.internalAdapter.updateUser(dbUser.user.id, {
1196
+ ...userInfo,
1197
+ email: userInfo.email.toLowerCase(),
1198
+ emailVerified: userInfo.email.toLocaleLowerCase() === dbUser.user.email ? dbUser.user.emailVerified || userInfo.emailVerified : userInfo.emailVerified
1199
+ });
1200
+ }
1101
1201
  } else {
1102
1202
  if (disableSignUp) {
1103
1203
  return {
@@ -1107,11 +1207,11 @@ async function handleOAuthUserInfo(c, {
1107
1207
  };
1108
1208
  }
1109
1209
  try {
1210
+ const { id: _, ...restUserInfo } = userInfo;
1110
1211
  user = await c.context.internalAdapter.createOAuthUser(
1111
1212
  {
1112
- ...userInfo,
1113
- email: userInfo.email.toLowerCase(),
1114
- id: void 0
1213
+ ...restUserInfo,
1214
+ email: userInfo.email.toLowerCase()
1115
1215
  },
1116
1216
  {
1117
1217
  accessToken: account.accessToken,
@@ -1167,7 +1267,7 @@ async function handleOAuthUserInfo(c, {
1167
1267
  }
1168
1268
  const session = await c.context.internalAdapter.createSession(
1169
1269
  user.id,
1170
- c.request
1270
+ c.headers
1171
1271
  );
1172
1272
  if (!session) {
1173
1273
  return {
@@ -1297,29 +1397,64 @@ const signInSocial = createAuthEndpoint(
1297
1397
  metadata: {
1298
1398
  openapi: {
1299
1399
  description: "Sign in with a social provider",
1400
+ operationId: "socialSignIn",
1300
1401
  responses: {
1301
1402
  "200": {
1302
- description: "Success",
1403
+ description: "Success - Returns either session details or redirect URL",
1303
1404
  content: {
1304
1405
  "application/json": {
1305
1406
  schema: {
1407
+ // todo: we need support for multiple schema
1306
1408
  type: "object",
1409
+ description: "Session response when idToken is provided",
1307
1410
  properties: {
1308
- token: {
1309
- type: "string"
1310
- },
1311
- user: {
1312
- type: "object",
1313
- ref: "#/components/schemas/User"
1411
+ redirect: {
1412
+ type: "boolean",
1413
+ enum: [false]
1314
1414
  },
1315
- url: {
1316
- type: "string"
1415
+ token: {
1416
+ type: "string",
1417
+ description: "Session token",
1418
+ url: {
1419
+ type: "null",
1420
+ nullable: true
1421
+ },
1422
+ user: {
1423
+ type: "object",
1424
+ properties: {
1425
+ id: { type: "string" },
1426
+ email: { type: "string" },
1427
+ name: {
1428
+ type: "string",
1429
+ nullable: true
1430
+ },
1431
+ image: {
1432
+ type: "string",
1433
+ nullable: true
1434
+ },
1435
+ emailVerified: {
1436
+ type: "boolean"
1437
+ },
1438
+ createdAt: {
1439
+ type: "string",
1440
+ format: "date-time"
1441
+ },
1442
+ updatedAt: {
1443
+ type: "string",
1444
+ format: "date-time"
1445
+ }
1446
+ },
1447
+ required: [
1448
+ "id",
1449
+ "email",
1450
+ "emailVerified",
1451
+ "createdAt",
1452
+ "updatedAt"
1453
+ ]
1454
+ }
1317
1455
  },
1318
- redirect: {
1319
- type: "boolean"
1320
- }
1321
- },
1322
- required: ["redirect"]
1456
+ required: ["redirect", "token", "user"]
1457
+ }
1323
1458
  }
1324
1459
  }
1325
1460
  }
@@ -1378,7 +1513,14 @@ const signInSocial = createAuthEndpoint(
1378
1513
  message: BASE_ERROR_CODES.FAILED_TO_GET_USER_INFO
1379
1514
  });
1380
1515
  }
1381
- if (!userInfo.user.email) {
1516
+ const mapProfileToUser = await provider.options?.mapProfileToUser?.(
1517
+ userInfo.user
1518
+ );
1519
+ const userData = {
1520
+ ...userInfo.user,
1521
+ ...mapProfileToUser
1522
+ };
1523
+ if (!userData.email) {
1382
1524
  c.context.logger.error("User email not found", {
1383
1525
  provider: c.body.provider
1384
1526
  });
@@ -1388,11 +1530,12 @@ const signInSocial = createAuthEndpoint(
1388
1530
  }
1389
1531
  const data = await handleOAuthUserInfo(c, {
1390
1532
  userInfo: {
1391
- email: userInfo.user.email,
1392
- id: userInfo.user.id,
1393
- name: userInfo.user.name || "",
1394
- image: userInfo.user.image,
1395
- emailVerified: userInfo.user.emailVerified || false
1533
+ ...userData,
1534
+ email: userData.email,
1535
+ id: userData.id,
1536
+ name: userData.name || "",
1537
+ image: userData.image,
1538
+ emailVerified: userData.emailVerified || false
1396
1539
  },
1397
1540
  account: {
1398
1541
  providerId: provider.id,
@@ -1473,27 +1616,61 @@ const signInEmail = createAuthEndpoint(
1473
1616
  description: "Sign in with email and password",
1474
1617
  responses: {
1475
1618
  "200": {
1476
- description: "Success",
1619
+ description: "Success - Returns either session details or redirect URL",
1477
1620
  content: {
1478
1621
  "application/json": {
1479
1622
  schema: {
1623
+ // todo: we need support for multiple schema
1480
1624
  type: "object",
1625
+ description: "Session response when idToken is provided",
1481
1626
  properties: {
1482
- token: {
1483
- type: "string"
1627
+ redirect: {
1628
+ type: "boolean",
1629
+ enum: [false]
1484
1630
  },
1485
- user: {
1486
- type: "object",
1487
- ref: "#/components/schemas/User"
1631
+ token: {
1632
+ type: "string",
1633
+ description: "Session token"
1488
1634
  },
1489
1635
  url: {
1490
- type: "string"
1636
+ type: "null",
1637
+ nullable: true
1491
1638
  },
1492
- redirect: {
1493
- type: "boolean"
1639
+ user: {
1640
+ type: "object",
1641
+ properties: {
1642
+ id: { type: "string" },
1643
+ email: { type: "string" },
1644
+ name: {
1645
+ type: "string",
1646
+ nullable: true
1647
+ },
1648
+ image: {
1649
+ type: "string",
1650
+ nullable: true
1651
+ },
1652
+ emailVerified: {
1653
+ type: "boolean"
1654
+ },
1655
+ createdAt: {
1656
+ type: "string",
1657
+ format: "date-time"
1658
+ },
1659
+ updatedAt: {
1660
+ type: "string",
1661
+ format: "date-time"
1662
+ }
1663
+ },
1664
+ required: [
1665
+ "id",
1666
+ "email",
1667
+ "emailVerified",
1668
+ "createdAt",
1669
+ "updatedAt"
1670
+ ]
1494
1671
  }
1495
1672
  },
1496
- required: ["token", "user", "redirect"]
1673
+ required: ["redirect", "token", "user"]
1497
1674
  }
1498
1675
  }
1499
1676
  }
@@ -1620,7 +1797,8 @@ const schema = zod.z.object({
1620
1797
  error: zod.z.string().optional(),
1621
1798
  device_id: zod.z.string().optional(),
1622
1799
  error_description: zod.z.string().optional(),
1623
- state: zod.z.string().optional()
1800
+ state: zod.z.string().optional(),
1801
+ user: zod.z.string().optional()
1624
1802
  });
1625
1803
  const callbackOAuth = createAuthEndpoint(
1626
1804
  "/callback/:id",
@@ -1699,7 +1877,10 @@ const callbackOAuth = createAuthEndpoint(
1699
1877
  c.context.logger.error("", e);
1700
1878
  throw redirectOnError("invalid_code");
1701
1879
  }
1702
- const userInfo = await provider.getUserInfo(tokens).then((res) => res?.user);
1880
+ const userInfo = await provider.getUserInfo({
1881
+ ...tokens,
1882
+ user: c.body?.user ? json.safeJSONParse(c.body.user) : void 0
1883
+ }).then((res) => res?.user);
1703
1884
  if (!userInfo) {
1704
1885
  c.context.logger.error("Unable to get user info");
1705
1886
  return redirectOnError("unable_to_get_user_info");
@@ -1722,19 +1903,34 @@ const callbackOAuth = createAuthEndpoint(
1722
1903
  if (existingAccount.userId.toString() !== link.userId.toString()) {
1723
1904
  return redirectOnError("account_already_linked_to_different_user");
1724
1905
  }
1725
- }
1726
- const newAccount = await c.context.internalAdapter.createAccount(
1727
- {
1728
- userId: link.userId,
1729
- providerId: provider.id,
1730
- accountId: userInfo.id,
1731
- ...tokens,
1732
- scope: tokens.scopes?.join(",")
1733
- },
1734
- c
1735
- );
1736
- if (!newAccount) {
1737
- return redirectOnError("unable_to_link_account");
1906
+ const updateData = Object.fromEntries(
1907
+ Object.entries({
1908
+ accessToken: tokens.accessToken,
1909
+ idToken: tokens.idToken,
1910
+ refreshToken: tokens.refreshToken,
1911
+ accessTokenExpiresAt: tokens.accessTokenExpiresAt,
1912
+ refreshTokenExpiresAt: tokens.refreshTokenExpiresAt,
1913
+ scope: tokens.scopes?.join(",")
1914
+ }).filter(([_, value]) => value !== void 0)
1915
+ );
1916
+ await c.context.internalAdapter.updateAccount(
1917
+ existingAccount.id,
1918
+ updateData
1919
+ );
1920
+ } else {
1921
+ const newAccount = await c.context.internalAdapter.createAccount(
1922
+ {
1923
+ userId: link.userId,
1924
+ providerId: provider.id,
1925
+ accountId: userInfo.id,
1926
+ ...tokens,
1927
+ scope: tokens.scopes?.join(",")
1928
+ },
1929
+ c
1930
+ );
1931
+ if (!newAccount) {
1932
+ return redirectOnError("unable_to_link_account");
1933
+ }
1738
1934
  }
1739
1935
  let toRedirectTo2;
1740
1936
  try {
@@ -2116,9 +2312,9 @@ const updateUser = () => createAuthEndpoint(
2116
2312
  schema: {
2117
2313
  type: "object",
2118
2314
  properties: {
2119
- user: {
2120
- type: "object",
2121
- ref: "#/components/schemas/User"
2315
+ status: {
2316
+ type: "boolean",
2317
+ description: "Indicates if the update was successful"
2122
2318
  }
2123
2319
  }
2124
2320
  }
@@ -2197,17 +2393,66 @@ const changePassword = createAuthEndpoint(
2197
2393
  description: "Change the password of the user",
2198
2394
  responses: {
2199
2395
  "200": {
2200
- description: "Success",
2396
+ description: "Password successfully changed",
2201
2397
  content: {
2202
2398
  "application/json": {
2203
2399
  schema: {
2204
2400
  type: "object",
2205
2401
  properties: {
2402
+ token: {
2403
+ type: "string",
2404
+ nullable: true,
2405
+ // Only present if revokeOtherSessions is true
2406
+ description: "New session token if other sessions were revoked"
2407
+ },
2206
2408
  user: {
2207
- description: "The user object",
2208
- $ref: "#/components/schemas/User"
2409
+ type: "object",
2410
+ properties: {
2411
+ id: {
2412
+ type: "string",
2413
+ description: "The unique identifier of the user"
2414
+ },
2415
+ email: {
2416
+ type: "string",
2417
+ format: "email",
2418
+ description: "The email address of the user"
2419
+ },
2420
+ name: {
2421
+ type: "string",
2422
+ description: "The name of the user"
2423
+ },
2424
+ image: {
2425
+ type: "string",
2426
+ format: "uri",
2427
+ nullable: true,
2428
+ description: "The profile image URL of the user"
2429
+ },
2430
+ emailVerified: {
2431
+ type: "boolean",
2432
+ description: "Whether the email has been verified"
2433
+ },
2434
+ createdAt: {
2435
+ type: "string",
2436
+ format: "date-time",
2437
+ description: "When the user was created"
2438
+ },
2439
+ updatedAt: {
2440
+ type: "string",
2441
+ format: "date-time",
2442
+ description: "When the user was last updated"
2443
+ }
2444
+ },
2445
+ required: [
2446
+ "id",
2447
+ "email",
2448
+ "name",
2449
+ "emailVerified",
2450
+ "createdAt",
2451
+ "updatedAt"
2452
+ ]
2209
2453
  }
2210
- }
2454
+ },
2455
+ required: ["user"]
2211
2456
  }
2212
2457
  }
2213
2458
  }
@@ -2373,11 +2618,23 @@ const deleteUser = createAuthEndpoint(
2373
2618
  description: "Delete the user",
2374
2619
  responses: {
2375
2620
  "200": {
2376
- description: "Success",
2621
+ description: "User deletion processed successfully",
2377
2622
  content: {
2378
2623
  "application/json": {
2379
2624
  schema: {
2380
- type: "object"
2625
+ type: "object",
2626
+ properties: {
2627
+ success: {
2628
+ type: "boolean",
2629
+ description: "Indicates if the operation was successful"
2630
+ },
2631
+ message: {
2632
+ type: "string",
2633
+ enum: ["User deleted", "Verification email sent"],
2634
+ description: "Status message of the deletion process"
2635
+ }
2636
+ },
2637
+ required: ["success", "message"]
2381
2638
  }
2382
2639
  }
2383
2640
  }
@@ -2447,7 +2704,9 @@ const deleteUser = createAuthEndpoint(
2447
2704
  await ctx.context.internalAdapter.createVerificationValue({
2448
2705
  value: session.user.id,
2449
2706
  identifier: `delete-account-${token}`,
2450
- expiresAt: new Date(Date.now() + 1e3 * 60 * 60 * 24)
2707
+ expiresAt: new Date(
2708
+ Date.now() + (ctx.context.options.user.deleteUser?.deleteTokenExpiresIn || 60 * 60 * 24) * 1e3
2709
+ )
2451
2710
  });
2452
2711
  const url = `${ctx.context.baseURL}/delete-user/callback?token=${token}&callbackURL=${ctx.body.callbackURL || "/"}`;
2453
2712
  await ctx.context.options.user.deleteUser.sendDeleteAccountVerification(
@@ -2489,7 +2748,36 @@ const deleteUserCallback = createAuthEndpoint(
2489
2748
  token: zod.z.string(),
2490
2749
  callbackURL: zod.z.string().optional()
2491
2750
  }),
2492
- use: [originCheck((ctx) => ctx.query.callbackURL)]
2751
+ use: [originCheck((ctx) => ctx.query.callbackURL)],
2752
+ metadata: {
2753
+ openapi: {
2754
+ description: "Callback to complete user deletion with verification token",
2755
+ responses: {
2756
+ "200": {
2757
+ description: "User successfully deleted",
2758
+ content: {
2759
+ "application/json": {
2760
+ schema: {
2761
+ type: "object",
2762
+ properties: {
2763
+ success: {
2764
+ type: "boolean",
2765
+ description: "Indicates if the deletion was successful"
2766
+ },
2767
+ message: {
2768
+ type: "string",
2769
+ enum: ["User deleted"],
2770
+ description: "Confirmation message"
2771
+ }
2772
+ },
2773
+ required: ["success", "message"]
2774
+ }
2775
+ }
2776
+ }
2777
+ }
2778
+ }
2779
+ }
2780
+ }
2493
2781
  },
2494
2782
  async (ctx) => {
2495
2783
  if (!ctx.context.options.user?.deleteUser?.enabled) {
@@ -2556,20 +2844,24 @@ const changeEmail = createAuthEndpoint(
2556
2844
  openapi: {
2557
2845
  responses: {
2558
2846
  "200": {
2559
- description: "Success",
2847
+ description: "Email change request processed successfully",
2560
2848
  content: {
2561
2849
  "application/json": {
2562
2850
  schema: {
2563
2851
  type: "object",
2564
2852
  properties: {
2565
- user: {
2566
- type: "object",
2567
- ref: "#/components/schemas/User"
2568
- },
2569
2853
  status: {
2570
- type: "boolean"
2854
+ type: "boolean",
2855
+ description: "Indicates if the request was successful"
2856
+ },
2857
+ message: {
2858
+ type: "string",
2859
+ enum: ["Email updated", "Verification email sent"],
2860
+ description: "Status message of the email change process",
2861
+ nullable: true
2571
2862
  }
2572
- }
2863
+ },
2864
+ required: ["status"]
2573
2865
  }
2574
2866
  }
2575
2867
  }
@@ -2772,7 +3064,8 @@ const error = createAuthEndpoint(
2772
3064
  content: {
2773
3065
  "text/html": {
2774
3066
  schema: {
2775
- type: "string"
3067
+ type: "string",
3068
+ description: "The HTML content of the error page"
2776
3069
  }
2777
3070
  }
2778
3071
  }
@@ -2801,16 +3094,18 @@ const ok = createAuthEndpoint(
2801
3094
  description: "Check if the API is working",
2802
3095
  responses: {
2803
3096
  "200": {
2804
- description: "Success",
3097
+ description: "API is working",
2805
3098
  content: {
2806
3099
  "application/json": {
2807
3100
  schema: {
2808
3101
  type: "object",
2809
3102
  properties: {
2810
3103
  ok: {
2811
- type: "boolean"
3104
+ type: "boolean",
3105
+ description: "Indicates if the API is working"
2812
3106
  }
2813
- }
3107
+ },
3108
+ required: ["ok"]
2814
3109
  }
2815
3110
  }
2816
3111
  }
@@ -2851,20 +3146,32 @@ const listUserAccounts = createAuthEndpoint(
2851
3146
  type: "string"
2852
3147
  },
2853
3148
  createdAt: {
2854
- type: "string"
3149
+ type: "string",
3150
+ format: "date-time"
2855
3151
  },
2856
3152
  updatedAt: {
3153
+ type: "string",
3154
+ format: "date-time"
3155
+ }
3156
+ },
3157
+ accountId: {
3158
+ type: "string"
3159
+ },
3160
+ scopes: {
3161
+ type: "array",
3162
+ items: {
2857
3163
  type: "string"
2858
- },
2859
- accountId: {
2860
- type: "string"
2861
- },
2862
- scopes: {
2863
- type: "array",
2864
- items: { type: "string" }
2865
3164
  }
2866
3165
  }
2867
- }
3166
+ },
3167
+ required: [
3168
+ "id",
3169
+ "provider",
3170
+ "createdAt",
3171
+ "updatedAt",
3172
+ "accountId",
3173
+ "scopes"
3174
+ ]
2868
3175
  }
2869
3176
  }
2870
3177
  }
@@ -2907,7 +3214,15 @@ const linkSocialAccount = createAuthEndpoint(
2907
3214
  */
2908
3215
  provider: zod.z.enum(socialProviders_index.socialProviderList, {
2909
3216
  description: "The OAuth2 provider to use"
2910
- })
3217
+ }),
3218
+ /**
3219
+ * Additional scopes to request when linking the account.
3220
+ * This is useful for requesting additional permissions when
3221
+ * linking a social account compared to the initial authentication.
3222
+ */
3223
+ scopes: zod.z.array(zod.z.string(), {
3224
+ description: "Additional scopes to request from the provider"
3225
+ }).optional()
2911
3226
  }),
2912
3227
  use: [sessionMiddleware],
2913
3228
  metadata: {
@@ -2922,10 +3237,12 @@ const linkSocialAccount = createAuthEndpoint(
2922
3237
  type: "object",
2923
3238
  properties: {
2924
3239
  url: {
2925
- type: "string"
3240
+ type: "string",
3241
+ description: "The authorization URL to redirect the user to"
2926
3242
  },
2927
3243
  redirect: {
2928
- type: "boolean"
3244
+ type: "boolean",
3245
+ description: "Indicates if the user should be redirected to the authorization URL"
2929
3246
  }
2930
3247
  },
2931
3248
  required: ["url", "redirect"]
@@ -2960,7 +3277,8 @@ const linkSocialAccount = createAuthEndpoint(
2960
3277
  const url = await provider.createAuthorizationURL({
2961
3278
  state: state$1.state,
2962
3279
  codeVerifier: state$1.codeVerifier,
2963
- redirectURI: `${c.context.baseURL}/callback/${provider.id}`
3280
+ redirectURI: `${c.context.baseURL}/callback/${provider.id}`,
3281
+ scopes: c.body.scopes
2964
3282
  });
2965
3283
  return c.json({
2966
3284
  url: url.toString(),
@@ -2976,7 +3294,29 @@ const unlinkAccount = createAuthEndpoint(
2976
3294
  providerId: zod.z.string(),
2977
3295
  accountId: zod.z.string().optional()
2978
3296
  }),
2979
- use: [freshSessionMiddleware]
3297
+ use: [freshSessionMiddleware],
3298
+ metadata: {
3299
+ openapi: {
3300
+ description: "Unlink an account",
3301
+ responses: {
3302
+ "200": {
3303
+ description: "Success",
3304
+ content: {
3305
+ "application/json": {
3306
+ schema: {
3307
+ type: "object",
3308
+ properties: {
3309
+ status: {
3310
+ type: "boolean"
3311
+ }
3312
+ }
3313
+ }
3314
+ }
3315
+ }
3316
+ }
3317
+ }
3318
+ }
3319
+ }
2980
3320
  },
2981
3321
  async (ctx) => {
2982
3322
  const { providerId, accountId } = ctx.body;