@sirketio/auth 0.0.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 (594) hide show
  1. package/dist/_virtual/_rolldown/runtime.mjs +36 -0
  2. package/dist/adapter/index.d.mts +4 -0
  3. package/dist/adapter/index.mjs +7 -0
  4. package/dist/api/index.d.mts +3872 -0
  5. package/dist/api/index.mjs +206 -0
  6. package/dist/api/index.mjs.map +1 -0
  7. package/dist/api/middlewares/index.d.mts +1 -0
  8. package/dist/api/middlewares/index.mjs +3 -0
  9. package/dist/api/middlewares/origin-check.d.mts +18 -0
  10. package/dist/api/middlewares/origin-check.mjs +140 -0
  11. package/dist/api/middlewares/origin-check.mjs.map +1 -0
  12. package/dist/api/rate-limiter/index.mjs +204 -0
  13. package/dist/api/rate-limiter/index.mjs.map +1 -0
  14. package/dist/api/routes/account.d.mts +410 -0
  15. package/dist/api/routes/account.mjs +493 -0
  16. package/dist/api/routes/account.mjs.map +1 -0
  17. package/dist/api/routes/callback.d.mts +31 -0
  18. package/dist/api/routes/callback.mjs +179 -0
  19. package/dist/api/routes/callback.mjs.map +1 -0
  20. package/dist/api/routes/email-verification.d.mts +161 -0
  21. package/dist/api/routes/email-verification.mjs +299 -0
  22. package/dist/api/routes/email-verification.mjs.map +1 -0
  23. package/dist/api/routes/error.d.mts +28 -0
  24. package/dist/api/routes/error.mjs +386 -0
  25. package/dist/api/routes/error.mjs.map +1 -0
  26. package/dist/api/routes/index.d.mts +11 -0
  27. package/dist/api/routes/index.mjs +13 -0
  28. package/dist/api/routes/ok.d.mts +36 -0
  29. package/dist/api/routes/ok.mjs +30 -0
  30. package/dist/api/routes/ok.mjs.map +1 -0
  31. package/dist/api/routes/password.d.mts +182 -0
  32. package/dist/api/routes/password.mjs +198 -0
  33. package/dist/api/routes/password.mjs.map +1 -0
  34. package/dist/api/routes/session.d.mts +415 -0
  35. package/dist/api/routes/session.mjs +483 -0
  36. package/dist/api/routes/session.mjs.map +1 -0
  37. package/dist/api/routes/sign-in.d.mts +171 -0
  38. package/dist/api/routes/sign-in.mjs +263 -0
  39. package/dist/api/routes/sign-in.mjs.map +1 -0
  40. package/dist/api/routes/sign-out.d.mts +36 -0
  41. package/dist/api/routes/sign-out.mjs +33 -0
  42. package/dist/api/routes/sign-out.mjs.map +1 -0
  43. package/dist/api/routes/sign-up.d.mts +160 -0
  44. package/dist/api/routes/sign-up.mjs +227 -0
  45. package/dist/api/routes/sign-up.mjs.map +1 -0
  46. package/dist/api/routes/update-user.d.mts +445 -0
  47. package/dist/api/routes/update-user.mjs +493 -0
  48. package/dist/api/routes/update-user.mjs.map +1 -0
  49. package/dist/api/state/oauth.d.mts +18 -0
  50. package/dist/api/state/oauth.mjs +8 -0
  51. package/dist/api/state/oauth.mjs.map +1 -0
  52. package/dist/api/state/should-session-refresh.d.mts +13 -0
  53. package/dist/api/state/should-session-refresh.mjs +16 -0
  54. package/dist/api/state/should-session-refresh.mjs.map +1 -0
  55. package/dist/api/to-auth-endpoints.mjs +197 -0
  56. package/dist/api/to-auth-endpoints.mjs.map +1 -0
  57. package/dist/auth/base.mjs +45 -0
  58. package/dist/auth/base.mjs.map +1 -0
  59. package/dist/auth/minimal.d.mts +12 -0
  60. package/dist/auth/minimal.mjs +14 -0
  61. package/dist/auth/minimal.mjs.map +1 -0
  62. package/dist/auth/trusted-origins.mjs +31 -0
  63. package/dist/auth/trusted-origins.mjs.map +1 -0
  64. package/dist/client/broadcast-channel.d.mts +20 -0
  65. package/dist/client/broadcast-channel.mjs +46 -0
  66. package/dist/client/broadcast-channel.mjs.map +1 -0
  67. package/dist/client/config.mjs +90 -0
  68. package/dist/client/config.mjs.map +1 -0
  69. package/dist/client/fetch-plugins.mjs +18 -0
  70. package/dist/client/fetch-plugins.mjs.map +1 -0
  71. package/dist/client/focus-manager.d.mts +11 -0
  72. package/dist/client/focus-manager.mjs +32 -0
  73. package/dist/client/focus-manager.mjs.map +1 -0
  74. package/dist/client/index.d.mts +33 -0
  75. package/dist/client/index.mjs +21 -0
  76. package/dist/client/index.mjs.map +1 -0
  77. package/dist/client/online-manager.d.mts +12 -0
  78. package/dist/client/online-manager.mjs +35 -0
  79. package/dist/client/online-manager.mjs.map +1 -0
  80. package/dist/client/parser.mjs +73 -0
  81. package/dist/client/parser.mjs.map +1 -0
  82. package/dist/client/path-to-object.d.mts +65 -0
  83. package/dist/client/plugins/index.d.mts +53 -0
  84. package/dist/client/plugins/index.mjs +30 -0
  85. package/dist/client/plugins/infer-plugin.d.mts +16 -0
  86. package/dist/client/plugins/infer-plugin.mjs +11 -0
  87. package/dist/client/plugins/infer-plugin.mjs.map +1 -0
  88. package/dist/client/proxy.mjs +79 -0
  89. package/dist/client/proxy.mjs.map +1 -0
  90. package/dist/client/query.d.mts +23 -0
  91. package/dist/client/query.mjs +98 -0
  92. package/dist/client/query.mjs.map +1 -0
  93. package/dist/client/react/index.d.mts +128 -0
  94. package/dist/client/react/index.mjs +24 -0
  95. package/dist/client/react/index.mjs.map +1 -0
  96. package/dist/client/react/react-store.d.mts +47 -0
  97. package/dist/client/react/react-store.mjs +47 -0
  98. package/dist/client/react/react-store.mjs.map +1 -0
  99. package/dist/client/session-atom.mjs +29 -0
  100. package/dist/client/session-atom.mjs.map +1 -0
  101. package/dist/client/session-refresh.d.mts +28 -0
  102. package/dist/client/session-refresh.mjs +140 -0
  103. package/dist/client/session-refresh.mjs.map +1 -0
  104. package/dist/client/types.d.mts +41 -0
  105. package/dist/client/vanilla.d.mts +127 -0
  106. package/dist/client/vanilla.mjs +20 -0
  107. package/dist/client/vanilla.mjs.map +1 -0
  108. package/dist/context/create-context.mjs +211 -0
  109. package/dist/context/create-context.mjs.map +1 -0
  110. package/dist/context/helpers.mjs +83 -0
  111. package/dist/context/helpers.mjs.map +1 -0
  112. package/dist/context/init.mjs +20 -0
  113. package/dist/context/init.mjs.map +1 -0
  114. package/dist/cookies/cookie-utils.d.mts +29 -0
  115. package/dist/cookies/cookie-utils.mjs +105 -0
  116. package/dist/cookies/cookie-utils.mjs.map +1 -0
  117. package/dist/cookies/index.d.mts +121 -0
  118. package/dist/cookies/index.mjs +261 -0
  119. package/dist/cookies/index.mjs.map +1 -0
  120. package/dist/cookies/session-store.d.mts +36 -0
  121. package/dist/cookies/session-store.mjs +200 -0
  122. package/dist/cookies/session-store.mjs.map +1 -0
  123. package/dist/crypto/buffer.d.mts +8 -0
  124. package/dist/crypto/buffer.mjs +18 -0
  125. package/dist/crypto/buffer.mjs.map +1 -0
  126. package/dist/crypto/index.d.mts +27 -0
  127. package/dist/crypto/index.mjs +38 -0
  128. package/dist/crypto/index.mjs.map +1 -0
  129. package/dist/crypto/jwt.d.mts +8 -0
  130. package/dist/crypto/jwt.mjs +95 -0
  131. package/dist/crypto/jwt.mjs.map +1 -0
  132. package/dist/crypto/password.d.mts +12 -0
  133. package/dist/crypto/password.mjs +36 -0
  134. package/dist/crypto/password.mjs.map +1 -0
  135. package/dist/crypto/random.d.mts +5 -0
  136. package/dist/crypto/random.mjs +8 -0
  137. package/dist/crypto/random.mjs.map +1 -0
  138. package/dist/db/adapter-base.d.mts +8 -0
  139. package/dist/db/adapter-base.mjs +19 -0
  140. package/dist/db/adapter-base.mjs.map +1 -0
  141. package/dist/db/field-converter.d.mts +8 -0
  142. package/dist/db/field-converter.mjs +21 -0
  143. package/dist/db/field-converter.mjs.map +1 -0
  144. package/dist/db/field.d.mts +42 -0
  145. package/dist/db/get-schema.d.mts +11 -0
  146. package/dist/db/get-schema.mjs +39 -0
  147. package/dist/db/get-schema.mjs.map +1 -0
  148. package/dist/db/index.d.mts +18 -0
  149. package/dist/db/index.mjs +34 -0
  150. package/dist/db/index.mjs.map +1 -0
  151. package/dist/db/internal-adapter.d.mts +14 -0
  152. package/dist/db/internal-adapter.mjs +616 -0
  153. package/dist/db/internal-adapter.mjs.map +1 -0
  154. package/dist/db/schema.d.mts +49 -0
  155. package/dist/db/schema.mjs +118 -0
  156. package/dist/db/schema.mjs.map +1 -0
  157. package/dist/db/to-zod.d.mts +36 -0
  158. package/dist/db/to-zod.mjs +26 -0
  159. package/dist/db/to-zod.mjs.map +1 -0
  160. package/dist/db/verification-token-storage.mjs +28 -0
  161. package/dist/db/verification-token-storage.mjs.map +1 -0
  162. package/dist/db/with-hooks.d.mts +33 -0
  163. package/dist/db/with-hooks.mjs +159 -0
  164. package/dist/db/with-hooks.mjs.map +1 -0
  165. package/dist/index.d.mts +53 -0
  166. package/dist/index.mjs +27 -0
  167. package/dist/integrations/next-js.d.mts +29 -0
  168. package/dist/integrations/next-js.mjs +85 -0
  169. package/dist/integrations/next-js.mjs.map +1 -0
  170. package/dist/oauth2/index.d.mts +5 -0
  171. package/dist/oauth2/index.mjs +7 -0
  172. package/dist/oauth2/link-account.d.mts +48 -0
  173. package/dist/oauth2/link-account.mjs +143 -0
  174. package/dist/oauth2/link-account.mjs.map +1 -0
  175. package/dist/oauth2/state.d.mts +26 -0
  176. package/dist/oauth2/state.mjs +51 -0
  177. package/dist/oauth2/state.mjs.map +1 -0
  178. package/dist/oauth2/utils.d.mts +8 -0
  179. package/dist/oauth2/utils.mjs +31 -0
  180. package/dist/oauth2/utils.mjs.map +1 -0
  181. package/dist/plugins/access/access.d.mts +30 -0
  182. package/dist/plugins/access/access.mjs +46 -0
  183. package/dist/plugins/access/access.mjs.map +1 -0
  184. package/dist/plugins/access/index.d.mts +3 -0
  185. package/dist/plugins/access/index.mjs +3 -0
  186. package/dist/plugins/access/types.d.mts +17 -0
  187. package/dist/plugins/additional-fields/client.d.mts +96 -0
  188. package/dist/plugins/additional-fields/client.mjs +11 -0
  189. package/dist/plugins/additional-fields/client.mjs.map +1 -0
  190. package/dist/plugins/admin/access/index.d.mts +2 -0
  191. package/dist/plugins/admin/access/index.mjs +3 -0
  192. package/dist/plugins/admin/access/statement.d.mts +118 -0
  193. package/dist/plugins/admin/access/statement.mjs +53 -0
  194. package/dist/plugins/admin/access/statement.mjs.map +1 -0
  195. package/dist/plugins/admin/admin.d.mts +911 -0
  196. package/dist/plugins/admin/admin.mjs +95 -0
  197. package/dist/plugins/admin/admin.mjs.map +1 -0
  198. package/dist/plugins/admin/client.d.mts +76 -0
  199. package/dist/plugins/admin/client.mjs +36 -0
  200. package/dist/plugins/admin/client.mjs.map +1 -0
  201. package/dist/plugins/admin/error-codes.d.mts +29 -0
  202. package/dist/plugins/admin/error-codes.mjs +30 -0
  203. package/dist/plugins/admin/error-codes.mjs.map +1 -0
  204. package/dist/plugins/admin/has-permission.mjs +16 -0
  205. package/dist/plugins/admin/has-permission.mjs.map +1 -0
  206. package/dist/plugins/admin/index.d.mts +3 -0
  207. package/dist/plugins/admin/index.mjs +3 -0
  208. package/dist/plugins/admin/routes.mjs +841 -0
  209. package/dist/plugins/admin/routes.mjs.map +1 -0
  210. package/dist/plugins/admin/schema.d.mts +40 -0
  211. package/dist/plugins/admin/schema.mjs +34 -0
  212. package/dist/plugins/admin/schema.mjs.map +1 -0
  213. package/dist/plugins/admin/types.d.mts +89 -0
  214. package/dist/plugins/api-key/adapter.mjs +468 -0
  215. package/dist/plugins/api-key/adapter.mjs.map +1 -0
  216. package/dist/plugins/api-key/client.d.mts +46 -0
  217. package/dist/plugins/api-key/client.mjs +19 -0
  218. package/dist/plugins/api-key/client.mjs.map +1 -0
  219. package/dist/plugins/api-key/error-codes.d.mts +33 -0
  220. package/dist/plugins/api-key/error-codes.mjs +34 -0
  221. package/dist/plugins/api-key/error-codes.mjs.map +1 -0
  222. package/dist/plugins/api-key/index.d.mts +1251 -0
  223. package/dist/plugins/api-key/index.mjs +134 -0
  224. package/dist/plugins/api-key/index.mjs.map +1 -0
  225. package/dist/plugins/api-key/rate-limit.mjs +74 -0
  226. package/dist/plugins/api-key/rate-limit.mjs.map +1 -0
  227. package/dist/plugins/api-key/routes/create-api-key.mjs +252 -0
  228. package/dist/plugins/api-key/routes/create-api-key.mjs.map +1 -0
  229. package/dist/plugins/api-key/routes/delete-all-expired-api-keys.mjs +24 -0
  230. package/dist/plugins/api-key/routes/delete-all-expired-api-keys.mjs.map +1 -0
  231. package/dist/plugins/api-key/routes/delete-api-key.mjs +74 -0
  232. package/dist/plugins/api-key/routes/delete-api-key.mjs.map +1 -0
  233. package/dist/plugins/api-key/routes/get-api-key.mjs +158 -0
  234. package/dist/plugins/api-key/routes/get-api-key.mjs.map +1 -0
  235. package/dist/plugins/api-key/routes/index.mjs +71 -0
  236. package/dist/plugins/api-key/routes/index.mjs.map +1 -0
  237. package/dist/plugins/api-key/routes/list-api-keys.mjs +194 -0
  238. package/dist/plugins/api-key/routes/list-api-keys.mjs.map +1 -0
  239. package/dist/plugins/api-key/routes/update-api-key.mjs +248 -0
  240. package/dist/plugins/api-key/routes/update-api-key.mjs.map +1 -0
  241. package/dist/plugins/api-key/routes/verify-api-key.mjs +224 -0
  242. package/dist/plugins/api-key/routes/verify-api-key.mjs.map +1 -0
  243. package/dist/plugins/api-key/schema.d.mts +199 -0
  244. package/dist/plugins/api-key/schema.mjs +130 -0
  245. package/dist/plugins/api-key/schema.mjs.map +1 -0
  246. package/dist/plugins/api-key/types.d.mts +346 -0
  247. package/dist/plugins/bearer/index.d.mts +45 -0
  248. package/dist/plugins/bearer/index.mjs +66 -0
  249. package/dist/plugins/bearer/index.mjs.map +1 -0
  250. package/dist/plugins/captcha/constants.d.mts +10 -0
  251. package/dist/plugins/captcha/constants.mjs +22 -0
  252. package/dist/plugins/captcha/constants.mjs.map +1 -0
  253. package/dist/plugins/captcha/error-codes.mjs +16 -0
  254. package/dist/plugins/captcha/error-codes.mjs.map +1 -0
  255. package/dist/plugins/captcha/index.d.mts +21 -0
  256. package/dist/plugins/captcha/index.mjs +62 -0
  257. package/dist/plugins/captcha/index.mjs.map +1 -0
  258. package/dist/plugins/captcha/types.d.mts +28 -0
  259. package/dist/plugins/captcha/utils.mjs +11 -0
  260. package/dist/plugins/captcha/utils.mjs.map +1 -0
  261. package/dist/plugins/captcha/verify-handlers/captchafox.mjs +28 -0
  262. package/dist/plugins/captcha/verify-handlers/captchafox.mjs.map +1 -0
  263. package/dist/plugins/captcha/verify-handlers/cloudflare-turnstile.mjs +26 -0
  264. package/dist/plugins/captcha/verify-handlers/cloudflare-turnstile.mjs.map +1 -0
  265. package/dist/plugins/captcha/verify-handlers/google-recaptcha.mjs +30 -0
  266. package/dist/plugins/captcha/verify-handlers/google-recaptcha.mjs.map +1 -0
  267. package/dist/plugins/captcha/verify-handlers/h-captcha.mjs +28 -0
  268. package/dist/plugins/captcha/verify-handlers/h-captcha.mjs.map +1 -0
  269. package/dist/plugins/captcha/verify-handlers/index.mjs +6 -0
  270. package/dist/plugins/custom-session/client.d.mts +17 -0
  271. package/dist/plugins/custom-session/client.mjs +11 -0
  272. package/dist/plugins/custom-session/client.mjs.map +1 -0
  273. package/dist/plugins/custom-session/index.d.mts +72 -0
  274. package/dist/plugins/custom-session/index.mjs +78 -0
  275. package/dist/plugins/custom-session/index.mjs.map +1 -0
  276. package/dist/plugins/device-authorization/client.d.mts +17 -0
  277. package/dist/plugins/device-authorization/client.mjs +18 -0
  278. package/dist/plugins/device-authorization/client.mjs.map +1 -0
  279. package/dist/plugins/device-authorization/error-codes.mjs +21 -0
  280. package/dist/plugins/device-authorization/error-codes.mjs.map +1 -0
  281. package/dist/plugins/device-authorization/index.d.mts +424 -0
  282. package/dist/plugins/device-authorization/index.mjs +50 -0
  283. package/dist/plugins/device-authorization/index.mjs.map +1 -0
  284. package/dist/plugins/device-authorization/routes.mjs +510 -0
  285. package/dist/plugins/device-authorization/routes.mjs.map +1 -0
  286. package/dist/plugins/device-authorization/schema.mjs +57 -0
  287. package/dist/plugins/device-authorization/schema.mjs.map +1 -0
  288. package/dist/plugins/email-otp/client.d.mts +21 -0
  289. package/dist/plugins/email-otp/client.mjs +18 -0
  290. package/dist/plugins/email-otp/client.mjs.map +1 -0
  291. package/dist/plugins/email-otp/error-codes.d.mts +11 -0
  292. package/dist/plugins/email-otp/error-codes.mjs +12 -0
  293. package/dist/plugins/email-otp/error-codes.mjs.map +1 -0
  294. package/dist/plugins/email-otp/index.d.mts +428 -0
  295. package/dist/plugins/email-otp/index.mjs +130 -0
  296. package/dist/plugins/email-otp/index.mjs.map +1 -0
  297. package/dist/plugins/email-otp/otp-token.mjs +29 -0
  298. package/dist/plugins/email-otp/otp-token.mjs.map +1 -0
  299. package/dist/plugins/email-otp/routes.mjs +631 -0
  300. package/dist/plugins/email-otp/routes.mjs.map +1 -0
  301. package/dist/plugins/email-otp/types.d.mts +86 -0
  302. package/dist/plugins/email-otp/utils.mjs +17 -0
  303. package/dist/plugins/email-otp/utils.mjs.map +1 -0
  304. package/dist/plugins/generic-oauth/client.d.mts +33 -0
  305. package/dist/plugins/generic-oauth/client.mjs +14 -0
  306. package/dist/plugins/generic-oauth/client.mjs.map +1 -0
  307. package/dist/plugins/generic-oauth/error-codes.d.mts +16 -0
  308. package/dist/plugins/generic-oauth/error-codes.mjs +17 -0
  309. package/dist/plugins/generic-oauth/error-codes.mjs.map +1 -0
  310. package/dist/plugins/generic-oauth/index.d.mts +201 -0
  311. package/dist/plugins/generic-oauth/index.mjs +145 -0
  312. package/dist/plugins/generic-oauth/index.mjs.map +1 -0
  313. package/dist/plugins/generic-oauth/providers/auth0.d.mts +37 -0
  314. package/dist/plugins/generic-oauth/providers/auth0.mjs +62 -0
  315. package/dist/plugins/generic-oauth/providers/auth0.mjs.map +1 -0
  316. package/dist/plugins/generic-oauth/providers/gumroad.d.mts +32 -0
  317. package/dist/plugins/generic-oauth/providers/gumroad.mjs +60 -0
  318. package/dist/plugins/generic-oauth/providers/gumroad.mjs.map +1 -0
  319. package/dist/plugins/generic-oauth/providers/hubspot.d.mts +37 -0
  320. package/dist/plugins/generic-oauth/providers/hubspot.mjs +60 -0
  321. package/dist/plugins/generic-oauth/providers/hubspot.mjs.map +1 -0
  322. package/dist/plugins/generic-oauth/providers/index.d.mts +9 -0
  323. package/dist/plugins/generic-oauth/providers/index.mjs +11 -0
  324. package/dist/plugins/generic-oauth/providers/keycloak.d.mts +37 -0
  325. package/dist/plugins/generic-oauth/providers/keycloak.mjs +62 -0
  326. package/dist/plugins/generic-oauth/providers/keycloak.mjs.map +1 -0
  327. package/dist/plugins/generic-oauth/providers/line.d.mts +55 -0
  328. package/dist/plugins/generic-oauth/providers/line.mjs +91 -0
  329. package/dist/plugins/generic-oauth/providers/line.mjs.map +1 -0
  330. package/dist/plugins/generic-oauth/providers/microsoft-entra-id.d.mts +37 -0
  331. package/dist/plugins/generic-oauth/providers/microsoft-entra-id.mjs +66 -0
  332. package/dist/plugins/generic-oauth/providers/microsoft-entra-id.mjs.map +1 -0
  333. package/dist/plugins/generic-oauth/providers/okta.d.mts +37 -0
  334. package/dist/plugins/generic-oauth/providers/okta.mjs +62 -0
  335. package/dist/plugins/generic-oauth/providers/okta.mjs.map +1 -0
  336. package/dist/plugins/generic-oauth/providers/patreon.d.mts +30 -0
  337. package/dist/plugins/generic-oauth/providers/patreon.mjs +59 -0
  338. package/dist/plugins/generic-oauth/providers/patreon.mjs.map +1 -0
  339. package/dist/plugins/generic-oauth/providers/slack.d.mts +30 -0
  340. package/dist/plugins/generic-oauth/providers/slack.mjs +61 -0
  341. package/dist/plugins/generic-oauth/providers/slack.mjs.map +1 -0
  342. package/dist/plugins/generic-oauth/routes.mjs +411 -0
  343. package/dist/plugins/generic-oauth/routes.mjs.map +1 -0
  344. package/dist/plugins/generic-oauth/types.d.mts +159 -0
  345. package/dist/plugins/haveibeenpwned/index.d.mts +46 -0
  346. package/dist/plugins/haveibeenpwned/index.mjs +57 -0
  347. package/dist/plugins/haveibeenpwned/index.mjs.map +1 -0
  348. package/dist/plugins/index.d.mts +65 -0
  349. package/dist/plugins/index.mjs +48 -0
  350. package/dist/plugins/jwt/adapter.mjs +27 -0
  351. package/dist/plugins/jwt/adapter.mjs.map +1 -0
  352. package/dist/plugins/jwt/client.d.mts +40 -0
  353. package/dist/plugins/jwt/client.mjs +19 -0
  354. package/dist/plugins/jwt/client.mjs.map +1 -0
  355. package/dist/plugins/jwt/index.d.mts +224 -0
  356. package/dist/plugins/jwt/index.mjs +202 -0
  357. package/dist/plugins/jwt/index.mjs.map +1 -0
  358. package/dist/plugins/jwt/schema.d.mts +26 -0
  359. package/dist/plugins/jwt/schema.mjs +23 -0
  360. package/dist/plugins/jwt/schema.mjs.map +1 -0
  361. package/dist/plugins/jwt/sign.d.mts +57 -0
  362. package/dist/plugins/jwt/sign.mjs +66 -0
  363. package/dist/plugins/jwt/sign.mjs.map +1 -0
  364. package/dist/plugins/jwt/types.d.mts +194 -0
  365. package/dist/plugins/jwt/utils.d.mts +42 -0
  366. package/dist/plugins/jwt/utils.mjs +64 -0
  367. package/dist/plugins/jwt/utils.mjs.map +1 -0
  368. package/dist/plugins/jwt/verify.d.mts +12 -0
  369. package/dist/plugins/jwt/verify.mjs +46 -0
  370. package/dist/plugins/jwt/verify.mjs.map +1 -0
  371. package/dist/plugins/last-login-method/client.d.mts +38 -0
  372. package/dist/plugins/last-login-method/client.mjs +32 -0
  373. package/dist/plugins/last-login-method/client.mjs.map +1 -0
  374. package/dist/plugins/last-login-method/index.d.mts +118 -0
  375. package/dist/plugins/last-login-method/index.mjs +76 -0
  376. package/dist/plugins/last-login-method/index.mjs.map +1 -0
  377. package/dist/plugins/magic-link/client.d.mts +10 -0
  378. package/dist/plugins/magic-link/client.mjs +11 -0
  379. package/dist/plugins/magic-link/client.mjs.map +1 -0
  380. package/dist/plugins/magic-link/index.d.mts +193 -0
  381. package/dist/plugins/magic-link/index.mjs +177 -0
  382. package/dist/plugins/magic-link/index.mjs.map +1 -0
  383. package/dist/plugins/magic-link/utils.mjs +12 -0
  384. package/dist/plugins/magic-link/utils.mjs.map +1 -0
  385. package/dist/plugins/mcp/authorize.mjs +133 -0
  386. package/dist/plugins/mcp/authorize.mjs.map +1 -0
  387. package/dist/plugins/mcp/index.d.mts +458 -0
  388. package/dist/plugins/mcp/index.mjs +717 -0
  389. package/dist/plugins/mcp/index.mjs.map +1 -0
  390. package/dist/plugins/multi-session/client.d.mts +19 -0
  391. package/dist/plugins/multi-session/client.mjs +20 -0
  392. package/dist/plugins/multi-session/client.mjs.map +1 -0
  393. package/dist/plugins/multi-session/error-codes.d.mts +9 -0
  394. package/dist/plugins/multi-session/error-codes.mjs +8 -0
  395. package/dist/plugins/multi-session/error-codes.mjs.map +1 -0
  396. package/dist/plugins/multi-session/index.d.mts +235 -0
  397. package/dist/plugins/multi-session/index.mjs +172 -0
  398. package/dist/plugins/multi-session/index.mjs.map +1 -0
  399. package/dist/plugins/oauth-proxy/index.d.mts +97 -0
  400. package/dist/plugins/oauth-proxy/index.mjs +305 -0
  401. package/dist/plugins/oauth-proxy/index.mjs.map +1 -0
  402. package/dist/plugins/oauth-proxy/utils.mjs +51 -0
  403. package/dist/plugins/oauth-proxy/utils.mjs.map +1 -0
  404. package/dist/plugins/oidc-provider/authorize.mjs +194 -0
  405. package/dist/plugins/oidc-provider/authorize.mjs.map +1 -0
  406. package/dist/plugins/oidc-provider/client.d.mts +12 -0
  407. package/dist/plugins/oidc-provider/client.mjs +11 -0
  408. package/dist/plugins/oidc-provider/client.mjs.map +1 -0
  409. package/dist/plugins/oidc-provider/error.mjs +17 -0
  410. package/dist/plugins/oidc-provider/error.mjs.map +1 -0
  411. package/dist/plugins/oidc-provider/index.d.mts +702 -0
  412. package/dist/plugins/oidc-provider/index.mjs +1093 -0
  413. package/dist/plugins/oidc-provider/index.mjs.map +1 -0
  414. package/dist/plugins/oidc-provider/schema.d.mts +160 -0
  415. package/dist/plugins/oidc-provider/schema.mjs +132 -0
  416. package/dist/plugins/oidc-provider/schema.mjs.map +1 -0
  417. package/dist/plugins/oidc-provider/types.d.mts +517 -0
  418. package/dist/plugins/oidc-provider/utils/prompt.mjs +19 -0
  419. package/dist/plugins/oidc-provider/utils/prompt.mjs.map +1 -0
  420. package/dist/plugins/oidc-provider/utils.mjs +15 -0
  421. package/dist/plugins/oidc-provider/utils.mjs.map +1 -0
  422. package/dist/plugins/one-tap/client.d.mts +174 -0
  423. package/dist/plugins/one-tap/client.mjs +188 -0
  424. package/dist/plugins/one-tap/client.mjs.map +1 -0
  425. package/dist/plugins/one-tap/index.d.mts +83 -0
  426. package/dist/plugins/one-tap/index.mjs +95 -0
  427. package/dist/plugins/one-tap/index.mjs.map +1 -0
  428. package/dist/plugins/one-time-token/client.d.mts +10 -0
  429. package/dist/plugins/one-time-token/client.mjs +11 -0
  430. package/dist/plugins/one-time-token/client.mjs.map +1 -0
  431. package/dist/plugins/one-time-token/index.d.mts +133 -0
  432. package/dist/plugins/one-time-token/index.mjs +82 -0
  433. package/dist/plugins/one-time-token/index.mjs.map +1 -0
  434. package/dist/plugins/one-time-token/utils.mjs +12 -0
  435. package/dist/plugins/one-time-token/utils.mjs.map +1 -0
  436. package/dist/plugins/open-api/generator.d.mts +115 -0
  437. package/dist/plugins/open-api/generator.mjs +315 -0
  438. package/dist/plugins/open-api/generator.mjs.map +1 -0
  439. package/dist/plugins/open-api/index.d.mts +97 -0
  440. package/dist/plugins/open-api/index.mjs +67 -0
  441. package/dist/plugins/open-api/index.mjs.map +1 -0
  442. package/dist/plugins/open-api/logo.mjs +15 -0
  443. package/dist/plugins/open-api/logo.mjs.map +1 -0
  444. package/dist/plugins/organization/access/index.d.mts +2 -0
  445. package/dist/plugins/organization/access/index.mjs +3 -0
  446. package/dist/plugins/organization/access/statement.d.mts +249 -0
  447. package/dist/plugins/organization/access/statement.mjs +81 -0
  448. package/dist/plugins/organization/access/statement.mjs.map +1 -0
  449. package/dist/plugins/organization/adapter.d.mts +792 -0
  450. package/dist/plugins/organization/adapter.mjs +624 -0
  451. package/dist/plugins/organization/adapter.mjs.map +1 -0
  452. package/dist/plugins/organization/call.mjs +19 -0
  453. package/dist/plugins/organization/call.mjs.map +1 -0
  454. package/dist/plugins/organization/client.d.mts +372 -0
  455. package/dist/plugins/organization/client.mjs +95 -0
  456. package/dist/plugins/organization/client.mjs.map +1 -0
  457. package/dist/plugins/organization/error-codes.d.mts +65 -0
  458. package/dist/plugins/organization/error-codes.mjs +66 -0
  459. package/dist/plugins/organization/error-codes.mjs.map +1 -0
  460. package/dist/plugins/organization/has-permission.mjs +35 -0
  461. package/dist/plugins/organization/has-permission.mjs.map +1 -0
  462. package/dist/plugins/organization/index.d.mts +5 -0
  463. package/dist/plugins/organization/index.mjs +4 -0
  464. package/dist/plugins/organization/organization.d.mts +394 -0
  465. package/dist/plugins/organization/organization.mjs +428 -0
  466. package/dist/plugins/organization/organization.mjs.map +1 -0
  467. package/dist/plugins/organization/permission.d.mts +17 -0
  468. package/dist/plugins/organization/permission.mjs +16 -0
  469. package/dist/plugins/organization/permission.mjs.map +1 -0
  470. package/dist/plugins/organization/routes/crud-access-control.d.mts +394 -0
  471. package/dist/plugins/organization/routes/crud-access-control.mjs +678 -0
  472. package/dist/plugins/organization/routes/crud-access-control.mjs.map +1 -0
  473. package/dist/plugins/organization/routes/crud-invites.d.mts +1031 -0
  474. package/dist/plugins/organization/routes/crud-invites.mjs +551 -0
  475. package/dist/plugins/organization/routes/crud-invites.mjs.map +1 -0
  476. package/dist/plugins/organization/routes/crud-members.d.mts +940 -0
  477. package/dist/plugins/organization/routes/crud-members.mjs +466 -0
  478. package/dist/plugins/organization/routes/crud-members.mjs.map +1 -0
  479. package/dist/plugins/organization/routes/crud-org.d.mts +708 -0
  480. package/dist/plugins/organization/routes/crud-org.mjs +423 -0
  481. package/dist/plugins/organization/routes/crud-org.mjs.map +1 -0
  482. package/dist/plugins/organization/routes/crud-team.d.mts +1071 -0
  483. package/dist/plugins/organization/routes/crud-team.mjs +676 -0
  484. package/dist/plugins/organization/routes/crud-team.mjs.map +1 -0
  485. package/dist/plugins/organization/schema.d.mts +376 -0
  486. package/dist/plugins/organization/schema.mjs +68 -0
  487. package/dist/plugins/organization/schema.mjs.map +1 -0
  488. package/dist/plugins/organization/types.d.mts +677 -0
  489. package/dist/plugins/phone-number/client.d.mts +31 -0
  490. package/dist/plugins/phone-number/client.mjs +20 -0
  491. package/dist/plugins/phone-number/client.mjs.map +1 -0
  492. package/dist/plugins/phone-number/error-codes.d.mts +20 -0
  493. package/dist/plugins/phone-number/error-codes.mjs +21 -0
  494. package/dist/plugins/phone-number/error-codes.mjs.map +1 -0
  495. package/dist/plugins/phone-number/index.d.mts +318 -0
  496. package/dist/plugins/phone-number/index.mjs +49 -0
  497. package/dist/plugins/phone-number/index.mjs.map +1 -0
  498. package/dist/plugins/phone-number/routes.mjs +472 -0
  499. package/dist/plugins/phone-number/routes.mjs.map +1 -0
  500. package/dist/plugins/phone-number/schema.d.mts +23 -0
  501. package/dist/plugins/phone-number/schema.mjs +20 -0
  502. package/dist/plugins/phone-number/schema.mjs.map +1 -0
  503. package/dist/plugins/phone-number/types.d.mts +118 -0
  504. package/dist/plugins/two-factor/backup-codes/index.d.mts +279 -0
  505. package/dist/plugins/two-factor/backup-codes/index.mjs +277 -0
  506. package/dist/plugins/two-factor/backup-codes/index.mjs.map +1 -0
  507. package/dist/plugins/two-factor/client.d.mts +55 -0
  508. package/dist/plugins/two-factor/client.mjs +37 -0
  509. package/dist/plugins/two-factor/client.mjs.map +1 -0
  510. package/dist/plugins/two-factor/constant.mjs +8 -0
  511. package/dist/plugins/two-factor/constant.mjs.map +1 -0
  512. package/dist/plugins/two-factor/error-code.d.mts +17 -0
  513. package/dist/plugins/two-factor/error-code.mjs +18 -0
  514. package/dist/plugins/two-factor/error-code.mjs.map +1 -0
  515. package/dist/plugins/two-factor/index.d.mts +670 -0
  516. package/dist/plugins/two-factor/index.mjs +228 -0
  517. package/dist/plugins/two-factor/index.mjs.map +1 -0
  518. package/dist/plugins/two-factor/otp/index.d.mts +216 -0
  519. package/dist/plugins/two-factor/otp/index.mjs +199 -0
  520. package/dist/plugins/two-factor/otp/index.mjs.map +1 -0
  521. package/dist/plugins/two-factor/schema.d.mts +41 -0
  522. package/dist/plugins/two-factor/schema.mjs +36 -0
  523. package/dist/plugins/two-factor/schema.mjs.map +1 -0
  524. package/dist/plugins/two-factor/totp/index.d.mts +210 -0
  525. package/dist/plugins/two-factor/totp/index.mjs +157 -0
  526. package/dist/plugins/two-factor/totp/index.mjs.map +1 -0
  527. package/dist/plugins/two-factor/types.d.mts +73 -0
  528. package/dist/plugins/two-factor/utils.mjs +12 -0
  529. package/dist/plugins/two-factor/utils.mjs.map +1 -0
  530. package/dist/plugins/two-factor/verify-two-factor.mjs +85 -0
  531. package/dist/plugins/two-factor/verify-two-factor.mjs.map +1 -0
  532. package/dist/plugins/username/client.d.mts +26 -0
  533. package/dist/plugins/username/client.mjs +18 -0
  534. package/dist/plugins/username/client.mjs.map +1 -0
  535. package/dist/plugins/username/error-codes.d.mts +16 -0
  536. package/dist/plugins/username/error-codes.mjs +17 -0
  537. package/dist/plugins/username/error-codes.mjs.map +1 -0
  538. package/dist/plugins/username/index.d.mts +251 -0
  539. package/dist/plugins/username/index.mjs +234 -0
  540. package/dist/plugins/username/index.mjs.map +1 -0
  541. package/dist/plugins/username/schema.d.mts +33 -0
  542. package/dist/plugins/username/schema.mjs +26 -0
  543. package/dist/plugins/username/schema.mjs.map +1 -0
  544. package/dist/providers/index.d.mts +1 -0
  545. package/dist/providers/index.mjs +3 -0
  546. package/dist/state.d.mts +42 -0
  547. package/dist/state.mjs +107 -0
  548. package/dist/state.mjs.map +1 -0
  549. package/dist/types/adapter.d.mts +2 -0
  550. package/dist/types/api.d.mts +29 -0
  551. package/dist/types/auth.d.mts +29 -0
  552. package/dist/types/helper.d.mts +10 -0
  553. package/dist/types/index.d.mts +11 -0
  554. package/dist/types/index.mjs +1 -0
  555. package/dist/types/models.d.mts +11 -0
  556. package/dist/types/plugins.d.mts +20 -0
  557. package/dist/utils/boolean.mjs +8 -0
  558. package/dist/utils/boolean.mjs.map +1 -0
  559. package/dist/utils/constants.mjs +6 -0
  560. package/dist/utils/constants.mjs.map +1 -0
  561. package/dist/utils/date.mjs +8 -0
  562. package/dist/utils/date.mjs.map +1 -0
  563. package/dist/utils/get-request-ip.d.mts +7 -0
  564. package/dist/utils/get-request-ip.mjs +23 -0
  565. package/dist/utils/get-request-ip.mjs.map +1 -0
  566. package/dist/utils/hide-metadata.d.mts +7 -0
  567. package/dist/utils/hide-metadata.mjs +6 -0
  568. package/dist/utils/hide-metadata.mjs.map +1 -0
  569. package/dist/utils/index.d.mts +4 -0
  570. package/dist/utils/index.mjs +6 -0
  571. package/dist/utils/is-api-error.d.mts +7 -0
  572. package/dist/utils/is-api-error.mjs +11 -0
  573. package/dist/utils/is-api-error.mjs.map +1 -0
  574. package/dist/utils/is-atom.mjs +8 -0
  575. package/dist/utils/is-atom.mjs.map +1 -0
  576. package/dist/utils/is-promise.mjs +8 -0
  577. package/dist/utils/is-promise.mjs.map +1 -0
  578. package/dist/utils/middleware-response.mjs +9 -0
  579. package/dist/utils/middleware-response.mjs.map +1 -0
  580. package/dist/utils/password.mjs +26 -0
  581. package/dist/utils/password.mjs.map +1 -0
  582. package/dist/utils/plugin-helper.mjs +17 -0
  583. package/dist/utils/plugin-helper.mjs.map +1 -0
  584. package/dist/utils/shim.mjs +24 -0
  585. package/dist/utils/shim.mjs.map +1 -0
  586. package/dist/utils/time.d.mts +49 -0
  587. package/dist/utils/time.mjs +100 -0
  588. package/dist/utils/time.mjs.map +1 -0
  589. package/dist/utils/url.d.mts +8 -0
  590. package/dist/utils/url.mjs +92 -0
  591. package/dist/utils/url.mjs.map +1 -0
  592. package/dist/utils/wildcard.mjs +108 -0
  593. package/dist/utils/wildcard.mjs.map +1 -0
  594. package/package.json +428 -0
@@ -0,0 +1,197 @@
1
+ import { isAPIError } from "../utils/is-api-error.mjs";
2
+ import { hasRequestState, runWithEndpointContext, runWithRequestState } from "@better-auth/core/context";
3
+ import { shouldPublishLog } from "@better-auth/core/env";
4
+ import { APIError } from "@better-auth/core/error";
5
+ import { createDefu } from "defu";
6
+ import { kAPIErrorHeaderSymbol, toResponse } from "better-call";
7
+
8
+ //#region src/api/to-auth-endpoints.ts
9
+ const defuReplaceArrays = createDefu((obj, key, value) => {
10
+ if (Array.isArray(obj[key]) && Array.isArray(value)) {
11
+ obj[key] = value;
12
+ return true;
13
+ }
14
+ });
15
+ const hooksSourceWeakMap = /* @__PURE__ */ new WeakMap();
16
+ function toAuthEndpoints(endpoints, ctx) {
17
+ const api = {};
18
+ for (const [key, endpoint] of Object.entries(endpoints)) {
19
+ api[key] = async (context) => {
20
+ const run = async () => {
21
+ const authContext = await ctx;
22
+ let internalContext = {
23
+ ...context,
24
+ context: {
25
+ ...authContext,
26
+ returned: void 0,
27
+ responseHeaders: void 0,
28
+ session: null
29
+ },
30
+ path: endpoint.path,
31
+ headers: context?.headers ? new Headers(context?.headers) : void 0
32
+ };
33
+ return runWithEndpointContext(internalContext, async () => {
34
+ const { beforeHooks, afterHooks } = getHooks(authContext);
35
+ const before = await runBeforeHooks(internalContext, beforeHooks);
36
+ /**
37
+ * If `before.context` is returned, it should
38
+ * get merged with the original context
39
+ */
40
+ if ("context" in before && before.context && typeof before.context === "object") {
41
+ const { headers, ...rest } = before.context;
42
+ /**
43
+ * Headers should be merged differently
44
+ * so the hook doesn't override the whole
45
+ * header
46
+ */
47
+ if (headers) headers.forEach((value, key) => {
48
+ internalContext.headers.set(key, value);
49
+ });
50
+ internalContext = defuReplaceArrays(rest, internalContext);
51
+ } else if (before) return context?.asResponse ? toResponse(before, { headers: context?.headers }) : context?.returnHeaders ? {
52
+ headers: context?.headers,
53
+ response: before
54
+ } : before;
55
+ internalContext.asResponse = false;
56
+ internalContext.returnHeaders = true;
57
+ internalContext.returnStatus = true;
58
+ const result = await runWithEndpointContext(internalContext, () => endpoint(internalContext)).catch((e) => {
59
+ if (isAPIError(e))
60
+ /**
61
+ * API Errors from response are caught
62
+ * and returned to hooks
63
+ */
64
+ return {
65
+ response: e,
66
+ status: e.statusCode,
67
+ headers: e.headers ? new Headers(e.headers) : null
68
+ };
69
+ throw e;
70
+ });
71
+ if (result && result instanceof Response) return result;
72
+ internalContext.context.returned = result.response;
73
+ internalContext.context.responseHeaders = result.headers;
74
+ const after = await runAfterHooks(internalContext, afterHooks);
75
+ if (after.response) result.response = after.response;
76
+ if (isAPIError(result.response) && shouldPublishLog(authContext.logger.level, "debug")) result.response.stack = result.response.errorStack;
77
+ if (isAPIError(result.response) && !context?.asResponse) throw result.response;
78
+ return context?.asResponse ? toResponse(result.response, {
79
+ headers: result.headers,
80
+ status: result.status
81
+ }) : context?.returnHeaders ? context?.returnStatus ? {
82
+ headers: result.headers,
83
+ response: result.response,
84
+ status: result.status
85
+ } : {
86
+ headers: result.headers,
87
+ response: result.response
88
+ } : context?.returnStatus ? {
89
+ response: result.response,
90
+ status: result.status
91
+ } : result.response;
92
+ });
93
+ };
94
+ if (await hasRequestState()) return run();
95
+ else return runWithRequestState(/* @__PURE__ */ new WeakMap(), run);
96
+ };
97
+ api[key].path = endpoint.path;
98
+ api[key].options = endpoint.options;
99
+ }
100
+ return api;
101
+ }
102
+ async function runBeforeHooks(context, hooks) {
103
+ let modifiedContext = {};
104
+ for (const hook of hooks) {
105
+ let matched = false;
106
+ try {
107
+ matched = hook.matcher(context);
108
+ } catch (error) {
109
+ const hookSource = hooksSourceWeakMap.get(hook.handler) ?? "unknown";
110
+ context.context.logger.error(`An error occurred during ${hookSource} hook matcher execution:`, error);
111
+ throw new APIError("INTERNAL_SERVER_ERROR", { message: `An error occurred during hook matcher execution. Check the logs for more details.` });
112
+ }
113
+ if (matched) {
114
+ const result = await hook.handler({
115
+ ...context,
116
+ returnHeaders: false
117
+ }).catch((e) => {
118
+ if (isAPIError(e) && shouldPublishLog(context.context.logger.level, "debug")) e.stack = e.errorStack;
119
+ throw e;
120
+ });
121
+ if (result && typeof result === "object") {
122
+ if ("context" in result && typeof result.context === "object") {
123
+ const { headers, ...rest } = result.context;
124
+ if (headers instanceof Headers) if (modifiedContext.headers) headers.forEach((value, key) => {
125
+ modifiedContext.headers?.set(key, value);
126
+ });
127
+ else modifiedContext.headers = headers;
128
+ modifiedContext = defuReplaceArrays(rest, modifiedContext);
129
+ continue;
130
+ }
131
+ return result;
132
+ }
133
+ }
134
+ }
135
+ return { context: modifiedContext };
136
+ }
137
+ async function runAfterHooks(context, hooks) {
138
+ for (const hook of hooks) if (hook.matcher(context)) {
139
+ const result = await hook.handler(context).catch((e) => {
140
+ if (isAPIError(e)) {
141
+ const headers = e[kAPIErrorHeaderSymbol];
142
+ if (shouldPublishLog(context.context.logger.level, "debug")) e.stack = e.errorStack;
143
+ return {
144
+ response: e,
145
+ headers: headers ? headers : e.headers ? new Headers(e.headers) : null
146
+ };
147
+ }
148
+ throw e;
149
+ });
150
+ if (result.headers) result.headers.forEach((value, key) => {
151
+ if (!context.context.responseHeaders) context.context.responseHeaders = new Headers({ [key]: value });
152
+ else if (key.toLowerCase() === "set-cookie") context.context.responseHeaders.append(key, value);
153
+ else context.context.responseHeaders.set(key, value);
154
+ });
155
+ if (result.response) context.context.returned = result.response;
156
+ }
157
+ return {
158
+ response: context.context.returned,
159
+ headers: context.context.responseHeaders
160
+ };
161
+ }
162
+ function getHooks(authContext) {
163
+ const plugins = authContext.options.plugins || [];
164
+ const beforeHooks = [];
165
+ const afterHooks = [];
166
+ const beforeHookHandler = authContext.options.hooks?.before;
167
+ if (beforeHookHandler) {
168
+ hooksSourceWeakMap.set(beforeHookHandler, "user");
169
+ beforeHooks.push({
170
+ matcher: () => true,
171
+ handler: beforeHookHandler
172
+ });
173
+ }
174
+ const afterHookHandler = authContext.options.hooks?.after;
175
+ if (afterHookHandler) {
176
+ hooksSourceWeakMap.set(afterHookHandler, "user");
177
+ afterHooks.push({
178
+ matcher: () => true,
179
+ handler: afterHookHandler
180
+ });
181
+ }
182
+ const pluginBeforeHooks = plugins.filter((plugin) => plugin.hooks?.before).map((plugin) => plugin.hooks?.before).flat();
183
+ const pluginAfterHooks = plugins.filter((plugin) => plugin.hooks?.after).map((plugin) => plugin.hooks?.after).flat();
184
+ /**
185
+ * Add plugin added hooks at last
186
+ */
187
+ if (pluginBeforeHooks.length) beforeHooks.push(...pluginBeforeHooks);
188
+ if (pluginAfterHooks.length) afterHooks.push(...pluginAfterHooks);
189
+ return {
190
+ beforeHooks,
191
+ afterHooks
192
+ };
193
+ }
194
+
195
+ //#endregion
196
+ export { toAuthEndpoints };
197
+ //# sourceMappingURL=to-auth-endpoints.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-auth-endpoints.mjs","names":[],"sources":["../../src/api/to-auth-endpoints.ts"],"sourcesContent":["import type { AuthContext, HookEndpointContext } from \"@better-auth/core\";\nimport type { AuthEndpoint, AuthMiddleware } from \"@better-auth/core/api\";\nimport {\n\thasRequestState,\n\trunWithEndpointContext,\n\trunWithRequestState,\n} from \"@better-auth/core/context\";\nimport { shouldPublishLog } from \"@better-auth/core/env\";\nimport { APIError } from \"@better-auth/core/error\";\nimport type {\n\tEndpointContext,\n\tEndpointOptions,\n\tInputContext,\n} from \"better-call\";\nimport { kAPIErrorHeaderSymbol, toResponse } from \"better-call\";\nimport { createDefu } from \"defu\";\nimport { isAPIError } from \"../utils/is-api-error\";\n\ntype InternalContext = Partial<\n\tInputContext<string, any> & EndpointContext<string, any>\n> & {\n\tpath: string;\n\tasResponse?: boolean | undefined;\n\tcontext: AuthContext & {\n\t\tlogger: AuthContext[\"logger\"];\n\t\treturned?: unknown | undefined;\n\t\tresponseHeaders?: Headers | undefined;\n\t};\n};\n\nconst defuReplaceArrays = createDefu((obj, key, value) => {\n\tif (Array.isArray(obj[key]) && Array.isArray(value)) {\n\t\tobj[key] = value;\n\t\treturn true;\n\t}\n});\n\nconst hooksSourceWeakMap = new WeakMap<\n\tAuthMiddleware,\n\t`user` | `plugin:${string}`\n>();\n\ntype UserInputContext = Partial<\n\tInputContext<string, any> & EndpointContext<string, any>\n>;\n\nexport function toAuthEndpoints<\n\tconst E extends Record<\n\t\tstring,\n\t\tOmit<AuthEndpoint<string, EndpointOptions, any>, \"wrap\">\n\t>,\n>(endpoints: E, ctx: AuthContext | Promise<AuthContext>): E {\n\tconst api: Record<\n\t\tstring,\n\t\t((\n\t\t\tcontext: EndpointContext<string, any> & InputContext<string, any>,\n\t\t) => Promise<any>) & {\n\t\t\tpath?: string | undefined;\n\t\t\toptions?: EndpointOptions | undefined;\n\t\t}\n\t> = {};\n\n\tfor (const [key, endpoint] of Object.entries(endpoints)) {\n\t\tapi[key] = async (context?: UserInputContext) => {\n\t\t\tconst run = async () => {\n\t\t\t\tconst authContext = await ctx;\n\t\t\t\tlet internalContext: InternalContext = {\n\t\t\t\t\t...context,\n\t\t\t\t\tcontext: {\n\t\t\t\t\t\t...authContext,\n\t\t\t\t\t\treturned: undefined,\n\t\t\t\t\t\tresponseHeaders: undefined,\n\t\t\t\t\t\tsession: null,\n\t\t\t\t\t},\n\t\t\t\t\tpath: endpoint.path,\n\t\t\t\t\theaders: context?.headers ? new Headers(context?.headers) : undefined,\n\t\t\t\t};\n\t\t\t\treturn runWithEndpointContext(internalContext, async () => {\n\t\t\t\t\tconst { beforeHooks, afterHooks } = getHooks(authContext);\n\t\t\t\t\tconst before = await runBeforeHooks(internalContext, beforeHooks);\n\t\t\t\t\t/**\n\t\t\t\t\t * If `before.context` is returned, it should\n\t\t\t\t\t * get merged with the original context\n\t\t\t\t\t */\n\t\t\t\t\tif (\n\t\t\t\t\t\t\"context\" in before &&\n\t\t\t\t\t\tbefore.context &&\n\t\t\t\t\t\ttypeof before.context === \"object\"\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst { headers, ...rest } = before.context as {\n\t\t\t\t\t\t\theaders: Headers;\n\t\t\t\t\t\t};\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * Headers should be merged differently\n\t\t\t\t\t\t * so the hook doesn't override the whole\n\t\t\t\t\t\t * header\n\t\t\t\t\t\t */\n\t\t\t\t\t\tif (headers) {\n\t\t\t\t\t\t\theaders.forEach((value, key) => {\n\t\t\t\t\t\t\t\t(internalContext.headers as Headers).set(key, value);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinternalContext = defuReplaceArrays(rest, internalContext);\n\t\t\t\t\t} else if (before) {\n\t\t\t\t\t\t/* Return before hook response if it's anything other than a context return */\n\t\t\t\t\t\treturn context?.asResponse\n\t\t\t\t\t\t\t? toResponse(before, {\n\t\t\t\t\t\t\t\t\theaders: context?.headers,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t: context?.returnHeaders\n\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\theaders: context?.headers,\n\t\t\t\t\t\t\t\t\t\tresponse: before,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: before;\n\t\t\t\t\t}\n\n\t\t\t\t\tinternalContext.asResponse = false;\n\t\t\t\t\tinternalContext.returnHeaders = true;\n\t\t\t\t\tinternalContext.returnStatus = true;\n\t\t\t\t\tconst result = (await runWithEndpointContext(internalContext, () =>\n\t\t\t\t\t\t(endpoint as any)(internalContext as any),\n\t\t\t\t\t).catch((e: any) => {\n\t\t\t\t\t\tif (isAPIError(e)) {\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * API Errors from response are caught\n\t\t\t\t\t\t\t * and returned to hooks\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tresponse: e,\n\t\t\t\t\t\t\t\tstatus: e.statusCode,\n\t\t\t\t\t\t\t\theaders: e.headers ? new Headers(e.headers) : null,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t})) as {\n\t\t\t\t\t\theaders: Headers;\n\t\t\t\t\t\tresponse: any;\n\t\t\t\t\t\tstatus: number;\n\t\t\t\t\t};\n\n\t\t\t\t\t//if response object is returned we skip after hooks and post processing\n\t\t\t\t\tif (result && result instanceof Response) {\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\n\t\t\t\t\tinternalContext.context.returned = result.response;\n\t\t\t\t\tinternalContext.context.responseHeaders = result.headers;\n\n\t\t\t\t\tconst after = await runAfterHooks(internalContext, afterHooks);\n\n\t\t\t\t\tif (after.response) {\n\t\t\t\t\t\tresult.response = after.response;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tisAPIError(result.response) &&\n\t\t\t\t\t\tshouldPublishLog(authContext.logger.level, \"debug\")\n\t\t\t\t\t) {\n\t\t\t\t\t\t// inherit stack from errorStack if debug mode is enabled\n\t\t\t\t\t\tresult.response.stack = result.response.errorStack;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isAPIError(result.response) && !context?.asResponse) {\n\t\t\t\t\t\tthrow result.response;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst response = context?.asResponse\n\t\t\t\t\t\t? toResponse(result.response, {\n\t\t\t\t\t\t\t\theaders: result.headers,\n\t\t\t\t\t\t\t\tstatus: result.status,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t: context?.returnHeaders\n\t\t\t\t\t\t\t? context?.returnStatus\n\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\theaders: result.headers,\n\t\t\t\t\t\t\t\t\t\tresponse: result.response,\n\t\t\t\t\t\t\t\t\t\tstatus: result.status,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t\theaders: result.headers,\n\t\t\t\t\t\t\t\t\t\tresponse: result.response,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: context?.returnStatus\n\t\t\t\t\t\t\t\t? { response: result.response, status: result.status }\n\t\t\t\t\t\t\t\t: result.response;\n\t\t\t\t\treturn response;\n\t\t\t\t});\n\t\t\t};\n\t\t\tif (await hasRequestState()) {\n\t\t\t\treturn run();\n\t\t\t} else {\n\t\t\t\tconst store = new WeakMap();\n\t\t\t\treturn runWithRequestState(store, run);\n\t\t\t}\n\t\t};\n\t\tapi[key].path = endpoint.path;\n\t\tapi[key].options = endpoint.options;\n\t}\n\treturn api as unknown as E;\n}\n\nasync function runBeforeHooks(\n\tcontext: InternalContext,\n\thooks: {\n\t\tmatcher: (context: HookEndpointContext) => boolean;\n\t\thandler: AuthMiddleware;\n\t}[],\n) {\n\tlet modifiedContext: Partial<InternalContext> = {};\n\n\tfor (const hook of hooks) {\n\t\tlet matched = false;\n\t\ttry {\n\t\t\tmatched = hook.matcher(context);\n\t\t} catch (error) {\n\t\t\t// manually handle unexpected errors during hook matcher execution to prevent accidental exposure of internal details\n\t\t\t// Also provides debug information about which plugin the hook failed and error info\n\t\t\tconst hookSource = hooksSourceWeakMap.get(hook.handler) ?? \"unknown\";\n\t\t\tcontext.context.logger.error(\n\t\t\t\t`An error occurred during ${hookSource} hook matcher execution:`,\n\t\t\t\terror,\n\t\t\t);\n\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\tmessage: `An error occurred during hook matcher execution. Check the logs for more details.`,\n\t\t\t});\n\t\t}\n\t\tif (matched) {\n\t\t\tconst result = await hook\n\t\t\t\t.handler({\n\t\t\t\t\t...context,\n\t\t\t\t\treturnHeaders: false,\n\t\t\t\t})\n\t\t\t\t.catch((e: unknown) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tisAPIError(e) &&\n\t\t\t\t\t\tshouldPublishLog(context.context.logger.level, \"debug\")\n\t\t\t\t\t) {\n\t\t\t\t\t\t// inherit stack from errorStack if debug mode is enabled\n\t\t\t\t\t\te.stack = e.errorStack;\n\t\t\t\t\t}\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t\tif (result && typeof result === \"object\") {\n\t\t\t\tif (\"context\" in result && typeof result.context === \"object\") {\n\t\t\t\t\tconst { headers, ...rest } =\n\t\t\t\t\t\tresult.context as Partial<InternalContext>;\n\t\t\t\t\tif (headers instanceof Headers) {\n\t\t\t\t\t\tif (modifiedContext.headers) {\n\t\t\t\t\t\t\theaders.forEach((value, key) => {\n\t\t\t\t\t\t\t\tmodifiedContext.headers?.set(key, value);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmodifiedContext.headers = headers;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tmodifiedContext = defuReplaceArrays(rest, modifiedContext);\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\treturn { context: modifiedContext };\n}\n\nasync function runAfterHooks(\n\tcontext: InternalContext,\n\thooks: {\n\t\tmatcher: (context: HookEndpointContext) => boolean;\n\t\thandler: AuthMiddleware;\n\t}[],\n) {\n\tfor (const hook of hooks) {\n\t\tif (hook.matcher(context)) {\n\t\t\tconst result = (await hook.handler(context).catch((e) => {\n\t\t\t\tif (isAPIError(e)) {\n\t\t\t\t\tconst headers = (e as any)[kAPIErrorHeaderSymbol] as\n\t\t\t\t\t\t| Headers\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\tif (shouldPublishLog(context.context.logger.level, \"debug\")) {\n\t\t\t\t\t\t// inherit stack from errorStack if debug mode is enabled\n\t\t\t\t\t\te.stack = e.errorStack;\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tresponse: e,\n\t\t\t\t\t\theaders: headers\n\t\t\t\t\t\t\t? headers\n\t\t\t\t\t\t\t: e.headers\n\t\t\t\t\t\t\t\t? new Headers(e.headers)\n\t\t\t\t\t\t\t\t: null,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tthrow e;\n\t\t\t})) as {\n\t\t\t\tresponse: any;\n\t\t\t\theaders: Headers;\n\t\t\t};\n\t\t\tif (result.headers) {\n\t\t\t\tresult.headers.forEach((value, key) => {\n\t\t\t\t\tif (!context.context.responseHeaders) {\n\t\t\t\t\t\tcontext.context.responseHeaders = new Headers({\n\t\t\t\t\t\t\t[key]: value,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (key.toLowerCase() === \"set-cookie\") {\n\t\t\t\t\t\t\tcontext.context.responseHeaders.append(key, value);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.context.responseHeaders.set(key, value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (result.response) {\n\t\t\t\tcontext.context.returned = result.response;\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\tresponse: context.context.returned,\n\t\theaders: context.context.responseHeaders,\n\t};\n}\n\nfunction getHooks(authContext: AuthContext) {\n\tconst plugins = authContext.options.plugins || [];\n\tconst beforeHooks: {\n\t\tmatcher: (context: HookEndpointContext) => boolean;\n\t\thandler: AuthMiddleware;\n\t}[] = [];\n\tconst afterHooks: {\n\t\tmatcher: (context: HookEndpointContext) => boolean;\n\t\thandler: AuthMiddleware;\n\t}[] = [];\n\tconst beforeHookHandler = authContext.options.hooks?.before;\n\tif (beforeHookHandler) {\n\t\thooksSourceWeakMap.set(beforeHookHandler, \"user\");\n\t\tbeforeHooks.push({\n\t\t\tmatcher: () => true,\n\t\t\thandler: beforeHookHandler,\n\t\t});\n\t}\n\tconst afterHookHandler = authContext.options.hooks?.after;\n\tif (afterHookHandler) {\n\t\thooksSourceWeakMap.set(afterHookHandler, \"user\");\n\t\tafterHooks.push({\n\t\t\tmatcher: () => true,\n\t\t\thandler: afterHookHandler,\n\t\t});\n\t}\n\tconst pluginBeforeHooks = plugins\n\t\t.filter((plugin) => plugin.hooks?.before)\n\t\t.map((plugin) => plugin.hooks?.before!)\n\t\t.flat();\n\tconst pluginAfterHooks = plugins\n\t\t.filter((plugin) => plugin.hooks?.after)\n\t\t.map((plugin) => plugin.hooks?.after!)\n\t\t.flat();\n\n\t/**\n\t * Add plugin added hooks at last\n\t */\n\tif (pluginBeforeHooks.length) beforeHooks.push(...pluginBeforeHooks);\n\tif (pluginAfterHooks.length) afterHooks.push(...pluginAfterHooks);\n\n\treturn {\n\t\tbeforeHooks,\n\t\tafterHooks,\n\t};\n}\n"],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { getBaseURL, getOrigin } from "../utils/url.mjs";
2
+ import { getTrustedOrigins, getTrustedProviders } from "../context/helpers.mjs";
3
+ import { getEndpoints, router } from "../api/index.mjs";
4
+ import { runWithAdapter } from "@better-auth/core/context";
5
+ import { BASE_ERROR_CODES, BetterAuthError } from "@better-auth/core/error";
6
+
7
+ //#region src/auth/base.ts
8
+ const createSirketioAuth = (options, initFn) => {
9
+ const authContext = initFn(options);
10
+ const { api } = getEndpoints(authContext, options);
11
+ return {
12
+ handler: async (request) => {
13
+ const ctx = await authContext;
14
+ const basePath = ctx.options.basePath || "/api/auth";
15
+ if (!ctx.options.baseURL) {
16
+ const baseURL = getBaseURL(void 0, basePath, request, void 0, ctx.options.advanced?.trustedProxyHeaders);
17
+ if (baseURL) {
18
+ ctx.baseURL = baseURL;
19
+ ctx.options.baseURL = getOrigin(ctx.baseURL) || void 0;
20
+ } else throw new BetterAuthError("Could not get base URL from request. Please provide a valid base URL.");
21
+ }
22
+ ctx.trustedOrigins = await getTrustedOrigins(ctx.options, request);
23
+ ctx.trustedProviders = await getTrustedProviders(ctx.options, request);
24
+ const { handler } = router(ctx, options);
25
+ return runWithAdapter(ctx.adapter, () => handler(request));
26
+ },
27
+ api,
28
+ options,
29
+ $context: authContext,
30
+ $ERROR_CODES: {
31
+ ...options.plugins?.reduce((acc, plugin) => {
32
+ if (plugin.$ERROR_CODES) return {
33
+ ...acc,
34
+ ...plugin.$ERROR_CODES
35
+ };
36
+ return acc;
37
+ }, {}),
38
+ ...BASE_ERROR_CODES
39
+ }
40
+ };
41
+ };
42
+
43
+ //#endregion
44
+ export { createSirketioAuth };
45
+ //# sourceMappingURL=base.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.mjs","names":[],"sources":["../../src/auth/base.ts"],"sourcesContent":["import type { AuthContext, BetterAuthOptions } from \"@better-auth/core\";\nimport { runWithAdapter } from \"@better-auth/core/context\";\nimport { BASE_ERROR_CODES, BetterAuthError } from \"@better-auth/core/error\";\nimport { getEndpoints, router } from \"../api\";\nimport { getTrustedOrigins, getTrustedProviders } from \"../context/helpers\";\nimport type { Auth } from \"../types\";\nimport { getBaseURL, getOrigin } from \"../utils/url\";\n\nexport const createSirketioAuth = <Options extends BetterAuthOptions>(\n\toptions: Options,\n\tinitFn: (options: Options) => Promise<AuthContext>,\n): Auth<Options> => {\n\tconst authContext = initFn(options);\n\tconst { api } = getEndpoints(authContext, options);\n\tconst errorCodes = options.plugins?.reduce((acc, plugin) => {\n\t\tif (plugin.$ERROR_CODES) {\n\t\t\treturn {\n\t\t\t\t...acc,\n\t\t\t\t...plugin.$ERROR_CODES,\n\t\t\t};\n\t\t}\n\t\treturn acc;\n\t}, {});\n\treturn {\n\t\thandler: async (request: Request) => {\n\t\t\tconst ctx = await authContext;\n\t\t\tconst basePath = ctx.options.basePath || \"/api/auth\";\n\t\t\tif (!ctx.options.baseURL) {\n\t\t\t\tconst baseURL = getBaseURL(\n\t\t\t\t\tundefined,\n\t\t\t\t\tbasePath,\n\t\t\t\t\trequest,\n\t\t\t\t\tundefined,\n\t\t\t\t\tctx.options.advanced?.trustedProxyHeaders,\n\t\t\t\t);\n\t\t\t\tif (baseURL) {\n\t\t\t\t\tctx.baseURL = baseURL;\n\t\t\t\t\tctx.options.baseURL = getOrigin(ctx.baseURL) || undefined;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\t\"Could not get base URL from request. Please provide a valid base URL.\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.trustedOrigins = await getTrustedOrigins(ctx.options, request);\n\t\t\tctx.trustedProviders = await getTrustedProviders(ctx.options, request);\n\t\t\tconst { handler } = router(ctx, options);\n\t\t\treturn runWithAdapter(ctx.adapter, () => handler(request));\n\t\t},\n\t\tapi,\n\t\toptions: options,\n\t\t$context: authContext,\n\t\t$ERROR_CODES: {\n\t\t\t...errorCodes,\n\t\t\t...BASE_ERROR_CODES,\n\t\t},\n\t} as any;\n};\n"],"mappings":";;;;;;;AAQA,MAAa,sBACZ,SACA,WACmB;CACnB,MAAM,cAAc,OAAO,QAAQ;CACnC,MAAM,EAAE,QAAQ,aAAa,aAAa,QAAQ;AAUlD,QAAO;EACN,SAAS,OAAO,YAAqB;GACpC,MAAM,MAAM,MAAM;GAClB,MAAM,WAAW,IAAI,QAAQ,YAAY;AACzC,OAAI,CAAC,IAAI,QAAQ,SAAS;IACzB,MAAM,UAAU,WACf,QACA,UACA,SACA,QACA,IAAI,QAAQ,UAAU,oBACtB;AACD,QAAI,SAAS;AACZ,SAAI,UAAU;AACd,SAAI,QAAQ,UAAU,UAAU,IAAI,QAAQ,IAAI;UAEhD,OAAM,IAAI,gBACT,wEACA;;AAGH,OAAI,iBAAiB,MAAM,kBAAkB,IAAI,SAAS,QAAQ;AAClE,OAAI,mBAAmB,MAAM,oBAAoB,IAAI,SAAS,QAAQ;GACtE,MAAM,EAAE,YAAY,OAAO,KAAK,QAAQ;AACxC,UAAO,eAAe,IAAI,eAAe,QAAQ,QAAQ,CAAC;;EAE3D;EACS;EACT,UAAU;EACV,cAAc;GACb,GAvCiB,QAAQ,SAAS,QAAQ,KAAK,WAAW;AAC3D,QAAI,OAAO,aACV,QAAO;KACN,GAAG;KACH,GAAG,OAAO;KACV;AAEF,WAAO;MACL,EAAE,CAAC;GAgCJ,GAAG;GACH;EACD"}
@@ -0,0 +1,12 @@
1
+ import { Auth } from "../types/auth.mjs";
2
+ import "../types/index.mjs";
3
+ import { BetterAuthOptions } from "@better-auth/core";
4
+
5
+ //#region src/auth/minimal.d.ts
6
+ /**
7
+ * Better Auth initializer for minimal mode (without Kysely)
8
+ */
9
+ declare const sirketioAuth: <Options extends BetterAuthOptions>(options: Options & {}) => Auth<Options>;
10
+ //#endregion
11
+ export { type BetterAuthOptions, sirketioAuth };
12
+ //# sourceMappingURL=minimal.d.mts.map
@@ -0,0 +1,14 @@
1
+ import { init } from "../context/init.mjs";
2
+ import { createSirketioAuth } from "./base.mjs";
3
+
4
+ //#region src/auth/minimal.ts
5
+ /**
6
+ * Better Auth initializer for minimal mode (without Kysely)
7
+ */
8
+ const sirketioAuth = (options) => {
9
+ return createSirketioAuth(options, init);
10
+ };
11
+
12
+ //#endregion
13
+ export { sirketioAuth };
14
+ //# sourceMappingURL=minimal.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minimal.mjs","names":[],"sources":["../../src/auth/minimal.ts"],"sourcesContent":["import type { BetterAuthOptions } from \"@better-auth/core\";\nimport { init } from \"../context/init\";\nimport type { Auth } from \"../types\";\nimport { createSirketioAuth } from \"./base\";\n\nexport type { BetterAuthOptions };\n\n/**\n * Better Auth initializer for minimal mode (without Kysely)\n */\nexport const sirketioAuth = <Options extends BetterAuthOptions>(\n\toptions: Options & {},\n): Auth<Options> => {\n\treturn createSirketioAuth(options, init)\n}\n"],"mappings":";;;;;;;AAUA,MAAa,gBACZ,YACmB;AACnB,QAAO,mBAAmB,SAAS,KAAK"}
@@ -0,0 +1,31 @@
1
+ import { getHost, getOrigin, getProtocol } from "../utils/url.mjs";
2
+ import { wildcardMatch } from "../utils/wildcard.mjs";
3
+
4
+ //#region src/auth/trusted-origins.ts
5
+ /**
6
+ * Matches the given url against an origin or origin pattern
7
+ * See "options.trustedOrigins" for details of supported patterns
8
+ *
9
+ * @param url The url to test
10
+ * @param pattern The origin pattern
11
+ * @param [settings] Specify supported pattern matching settings
12
+ * @returns {boolean} true if the URL matches the origin pattern, false otherwise.
13
+ */
14
+ const matchesOriginPattern = (url, pattern, settings) => {
15
+ if (url.startsWith("/")) {
16
+ if (settings?.allowRelativePaths) return url.startsWith("/") && /^\/(?!\/|\\|%2f|%5c)[\w\-.\+/@]*(?:\?[\w\-.\+/=&%@]*)?$/.test(url);
17
+ return false;
18
+ }
19
+ if (pattern.includes("*") || pattern.includes("?")) {
20
+ if (pattern.includes("://")) return wildcardMatch(pattern)(getOrigin(url) || url);
21
+ const host = getHost(url);
22
+ if (!host) return false;
23
+ return wildcardMatch(pattern)(host);
24
+ }
25
+ const protocol = getProtocol(url);
26
+ return protocol === "http:" || protocol === "https:" || !protocol ? pattern === getOrigin(url) : url.startsWith(pattern);
27
+ };
28
+
29
+ //#endregion
30
+ export { matchesOriginPattern };
31
+ //# sourceMappingURL=trusted-origins.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trusted-origins.mjs","names":[],"sources":["../../src/auth/trusted-origins.ts"],"sourcesContent":["import { getHost, getOrigin, getProtocol } from \"../utils/url\";\nimport { wildcardMatch } from \"../utils/wildcard\";\n\n/**\n * Matches the given url against an origin or origin pattern\n * See \"options.trustedOrigins\" for details of supported patterns\n *\n * @param url The url to test\n * @param pattern The origin pattern\n * @param [settings] Specify supported pattern matching settings\n * @returns {boolean} true if the URL matches the origin pattern, false otherwise.\n */\nexport const matchesOriginPattern = (\n\turl: string,\n\tpattern: string,\n\tsettings?: { allowRelativePaths: boolean },\n): boolean => {\n\tif (url.startsWith(\"/\")) {\n\t\tif (settings?.allowRelativePaths) {\n\t\t\treturn (\n\t\t\t\turl.startsWith(\"/\") &&\n\t\t\t\t/^\\/(?!\\/|\\\\|%2f|%5c)[\\w\\-.\\+/@]*(?:\\?[\\w\\-.\\+/=&%@]*)?$/.test(url)\n\t\t\t);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t// Check if pattern contains wildcard characters (*, **, or ?)\n\tconst hasWildcard = pattern.includes(\"*\") || pattern.includes(\"?\");\n\tif (hasWildcard) {\n\t\t// For protocol-specific wildcards, match the full origin\n\t\tif (pattern.includes(\"://\")) {\n\t\t\treturn wildcardMatch(pattern)(getOrigin(url) || url);\n\t\t}\n\t\tconst host = getHost(url);\n\t\tif (!host) {\n\t\t\treturn false;\n\t\t}\n\t\t// For host-only wildcards, match just the host\n\t\treturn wildcardMatch(pattern)(host);\n\t}\n\tconst protocol = getProtocol(url);\n\treturn protocol === \"http:\" || protocol === \"https:\" || !protocol\n\t\t? pattern === getOrigin(url)\n\t\t: url.startsWith(pattern);\n};\n"],"mappings":";;;;;;;;;;;;;AAYA,MAAa,wBACZ,KACA,SACA,aACa;AACb,KAAI,IAAI,WAAW,IAAI,EAAE;AACxB,MAAI,UAAU,mBACb,QACC,IAAI,WAAW,IAAI,IACnB,0DAA0D,KAAK,IAAI;AAIrE,SAAO;;AAKR,KADoB,QAAQ,SAAS,IAAI,IAAI,QAAQ,SAAS,IAAI,EACjD;AAEhB,MAAI,QAAQ,SAAS,MAAM,CAC1B,QAAO,cAAc,QAAQ,CAAC,UAAU,IAAI,IAAI,IAAI;EAErD,MAAM,OAAO,QAAQ,IAAI;AACzB,MAAI,CAAC,KACJ,QAAO;AAGR,SAAO,cAAc,QAAQ,CAAC,KAAK;;CAEpC,MAAM,WAAW,YAAY,IAAI;AACjC,QAAO,aAAa,WAAW,aAAa,YAAY,CAAC,WACtD,YAAY,UAAU,IAAI,GAC1B,IAAI,WAAW,QAAQ"}
@@ -0,0 +1,20 @@
1
+ //#region src/client/broadcast-channel.d.ts
2
+ interface BroadcastMessage {
3
+ event?: "session" | undefined;
4
+ data?: {
5
+ trigger?: "signout" | "getSession" | "updateUser";
6
+ } | undefined;
7
+ clientId: string;
8
+ timestamp: number;
9
+ }
10
+ type BroadcastListener = (message: BroadcastMessage) => void;
11
+ declare const kBroadcastChannel: unique symbol;
12
+ interface BroadcastChannel {
13
+ post(message: Record<string, unknown>): void;
14
+ subscribe(listener: BroadcastListener): () => void;
15
+ setup(): () => void;
16
+ }
17
+ declare function getGlobalBroadcastChannel(name?: string): BroadcastChannel;
18
+ //#endregion
19
+ export { BroadcastChannel, BroadcastListener, BroadcastMessage, getGlobalBroadcastChannel, kBroadcastChannel };
20
+ //# sourceMappingURL=broadcast-channel.d.mts.map
@@ -0,0 +1,46 @@
1
+ //#region src/client/broadcast-channel.ts
2
+ const kBroadcastChannel = Symbol.for("better-auth:broadcast-channel");
3
+ const now = () => Math.floor(Date.now() / 1e3);
4
+ var WindowBroadcastChannel = class {
5
+ listeners = /* @__PURE__ */ new Set();
6
+ name;
7
+ constructor(name = "better-auth.message") {
8
+ this.name = name;
9
+ }
10
+ subscribe(listener) {
11
+ this.listeners.add(listener);
12
+ return () => {
13
+ this.listeners.delete(listener);
14
+ };
15
+ }
16
+ post(message) {
17
+ if (typeof window === "undefined") return;
18
+ try {
19
+ localStorage.setItem(this.name, JSON.stringify({
20
+ ...message,
21
+ timestamp: now()
22
+ }));
23
+ } catch {}
24
+ }
25
+ setup() {
26
+ if (typeof window === "undefined" || typeof window.addEventListener === "undefined") return () => {};
27
+ const handler = (event) => {
28
+ if (event.key !== this.name) return;
29
+ const message = JSON.parse(event.newValue ?? "{}");
30
+ if (message?.event !== "session" || !message?.data) return;
31
+ this.listeners.forEach((listener) => listener(message));
32
+ };
33
+ window.addEventListener("storage", handler);
34
+ return () => {
35
+ window.removeEventListener("storage", handler);
36
+ };
37
+ }
38
+ };
39
+ function getGlobalBroadcastChannel(name = "better-auth.message") {
40
+ if (!globalThis[kBroadcastChannel]) globalThis[kBroadcastChannel] = new WindowBroadcastChannel(name);
41
+ return globalThis[kBroadcastChannel];
42
+ }
43
+
44
+ //#endregion
45
+ export { getGlobalBroadcastChannel, kBroadcastChannel };
46
+ //# sourceMappingURL=broadcast-channel.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broadcast-channel.mjs","names":[],"sources":["../../src/client/broadcast-channel.ts"],"sourcesContent":["export interface BroadcastMessage {\n\tevent?: \"session\" | undefined;\n\tdata?: { trigger?: \"signout\" | \"getSession\" | \"updateUser\" } | undefined;\n\tclientId: string;\n\ttimestamp: number;\n}\n\nexport type BroadcastListener = (message: BroadcastMessage) => void;\n\nexport const kBroadcastChannel = Symbol.for(\"better-auth:broadcast-channel\");\n\nconst now = () => Math.floor(Date.now() / 1000);\n\nexport interface BroadcastChannel {\n\tpost(message: Record<string, unknown>): void;\n\tsubscribe(listener: BroadcastListener): () => void;\n\tsetup(): () => void;\n}\n\nclass WindowBroadcastChannel implements BroadcastChannel {\n\tlisteners = new Set<BroadcastListener>();\n\tprivate name: string;\n\n\tconstructor(name = \"better-auth.message\") {\n\t\tthis.name = name;\n\t}\n\n\tsubscribe(listener: BroadcastListener) {\n\t\tthis.listeners.add(listener);\n\t\treturn () => {\n\t\t\tthis.listeners.delete(listener);\n\t\t};\n\t}\n\n\tpost(message: Record<string, unknown>) {\n\t\tif (typeof window === \"undefined\") return;\n\t\ttry {\n\t\t\tlocalStorage.setItem(\n\t\t\t\tthis.name,\n\t\t\t\tJSON.stringify({ ...message, timestamp: now() }),\n\t\t\t);\n\t\t} catch {}\n\t}\n\n\tsetup() {\n\t\tif (\n\t\t\ttypeof window === \"undefined\" ||\n\t\t\ttypeof window.addEventListener === \"undefined\"\n\t\t) {\n\t\t\treturn () => {};\n\t\t}\n\n\t\tconst handler = (event: StorageEvent) => {\n\t\t\tif (event.key !== this.name) return;\n\t\t\tconst message: BroadcastMessage = JSON.parse(event.newValue ?? \"{}\");\n\t\t\tif (message?.event !== \"session\" || !message?.data) return;\n\n\t\t\tthis.listeners.forEach((listener) => listener(message));\n\t\t};\n\n\t\twindow.addEventListener(\"storage\", handler);\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"storage\", handler);\n\t\t};\n\t}\n}\n\nexport function getGlobalBroadcastChannel(name = \"better-auth.message\") {\n\tif (!(globalThis as any)[kBroadcastChannel]) {\n\t\t(globalThis as any)[kBroadcastChannel] = new WindowBroadcastChannel(name);\n\t}\n\treturn (globalThis as any)[kBroadcastChannel] as BroadcastChannel;\n}\n"],"mappings":";AASA,MAAa,oBAAoB,OAAO,IAAI,gCAAgC;AAE5E,MAAM,YAAY,KAAK,MAAM,KAAK,KAAK,GAAG,IAAK;AAQ/C,IAAM,yBAAN,MAAyD;CACxD,4BAAY,IAAI,KAAwB;CACxC,AAAQ;CAER,YAAY,OAAO,uBAAuB;AACzC,OAAK,OAAO;;CAGb,UAAU,UAA6B;AACtC,OAAK,UAAU,IAAI,SAAS;AAC5B,eAAa;AACZ,QAAK,UAAU,OAAO,SAAS;;;CAIjC,KAAK,SAAkC;AACtC,MAAI,OAAO,WAAW,YAAa;AACnC,MAAI;AACH,gBAAa,QACZ,KAAK,MACL,KAAK,UAAU;IAAE,GAAG;IAAS,WAAW,KAAK;IAAE,CAAC,CAChD;UACM;;CAGT,QAAQ;AACP,MACC,OAAO,WAAW,eAClB,OAAO,OAAO,qBAAqB,YAEnC,cAAa;EAGd,MAAM,WAAW,UAAwB;AACxC,OAAI,MAAM,QAAQ,KAAK,KAAM;GAC7B,MAAM,UAA4B,KAAK,MAAM,MAAM,YAAY,KAAK;AACpE,OAAI,SAAS,UAAU,aAAa,CAAC,SAAS,KAAM;AAEpD,QAAK,UAAU,SAAS,aAAa,SAAS,QAAQ,CAAC;;AAGxD,SAAO,iBAAiB,WAAW,QAAQ;AAE3C,eAAa;AACZ,UAAO,oBAAoB,WAAW,QAAQ;;;;AAKjD,SAAgB,0BAA0B,OAAO,uBAAuB;AACvE,KAAI,CAAE,WAAmB,mBACxB,CAAC,WAAmB,qBAAqB,IAAI,uBAAuB,KAAK;AAE1E,QAAQ,WAAmB"}
@@ -0,0 +1,90 @@
1
+ import { getBaseURL } from "../utils/url.mjs";
2
+ import { redirectPlugin } from "./fetch-plugins.mjs";
3
+ import { parseJSON } from "./parser.mjs";
4
+ import { getSessionAtom } from "./session-atom.mjs";
5
+ import { defu as defu$1 } from "defu";
6
+ import { createFetch } from "@better-fetch/fetch";
7
+
8
+ //#region src/client/config.ts
9
+ const getClientConfig = (options, loadEnv) => {
10
+ const isCredentialsSupported = "credentials" in Request.prototype;
11
+ const baseURL = getBaseURL(options?.baseURL, options?.basePath, void 0, loadEnv) ?? "/api/auth";
12
+ const pluginsFetchPlugins = options?.plugins?.flatMap((plugin) => plugin.fetchPlugins).filter((pl) => pl !== void 0) || [];
13
+ const lifeCyclePlugin = {
14
+ id: "lifecycle-hooks",
15
+ name: "lifecycle-hooks",
16
+ hooks: {
17
+ onSuccess: options?.fetchOptions?.onSuccess,
18
+ onError: options?.fetchOptions?.onError,
19
+ onRequest: options?.fetchOptions?.onRequest,
20
+ onResponse: options?.fetchOptions?.onResponse
21
+ }
22
+ };
23
+ const { onSuccess: _onSuccess, onError: _onError, onRequest: _onRequest, onResponse: _onResponse, ...restOfFetchOptions } = options?.fetchOptions || {};
24
+ const $fetch = createFetch({
25
+ baseURL,
26
+ ...isCredentialsSupported ? { credentials: "include" } : {},
27
+ method: "GET",
28
+ jsonParser(text) {
29
+ if (!text) return null;
30
+ return parseJSON(text, { strict: false });
31
+ },
32
+ customFetchImpl: fetch,
33
+ ...restOfFetchOptions,
34
+ plugins: [
35
+ lifeCyclePlugin,
36
+ ...restOfFetchOptions.plugins || [],
37
+ ...options?.disableDefaultFetchPlugins ? [] : [redirectPlugin],
38
+ ...pluginsFetchPlugins
39
+ ]
40
+ });
41
+ const { $sessionSignal, session } = getSessionAtom($fetch, options);
42
+ const plugins = options?.plugins || [];
43
+ let pluginsActions = {};
44
+ const pluginsAtoms = {
45
+ $sessionSignal,
46
+ session
47
+ };
48
+ const pluginPathMethods = {
49
+ "/sign-out": "POST",
50
+ "/revoke-sessions": "POST",
51
+ "/revoke-other-sessions": "POST",
52
+ "/delete-user": "POST"
53
+ };
54
+ const atomListeners = [{
55
+ signal: "$sessionSignal",
56
+ matcher(path) {
57
+ return path === "/sign-out" || path === "/update-user" || path === "/sign-up/email" || path === "/sign-in/email" || path === "/delete-user" || path === "/verify-email" || path === "/revoke-sessions" || path === "/revoke-session" || path === "/change-email";
58
+ }
59
+ }];
60
+ for (const plugin of plugins) {
61
+ if (plugin.getAtoms) Object.assign(pluginsAtoms, plugin.getAtoms?.($fetch));
62
+ if (plugin.pathMethods) Object.assign(pluginPathMethods, plugin.pathMethods);
63
+ if (plugin.atomListeners) atomListeners.push(...plugin.atomListeners);
64
+ }
65
+ const $store = {
66
+ notify: (signal) => {
67
+ pluginsAtoms[signal].set(!pluginsAtoms[signal].get());
68
+ },
69
+ listen: (signal, listener) => {
70
+ pluginsAtoms[signal].subscribe(listener);
71
+ },
72
+ atoms: pluginsAtoms
73
+ };
74
+ for (const plugin of plugins) if (plugin.getActions) pluginsActions = defu$1(plugin.getActions?.($fetch, $store, options) ?? {}, pluginsActions);
75
+ return {
76
+ get baseURL() {
77
+ return baseURL;
78
+ },
79
+ pluginsActions,
80
+ pluginsAtoms,
81
+ pluginPathMethods,
82
+ atomListeners,
83
+ $fetch,
84
+ $store
85
+ };
86
+ };
87
+
88
+ //#endregion
89
+ export { getClientConfig };
90
+ //# sourceMappingURL=config.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.mjs","names":["defu"],"sources":["../../src/client/config.ts"],"sourcesContent":["import type {\n\tBetterAuthClientOptions,\n\tClientAtomListener,\n} from \"@better-auth/core\";\nimport { createFetch } from \"@better-fetch/fetch\";\nimport { defu } from \"defu\";\nimport type { WritableAtom } from \"nanostores\";\nimport { getBaseURL } from \"../utils/url\";\nimport { redirectPlugin } from \"./fetch-plugins\";\nimport { parseJSON } from \"./parser\";\nimport { getSessionAtom } from \"./session-atom\";\n\nexport const getClientConfig = (\n\toptions?: BetterAuthClientOptions | undefined,\n\tloadEnv?: boolean | undefined,\n) => {\n\t/* check if the credentials property is supported. Useful for cf workers */\n\tconst isCredentialsSupported = \"credentials\" in Request.prototype;\n\tconst baseURL =\n\t\tgetBaseURL(options?.baseURL, options?.basePath, undefined, loadEnv) ??\n\t\t\"/api/auth\";\n\tconst pluginsFetchPlugins =\n\t\toptions?.plugins\n\t\t\t?.flatMap((plugin) => plugin.fetchPlugins)\n\t\t\t.filter((pl) => pl !== undefined) || [];\n\tconst lifeCyclePlugin = {\n\t\tid: \"lifecycle-hooks\",\n\t\tname: \"lifecycle-hooks\",\n\t\thooks: {\n\t\t\tonSuccess: options?.fetchOptions?.onSuccess,\n\t\t\tonError: options?.fetchOptions?.onError,\n\t\t\tonRequest: options?.fetchOptions?.onRequest,\n\t\t\tonResponse: options?.fetchOptions?.onResponse,\n\t\t},\n\t};\n\tconst {\n\t\tonSuccess: _onSuccess,\n\t\tonError: _onError,\n\t\tonRequest: _onRequest,\n\t\tonResponse: _onResponse,\n\t\t...restOfFetchOptions\n\t} = options?.fetchOptions || {};\n\tconst $fetch = createFetch({\n\t\tbaseURL,\n\t\t...(isCredentialsSupported ? { credentials: \"include\" } : {}),\n\t\tmethod: \"GET\",\n\t\tjsonParser(text) {\n\t\t\tif (!text) {\n\t\t\t\treturn null as any;\n\t\t\t}\n\t\t\treturn parseJSON(text, {\n\t\t\t\tstrict: false,\n\t\t\t});\n\t\t},\n\t\tcustomFetchImpl: fetch,\n\t\t...restOfFetchOptions,\n\t\tplugins: [\n\t\t\tlifeCyclePlugin,\n\t\t\t...(restOfFetchOptions.plugins || []),\n\t\t\t...(options?.disableDefaultFetchPlugins ? [] : [redirectPlugin]),\n\t\t\t...pluginsFetchPlugins,\n\t\t],\n\t});\n\tconst { $sessionSignal, session } = getSessionAtom($fetch, options);\n\tconst plugins = options?.plugins || [];\n\tlet pluginsActions = {} as Record<string, any>;\n\tconst pluginsAtoms = {\n\t\t$sessionSignal,\n\t\tsession,\n\t} as Record<string, WritableAtom<any>>;\n\tconst pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {\n\t\t\"/sign-out\": \"POST\",\n\t\t\"/revoke-sessions\": \"POST\",\n\t\t\"/revoke-other-sessions\": \"POST\",\n\t\t\"/delete-user\": \"POST\",\n\t};\n\tconst atomListeners: ClientAtomListener[] = [\n\t\t{\n\t\t\tsignal: \"$sessionSignal\",\n\t\t\tmatcher(path) {\n\t\t\t\tconst matchesCommonPaths =\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath === \"/update-user\" ||\n\t\t\t\t\tpath === \"/sign-up/email\" ||\n\t\t\t\t\tpath === \"/sign-in/email\" ||\n\t\t\t\t\tpath === \"/delete-user\" ||\n\t\t\t\t\tpath === \"/verify-email\" ||\n\t\t\t\t\tpath === \"/revoke-sessions\" ||\n\t\t\t\t\tpath === \"/revoke-session\" ||\n\t\t\t\t\tpath === \"/change-email\";\n\n\t\t\t\treturn matchesCommonPaths;\n\t\t\t},\n\t\t},\n\t];\n\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getAtoms) {\n\t\t\tObject.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n\t\t}\n\t\tif (plugin.pathMethods) {\n\t\t\tObject.assign(pluginPathMethods, plugin.pathMethods);\n\t\t}\n\t\tif (plugin.atomListeners) {\n\t\t\tatomListeners.push(...plugin.atomListeners);\n\t\t}\n\t}\n\n\tconst $store = {\n\t\tnotify: (\n\t\t\tsignal?: (Omit<string, \"$sessionSignal\"> | \"$sessionSignal\") | undefined,\n\t\t) => {\n\t\t\tpluginsAtoms[signal as keyof typeof pluginsAtoms]!.set(\n\t\t\t\t!pluginsAtoms[signal as keyof typeof pluginsAtoms]!.get(),\n\t\t\t);\n\t\t},\n\t\tlisten: (\n\t\t\tsignal: Omit<string, \"$sessionSignal\"> | \"$sessionSignal\",\n\t\t\tlistener: (value: boolean, oldValue?: boolean | undefined) => void,\n\t\t) => {\n\t\t\tpluginsAtoms[signal as keyof typeof pluginsAtoms]!.subscribe(listener);\n\t\t},\n\t\tatoms: pluginsAtoms,\n\t};\n\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getActions) {\n\t\t\tpluginsActions = defu(\n\t\t\t\tplugin.getActions?.($fetch, $store, options) ?? {},\n\t\t\t\tpluginsActions,\n\t\t\t);\n\t\t}\n\t}\n\treturn {\n\t\tget baseURL() {\n\t\t\treturn baseURL;\n\t\t},\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\tpluginPathMethods,\n\t\tatomListeners,\n\t\t$fetch,\n\t\t$store,\n\t};\n};\n"],"mappings":";;;;;;;;AAYA,MAAa,mBACZ,SACA,YACI;CAEJ,MAAM,yBAAyB,iBAAiB,QAAQ;CACxD,MAAM,UACL,WAAW,SAAS,SAAS,SAAS,UAAU,QAAW,QAAQ,IACnE;CACD,MAAM,sBACL,SAAS,SACN,SAAS,WAAW,OAAO,aAAa,CACzC,QAAQ,OAAO,OAAO,OAAU,IAAI,EAAE;CACzC,MAAM,kBAAkB;EACvB,IAAI;EACJ,MAAM;EACN,OAAO;GACN,WAAW,SAAS,cAAc;GAClC,SAAS,SAAS,cAAc;GAChC,WAAW,SAAS,cAAc;GAClC,YAAY,SAAS,cAAc;GACnC;EACD;CACD,MAAM,EACL,WAAW,YACX,SAAS,UACT,WAAW,YACX,YAAY,aACZ,GAAG,uBACA,SAAS,gBAAgB,EAAE;CAC/B,MAAM,SAAS,YAAY;EAC1B;EACA,GAAI,yBAAyB,EAAE,aAAa,WAAW,GAAG,EAAE;EAC5D,QAAQ;EACR,WAAW,MAAM;AAChB,OAAI,CAAC,KACJ,QAAO;AAER,UAAO,UAAU,MAAM,EACtB,QAAQ,OACR,CAAC;;EAEH,iBAAiB;EACjB,GAAG;EACH,SAAS;GACR;GACA,GAAI,mBAAmB,WAAW,EAAE;GACpC,GAAI,SAAS,6BAA6B,EAAE,GAAG,CAAC,eAAe;GAC/D,GAAG;GACH;EACD,CAAC;CACF,MAAM,EAAE,gBAAgB,YAAY,eAAe,QAAQ,QAAQ;CACnE,MAAM,UAAU,SAAS,WAAW,EAAE;CACtC,IAAI,iBAAiB,EAAE;CACvB,MAAM,eAAe;EACpB;EACA;EACA;CACD,MAAM,oBAAoD;EACzD,aAAa;EACb,oBAAoB;EACpB,0BAA0B;EAC1B,gBAAgB;EAChB;CACD,MAAM,gBAAsC,CAC3C;EACC,QAAQ;EACR,QAAQ,MAAM;AAYb,UAVC,SAAS,eACT,SAAS,kBACT,SAAS,oBACT,SAAS,oBACT,SAAS,kBACT,SAAS,mBACT,SAAS,sBACT,SAAS,qBACT,SAAS;;EAIX,CACD;AAED,MAAK,MAAM,UAAU,SAAS;AAC7B,MAAI,OAAO,SACV,QAAO,OAAO,cAAc,OAAO,WAAW,OAAO,CAAC;AAEvD,MAAI,OAAO,YACV,QAAO,OAAO,mBAAmB,OAAO,YAAY;AAErD,MAAI,OAAO,cACV,eAAc,KAAK,GAAG,OAAO,cAAc;;CAI7C,MAAM,SAAS;EACd,SACC,WACI;AACJ,gBAAa,QAAsC,IAClD,CAAC,aAAa,QAAsC,KAAK,CACzD;;EAEF,SACC,QACA,aACI;AACJ,gBAAa,QAAsC,UAAU,SAAS;;EAEvE,OAAO;EACP;AAED,MAAK,MAAM,UAAU,QACpB,KAAI,OAAO,WACV,kBAAiBA,OAChB,OAAO,aAAa,QAAQ,QAAQ,QAAQ,IAAI,EAAE,EAClD,eACA;AAGH,QAAO;EACN,IAAI,UAAU;AACb,UAAO;;EAER;EACA;EACA;EACA;EACA;EACA;EACA"}
@@ -0,0 +1,18 @@
1
+ //#region src/client/fetch-plugins.ts
2
+ const redirectPlugin = {
3
+ id: "redirect",
4
+ name: "Redirect",
5
+ hooks: { onSuccess(context) {
6
+ if (context.data?.url && context.data?.redirect) {
7
+ if (typeof window !== "undefined" && window.location) {
8
+ if (window.location) try {
9
+ window.location.href = context.data.url;
10
+ } catch {}
11
+ }
12
+ }
13
+ } }
14
+ };
15
+
16
+ //#endregion
17
+ export { redirectPlugin };
18
+ //# sourceMappingURL=fetch-plugins.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-plugins.mjs","names":[],"sources":["../../src/client/fetch-plugins.ts"],"sourcesContent":["import type { BetterFetchPlugin } from \"@better-fetch/fetch\";\n\nexport const redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: {\n\t\tonSuccess(context) {\n\t\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\t\tif (typeof window !== \"undefined\" && window.location) {\n\t\t\t\t\tif (window.location) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\twindow.location.href = context.data.url;\n\t\t\t\t\t\t} catch {}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n"],"mappings":";AAEA,MAAa,iBAAiB;CAC7B,IAAI;CACJ,MAAM;CACN,OAAO,EACN,UAAU,SAAS;AAClB,MAAI,QAAQ,MAAM,OAAO,QAAQ,MAAM,UACtC;OAAI,OAAO,WAAW,eAAe,OAAO,UAC3C;QAAI,OAAO,SACV,KAAI;AACH,YAAO,SAAS,OAAO,QAAQ,KAAK;YAC7B;;;IAKZ;CACD"}
@@ -0,0 +1,11 @@
1
+ //#region src/client/focus-manager.d.ts
2
+ type FocusListener = (focused: boolean) => void;
3
+ declare const kFocusManager: unique symbol;
4
+ interface FocusManager {
5
+ setFocused(focused: boolean): void;
6
+ subscribe(listener: FocusListener): () => void;
7
+ setup(): () => void;
8
+ }
9
+ //#endregion
10
+ export { FocusListener, FocusManager, kFocusManager };
11
+ //# sourceMappingURL=focus-manager.d.mts.map
@@ -0,0 +1,32 @@
1
+ //#region src/client/focus-manager.ts
2
+ const kFocusManager = Symbol.for("better-auth:focus-manager");
3
+ var WindowFocusManager = class {
4
+ listeners = /* @__PURE__ */ new Set();
5
+ subscribe(listener) {
6
+ this.listeners.add(listener);
7
+ return () => {
8
+ this.listeners.delete(listener);
9
+ };
10
+ }
11
+ setFocused(focused) {
12
+ this.listeners.forEach((listener) => listener(focused));
13
+ }
14
+ setup() {
15
+ if (typeof window === "undefined" || typeof document === "undefined" || typeof window.addEventListener === "undefined") return () => {};
16
+ const visibilityHandler = () => {
17
+ if (document.visibilityState === "visible") this.setFocused(true);
18
+ };
19
+ document.addEventListener("visibilitychange", visibilityHandler, false);
20
+ return () => {
21
+ document.removeEventListener("visibilitychange", visibilityHandler, false);
22
+ };
23
+ }
24
+ };
25
+ function getGlobalFocusManager() {
26
+ if (!globalThis[kFocusManager]) globalThis[kFocusManager] = new WindowFocusManager();
27
+ return globalThis[kFocusManager];
28
+ }
29
+
30
+ //#endregion
31
+ export { getGlobalFocusManager, kFocusManager };
32
+ //# sourceMappingURL=focus-manager.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-manager.mjs","names":[],"sources":["../../src/client/focus-manager.ts"],"sourcesContent":["export type FocusListener = (focused: boolean) => void;\n\nexport const kFocusManager = Symbol.for(\"better-auth:focus-manager\");\n\nexport interface FocusManager {\n\tsetFocused(focused: boolean): void;\n\tsubscribe(listener: FocusListener): () => void;\n\tsetup(): () => void;\n}\n\nclass WindowFocusManager implements FocusManager {\n\tlisteners = new Set<FocusListener>();\n\n\tsubscribe(listener: FocusListener) {\n\t\tthis.listeners.add(listener);\n\t\treturn () => {\n\t\t\tthis.listeners.delete(listener);\n\t\t};\n\t}\n\n\tsetFocused(focused: boolean) {\n\t\tthis.listeners.forEach((listener) => listener(focused));\n\t}\n\n\tsetup() {\n\t\tif (\n\t\t\ttypeof window === \"undefined\" ||\n\t\t\ttypeof document === \"undefined\" ||\n\t\t\ttypeof window.addEventListener === \"undefined\"\n\t\t) {\n\t\t\treturn () => {};\n\t\t}\n\n\t\tconst visibilityHandler = () => {\n\t\t\tif (document.visibilityState === \"visible\") {\n\t\t\t\tthis.setFocused(true);\n\t\t\t}\n\t\t};\n\n\t\tdocument.addEventListener(\"visibilitychange\", visibilityHandler, false);\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\n\t\t\t\t\"visibilitychange\",\n\t\t\t\tvisibilityHandler,\n\t\t\t\tfalse,\n\t\t\t);\n\t\t};\n\t}\n}\n\nexport function getGlobalFocusManager() {\n\tif (!(globalThis as any)[kFocusManager]) {\n\t\t(globalThis as any)[kFocusManager] = new WindowFocusManager();\n\t}\n\treturn (globalThis as any)[kFocusManager] as FocusManager;\n}\n"],"mappings":";AAEA,MAAa,gBAAgB,OAAO,IAAI,4BAA4B;AAQpE,IAAM,qBAAN,MAAiD;CAChD,4BAAY,IAAI,KAAoB;CAEpC,UAAU,UAAyB;AAClC,OAAK,UAAU,IAAI,SAAS;AAC5B,eAAa;AACZ,QAAK,UAAU,OAAO,SAAS;;;CAIjC,WAAW,SAAkB;AAC5B,OAAK,UAAU,SAAS,aAAa,SAAS,QAAQ,CAAC;;CAGxD,QAAQ;AACP,MACC,OAAO,WAAW,eAClB,OAAO,aAAa,eACpB,OAAO,OAAO,qBAAqB,YAEnC,cAAa;EAGd,MAAM,0BAA0B;AAC/B,OAAI,SAAS,oBAAoB,UAChC,MAAK,WAAW,KAAK;;AAIvB,WAAS,iBAAiB,oBAAoB,mBAAmB,MAAM;AAEvE,eAAa;AACZ,YAAS,oBACR,oBACA,mBACA,MACA;;;;AAKJ,SAAgB,wBAAwB;AACvC,KAAI,CAAE,WAAmB,eACxB,CAAC,WAAmB,iBAAiB,IAAI,oBAAoB;AAE9D,QAAQ,WAAmB"}