@hammadj/better-auth 1.5.0-beta.10

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 (687) hide show
  1. package/README.md +33 -0
  2. package/dist/_virtual/rolldown_runtime.mjs +36 -0
  3. package/dist/adapters/drizzle-adapter/index.d.mts +1 -0
  4. package/dist/adapters/drizzle-adapter/index.mjs +3 -0
  5. package/dist/adapters/index.d.mts +23 -0
  6. package/dist/adapters/index.mjs +13 -0
  7. package/dist/adapters/index.mjs.map +1 -0
  8. package/dist/adapters/kysely-adapter/index.d.mts +1 -0
  9. package/dist/adapters/kysely-adapter/index.mjs +3 -0
  10. package/dist/adapters/memory-adapter/index.d.mts +1 -0
  11. package/dist/adapters/memory-adapter/index.mjs +3 -0
  12. package/dist/adapters/mongodb-adapter/index.d.mts +1 -0
  13. package/dist/adapters/mongodb-adapter/index.mjs +3 -0
  14. package/dist/adapters/prisma-adapter/index.d.mts +1 -0
  15. package/dist/adapters/prisma-adapter/index.mjs +3 -0
  16. package/dist/api/index.d.mts +40 -0
  17. package/dist/api/index.mjs +205 -0
  18. package/dist/api/index.mjs.map +1 -0
  19. package/dist/api/middlewares/index.d.mts +1 -0
  20. package/dist/api/middlewares/index.mjs +3 -0
  21. package/dist/api/middlewares/origin-check.d.mts +17 -0
  22. package/dist/api/middlewares/origin-check.mjs +140 -0
  23. package/dist/api/middlewares/origin-check.mjs.map +1 -0
  24. package/dist/api/rate-limiter/index.mjs +177 -0
  25. package/dist/api/rate-limiter/index.mjs.map +1 -0
  26. package/dist/api/routes/account.d.mts +10 -0
  27. package/dist/api/routes/account.mjs +493 -0
  28. package/dist/api/routes/account.mjs.map +1 -0
  29. package/dist/api/routes/callback.d.mts +5 -0
  30. package/dist/api/routes/callback.mjs +178 -0
  31. package/dist/api/routes/callback.mjs.map +1 -0
  32. package/dist/api/routes/email-verification.d.mts +29 -0
  33. package/dist/api/routes/email-verification.mjs +301 -0
  34. package/dist/api/routes/email-verification.mjs.map +1 -0
  35. package/dist/api/routes/error.d.mts +5 -0
  36. package/dist/api/routes/error.mjs +386 -0
  37. package/dist/api/routes/error.mjs.map +1 -0
  38. package/dist/api/routes/index.d.mts +11 -0
  39. package/dist/api/routes/index.mjs +13 -0
  40. package/dist/api/routes/ok.d.mts +5 -0
  41. package/dist/api/routes/ok.mjs +30 -0
  42. package/dist/api/routes/ok.mjs.map +1 -0
  43. package/dist/api/routes/password.d.mts +8 -0
  44. package/dist/api/routes/password.mjs +198 -0
  45. package/dist/api/routes/password.mjs.map +1 -0
  46. package/dist/api/routes/session.d.mts +52 -0
  47. package/dist/api/routes/session.mjs +478 -0
  48. package/dist/api/routes/session.mjs.map +1 -0
  49. package/dist/api/routes/sign-in.d.mts +8 -0
  50. package/dist/api/routes/sign-in.mjs +262 -0
  51. package/dist/api/routes/sign-in.mjs.map +1 -0
  52. package/dist/api/routes/sign-out.d.mts +5 -0
  53. package/dist/api/routes/sign-out.mjs +33 -0
  54. package/dist/api/routes/sign-out.mjs.map +1 -0
  55. package/dist/api/routes/sign-up.d.mts +7 -0
  56. package/dist/api/routes/sign-up.mjs +227 -0
  57. package/dist/api/routes/sign-up.mjs.map +1 -0
  58. package/dist/api/routes/update-user.d.mts +12 -0
  59. package/dist/api/routes/update-user.mjs +493 -0
  60. package/dist/api/routes/update-user.mjs.map +1 -0
  61. package/dist/api/state/oauth.d.mts +5 -0
  62. package/dist/api/state/oauth.mjs +8 -0
  63. package/dist/api/state/oauth.mjs.map +1 -0
  64. package/dist/api/state/should-session-refresh.d.mts +13 -0
  65. package/dist/api/state/should-session-refresh.mjs +16 -0
  66. package/dist/api/state/should-session-refresh.mjs.map +1 -0
  67. package/dist/api/to-auth-endpoints.mjs +197 -0
  68. package/dist/api/to-auth-endpoints.mjs.map +1 -0
  69. package/dist/auth/base.mjs +44 -0
  70. package/dist/auth/base.mjs.map +1 -0
  71. package/dist/auth/full.d.mts +30 -0
  72. package/dist/auth/full.mjs +32 -0
  73. package/dist/auth/full.mjs.map +1 -0
  74. package/dist/auth/minimal.d.mts +12 -0
  75. package/dist/auth/minimal.mjs +14 -0
  76. package/dist/auth/minimal.mjs.map +1 -0
  77. package/dist/auth/trusted-origins.mjs +31 -0
  78. package/dist/auth/trusted-origins.mjs.map +1 -0
  79. package/dist/client/broadcast-channel.d.mts +20 -0
  80. package/dist/client/broadcast-channel.mjs +46 -0
  81. package/dist/client/broadcast-channel.mjs.map +1 -0
  82. package/dist/client/config.mjs +90 -0
  83. package/dist/client/config.mjs.map +1 -0
  84. package/dist/client/fetch-plugins.mjs +18 -0
  85. package/dist/client/fetch-plugins.mjs.map +1 -0
  86. package/dist/client/focus-manager.d.mts +11 -0
  87. package/dist/client/focus-manager.mjs +32 -0
  88. package/dist/client/focus-manager.mjs.map +1 -0
  89. package/dist/client/index.d.mts +30 -0
  90. package/dist/client/index.mjs +21 -0
  91. package/dist/client/index.mjs.map +1 -0
  92. package/dist/client/lynx/index.d.mts +62 -0
  93. package/dist/client/lynx/index.mjs +24 -0
  94. package/dist/client/lynx/index.mjs.map +1 -0
  95. package/dist/client/lynx/lynx-store.d.mts +47 -0
  96. package/dist/client/lynx/lynx-store.mjs +47 -0
  97. package/dist/client/lynx/lynx-store.mjs.map +1 -0
  98. package/dist/client/online-manager.d.mts +12 -0
  99. package/dist/client/online-manager.mjs +35 -0
  100. package/dist/client/online-manager.mjs.map +1 -0
  101. package/dist/client/parser.mjs +73 -0
  102. package/dist/client/parser.mjs.map +1 -0
  103. package/dist/client/path-to-object.d.mts +57 -0
  104. package/dist/client/plugins/index.d.mts +58 -0
  105. package/dist/client/plugins/index.mjs +33 -0
  106. package/dist/client/plugins/infer-plugin.d.mts +9 -0
  107. package/dist/client/plugins/infer-plugin.mjs +11 -0
  108. package/dist/client/plugins/infer-plugin.mjs.map +1 -0
  109. package/dist/client/proxy.mjs +79 -0
  110. package/dist/client/proxy.mjs.map +1 -0
  111. package/dist/client/query.d.mts +23 -0
  112. package/dist/client/query.mjs +98 -0
  113. package/dist/client/query.mjs.map +1 -0
  114. package/dist/client/react/index.d.mts +63 -0
  115. package/dist/client/react/index.mjs +24 -0
  116. package/dist/client/react/index.mjs.map +1 -0
  117. package/dist/client/react/react-store.d.mts +47 -0
  118. package/dist/client/react/react-store.mjs +47 -0
  119. package/dist/client/react/react-store.mjs.map +1 -0
  120. package/dist/client/session-atom.mjs +29 -0
  121. package/dist/client/session-atom.mjs.map +1 -0
  122. package/dist/client/session-refresh.d.mts +28 -0
  123. package/dist/client/session-refresh.mjs +140 -0
  124. package/dist/client/session-refresh.mjs.map +1 -0
  125. package/dist/client/solid/index.d.mts +57 -0
  126. package/dist/client/solid/index.mjs +22 -0
  127. package/dist/client/solid/index.mjs.map +1 -0
  128. package/dist/client/solid/solid-store.mjs +24 -0
  129. package/dist/client/solid/solid-store.mjs.map +1 -0
  130. package/dist/client/svelte/index.d.mts +63 -0
  131. package/dist/client/svelte/index.mjs +20 -0
  132. package/dist/client/svelte/index.mjs.map +1 -0
  133. package/dist/client/types.d.mts +58 -0
  134. package/dist/client/vanilla.d.mts +62 -0
  135. package/dist/client/vanilla.mjs +20 -0
  136. package/dist/client/vanilla.mjs.map +1 -0
  137. package/dist/client/vue/index.d.mts +86 -0
  138. package/dist/client/vue/index.mjs +38 -0
  139. package/dist/client/vue/index.mjs.map +1 -0
  140. package/dist/client/vue/vue-store.mjs +26 -0
  141. package/dist/client/vue/vue-store.mjs.map +1 -0
  142. package/dist/context/create-context.mjs +211 -0
  143. package/dist/context/create-context.mjs.map +1 -0
  144. package/dist/context/helpers.mjs +62 -0
  145. package/dist/context/helpers.mjs.map +1 -0
  146. package/dist/context/init-minimal.mjs +20 -0
  147. package/dist/context/init-minimal.mjs.map +1 -0
  148. package/dist/context/init.mjs +22 -0
  149. package/dist/context/init.mjs.map +1 -0
  150. package/dist/cookies/cookie-utils.d.mts +29 -0
  151. package/dist/cookies/cookie-utils.mjs +105 -0
  152. package/dist/cookies/cookie-utils.mjs.map +1 -0
  153. package/dist/cookies/index.d.mts +67 -0
  154. package/dist/cookies/index.mjs +264 -0
  155. package/dist/cookies/index.mjs.map +1 -0
  156. package/dist/cookies/session-store.d.mts +36 -0
  157. package/dist/cookies/session-store.mjs +200 -0
  158. package/dist/cookies/session-store.mjs.map +1 -0
  159. package/dist/crypto/buffer.d.mts +8 -0
  160. package/dist/crypto/buffer.mjs +18 -0
  161. package/dist/crypto/buffer.mjs.map +1 -0
  162. package/dist/crypto/index.d.mts +27 -0
  163. package/dist/crypto/index.mjs +38 -0
  164. package/dist/crypto/index.mjs.map +1 -0
  165. package/dist/crypto/jwt.d.mts +8 -0
  166. package/dist/crypto/jwt.mjs +95 -0
  167. package/dist/crypto/jwt.mjs.map +1 -0
  168. package/dist/crypto/password.d.mts +12 -0
  169. package/dist/crypto/password.mjs +36 -0
  170. package/dist/crypto/password.mjs.map +1 -0
  171. package/dist/crypto/random.d.mts +5 -0
  172. package/dist/crypto/random.mjs +8 -0
  173. package/dist/crypto/random.mjs.map +1 -0
  174. package/dist/db/adapter-base.d.mts +8 -0
  175. package/dist/db/adapter-base.mjs +28 -0
  176. package/dist/db/adapter-base.mjs.map +1 -0
  177. package/dist/db/adapter-kysely.d.mts +8 -0
  178. package/dist/db/adapter-kysely.mjs +21 -0
  179. package/dist/db/adapter-kysely.mjs.map +1 -0
  180. package/dist/db/field-converter.d.mts +8 -0
  181. package/dist/db/field-converter.mjs +21 -0
  182. package/dist/db/field-converter.mjs.map +1 -0
  183. package/dist/db/field.d.mts +55 -0
  184. package/dist/db/field.mjs +11 -0
  185. package/dist/db/field.mjs.map +1 -0
  186. package/dist/db/get-migration.d.mts +23 -0
  187. package/dist/db/get-migration.mjs +339 -0
  188. package/dist/db/get-migration.mjs.map +1 -0
  189. package/dist/db/get-schema.d.mts +11 -0
  190. package/dist/db/get-schema.mjs +39 -0
  191. package/dist/db/get-schema.mjs.map +1 -0
  192. package/dist/db/index.d.mts +9 -0
  193. package/dist/db/index.mjs +36 -0
  194. package/dist/db/index.mjs.map +1 -0
  195. package/dist/db/internal-adapter.d.mts +14 -0
  196. package/dist/db/internal-adapter.mjs +616 -0
  197. package/dist/db/internal-adapter.mjs.map +1 -0
  198. package/dist/db/schema.d.mts +26 -0
  199. package/dist/db/schema.mjs +118 -0
  200. package/dist/db/schema.mjs.map +1 -0
  201. package/dist/db/to-zod.d.mts +36 -0
  202. package/dist/db/to-zod.mjs +26 -0
  203. package/dist/db/to-zod.mjs.map +1 -0
  204. package/dist/db/verification-token-storage.mjs +28 -0
  205. package/dist/db/verification-token-storage.mjs.map +1 -0
  206. package/dist/db/with-hooks.d.mts +33 -0
  207. package/dist/db/with-hooks.mjs +159 -0
  208. package/dist/db/with-hooks.mjs.map +1 -0
  209. package/dist/index.d.mts +52 -0
  210. package/dist/index.mjs +26 -0
  211. package/dist/integrations/next-js.d.mts +14 -0
  212. package/dist/integrations/next-js.mjs +78 -0
  213. package/dist/integrations/next-js.mjs.map +1 -0
  214. package/dist/integrations/node.d.mts +13 -0
  215. package/dist/integrations/node.mjs +16 -0
  216. package/dist/integrations/node.mjs.map +1 -0
  217. package/dist/integrations/solid-start.d.mts +23 -0
  218. package/dist/integrations/solid-start.mjs +17 -0
  219. package/dist/integrations/solid-start.mjs.map +1 -0
  220. package/dist/integrations/svelte-kit.d.mts +29 -0
  221. package/dist/integrations/svelte-kit.mjs +57 -0
  222. package/dist/integrations/svelte-kit.mjs.map +1 -0
  223. package/dist/integrations/tanstack-start-solid.d.mts +22 -0
  224. package/dist/integrations/tanstack-start-solid.mjs +61 -0
  225. package/dist/integrations/tanstack-start-solid.mjs.map +1 -0
  226. package/dist/integrations/tanstack-start.d.mts +22 -0
  227. package/dist/integrations/tanstack-start.mjs +61 -0
  228. package/dist/integrations/tanstack-start.mjs.map +1 -0
  229. package/dist/oauth2/index.d.mts +5 -0
  230. package/dist/oauth2/index.mjs +7 -0
  231. package/dist/oauth2/link-account.d.mts +31 -0
  232. package/dist/oauth2/link-account.mjs +144 -0
  233. package/dist/oauth2/link-account.mjs.map +1 -0
  234. package/dist/oauth2/state.d.mts +26 -0
  235. package/dist/oauth2/state.mjs +51 -0
  236. package/dist/oauth2/state.mjs.map +1 -0
  237. package/dist/oauth2/utils.d.mts +8 -0
  238. package/dist/oauth2/utils.mjs +31 -0
  239. package/dist/oauth2/utils.mjs.map +1 -0
  240. package/dist/plugins/access/access.d.mts +30 -0
  241. package/dist/plugins/access/access.mjs +46 -0
  242. package/dist/plugins/access/access.mjs.map +1 -0
  243. package/dist/plugins/access/index.d.mts +3 -0
  244. package/dist/plugins/access/index.mjs +3 -0
  245. package/dist/plugins/access/types.d.mts +17 -0
  246. package/dist/plugins/additional-fields/client.d.mts +14 -0
  247. package/dist/plugins/additional-fields/client.mjs +11 -0
  248. package/dist/plugins/additional-fields/client.mjs.map +1 -0
  249. package/dist/plugins/admin/access/index.d.mts +2 -0
  250. package/dist/plugins/admin/access/index.mjs +3 -0
  251. package/dist/plugins/admin/access/statement.d.mts +118 -0
  252. package/dist/plugins/admin/access/statement.mjs +53 -0
  253. package/dist/plugins/admin/access/statement.mjs.map +1 -0
  254. package/dist/plugins/admin/admin.d.mts +14 -0
  255. package/dist/plugins/admin/admin.mjs +95 -0
  256. package/dist/plugins/admin/admin.mjs.map +1 -0
  257. package/dist/plugins/admin/client.d.mts +14 -0
  258. package/dist/plugins/admin/client.mjs +36 -0
  259. package/dist/plugins/admin/client.mjs.map +1 -0
  260. package/dist/plugins/admin/error-codes.d.mts +5 -0
  261. package/dist/plugins/admin/error-codes.mjs +30 -0
  262. package/dist/plugins/admin/error-codes.mjs.map +1 -0
  263. package/dist/plugins/admin/has-permission.mjs +16 -0
  264. package/dist/plugins/admin/has-permission.mjs.map +1 -0
  265. package/dist/plugins/admin/index.d.mts +3 -0
  266. package/dist/plugins/admin/index.mjs +3 -0
  267. package/dist/plugins/admin/routes.mjs +855 -0
  268. package/dist/plugins/admin/routes.mjs.map +1 -0
  269. package/dist/plugins/admin/schema.d.mts +6 -0
  270. package/dist/plugins/admin/schema.mjs +34 -0
  271. package/dist/plugins/admin/schema.mjs.map +1 -0
  272. package/dist/plugins/admin/types.d.mts +89 -0
  273. package/dist/plugins/anonymous/client.d.mts +9 -0
  274. package/dist/plugins/anonymous/client.mjs +22 -0
  275. package/dist/plugins/anonymous/client.mjs.map +1 -0
  276. package/dist/plugins/anonymous/error-codes.d.mts +5 -0
  277. package/dist/plugins/anonymous/error-codes.mjs +16 -0
  278. package/dist/plugins/anonymous/error-codes.mjs.map +1 -0
  279. package/dist/plugins/anonymous/index.d.mts +14 -0
  280. package/dist/plugins/anonymous/index.mjs +163 -0
  281. package/dist/plugins/anonymous/index.mjs.map +1 -0
  282. package/dist/plugins/anonymous/schema.d.mts +5 -0
  283. package/dist/plugins/anonymous/schema.mjs +11 -0
  284. package/dist/plugins/anonymous/schema.mjs.map +1 -0
  285. package/dist/plugins/anonymous/types.d.mts +68 -0
  286. package/dist/plugins/api-key/adapter.mjs +468 -0
  287. package/dist/plugins/api-key/adapter.mjs.map +1 -0
  288. package/dist/plugins/api-key/client.d.mts +9 -0
  289. package/dist/plugins/api-key/client.mjs +19 -0
  290. package/dist/plugins/api-key/client.mjs.map +1 -0
  291. package/dist/plugins/api-key/error-codes.d.mts +5 -0
  292. package/dist/plugins/api-key/error-codes.mjs +34 -0
  293. package/dist/plugins/api-key/error-codes.mjs.map +1 -0
  294. package/dist/plugins/api-key/index.d.mts +17 -0
  295. package/dist/plugins/api-key/index.mjs +134 -0
  296. package/dist/plugins/api-key/index.mjs.map +1 -0
  297. package/dist/plugins/api-key/rate-limit.mjs +74 -0
  298. package/dist/plugins/api-key/rate-limit.mjs.map +1 -0
  299. package/dist/plugins/api-key/routes/create-api-key.mjs +252 -0
  300. package/dist/plugins/api-key/routes/create-api-key.mjs.map +1 -0
  301. package/dist/plugins/api-key/routes/delete-all-expired-api-keys.mjs +24 -0
  302. package/dist/plugins/api-key/routes/delete-all-expired-api-keys.mjs.map +1 -0
  303. package/dist/plugins/api-key/routes/delete-api-key.mjs +74 -0
  304. package/dist/plugins/api-key/routes/delete-api-key.mjs.map +1 -0
  305. package/dist/plugins/api-key/routes/get-api-key.mjs +158 -0
  306. package/dist/plugins/api-key/routes/get-api-key.mjs.map +1 -0
  307. package/dist/plugins/api-key/routes/index.mjs +71 -0
  308. package/dist/plugins/api-key/routes/index.mjs.map +1 -0
  309. package/dist/plugins/api-key/routes/list-api-keys.mjs +194 -0
  310. package/dist/plugins/api-key/routes/list-api-keys.mjs.map +1 -0
  311. package/dist/plugins/api-key/routes/update-api-key.mjs +248 -0
  312. package/dist/plugins/api-key/routes/update-api-key.mjs.map +1 -0
  313. package/dist/plugins/api-key/routes/verify-api-key.mjs +223 -0
  314. package/dist/plugins/api-key/routes/verify-api-key.mjs.map +1 -0
  315. package/dist/plugins/api-key/schema.d.mts +11 -0
  316. package/dist/plugins/api-key/schema.mjs +130 -0
  317. package/dist/plugins/api-key/schema.mjs.map +1 -0
  318. package/dist/plugins/api-key/types.d.mts +346 -0
  319. package/dist/plugins/bearer/index.d.mts +25 -0
  320. package/dist/plugins/bearer/index.mjs +66 -0
  321. package/dist/plugins/bearer/index.mjs.map +1 -0
  322. package/dist/plugins/captcha/constants.d.mts +10 -0
  323. package/dist/plugins/captcha/constants.mjs +22 -0
  324. package/dist/plugins/captcha/constants.mjs.map +1 -0
  325. package/dist/plugins/captcha/error-codes.mjs +16 -0
  326. package/dist/plugins/captcha/error-codes.mjs.map +1 -0
  327. package/dist/plugins/captcha/index.d.mts +14 -0
  328. package/dist/plugins/captcha/index.mjs +60 -0
  329. package/dist/plugins/captcha/index.mjs.map +1 -0
  330. package/dist/plugins/captcha/types.d.mts +28 -0
  331. package/dist/plugins/captcha/utils.mjs +11 -0
  332. package/dist/plugins/captcha/utils.mjs.map +1 -0
  333. package/dist/plugins/captcha/verify-handlers/captchafox.mjs +27 -0
  334. package/dist/plugins/captcha/verify-handlers/captchafox.mjs.map +1 -0
  335. package/dist/plugins/captcha/verify-handlers/cloudflare-turnstile.mjs +25 -0
  336. package/dist/plugins/captcha/verify-handlers/cloudflare-turnstile.mjs.map +1 -0
  337. package/dist/plugins/captcha/verify-handlers/google-recaptcha.mjs +29 -0
  338. package/dist/plugins/captcha/verify-handlers/google-recaptcha.mjs.map +1 -0
  339. package/dist/plugins/captcha/verify-handlers/h-captcha.mjs +27 -0
  340. package/dist/plugins/captcha/verify-handlers/h-captcha.mjs.map +1 -0
  341. package/dist/plugins/captcha/verify-handlers/index.mjs +6 -0
  342. package/dist/plugins/custom-session/client.d.mts +10 -0
  343. package/dist/plugins/custom-session/client.mjs +11 -0
  344. package/dist/plugins/custom-session/client.mjs.map +1 -0
  345. package/dist/plugins/custom-session/index.d.mts +26 -0
  346. package/dist/plugins/custom-session/index.mjs +70 -0
  347. package/dist/plugins/custom-session/index.mjs.map +1 -0
  348. package/dist/plugins/device-authorization/client.d.mts +5 -0
  349. package/dist/plugins/device-authorization/client.mjs +18 -0
  350. package/dist/plugins/device-authorization/client.mjs.map +1 -0
  351. package/dist/plugins/device-authorization/error-codes.mjs +21 -0
  352. package/dist/plugins/device-authorization/error-codes.mjs.map +1 -0
  353. package/dist/plugins/device-authorization/index.d.mts +28 -0
  354. package/dist/plugins/device-authorization/index.mjs +50 -0
  355. package/dist/plugins/device-authorization/index.mjs.map +1 -0
  356. package/dist/plugins/device-authorization/routes.mjs +510 -0
  357. package/dist/plugins/device-authorization/routes.mjs.map +1 -0
  358. package/dist/plugins/device-authorization/schema.mjs +57 -0
  359. package/dist/plugins/device-authorization/schema.mjs.map +1 -0
  360. package/dist/plugins/email-otp/client.d.mts +7 -0
  361. package/dist/plugins/email-otp/client.mjs +18 -0
  362. package/dist/plugins/email-otp/client.mjs.map +1 -0
  363. package/dist/plugins/email-otp/error-codes.d.mts +5 -0
  364. package/dist/plugins/email-otp/error-codes.mjs +12 -0
  365. package/dist/plugins/email-otp/error-codes.mjs.map +1 -0
  366. package/dist/plugins/email-otp/index.d.mts +14 -0
  367. package/dist/plugins/email-otp/index.mjs +108 -0
  368. package/dist/plugins/email-otp/index.mjs.map +1 -0
  369. package/dist/plugins/email-otp/otp-token.mjs +29 -0
  370. package/dist/plugins/email-otp/otp-token.mjs.map +1 -0
  371. package/dist/plugins/email-otp/routes.mjs +564 -0
  372. package/dist/plugins/email-otp/routes.mjs.map +1 -0
  373. package/dist/plugins/email-otp/types.d.mts +74 -0
  374. package/dist/plugins/email-otp/utils.mjs +17 -0
  375. package/dist/plugins/email-otp/utils.mjs.map +1 -0
  376. package/dist/plugins/generic-oauth/client.d.mts +19 -0
  377. package/dist/plugins/generic-oauth/client.mjs +14 -0
  378. package/dist/plugins/generic-oauth/client.mjs.map +1 -0
  379. package/dist/plugins/generic-oauth/error-codes.d.mts +5 -0
  380. package/dist/plugins/generic-oauth/error-codes.mjs +15 -0
  381. package/dist/plugins/generic-oauth/error-codes.mjs.map +1 -0
  382. package/dist/plugins/generic-oauth/index.d.mts +34 -0
  383. package/dist/plugins/generic-oauth/index.mjs +137 -0
  384. package/dist/plugins/generic-oauth/index.mjs.map +1 -0
  385. package/dist/plugins/generic-oauth/providers/auth0.d.mts +37 -0
  386. package/dist/plugins/generic-oauth/providers/auth0.mjs +62 -0
  387. package/dist/plugins/generic-oauth/providers/auth0.mjs.map +1 -0
  388. package/dist/plugins/generic-oauth/providers/gumroad.d.mts +32 -0
  389. package/dist/plugins/generic-oauth/providers/gumroad.mjs +60 -0
  390. package/dist/plugins/generic-oauth/providers/gumroad.mjs.map +1 -0
  391. package/dist/plugins/generic-oauth/providers/hubspot.d.mts +37 -0
  392. package/dist/plugins/generic-oauth/providers/hubspot.mjs +60 -0
  393. package/dist/plugins/generic-oauth/providers/hubspot.mjs.map +1 -0
  394. package/dist/plugins/generic-oauth/providers/index.d.mts +9 -0
  395. package/dist/plugins/generic-oauth/providers/index.mjs +11 -0
  396. package/dist/plugins/generic-oauth/providers/keycloak.d.mts +37 -0
  397. package/dist/plugins/generic-oauth/providers/keycloak.mjs +62 -0
  398. package/dist/plugins/generic-oauth/providers/keycloak.mjs.map +1 -0
  399. package/dist/plugins/generic-oauth/providers/line.d.mts +55 -0
  400. package/dist/plugins/generic-oauth/providers/line.mjs +91 -0
  401. package/dist/plugins/generic-oauth/providers/line.mjs.map +1 -0
  402. package/dist/plugins/generic-oauth/providers/microsoft-entra-id.d.mts +37 -0
  403. package/dist/plugins/generic-oauth/providers/microsoft-entra-id.mjs +66 -0
  404. package/dist/plugins/generic-oauth/providers/microsoft-entra-id.mjs.map +1 -0
  405. package/dist/plugins/generic-oauth/providers/okta.d.mts +37 -0
  406. package/dist/plugins/generic-oauth/providers/okta.mjs +62 -0
  407. package/dist/plugins/generic-oauth/providers/okta.mjs.map +1 -0
  408. package/dist/plugins/generic-oauth/providers/patreon.d.mts +30 -0
  409. package/dist/plugins/generic-oauth/providers/patreon.mjs +59 -0
  410. package/dist/plugins/generic-oauth/providers/patreon.mjs.map +1 -0
  411. package/dist/plugins/generic-oauth/providers/slack.d.mts +30 -0
  412. package/dist/plugins/generic-oauth/providers/slack.mjs +61 -0
  413. package/dist/plugins/generic-oauth/providers/slack.mjs.map +1 -0
  414. package/dist/plugins/generic-oauth/routes.mjs +394 -0
  415. package/dist/plugins/generic-oauth/routes.mjs.map +1 -0
  416. package/dist/plugins/generic-oauth/types.d.mts +145 -0
  417. package/dist/plugins/haveibeenpwned/index.d.mts +21 -0
  418. package/dist/plugins/haveibeenpwned/index.mjs +56 -0
  419. package/dist/plugins/haveibeenpwned/index.mjs.map +1 -0
  420. package/dist/plugins/index.d.mts +68 -0
  421. package/dist/plugins/index.mjs +51 -0
  422. package/dist/plugins/jwt/adapter.mjs +27 -0
  423. package/dist/plugins/jwt/adapter.mjs.map +1 -0
  424. package/dist/plugins/jwt/client.d.mts +18 -0
  425. package/dist/plugins/jwt/client.mjs +19 -0
  426. package/dist/plugins/jwt/client.mjs.map +1 -0
  427. package/dist/plugins/jwt/index.d.mts +17 -0
  428. package/dist/plugins/jwt/index.mjs +202 -0
  429. package/dist/plugins/jwt/index.mjs.map +1 -0
  430. package/dist/plugins/jwt/schema.d.mts +5 -0
  431. package/dist/plugins/jwt/schema.mjs +23 -0
  432. package/dist/plugins/jwt/schema.mjs.map +1 -0
  433. package/dist/plugins/jwt/sign.d.mts +57 -0
  434. package/dist/plugins/jwt/sign.mjs +66 -0
  435. package/dist/plugins/jwt/sign.mjs.map +1 -0
  436. package/dist/plugins/jwt/types.d.mts +194 -0
  437. package/dist/plugins/jwt/utils.d.mts +42 -0
  438. package/dist/plugins/jwt/utils.mjs +64 -0
  439. package/dist/plugins/jwt/utils.mjs.map +1 -0
  440. package/dist/plugins/jwt/verify.d.mts +12 -0
  441. package/dist/plugins/jwt/verify.mjs +46 -0
  442. package/dist/plugins/jwt/verify.mjs.map +1 -0
  443. package/dist/plugins/last-login-method/client.d.mts +18 -0
  444. package/dist/plugins/last-login-method/client.mjs +32 -0
  445. package/dist/plugins/last-login-method/client.mjs.map +1 -0
  446. package/dist/plugins/last-login-method/index.d.mts +52 -0
  447. package/dist/plugins/last-login-method/index.mjs +77 -0
  448. package/dist/plugins/last-login-method/index.mjs.map +1 -0
  449. package/dist/plugins/magic-link/client.d.mts +5 -0
  450. package/dist/plugins/magic-link/client.mjs +11 -0
  451. package/dist/plugins/magic-link/client.mjs.map +1 -0
  452. package/dist/plugins/magic-link/index.d.mts +61 -0
  453. package/dist/plugins/magic-link/index.mjs +167 -0
  454. package/dist/plugins/magic-link/index.mjs.map +1 -0
  455. package/dist/plugins/magic-link/utils.mjs +12 -0
  456. package/dist/plugins/magic-link/utils.mjs.map +1 -0
  457. package/dist/plugins/mcp/authorize.mjs +133 -0
  458. package/dist/plugins/mcp/authorize.mjs.map +1 -0
  459. package/dist/plugins/mcp/index.d.mts +46 -0
  460. package/dist/plugins/mcp/index.mjs +717 -0
  461. package/dist/plugins/mcp/index.mjs.map +1 -0
  462. package/dist/plugins/multi-session/client.d.mts +8 -0
  463. package/dist/plugins/multi-session/client.mjs +20 -0
  464. package/dist/plugins/multi-session/client.mjs.map +1 -0
  465. package/dist/plugins/multi-session/error-codes.d.mts +5 -0
  466. package/dist/plugins/multi-session/error-codes.mjs +8 -0
  467. package/dist/plugins/multi-session/error-codes.mjs.map +1 -0
  468. package/dist/plugins/multi-session/index.d.mts +22 -0
  469. package/dist/plugins/multi-session/index.mjs +172 -0
  470. package/dist/plugins/multi-session/index.mjs.map +1 -0
  471. package/dist/plugins/oauth-proxy/index.d.mts +39 -0
  472. package/dist/plugins/oauth-proxy/index.mjs +305 -0
  473. package/dist/plugins/oauth-proxy/index.mjs.map +1 -0
  474. package/dist/plugins/oauth-proxy/utils.mjs +44 -0
  475. package/dist/plugins/oauth-proxy/utils.mjs.map +1 -0
  476. package/dist/plugins/oidc-provider/authorize.mjs +194 -0
  477. package/dist/plugins/oidc-provider/authorize.mjs.map +1 -0
  478. package/dist/plugins/oidc-provider/client.d.mts +8 -0
  479. package/dist/plugins/oidc-provider/client.mjs +11 -0
  480. package/dist/plugins/oidc-provider/client.mjs.map +1 -0
  481. package/dist/plugins/oidc-provider/error.mjs +17 -0
  482. package/dist/plugins/oidc-provider/error.mjs.map +1 -0
  483. package/dist/plugins/oidc-provider/index.d.mts +32 -0
  484. package/dist/plugins/oidc-provider/index.mjs +1093 -0
  485. package/dist/plugins/oidc-provider/index.mjs.map +1 -0
  486. package/dist/plugins/oidc-provider/schema.d.mts +26 -0
  487. package/dist/plugins/oidc-provider/schema.mjs +132 -0
  488. package/dist/plugins/oidc-provider/schema.mjs.map +1 -0
  489. package/dist/plugins/oidc-provider/types.d.mts +517 -0
  490. package/dist/plugins/oidc-provider/utils/prompt.mjs +19 -0
  491. package/dist/plugins/oidc-provider/utils/prompt.mjs.map +1 -0
  492. package/dist/plugins/oidc-provider/utils.mjs +15 -0
  493. package/dist/plugins/oidc-provider/utils.mjs.map +1 -0
  494. package/dist/plugins/one-tap/client.d.mts +159 -0
  495. package/dist/plugins/one-tap/client.mjs +214 -0
  496. package/dist/plugins/one-tap/client.mjs.map +1 -0
  497. package/dist/plugins/one-tap/index.d.mts +27 -0
  498. package/dist/plugins/one-tap/index.mjs +96 -0
  499. package/dist/plugins/one-tap/index.mjs.map +1 -0
  500. package/dist/plugins/one-time-token/client.d.mts +7 -0
  501. package/dist/plugins/one-time-token/client.mjs +11 -0
  502. package/dist/plugins/one-time-token/client.mjs.map +1 -0
  503. package/dist/plugins/one-time-token/index.d.mts +53 -0
  504. package/dist/plugins/one-time-token/index.mjs +82 -0
  505. package/dist/plugins/one-time-token/index.mjs.map +1 -0
  506. package/dist/plugins/one-time-token/utils.mjs +12 -0
  507. package/dist/plugins/one-time-token/utils.mjs.map +1 -0
  508. package/dist/plugins/open-api/generator.d.mts +115 -0
  509. package/dist/plugins/open-api/generator.mjs +315 -0
  510. package/dist/plugins/open-api/generator.mjs.map +1 -0
  511. package/dist/plugins/open-api/index.d.mts +45 -0
  512. package/dist/plugins/open-api/index.mjs +67 -0
  513. package/dist/plugins/open-api/index.mjs.map +1 -0
  514. package/dist/plugins/open-api/logo.mjs +15 -0
  515. package/dist/plugins/open-api/logo.mjs.map +1 -0
  516. package/dist/plugins/organization/access/index.d.mts +2 -0
  517. package/dist/plugins/organization/access/index.mjs +3 -0
  518. package/dist/plugins/organization/access/statement.d.mts +249 -0
  519. package/dist/plugins/organization/access/statement.mjs +81 -0
  520. package/dist/plugins/organization/access/statement.mjs.map +1 -0
  521. package/dist/plugins/organization/adapter.d.mts +205 -0
  522. package/dist/plugins/organization/adapter.mjs +624 -0
  523. package/dist/plugins/organization/adapter.mjs.map +1 -0
  524. package/dist/plugins/organization/call.mjs +19 -0
  525. package/dist/plugins/organization/call.mjs.map +1 -0
  526. package/dist/plugins/organization/client.d.mts +151 -0
  527. package/dist/plugins/organization/client.mjs +107 -0
  528. package/dist/plugins/organization/client.mjs.map +1 -0
  529. package/dist/plugins/organization/error-codes.d.mts +5 -0
  530. package/dist/plugins/organization/error-codes.mjs +65 -0
  531. package/dist/plugins/organization/error-codes.mjs.map +1 -0
  532. package/dist/plugins/organization/has-permission.mjs +35 -0
  533. package/dist/plugins/organization/has-permission.mjs.map +1 -0
  534. package/dist/plugins/organization/index.d.mts +5 -0
  535. package/dist/plugins/organization/index.mjs +4 -0
  536. package/dist/plugins/organization/organization.d.mts +252 -0
  537. package/dist/plugins/organization/organization.mjs +428 -0
  538. package/dist/plugins/organization/organization.mjs.map +1 -0
  539. package/dist/plugins/organization/permission.d.mts +26 -0
  540. package/dist/plugins/organization/permission.mjs +16 -0
  541. package/dist/plugins/organization/permission.mjs.map +1 -0
  542. package/dist/plugins/organization/routes/crud-access-control.d.mts +11 -0
  543. package/dist/plugins/organization/routes/crud-access-control.mjs +656 -0
  544. package/dist/plugins/organization/routes/crud-access-control.mjs.map +1 -0
  545. package/dist/plugins/organization/routes/crud-invites.d.mts +16 -0
  546. package/dist/plugins/organization/routes/crud-invites.mjs +555 -0
  547. package/dist/plugins/organization/routes/crud-invites.mjs.map +1 -0
  548. package/dist/plugins/organization/routes/crud-members.d.mts +13 -0
  549. package/dist/plugins/organization/routes/crud-members.mjs +473 -0
  550. package/dist/plugins/organization/routes/crud-members.mjs.map +1 -0
  551. package/dist/plugins/organization/routes/crud-org.d.mts +13 -0
  552. package/dist/plugins/organization/routes/crud-org.mjs +447 -0
  553. package/dist/plugins/organization/routes/crud-org.mjs.map +1 -0
  554. package/dist/plugins/organization/routes/crud-team.d.mts +15 -0
  555. package/dist/plugins/organization/routes/crud-team.mjs +676 -0
  556. package/dist/plugins/organization/routes/crud-team.mjs.map +1 -0
  557. package/dist/plugins/organization/schema.d.mts +376 -0
  558. package/dist/plugins/organization/schema.mjs +68 -0
  559. package/dist/plugins/organization/schema.mjs.map +1 -0
  560. package/dist/plugins/organization/types.d.mts +733 -0
  561. package/dist/plugins/phone-number/client.d.mts +8 -0
  562. package/dist/plugins/phone-number/client.mjs +20 -0
  563. package/dist/plugins/phone-number/client.mjs.map +1 -0
  564. package/dist/plugins/phone-number/error-codes.d.mts +5 -0
  565. package/dist/plugins/phone-number/error-codes.mjs +21 -0
  566. package/dist/plugins/phone-number/error-codes.mjs.map +1 -0
  567. package/dist/plugins/phone-number/index.d.mts +14 -0
  568. package/dist/plugins/phone-number/index.mjs +49 -0
  569. package/dist/plugins/phone-number/index.mjs.map +1 -0
  570. package/dist/plugins/phone-number/routes.mjs +459 -0
  571. package/dist/plugins/phone-number/routes.mjs.map +1 -0
  572. package/dist/plugins/phone-number/schema.d.mts +5 -0
  573. package/dist/plugins/phone-number/schema.mjs +20 -0
  574. package/dist/plugins/phone-number/schema.mjs.map +1 -0
  575. package/dist/plugins/phone-number/types.d.mts +118 -0
  576. package/dist/plugins/siwe/client.d.mts +5 -0
  577. package/dist/plugins/siwe/client.mjs +11 -0
  578. package/dist/plugins/siwe/client.mjs.map +1 -0
  579. package/dist/plugins/siwe/error-codes.mjs +13 -0
  580. package/dist/plugins/siwe/error-codes.mjs.map +1 -0
  581. package/dist/plugins/siwe/index.d.mts +26 -0
  582. package/dist/plugins/siwe/index.mjs +261 -0
  583. package/dist/plugins/siwe/index.mjs.map +1 -0
  584. package/dist/plugins/siwe/schema.d.mts +5 -0
  585. package/dist/plugins/siwe/schema.mjs +32 -0
  586. package/dist/plugins/siwe/schema.mjs.map +1 -0
  587. package/dist/plugins/siwe/types.d.mts +44 -0
  588. package/dist/plugins/two-factor/backup-codes/index.d.mts +91 -0
  589. package/dist/plugins/two-factor/backup-codes/index.mjs +277 -0
  590. package/dist/plugins/two-factor/backup-codes/index.mjs.map +1 -0
  591. package/dist/plugins/two-factor/client.d.mts +17 -0
  592. package/dist/plugins/two-factor/client.mjs +37 -0
  593. package/dist/plugins/two-factor/client.mjs.map +1 -0
  594. package/dist/plugins/two-factor/constant.mjs +8 -0
  595. package/dist/plugins/two-factor/constant.mjs.map +1 -0
  596. package/dist/plugins/two-factor/error-code.d.mts +5 -0
  597. package/dist/plugins/two-factor/error-code.mjs +18 -0
  598. package/dist/plugins/two-factor/error-code.mjs.map +1 -0
  599. package/dist/plugins/two-factor/index.d.mts +19 -0
  600. package/dist/plugins/two-factor/index.mjs +207 -0
  601. package/dist/plugins/two-factor/index.mjs.map +1 -0
  602. package/dist/plugins/two-factor/otp/index.d.mts +96 -0
  603. package/dist/plugins/two-factor/otp/index.mjs +199 -0
  604. package/dist/plugins/two-factor/otp/index.mjs.map +1 -0
  605. package/dist/plugins/two-factor/schema.d.mts +5 -0
  606. package/dist/plugins/two-factor/schema.mjs +36 -0
  607. package/dist/plugins/two-factor/schema.mjs.map +1 -0
  608. package/dist/plugins/two-factor/totp/index.d.mts +81 -0
  609. package/dist/plugins/two-factor/totp/index.mjs +157 -0
  610. package/dist/plugins/two-factor/totp/index.mjs.map +1 -0
  611. package/dist/plugins/two-factor/types.d.mts +65 -0
  612. package/dist/plugins/two-factor/utils.mjs +12 -0
  613. package/dist/plugins/two-factor/utils.mjs.map +1 -0
  614. package/dist/plugins/two-factor/verify-two-factor.mjs +76 -0
  615. package/dist/plugins/two-factor/verify-two-factor.mjs.map +1 -0
  616. package/dist/plugins/username/client.d.mts +7 -0
  617. package/dist/plugins/username/client.mjs +18 -0
  618. package/dist/plugins/username/client.mjs.map +1 -0
  619. package/dist/plugins/username/error-codes.d.mts +5 -0
  620. package/dist/plugins/username/error-codes.mjs +17 -0
  621. package/dist/plugins/username/error-codes.mjs.map +1 -0
  622. package/dist/plugins/username/index.d.mts +74 -0
  623. package/dist/plugins/username/index.mjs +237 -0
  624. package/dist/plugins/username/index.mjs.map +1 -0
  625. package/dist/plugins/username/schema.d.mts +9 -0
  626. package/dist/plugins/username/schema.mjs +26 -0
  627. package/dist/plugins/username/schema.mjs.map +1 -0
  628. package/dist/social-providers/index.d.mts +1 -0
  629. package/dist/social-providers/index.mjs +3 -0
  630. package/dist/state.d.mts +42 -0
  631. package/dist/state.mjs +107 -0
  632. package/dist/state.mjs.map +1 -0
  633. package/dist/test-utils/headers.d.mts +9 -0
  634. package/dist/test-utils/headers.mjs +24 -0
  635. package/dist/test-utils/headers.mjs.map +1 -0
  636. package/dist/test-utils/index.d.mts +3 -0
  637. package/dist/test-utils/index.mjs +4 -0
  638. package/dist/test-utils/test-instance.d.mts +181 -0
  639. package/dist/test-utils/test-instance.mjs +210 -0
  640. package/dist/test-utils/test-instance.mjs.map +1 -0
  641. package/dist/types/adapter.d.mts +24 -0
  642. package/dist/types/api.d.mts +62 -0
  643. package/dist/types/auth.d.mts +30 -0
  644. package/dist/types/helper.d.mts +21 -0
  645. package/dist/types/index.d.mts +11 -0
  646. package/dist/types/index.mjs +1 -0
  647. package/dist/types/models.d.mts +17 -0
  648. package/dist/types/plugins.d.mts +16 -0
  649. package/dist/utils/boolean.mjs +8 -0
  650. package/dist/utils/boolean.mjs.map +1 -0
  651. package/dist/utils/constants.mjs +6 -0
  652. package/dist/utils/constants.mjs.map +1 -0
  653. package/dist/utils/date.mjs +8 -0
  654. package/dist/utils/date.mjs.map +1 -0
  655. package/dist/utils/get-request-ip.d.mts +7 -0
  656. package/dist/utils/get-request-ip.mjs +23 -0
  657. package/dist/utils/get-request-ip.mjs.map +1 -0
  658. package/dist/utils/hashing.mjs +21 -0
  659. package/dist/utils/hashing.mjs.map +1 -0
  660. package/dist/utils/hide-metadata.d.mts +7 -0
  661. package/dist/utils/hide-metadata.mjs +6 -0
  662. package/dist/utils/hide-metadata.mjs.map +1 -0
  663. package/dist/utils/index.d.mts +3 -0
  664. package/dist/utils/index.mjs +5 -0
  665. package/dist/utils/is-api-error.d.mts +7 -0
  666. package/dist/utils/is-api-error.mjs +11 -0
  667. package/dist/utils/is-api-error.mjs.map +1 -0
  668. package/dist/utils/is-atom.mjs +8 -0
  669. package/dist/utils/is-atom.mjs.map +1 -0
  670. package/dist/utils/is-promise.mjs +8 -0
  671. package/dist/utils/is-promise.mjs.map +1 -0
  672. package/dist/utils/middleware-response.mjs +6 -0
  673. package/dist/utils/middleware-response.mjs.map +1 -0
  674. package/dist/utils/password.mjs +26 -0
  675. package/dist/utils/password.mjs.map +1 -0
  676. package/dist/utils/plugin-helper.mjs +17 -0
  677. package/dist/utils/plugin-helper.mjs.map +1 -0
  678. package/dist/utils/shim.mjs +24 -0
  679. package/dist/utils/shim.mjs.map +1 -0
  680. package/dist/utils/time.d.mts +49 -0
  681. package/dist/utils/time.mjs +100 -0
  682. package/dist/utils/time.mjs.map +1 -0
  683. package/dist/utils/url.mjs +92 -0
  684. package/dist/utils/url.mjs.map +1 -0
  685. package/dist/utils/wildcard.mjs +108 -0
  686. package/dist/utils/wildcard.mjs.map +1 -0
  687. package/package.json +601 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.mjs","names":[],"sources":["../../src/utils/date.ts"],"sourcesContent":["export const getDate = (span: number, unit: \"sec\" | \"ms\" = \"ms\") => {\n\treturn new Date(Date.now() + (unit === \"sec\" ? span * 1000 : span));\n};\n"],"mappings":";AAAA,MAAa,WAAW,MAAc,OAAqB,SAAS;AACnE,QAAO,IAAI,KAAK,KAAK,KAAK,IAAI,SAAS,QAAQ,OAAO,MAAO,MAAM"}
@@ -0,0 +1,7 @@
1
+ import { BetterAuthOptions } from "@better-auth/core";
2
+
3
+ //#region src/utils/get-request-ip.d.ts
4
+ declare function getIp(req: Request | Headers, options: BetterAuthOptions): string | null;
5
+ //#endregion
6
+ export { getIp };
7
+ //# sourceMappingURL=get-request-ip.d.mts.map
@@ -0,0 +1,23 @@
1
+ import { isDevelopment, isTest } from "@better-auth/core/env";
2
+ import { isValidIP, normalizeIP } from "@better-auth/core/utils/ip";
3
+
4
+ //#region src/utils/get-request-ip.ts
5
+ const LOCALHOST_IP = "127.0.0.1";
6
+ function getIp(req, options) {
7
+ if (options.advanced?.ipAddress?.disableIpTracking) return null;
8
+ const headers = "headers" in req ? req.headers : req;
9
+ const ipHeaders = options.advanced?.ipAddress?.ipAddressHeaders || ["x-forwarded-for"];
10
+ for (const key of ipHeaders) {
11
+ const value = "get" in headers ? headers.get(key) : headers[key];
12
+ if (typeof value === "string") {
13
+ const ip = value.split(",")[0].trim();
14
+ if (isValidIP(ip)) return normalizeIP(ip, { ipv6Subnet: options.advanced?.ipAddress?.ipv6Subnet });
15
+ }
16
+ }
17
+ if (isTest() || isDevelopment()) return LOCALHOST_IP;
18
+ return null;
19
+ }
20
+
21
+ //#endregion
22
+ export { getIp };
23
+ //# sourceMappingURL=get-request-ip.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-request-ip.mjs","names":[],"sources":["../../src/utils/get-request-ip.ts"],"sourcesContent":["import type { BetterAuthOptions } from \"@better-auth/core\";\nimport { isDevelopment, isTest } from \"@better-auth/core/env\";\nimport { isValidIP, normalizeIP } from \"@better-auth/core/utils/ip\";\n\n// Localhost IP used for test and development environments\nconst LOCALHOST_IP = \"127.0.0.1\";\n\nexport function getIp(\n\treq: Request | Headers,\n\toptions: BetterAuthOptions,\n): string | null {\n\tif (options.advanced?.ipAddress?.disableIpTracking) {\n\t\treturn null;\n\t}\n\n\tconst headers = \"headers\" in req ? req.headers : req;\n\n\tconst defaultHeaders = [\"x-forwarded-for\"];\n\n\tconst ipHeaders =\n\t\toptions.advanced?.ipAddress?.ipAddressHeaders || defaultHeaders;\n\n\tfor (const key of ipHeaders) {\n\t\tconst value = \"get\" in headers ? headers.get(key) : headers[key];\n\t\tif (typeof value === \"string\") {\n\t\t\tconst ip = value.split(\",\")[0]!.trim();\n\t\t\tif (isValidIP(ip)) {\n\t\t\t\treturn normalizeIP(ip, {\n\t\t\t\t\tipv6Subnet: options.advanced?.ipAddress?.ipv6Subnet,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t// Fallback to localhost IP in development/test environments when no IP found in headers\n\tif (isTest() || isDevelopment()) {\n\t\treturn LOCALHOST_IP;\n\t}\n\n\treturn null;\n}\n"],"mappings":";;;;AAKA,MAAM,eAAe;AAErB,SAAgB,MACf,KACA,SACgB;AAChB,KAAI,QAAQ,UAAU,WAAW,kBAChC,QAAO;CAGR,MAAM,UAAU,aAAa,MAAM,IAAI,UAAU;CAIjD,MAAM,YACL,QAAQ,UAAU,WAAW,oBAHP,CAAC,kBAAkB;AAK1C,MAAK,MAAM,OAAO,WAAW;EAC5B,MAAM,QAAQ,SAAS,UAAU,QAAQ,IAAI,IAAI,GAAG,QAAQ;AAC5D,MAAI,OAAO,UAAU,UAAU;GAC9B,MAAM,KAAK,MAAM,MAAM,IAAI,CAAC,GAAI,MAAM;AACtC,OAAI,UAAU,GAAG,CAChB,QAAO,YAAY,IAAI,EACtB,YAAY,QAAQ,UAAU,WAAW,YACzC,CAAC;;;AAML,KAAI,QAAQ,IAAI,eAAe,CAC9B,QAAO;AAGR,QAAO"}
@@ -0,0 +1,21 @@
1
+ import { utf8ToBytes } from "@noble/hashes/utils.js";
2
+ import { keccak_256 } from "@noble/hashes/sha3.js";
3
+
4
+ //#region src/utils/hashing.ts
5
+ /**
6
+ * TS implementation of ERC-55 ("Mixed-case checksum address encoding") using @noble/hashes
7
+ * @param address - The address to convert to a checksum address
8
+ * @returns The checksummed address
9
+ */
10
+ function toChecksumAddress(address) {
11
+ address = address.toLowerCase().replace("0x", "");
12
+ const hash = [...keccak_256(utf8ToBytes(address))].map((v) => v.toString(16).padStart(2, "0")).join("");
13
+ let ret = "0x";
14
+ for (let i = 0; i < 40; i++) if (parseInt(hash[i], 16) >= 8) ret += address[i].toUpperCase();
15
+ else ret += address[i];
16
+ return ret;
17
+ }
18
+
19
+ //#endregion
20
+ export { toChecksumAddress };
21
+ //# sourceMappingURL=hashing.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hashing.mjs","names":[],"sources":["../../src/utils/hashing.ts"],"sourcesContent":["import { keccak_256 } from \"@noble/hashes/sha3.js\";\nimport { utf8ToBytes } from \"@noble/hashes/utils.js\";\n\n/**\n * TS implementation of ERC-55 (\"Mixed-case checksum address encoding\") using @noble/hashes\n * @param address - The address to convert to a checksum address\n * @returns The checksummed address\n */\nexport function toChecksumAddress(address: string) {\n\taddress = address.toLowerCase().replace(\"0x\", \"\");\n\t// Hash the address (treat it as UTF-8) and return as a hex string\n\tconst hash = [...keccak_256(utf8ToBytes(address))]\n\t\t.map((v) => v.toString(16).padStart(2, \"0\"))\n\t\t.join(\"\");\n\tlet ret = \"0x\";\n\n\tfor (let i = 0; i < 40; i++) {\n\t\tif (parseInt(hash[i]!, 16) >= 8) {\n\t\t\tret += address[i]!.toUpperCase();\n\t\t} else {\n\t\t\tret += address[i]!;\n\t\t}\n\t}\n\n\treturn ret;\n}\n"],"mappings":";;;;;;;;;AAQA,SAAgB,kBAAkB,SAAiB;AAClD,WAAU,QAAQ,aAAa,CAAC,QAAQ,MAAM,GAAG;CAEjD,MAAM,OAAO,CAAC,GAAG,WAAW,YAAY,QAAQ,CAAC,CAAC,CAChD,KAAK,MAAM,EAAE,SAAS,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,CAC3C,KAAK,GAAG;CACV,IAAI,MAAM;AAEV,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IACvB,KAAI,SAAS,KAAK,IAAK,GAAG,IAAI,EAC7B,QAAO,QAAQ,GAAI,aAAa;KAEhC,QAAO,QAAQ;AAIjB,QAAO"}
@@ -0,0 +1,7 @@
1
+ //#region src/utils/hide-metadata.d.ts
2
+ declare const HIDE_METADATA: {
3
+ readonly scope: "server";
4
+ };
5
+ //#endregion
6
+ export { HIDE_METADATA };
7
+ //# sourceMappingURL=hide-metadata.d.mts.map
@@ -0,0 +1,6 @@
1
+ //#region src/utils/hide-metadata.ts
2
+ const HIDE_METADATA = { scope: "server" };
3
+
4
+ //#endregion
5
+ export { HIDE_METADATA };
6
+ //# sourceMappingURL=hide-metadata.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hide-metadata.mjs","names":[],"sources":["../../src/utils/hide-metadata.ts"],"sourcesContent":["export const HIDE_METADATA = {\n\tscope: \"server\",\n} as const;\n"],"mappings":";AAAA,MAAa,gBAAgB,EAC5B,OAAO,UACP"}
@@ -0,0 +1,3 @@
1
+ import { generateState, parseState } from "../oauth2/state.mjs";
2
+ import { StateData, generateGenericState, parseGenericState } from "../state.mjs";
3
+ import { HIDE_METADATA } from "./hide-metadata.mjs";
@@ -0,0 +1,5 @@
1
+ import { generateGenericState, parseGenericState } from "../state.mjs";
2
+ import { generateState, parseState } from "../oauth2/state.mjs";
3
+ import { HIDE_METADATA } from "./hide-metadata.mjs";
4
+
5
+ export { };
@@ -0,0 +1,7 @@
1
+ import { APIError } from "@better-auth/core/error";
2
+
3
+ //#region src/utils/is-api-error.d.ts
4
+ declare function isAPIError(error: unknown): error is APIError;
5
+ //#endregion
6
+ export { isAPIError };
7
+ //# sourceMappingURL=is-api-error.d.mts.map
@@ -0,0 +1,11 @@
1
+ import { APIError } from "@better-auth/core/error";
2
+ import { APIError as APIError$1 } from "better-call";
3
+
4
+ //#region src/utils/is-api-error.ts
5
+ function isAPIError(error) {
6
+ return error instanceof APIError$1 || error instanceof APIError || error?.name === "APIError";
7
+ }
8
+
9
+ //#endregion
10
+ export { isAPIError };
11
+ //# sourceMappingURL=is-api-error.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-api-error.mjs","names":["BaseAPIError"],"sources":["../../src/utils/is-api-error.ts"],"sourcesContent":["import { APIError } from \"@better-auth/core/error\";\nimport { APIError as BaseAPIError } from \"better-call\";\n\nexport function isAPIError(error: unknown): error is APIError {\n\treturn (\n\t\terror instanceof BaseAPIError ||\n\t\terror instanceof APIError ||\n\t\t(error as any)?.name === \"APIError\"\n\t);\n}\n"],"mappings":";;;;AAGA,SAAgB,WAAW,OAAmC;AAC7D,QACC,iBAAiBA,cACjB,iBAAiB,YAChB,OAAe,SAAS"}
@@ -0,0 +1,8 @@
1
+ //#region src/utils/is-atom.ts
2
+ function isAtom(value) {
3
+ return typeof value === "object" && value !== null && "get" in value && typeof value.get === "function" && "lc" in value && typeof value.lc === "number";
4
+ }
5
+
6
+ //#endregion
7
+ export { isAtom };
8
+ //# sourceMappingURL=is-atom.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-atom.mjs","names":[],"sources":["../../src/utils/is-atom.ts"],"sourcesContent":["import type { Atom } from \"nanostores\";\n\nexport function isAtom(value: unknown): value is Atom<unknown> {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t\"get\" in value &&\n\t\ttypeof (value as any).get === \"function\" &&\n\t\t\"lc\" in value &&\n\t\ttypeof (value as any).lc === \"number\"\n\t);\n}\n"],"mappings":";AAEA,SAAgB,OAAO,OAAwC;AAC9D,QACC,OAAO,UAAU,YACjB,UAAU,QACV,SAAS,SACT,OAAQ,MAAc,QAAQ,cAC9B,QAAQ,SACR,OAAQ,MAAc,OAAO"}
@@ -0,0 +1,8 @@
1
+ //#region src/utils/is-promise.ts
2
+ function isPromise(obj) {
3
+ return !!obj && (typeof obj === "object" || typeof obj === "function") && typeof obj.then === "function";
4
+ }
5
+
6
+ //#endregion
7
+ export { isPromise };
8
+ //# sourceMappingURL=is-promise.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-promise.mjs","names":[],"sources":["../../src/utils/is-promise.ts"],"sourcesContent":["export function isPromise(obj?: unknown): obj is Promise<unknown> {\n\treturn (\n\t\t!!obj &&\n\t\t(typeof obj === \"object\" || typeof obj === \"function\") &&\n\t\ttypeof (obj as Promise<unknown>).then === \"function\"\n\t);\n}\n"],"mappings":";AAAA,SAAgB,UAAU,KAAwC;AACjE,QACC,CAAC,CAAC,QACD,OAAO,QAAQ,YAAY,OAAO,QAAQ,eAC3C,OAAQ,IAAyB,SAAS"}
@@ -0,0 +1,6 @@
1
+ //#region src/utils/middleware-response.ts
2
+ const middlewareResponse = ({ message, status }) => ({ response: new Response(JSON.stringify({ message }), { status }) });
3
+
4
+ //#endregion
5
+ export { middlewareResponse };
6
+ //# sourceMappingURL=middleware-response.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware-response.mjs","names":[],"sources":["../../src/utils/middleware-response.ts"],"sourcesContent":["type Params = {\n\tmessage: string;\n\tstatus: number;\n};\n\nexport const middlewareResponse = ({ message, status }: Params) => ({\n\tresponse: new Response(\n\t\tJSON.stringify({\n\t\t\tmessage,\n\t\t}),\n\t\t{\n\t\t\tstatus,\n\t\t},\n\t),\n});\n"],"mappings":";AAKA,MAAa,sBAAsB,EAAE,SAAS,cAAsB,EACnE,UAAU,IAAI,SACb,KAAK,UAAU,EACd,SACA,CAAC,EACF,EACC,QACA,CACD,EACD"}
@@ -0,0 +1,26 @@
1
+ import { APIError, BASE_ERROR_CODES } from "@better-auth/core/error";
2
+
3
+ //#region src/utils/password.ts
4
+ async function validatePassword(ctx, data) {
5
+ const credentialAccount = (await ctx.context.internalAdapter.findAccounts(data.userId))?.find((account) => account.providerId === "credential");
6
+ const currentPassword = credentialAccount?.password;
7
+ if (!credentialAccount || !currentPassword) return false;
8
+ return await ctx.context.password.verify({
9
+ hash: currentPassword,
10
+ password: data.password
11
+ });
12
+ }
13
+ async function checkPassword(userId, c) {
14
+ const credentialAccount = (await c.context.internalAdapter.findAccounts(userId))?.find((account) => account.providerId === "credential");
15
+ const currentPassword = credentialAccount?.password;
16
+ if (!credentialAccount || !currentPassword || !c.body.password) throw APIError.from("BAD_REQUEST", BASE_ERROR_CODES.CREDENTIAL_ACCOUNT_NOT_FOUND);
17
+ if (!await c.context.password.verify({
18
+ hash: currentPassword,
19
+ password: c.body.password
20
+ })) throw APIError.from("BAD_REQUEST", BASE_ERROR_CODES.INVALID_PASSWORD);
21
+ return true;
22
+ }
23
+
24
+ //#endregion
25
+ export { checkPassword, validatePassword };
26
+ //# sourceMappingURL=password.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password.mjs","names":[],"sources":["../../src/utils/password.ts"],"sourcesContent":["import type { GenericEndpointContext } from \"@better-auth/core\";\nimport { APIError, BASE_ERROR_CODES } from \"@better-auth/core/error\";\n\nexport async function validatePassword(\n\tctx: GenericEndpointContext,\n\tdata: {\n\t\tpassword: string;\n\t\tuserId: string;\n\t},\n) {\n\tconst accounts = await ctx.context.internalAdapter.findAccounts(data.userId);\n\tconst credentialAccount = accounts?.find(\n\t\t(account) => account.providerId === \"credential\",\n\t);\n\tconst currentPassword = credentialAccount?.password;\n\tif (!credentialAccount || !currentPassword) {\n\t\treturn false;\n\t}\n\tconst compare = await ctx.context.password.verify({\n\t\thash: currentPassword,\n\t\tpassword: data.password,\n\t});\n\treturn compare;\n}\n\nexport async function checkPassword(userId: string, c: GenericEndpointContext) {\n\tconst accounts = await c.context.internalAdapter.findAccounts(userId);\n\tconst credentialAccount = accounts?.find(\n\t\t(account) => account.providerId === \"credential\",\n\t);\n\tconst currentPassword = credentialAccount?.password;\n\tif (!credentialAccount || !currentPassword || !c.body.password) {\n\t\tthrow APIError.from(\n\t\t\t\"BAD_REQUEST\",\n\t\t\tBASE_ERROR_CODES.CREDENTIAL_ACCOUNT_NOT_FOUND,\n\t\t);\n\t}\n\tconst compare = await c.context.password.verify({\n\t\thash: currentPassword,\n\t\tpassword: c.body.password,\n\t});\n\tif (!compare) {\n\t\tthrow APIError.from(\"BAD_REQUEST\", BASE_ERROR_CODES.INVALID_PASSWORD);\n\t}\n\treturn true;\n}\n"],"mappings":";;;AAGA,eAAsB,iBACrB,KACA,MAIC;CAED,MAAM,qBADW,MAAM,IAAI,QAAQ,gBAAgB,aAAa,KAAK,OAAO,GACxC,MAClC,YAAY,QAAQ,eAAe,aACpC;CACD,MAAM,kBAAkB,mBAAmB;AAC3C,KAAI,CAAC,qBAAqB,CAAC,gBAC1B,QAAO;AAMR,QAJgB,MAAM,IAAI,QAAQ,SAAS,OAAO;EACjD,MAAM;EACN,UAAU,KAAK;EACf,CAAC;;AAIH,eAAsB,cAAc,QAAgB,GAA2B;CAE9E,MAAM,qBADW,MAAM,EAAE,QAAQ,gBAAgB,aAAa,OAAO,GACjC,MAClC,YAAY,QAAQ,eAAe,aACpC;CACD,MAAM,kBAAkB,mBAAmB;AAC3C,KAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,EAAE,KAAK,SACrD,OAAM,SAAS,KACd,eACA,iBAAiB,6BACjB;AAMF,KAAI,CAJY,MAAM,EAAE,QAAQ,SAAS,OAAO;EAC/C,MAAM;EACN,UAAU,EAAE,KAAK;EACjB,CAAC,CAED,OAAM,SAAS,KAAK,eAAe,iBAAiB,iBAAiB;AAEtE,QAAO"}
@@ -0,0 +1,17 @@
1
+ import { isAPIError } from "./is-api-error.mjs";
2
+
3
+ //#region src/utils/plugin-helper.ts
4
+ const getEndpointResponse = async (ctx) => {
5
+ const returned = ctx.context.returned;
6
+ if (!returned) return null;
7
+ if (returned instanceof Response) {
8
+ if (returned.status !== 200) return null;
9
+ return await returned.clone().json();
10
+ }
11
+ if (isAPIError(returned)) return null;
12
+ return returned;
13
+ };
14
+
15
+ //#endregion
16
+ export { getEndpointResponse };
17
+ //# sourceMappingURL=plugin-helper.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-helper.mjs","names":[],"sources":["../../src/utils/plugin-helper.ts"],"sourcesContent":["import { isAPIError } from \"./is-api-error\";\n\nexport const getEndpointResponse = async <T>(ctx: {\n\tcontext: {\n\t\treturned?: unknown;\n\t};\n}) => {\n\tconst returned = ctx.context.returned;\n\tif (!returned) {\n\t\treturn null;\n\t}\n\tif (returned instanceof Response) {\n\t\tif (returned.status !== 200) {\n\t\t\treturn null;\n\t\t}\n\t\treturn (await returned.clone().json()) as T;\n\t}\n\tif (isAPIError(returned)) {\n\t\treturn null;\n\t}\n\treturn returned as T;\n};\n"],"mappings":";;;AAEA,MAAa,sBAAsB,OAAU,QAIvC;CACL,MAAM,WAAW,IAAI,QAAQ;AAC7B,KAAI,CAAC,SACJ,QAAO;AAER,KAAI,oBAAoB,UAAU;AACjC,MAAI,SAAS,WAAW,IACvB,QAAO;AAER,SAAQ,MAAM,SAAS,OAAO,CAAC,MAAM;;AAEtC,KAAI,WAAW,SAAS,CACvB,QAAO;AAER,QAAO"}
@@ -0,0 +1,24 @@
1
+ //#region src/utils/shim.ts
2
+ const shimContext = (originalObject, newContext) => {
3
+ const shimmedObj = {};
4
+ for (const [key, value] of Object.entries(originalObject)) {
5
+ shimmedObj[key] = (ctx) => {
6
+ return value({
7
+ ...ctx,
8
+ context: {
9
+ ...newContext,
10
+ ...ctx.context
11
+ }
12
+ });
13
+ };
14
+ shimmedObj[key].path = value.path;
15
+ shimmedObj[key].method = value.method;
16
+ shimmedObj[key].options = value.options;
17
+ shimmedObj[key].headers = value.headers;
18
+ }
19
+ return shimmedObj;
20
+ };
21
+
22
+ //#endregion
23
+ export { shimContext };
24
+ //# sourceMappingURL=shim.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shim.mjs","names":[],"sources":["../../src/utils/shim.ts"],"sourcesContent":["export const shimContext = <T extends Record<string, any>>(\n\toriginalObject: T,\n\tnewContext: Record<string, any>,\n) => {\n\tconst shimmedObj: Record<string, any> = {};\n\tfor (const [key, value] of Object.entries(originalObject)) {\n\t\tshimmedObj[key] = (ctx: Record<string, any>) => {\n\t\t\treturn value({\n\t\t\t\t...ctx,\n\t\t\t\tcontext: {\n\t\t\t\t\t...newContext,\n\t\t\t\t\t...ctx.context,\n\t\t\t\t},\n\t\t\t});\n\t\t};\n\t\tshimmedObj[key].path = value.path;\n\t\tshimmedObj[key].method = value.method;\n\t\tshimmedObj[key].options = value.options;\n\t\tshimmedObj[key].headers = value.headers;\n\t}\n\treturn shimmedObj as T;\n};\n"],"mappings":";AAAA,MAAa,eACZ,gBACA,eACI;CACJ,MAAM,aAAkC,EAAE;AAC1C,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,eAAe,EAAE;AAC1D,aAAW,QAAQ,QAA6B;AAC/C,UAAO,MAAM;IACZ,GAAG;IACH,SAAS;KACR,GAAG;KACH,GAAG,IAAI;KACP;IACD,CAAC;;AAEH,aAAW,KAAK,OAAO,MAAM;AAC7B,aAAW,KAAK,SAAS,MAAM;AAC/B,aAAW,KAAK,UAAU,MAAM;AAChC,aAAW,KAAK,UAAU,MAAM;;AAEjC,QAAO"}
@@ -0,0 +1,49 @@
1
+ //#region src/utils/time.d.ts
2
+ type Years = "years" | "year" | "yrs" | "yr" | "y";
3
+ type Months = "months" | "month" | "mo";
4
+ type Weeks = "weeks" | "week" | "w";
5
+ type Days = "days" | "day" | "d";
6
+ type Hours = "hours" | "hour" | "hrs" | "hr" | "h";
7
+ type Minutes = "minutes" | "minute" | "mins" | "min" | "m";
8
+ type Seconds = "seconds" | "second" | "secs" | "sec" | "s";
9
+ type Unit = Years | Months | Weeks | Days | Hours | Minutes | Seconds;
10
+ type UnitAnyCase = Capitalize<Unit> | Uppercase<Unit> | Unit;
11
+ type Suffix = " ago" | " from now";
12
+ type Prefix = "+" | "-" | "+ " | "- ";
13
+ type BaseTimeString = `${number}${UnitAnyCase}` | `${number} ${UnitAnyCase}`;
14
+ /**
15
+ * A typed string representing a time duration.
16
+ * Supports formats like "7d", "30m", "1 hour", "2 hours ago", "-5m", etc.
17
+ */
18
+ type TimeString = BaseTimeString | `${BaseTimeString}${Suffix}` | `${Prefix}${BaseTimeString}`;
19
+ /**
20
+ * Parse a time string and return the value in milliseconds.
21
+ *
22
+ * @param value - A time string like "7d", "30m", "1 hour", "2 hours ago"
23
+ * @returns The parsed value in milliseconds
24
+ * @throws TypeError if the string format is invalid
25
+ *
26
+ * @example
27
+ * ms("1d") // 86400000
28
+ * ms("2 hours") // 7200000
29
+ * ms("30s") // 30000
30
+ * ms("2 hours ago") // -7200000
31
+ */
32
+ declare function ms(value: TimeString): number;
33
+ /**
34
+ * Parse a time string and return the value in seconds.
35
+ *
36
+ * @param value - A time string like "7d", "30m", "1 hour", "2 hours ago"
37
+ * @returns The parsed value in seconds (rounded)
38
+ * @throws TypeError if the string format is invalid
39
+ *
40
+ * @example
41
+ * sec("1d") // 86400
42
+ * sec("2 hours") // 7200
43
+ * sec("-30s") // -30
44
+ * sec("2 hours ago") // -7200
45
+ */
46
+ declare function sec(value: TimeString): number;
47
+ //#endregion
48
+ export { TimeString, ms, sec };
49
+ //# sourceMappingURL=time.d.mts.map
@@ -0,0 +1,100 @@
1
+ //#region src/utils/time.ts
2
+ const SEC = 1e3;
3
+ const MIN = SEC * 60;
4
+ const HOUR = MIN * 60;
5
+ const DAY = HOUR * 24;
6
+ const WEEK = DAY * 7;
7
+ const MONTH = DAY * 30;
8
+ const YEAR = DAY * 365.25;
9
+ const REGEX = /^(\+|\-)? ?(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|months?|mo|years?|yrs?|y)(?: (ago|from now))?$/i;
10
+ function parse(value) {
11
+ const match = REGEX.exec(value);
12
+ if (!match || match[4] && match[1]) throw new TypeError(`Invalid time string format: "${value}". Use formats like "7d", "30m", "1 hour", etc.`);
13
+ const n = parseFloat(match[2]);
14
+ const unit = match[3].toLowerCase();
15
+ let result;
16
+ switch (unit) {
17
+ case "years":
18
+ case "year":
19
+ case "yrs":
20
+ case "yr":
21
+ case "y":
22
+ result = n * YEAR;
23
+ break;
24
+ case "months":
25
+ case "month":
26
+ case "mo":
27
+ result = n * MONTH;
28
+ break;
29
+ case "weeks":
30
+ case "week":
31
+ case "w":
32
+ result = n * WEEK;
33
+ break;
34
+ case "days":
35
+ case "day":
36
+ case "d":
37
+ result = n * DAY;
38
+ break;
39
+ case "hours":
40
+ case "hour":
41
+ case "hrs":
42
+ case "hr":
43
+ case "h":
44
+ result = n * HOUR;
45
+ break;
46
+ case "minutes":
47
+ case "minute":
48
+ case "mins":
49
+ case "min":
50
+ case "m":
51
+ result = n * MIN;
52
+ break;
53
+ case "seconds":
54
+ case "second":
55
+ case "secs":
56
+ case "sec":
57
+ case "s":
58
+ result = n * SEC;
59
+ break;
60
+ default: throw new TypeError(`Unknown time unit: "${unit}"`);
61
+ }
62
+ if (match[1] === "-" || match[4] === "ago") return -result;
63
+ return result;
64
+ }
65
+ /**
66
+ * Parse a time string and return the value in milliseconds.
67
+ *
68
+ * @param value - A time string like "7d", "30m", "1 hour", "2 hours ago"
69
+ * @returns The parsed value in milliseconds
70
+ * @throws TypeError if the string format is invalid
71
+ *
72
+ * @example
73
+ * ms("1d") // 86400000
74
+ * ms("2 hours") // 7200000
75
+ * ms("30s") // 30000
76
+ * ms("2 hours ago") // -7200000
77
+ */
78
+ function ms(value) {
79
+ return parse(value);
80
+ }
81
+ /**
82
+ * Parse a time string and return the value in seconds.
83
+ *
84
+ * @param value - A time string like "7d", "30m", "1 hour", "2 hours ago"
85
+ * @returns The parsed value in seconds (rounded)
86
+ * @throws TypeError if the string format is invalid
87
+ *
88
+ * @example
89
+ * sec("1d") // 86400
90
+ * sec("2 hours") // 7200
91
+ * sec("-30s") // -30
92
+ * sec("2 hours ago") // -7200
93
+ */
94
+ function sec(value) {
95
+ return Math.round(parse(value) / 1e3);
96
+ }
97
+
98
+ //#endregion
99
+ export { ms, sec };
100
+ //# sourceMappingURL=time.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.mjs","names":[],"sources":["../../src/utils/time.ts"],"sourcesContent":["// Time constants (in milliseconds)\nconst SEC = 1000;\nconst MIN = SEC * 60;\nconst HOUR = MIN * 60;\nconst DAY = HOUR * 24;\nconst WEEK = DAY * 7;\nconst MONTH = DAY * 30;\nconst YEAR = DAY * 365.25;\n\n// Unit type definitions\ntype Years = \"years\" | \"year\" | \"yrs\" | \"yr\" | \"y\";\ntype Months = \"months\" | \"month\" | \"mo\";\ntype Weeks = \"weeks\" | \"week\" | \"w\";\ntype Days = \"days\" | \"day\" | \"d\";\ntype Hours = \"hours\" | \"hour\" | \"hrs\" | \"hr\" | \"h\";\ntype Minutes = \"minutes\" | \"minute\" | \"mins\" | \"min\" | \"m\";\ntype Seconds = \"seconds\" | \"second\" | \"secs\" | \"sec\" | \"s\";\ntype Unit = Years | Months | Weeks | Days | Hours | Minutes | Seconds;\ntype UnitAnyCase = Capitalize<Unit> | Uppercase<Unit> | Unit;\ntype Suffix = \" ago\" | \" from now\";\ntype Prefix = \"+\" | \"-\" | \"+ \" | \"- \";\n\n// Base time string formats\ntype BaseTimeString = `${number}${UnitAnyCase}` | `${number} ${UnitAnyCase}`;\n\n/**\n * A typed string representing a time duration.\n * Supports formats like \"7d\", \"30m\", \"1 hour\", \"2 hours ago\", \"-5m\", etc.\n */\nexport type TimeString =\n\t| BaseTimeString\n\t| `${BaseTimeString}${Suffix}`\n\t| `${Prefix}${BaseTimeString}`;\n\nconst REGEX =\n\t/^(\\+|\\-)? ?(\\d+|\\d+\\.\\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|months?|mo|years?|yrs?|y)(?: (ago|from now))?$/i;\n\nfunction parse(value: string): number {\n\tconst match = REGEX.exec(value);\n\n\tif (!match || (match[4] && match[1])) {\n\t\tthrow new TypeError(\n\t\t\t`Invalid time string format: \"${value}\". Use formats like \"7d\", \"30m\", \"1 hour\", etc.`,\n\t\t);\n\t}\n\n\tconst n = parseFloat(match[2]!);\n\tconst unit = match[3]!.toLowerCase();\n\n\tlet result: number;\n\tswitch (unit) {\n\t\tcase \"years\":\n\t\tcase \"year\":\n\t\tcase \"yrs\":\n\t\tcase \"yr\":\n\t\tcase \"y\":\n\t\t\tresult = n * YEAR;\n\t\t\tbreak;\n\t\tcase \"months\":\n\t\tcase \"month\":\n\t\tcase \"mo\":\n\t\t\tresult = n * MONTH;\n\t\t\tbreak;\n\t\tcase \"weeks\":\n\t\tcase \"week\":\n\t\tcase \"w\":\n\t\t\tresult = n * WEEK;\n\t\t\tbreak;\n\t\tcase \"days\":\n\t\tcase \"day\":\n\t\tcase \"d\":\n\t\t\tresult = n * DAY;\n\t\t\tbreak;\n\t\tcase \"hours\":\n\t\tcase \"hour\":\n\t\tcase \"hrs\":\n\t\tcase \"hr\":\n\t\tcase \"h\":\n\t\t\tresult = n * HOUR;\n\t\t\tbreak;\n\t\tcase \"minutes\":\n\t\tcase \"minute\":\n\t\tcase \"mins\":\n\t\tcase \"min\":\n\t\tcase \"m\":\n\t\t\tresult = n * MIN;\n\t\t\tbreak;\n\t\tcase \"seconds\":\n\t\tcase \"second\":\n\t\tcase \"secs\":\n\t\tcase \"sec\":\n\t\tcase \"s\":\n\t\t\tresult = n * SEC;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new TypeError(`Unknown time unit: \"${unit}\"`);\n\t}\n\n\tif (match[1] === \"-\" || match[4] === \"ago\") {\n\t\treturn -result;\n\t}\n\n\treturn result;\n}\n\n/**\n * Parse a time string and return the value in milliseconds.\n *\n * @param value - A time string like \"7d\", \"30m\", \"1 hour\", \"2 hours ago\"\n * @returns The parsed value in milliseconds\n * @throws TypeError if the string format is invalid\n *\n * @example\n * ms(\"1d\") // 86400000\n * ms(\"2 hours\") // 7200000\n * ms(\"30s\") // 30000\n * ms(\"2 hours ago\") // -7200000\n */\nexport function ms(value: TimeString): number {\n\treturn parse(value);\n}\n\n/**\n * Parse a time string and return the value in seconds.\n *\n * @param value - A time string like \"7d\", \"30m\", \"1 hour\", \"2 hours ago\"\n * @returns The parsed value in seconds (rounded)\n * @throws TypeError if the string format is invalid\n *\n * @example\n * sec(\"1d\") // 86400\n * sec(\"2 hours\") // 7200\n * sec(\"-30s\") // -30\n * sec(\"2 hours ago\") // -7200\n */\nexport function sec(value: TimeString): number {\n\treturn Math.round(parse(value) / 1000);\n}\n"],"mappings":";AACA,MAAM,MAAM;AACZ,MAAM,MAAM,MAAM;AAClB,MAAM,OAAO,MAAM;AACnB,MAAM,MAAM,OAAO;AACnB,MAAM,OAAO,MAAM;AACnB,MAAM,QAAQ,MAAM;AACpB,MAAM,OAAO,MAAM;AA2BnB,MAAM,QACL;AAED,SAAS,MAAM,OAAuB;CACrC,MAAM,QAAQ,MAAM,KAAK,MAAM;AAE/B,KAAI,CAAC,SAAU,MAAM,MAAM,MAAM,GAChC,OAAM,IAAI,UACT,gCAAgC,MAAM,iDACtC;CAGF,MAAM,IAAI,WAAW,MAAM,GAAI;CAC/B,MAAM,OAAO,MAAM,GAAI,aAAa;CAEpC,IAAI;AACJ,SAAQ,MAAR;EACC,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;AACJ,YAAS,IAAI;AACb;EACD,KAAK;EACL,KAAK;EACL,KAAK;AACJ,YAAS,IAAI;AACb;EACD,KAAK;EACL,KAAK;EACL,KAAK;AACJ,YAAS,IAAI;AACb;EACD,KAAK;EACL,KAAK;EACL,KAAK;AACJ,YAAS,IAAI;AACb;EACD,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;AACJ,YAAS,IAAI;AACb;EACD,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;AACJ,YAAS,IAAI;AACb;EACD,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;AACJ,YAAS,IAAI;AACb;EACD,QACC,OAAM,IAAI,UAAU,uBAAuB,KAAK,GAAG;;AAGrD,KAAI,MAAM,OAAO,OAAO,MAAM,OAAO,MACpC,QAAO,CAAC;AAGT,QAAO;;;;;;;;;;;;;;;AAgBR,SAAgB,GAAG,OAA2B;AAC7C,QAAO,MAAM,MAAM;;;;;;;;;;;;;;;AAgBpB,SAAgB,IAAI,OAA2B;AAC9C,QAAO,KAAK,MAAM,MAAM,MAAM,GAAG,IAAK"}
@@ -0,0 +1,92 @@
1
+ import { env } from "@better-auth/core/env";
2
+ import { BetterAuthError } from "@better-auth/core/error";
3
+
4
+ //#region src/utils/url.ts
5
+ function checkHasPath(url) {
6
+ try {
7
+ return (new URL(url).pathname.replace(/\/+$/, "") || "/") !== "/";
8
+ } catch {
9
+ throw new BetterAuthError(`Invalid base URL: ${url}. Please provide a valid base URL.`);
10
+ }
11
+ }
12
+ function assertHasProtocol(url) {
13
+ try {
14
+ const parsedUrl = new URL(url);
15
+ if (parsedUrl.protocol !== "http:" && parsedUrl.protocol !== "https:") throw new BetterAuthError(`Invalid base URL: ${url}. URL must include 'http://' or 'https://'`);
16
+ } catch (error) {
17
+ if (error instanceof BetterAuthError) throw error;
18
+ throw new BetterAuthError(`Invalid base URL: ${url}. Please provide a valid base URL.`, { cause: error });
19
+ }
20
+ }
21
+ function withPath(url, path = "/api/auth") {
22
+ assertHasProtocol(url);
23
+ if (checkHasPath(url)) return url;
24
+ const trimmedUrl = url.replace(/\/+$/, "");
25
+ if (!path || path === "/") return trimmedUrl;
26
+ path = path.startsWith("/") ? path : `/${path}`;
27
+ return `${trimmedUrl}${path}`;
28
+ }
29
+ function validateProxyHeader(header, type) {
30
+ if (!header || header.trim() === "") return false;
31
+ if (type === "proto") return header === "http" || header === "https";
32
+ if (type === "host") {
33
+ if ([
34
+ /\.\./,
35
+ /\0/,
36
+ /[\s]/,
37
+ /^[.]/,
38
+ /[<>'"]/,
39
+ /javascript:/i,
40
+ /file:/i,
41
+ /data:/i
42
+ ].some((pattern) => pattern.test(header))) return false;
43
+ return /^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*(:[0-9]{1,5})?$/.test(header) || /^(\d{1,3}\.){3}\d{1,3}(:[0-9]{1,5})?$/.test(header) || /^\[[0-9a-fA-F:]+\](:[0-9]{1,5})?$/.test(header) || /^localhost(:[0-9]{1,5})?$/i.test(header);
44
+ }
45
+ return false;
46
+ }
47
+ function getBaseURL(url, path, request, loadEnv, trustedProxyHeaders) {
48
+ if (url) return withPath(url, path);
49
+ if (loadEnv !== false) {
50
+ const fromEnv = env.BETTER_AUTH_URL || env.NEXT_PUBLIC_BETTER_AUTH_URL || env.PUBLIC_BETTER_AUTH_URL || env.NUXT_PUBLIC_BETTER_AUTH_URL || env.NUXT_PUBLIC_AUTH_URL || (env.BASE_URL !== "/" ? env.BASE_URL : void 0);
51
+ if (fromEnv) return withPath(fromEnv, path);
52
+ }
53
+ const fromRequest = request?.headers.get("x-forwarded-host");
54
+ const fromRequestProto = request?.headers.get("x-forwarded-proto");
55
+ if (fromRequest && fromRequestProto && trustedProxyHeaders) {
56
+ if (validateProxyHeader(fromRequestProto, "proto") && validateProxyHeader(fromRequest, "host")) try {
57
+ return withPath(`${fromRequestProto}://${fromRequest}`, path);
58
+ } catch (_error) {}
59
+ }
60
+ if (request) {
61
+ const url = getOrigin(request.url);
62
+ if (!url) throw new BetterAuthError("Could not get origin from request. Please provide a valid base URL.");
63
+ return withPath(url, path);
64
+ }
65
+ if (typeof window !== "undefined" && window.location) return withPath(window.location.origin, path);
66
+ }
67
+ function getOrigin(url) {
68
+ try {
69
+ const parsedUrl = new URL(url);
70
+ return parsedUrl.origin === "null" ? null : parsedUrl.origin;
71
+ } catch {
72
+ return null;
73
+ }
74
+ }
75
+ function getProtocol(url) {
76
+ try {
77
+ return new URL(url).protocol;
78
+ } catch {
79
+ return null;
80
+ }
81
+ }
82
+ function getHost(url) {
83
+ try {
84
+ return new URL(url).host;
85
+ } catch {
86
+ return null;
87
+ }
88
+ }
89
+
90
+ //#endregion
91
+ export { getBaseURL, getHost, getOrigin, getProtocol };
92
+ //# sourceMappingURL=url.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.mjs","names":[],"sources":["../../src/utils/url.ts"],"sourcesContent":["import { env } from \"@better-auth/core/env\";\nimport { BetterAuthError } from \"@better-auth/core/error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\tconst pathname = parsedUrl.pathname.replace(/\\/+$/, \"\") || \"/\";\n\t\treturn pathname !== \"/\";\n\t} catch {\n\t\tthrow new BetterAuthError(\n\t\t\t`Invalid base URL: ${url}. Please provide a valid base URL.`,\n\t\t);\n\t}\n}\n\nfunction assertHasProtocol(url: string): void {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\tif (parsedUrl.protocol !== \"http:\" && parsedUrl.protocol !== \"https:\") {\n\t\t\tthrow new BetterAuthError(\n\t\t\t\t`Invalid base URL: ${url}. URL must include 'http://' or 'https://'`,\n\t\t\t);\n\t\t}\n\t} catch (error) {\n\t\tif (error instanceof BetterAuthError) {\n\t\t\tthrow error;\n\t\t}\n\t\tthrow new BetterAuthError(\n\t\t\t`Invalid base URL: ${url}. Please provide a valid base URL.`,\n\t\t\t{\n\t\t\t\tcause: error,\n\t\t\t},\n\t\t);\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tassertHasProtocol(url);\n\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn url;\n\t}\n\n\tconst trimmedUrl = url.replace(/\\/+$/, \"\");\n\n\tif (!path || path === \"/\") {\n\t\treturn trimmedUrl;\n\t}\n\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn `${trimmedUrl}${path}`;\n}\n\nfunction validateProxyHeader(header: string, type: \"host\" | \"proto\"): boolean {\n\tif (!header || header.trim() === \"\") {\n\t\treturn false;\n\t}\n\n\tif (type === \"proto\") {\n\t\t// Only allow http and https protocols\n\t\treturn header === \"http\" || header === \"https\";\n\t}\n\n\tif (type === \"host\") {\n\t\tconst suspiciousPatterns = [\n\t\t\t/\\.\\./, // Path traversal\n\t\t\t/\\0/, // Null bytes\n\t\t\t/[\\s]/, // Whitespace (except legitimate spaces that should be trimmed)\n\t\t\t/^[.]/, // Starting with dot\n\t\t\t/[<>'\"]/, // HTML/script injection characters\n\t\t\t/javascript:/i, // Protocol injection\n\t\t\t/file:/i, // File protocol\n\t\t\t/data:/i, // Data protocol\n\t\t];\n\n\t\tif (suspiciousPatterns.some((pattern) => pattern.test(header))) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Basic hostname validation (allows localhost, IPs, and domains with ports)\n\t\t// This is a simple check, not exhaustive RFC validation\n\t\tconst hostnameRegex =\n\t\t\t/^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*(:[0-9]{1,5})?$/;\n\n\t\t// Also allow IPv4 addresses\n\t\tconst ipv4Regex = /^(\\d{1,3}\\.){3}\\d{1,3}(:[0-9]{1,5})?$/;\n\n\t\t// Also allow IPv6 addresses in brackets\n\t\tconst ipv6Regex = /^\\[[0-9a-fA-F:]+\\](:[0-9]{1,5})?$/;\n\n\t\t// Allow localhost variations\n\t\tconst localhostRegex = /^localhost(:[0-9]{1,5})?$/i;\n\n\t\treturn (\n\t\t\thostnameRegex.test(header) ||\n\t\t\tipv4Regex.test(header) ||\n\t\t\tipv6Regex.test(header) ||\n\t\t\tlocalhostRegex.test(header)\n\t\t);\n\t}\n\n\treturn false;\n}\n\nexport function getBaseURL(\n\turl?: string,\n\tpath?: string,\n\trequest?: Request,\n\tloadEnv?: boolean,\n\ttrustedProxyHeaders?: boolean | undefined,\n) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\n\tif (loadEnv !== false) {\n\t\tconst fromEnv =\n\t\t\tenv.BETTER_AUTH_URL ||\n\t\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\t\tenv.NUXT_PUBLIC_AUTH_URL ||\n\t\t\t(env.BASE_URL !== \"/\" ? env.BASE_URL : undefined);\n\n\t\tif (fromEnv) {\n\t\t\treturn withPath(fromEnv, path);\n\t\t}\n\t}\n\n\tconst fromRequest = request?.headers.get(\"x-forwarded-host\");\n\tconst fromRequestProto = request?.headers.get(\"x-forwarded-proto\");\n\tif (fromRequest && fromRequestProto && trustedProxyHeaders) {\n\t\tif (\n\t\t\tvalidateProxyHeader(fromRequestProto, \"proto\") &&\n\t\t\tvalidateProxyHeader(fromRequest, \"host\")\n\t\t) {\n\t\t\ttry {\n\t\t\t\treturn withPath(`${fromRequestProto}://${fromRequest}`, path);\n\t\t\t} catch (_error) {}\n\t\t}\n\t}\n\n\tif (request) {\n\t\tconst url = getOrigin(request.url);\n\t\tif (!url) {\n\t\t\tthrow new BetterAuthError(\n\t\t\t\t\"Could not get origin from request. Please provide a valid base URL.\",\n\t\t\t);\n\t\t}\n\t\treturn withPath(url, path);\n\t}\n\n\tif (typeof window !== \"undefined\" && window.location) {\n\t\treturn withPath(window.location.origin, path);\n\t}\n\treturn undefined;\n}\n\nexport function getOrigin(url: string) {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\t// For custom URL schemes (like exp://), the origin property returns the string \"null\"\n\t\t// instead of null. We need to handle this case and return null so the fallback logic works.\n\t\treturn parsedUrl.origin === \"null\" ? null : parsedUrl.origin;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function getProtocol(url: string) {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.protocol;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function getHost(url: string) {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.host;\n\t} catch {\n\t\treturn null;\n\t}\n}\n"],"mappings":";;;;AAGA,SAAS,aAAa,KAAsB;AAC3C,KAAI;AAGH,UAFkB,IAAI,IAAI,IAAI,CACH,SAAS,QAAQ,QAAQ,GAAG,IAAI,SACvC;SACb;AACP,QAAM,IAAI,gBACT,qBAAqB,IAAI,oCACzB;;;AAIH,SAAS,kBAAkB,KAAmB;AAC7C,KAAI;EACH,MAAM,YAAY,IAAI,IAAI,IAAI;AAC9B,MAAI,UAAU,aAAa,WAAW,UAAU,aAAa,SAC5D,OAAM,IAAI,gBACT,qBAAqB,IAAI,4CACzB;UAEM,OAAO;AACf,MAAI,iBAAiB,gBACpB,OAAM;AAEP,QAAM,IAAI,gBACT,qBAAqB,IAAI,qCACzB,EACC,OAAO,OACP,CACD;;;AAIH,SAAS,SAAS,KAAa,OAAO,aAAa;AAClD,mBAAkB,IAAI;AAGtB,KADgB,aAAa,IAAI,CAEhC,QAAO;CAGR,MAAM,aAAa,IAAI,QAAQ,QAAQ,GAAG;AAE1C,KAAI,CAAC,QAAQ,SAAS,IACrB,QAAO;AAGR,QAAO,KAAK,WAAW,IAAI,GAAG,OAAO,IAAI;AACzC,QAAO,GAAG,aAAa;;AAGxB,SAAS,oBAAoB,QAAgB,MAAiC;AAC7E,KAAI,CAAC,UAAU,OAAO,MAAM,KAAK,GAChC,QAAO;AAGR,KAAI,SAAS,QAEZ,QAAO,WAAW,UAAU,WAAW;AAGxC,KAAI,SAAS,QAAQ;AAYpB,MAX2B;GAC1B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,CAEsB,MAAM,YAAY,QAAQ,KAAK,OAAO,CAAC,CAC7D,QAAO;AAiBR,SAXC,8GAYc,KAAK,OAAO,IATT,wCAUP,KAAK,OAAO,IAPL,oCAQP,KAAK,OAAO,IALA,6BAMP,KAAK,OAAO;;AAI7B,QAAO;;AAGR,SAAgB,WACf,KACA,MACA,SACA,SACA,qBACC;AACD,KAAI,IACH,QAAO,SAAS,KAAK,KAAK;AAG3B,KAAI,YAAY,OAAO;EACtB,MAAM,UACL,IAAI,mBACJ,IAAI,+BACJ,IAAI,0BACJ,IAAI,+BACJ,IAAI,yBACH,IAAI,aAAa,MAAM,IAAI,WAAW;AAExC,MAAI,QACH,QAAO,SAAS,SAAS,KAAK;;CAIhC,MAAM,cAAc,SAAS,QAAQ,IAAI,mBAAmB;CAC5D,MAAM,mBAAmB,SAAS,QAAQ,IAAI,oBAAoB;AAClE,KAAI,eAAe,oBAAoB,qBACtC;MACC,oBAAoB,kBAAkB,QAAQ,IAC9C,oBAAoB,aAAa,OAAO,CAExC,KAAI;AACH,UAAO,SAAS,GAAG,iBAAiB,KAAK,eAAe,KAAK;WACrD,QAAQ;;AAInB,KAAI,SAAS;EACZ,MAAM,MAAM,UAAU,QAAQ,IAAI;AAClC,MAAI,CAAC,IACJ,OAAM,IAAI,gBACT,sEACA;AAEF,SAAO,SAAS,KAAK,KAAK;;AAG3B,KAAI,OAAO,WAAW,eAAe,OAAO,SAC3C,QAAO,SAAS,OAAO,SAAS,QAAQ,KAAK;;AAK/C,SAAgB,UAAU,KAAa;AACtC,KAAI;EACH,MAAM,YAAY,IAAI,IAAI,IAAI;AAG9B,SAAO,UAAU,WAAW,SAAS,OAAO,UAAU;SAC/C;AACP,SAAO;;;AAIT,SAAgB,YAAY,KAAa;AACxC,KAAI;AAEH,SADkB,IAAI,IAAI,IAAI,CACb;SACV;AACP,SAAO;;;AAIT,SAAgB,QAAQ,KAAa;AACpC,KAAI;AAEH,SADkB,IAAI,IAAI,IAAI,CACb;SACV;AACP,SAAO"}
@@ -0,0 +1,108 @@
1
+ //#region src/utils/wildcard.ts
2
+ /**
3
+ * Escapes a character if it has a special meaning in regular expressions
4
+ * and returns the character as is if it doesn't
5
+ */
6
+ function escapeRegExpChar(char) {
7
+ if (char === "-" || char === "^" || char === "$" || char === "+" || char === "." || char === "(" || char === ")" || char === "|" || char === "[" || char === "]" || char === "{" || char === "}" || char === "*" || char === "?" || char === "\\") return `\\${char}`;
8
+ else return char;
9
+ }
10
+ /**
11
+ * Escapes all characters in a given string that have a special meaning in regular expressions
12
+ */
13
+ function escapeRegExpString(str) {
14
+ let result = "";
15
+ for (let i = 0; i < str.length; i++) result += escapeRegExpChar(str[i]);
16
+ return result;
17
+ }
18
+ /**
19
+ * Transforms one or more glob patterns into a RegExp pattern
20
+ */
21
+ function transform(pattern, separator = true) {
22
+ if (Array.isArray(pattern)) return `(?:${pattern.map((p) => `^${transform(p, separator)}$`).join("|")})`;
23
+ let separatorSplitter = "";
24
+ let separatorMatcher = "";
25
+ let wildcard = ".";
26
+ if (separator === true) {
27
+ separatorSplitter = "/";
28
+ separatorMatcher = "[/\\\\]";
29
+ wildcard = "[^/\\\\]";
30
+ } else if (separator) {
31
+ separatorSplitter = separator;
32
+ separatorMatcher = escapeRegExpString(separatorSplitter);
33
+ if (separatorMatcher.length > 1) {
34
+ separatorMatcher = `(?:${separatorMatcher})`;
35
+ wildcard = `((?!${separatorMatcher}).)`;
36
+ } else wildcard = `[^${separatorMatcher}]`;
37
+ }
38
+ const requiredSeparator = separator ? `${separatorMatcher}+?` : "";
39
+ const optionalSeparator = separator ? `${separatorMatcher}*?` : "";
40
+ const segments = separator ? pattern.split(separatorSplitter) : [pattern];
41
+ let result = "";
42
+ for (let s = 0; s < segments.length; s++) {
43
+ const segment = segments[s];
44
+ const nextSegment = segments[s + 1];
45
+ let currentSeparator = "";
46
+ if (!segment && s > 0) continue;
47
+ if (separator) if (s === segments.length - 1) currentSeparator = optionalSeparator;
48
+ else if (nextSegment !== "**") currentSeparator = requiredSeparator;
49
+ else currentSeparator = "";
50
+ if (separator && segment === "**") {
51
+ if (currentSeparator) {
52
+ result += s === 0 ? "" : currentSeparator;
53
+ result += `(?:${wildcard}*?${currentSeparator})*?`;
54
+ }
55
+ continue;
56
+ }
57
+ for (let c = 0; c < segment.length; c++) {
58
+ const char = segment[c];
59
+ if (char === "\\") {
60
+ if (c < segment.length - 1) {
61
+ result += escapeRegExpChar(segment[c + 1]);
62
+ c++;
63
+ }
64
+ } else if (char === "?") result += wildcard;
65
+ else if (char === "*") result += `${wildcard}*?`;
66
+ else result += escapeRegExpChar(char);
67
+ }
68
+ result += currentSeparator;
69
+ }
70
+ return result;
71
+ }
72
+ function isMatch(regexp, sample) {
73
+ if (typeof sample !== "string") throw new TypeError(`Sample must be a string, but ${typeof sample} given`);
74
+ return regexp.test(sample);
75
+ }
76
+ /**
77
+ * Compiles one or more glob patterns into a RegExp and returns an isMatch function.
78
+ * The isMatch function takes a sample string as its only argument and returns `true`
79
+ * if the string matches the pattern(s).
80
+ *
81
+ * ```js
82
+ * wildcardMatch('src/*.js')('src/index.js') //=> true
83
+ * ```
84
+ *
85
+ * ```js
86
+ * const isMatch = wildcardMatch('*.example.com', '.')
87
+ * isMatch('foo.example.com') //=> true
88
+ * isMatch('foo.bar.com') //=> false
89
+ * ```
90
+ */
91
+ function wildcardMatch(pattern, options) {
92
+ if (typeof pattern !== "string" && !Array.isArray(pattern)) throw new TypeError(`The first argument must be a single pattern string or an array of patterns, but ${typeof pattern} given`);
93
+ if (typeof options === "string" || typeof options === "boolean") options = { separator: options };
94
+ if (arguments.length === 2 && !(typeof options === "undefined" || typeof options === "object" && options !== null && !Array.isArray(options))) throw new TypeError(`The second argument must be an options object or a string/boolean separator, but ${typeof options} given`);
95
+ options = options || {};
96
+ if (options.separator === "\\") throw new Error("\\ is not a valid separator because it is used for escaping. Try setting the separator to `true` instead");
97
+ const regexpPattern = transform(pattern, options.separator);
98
+ const regexp = new RegExp(`^${regexpPattern}$`, options.flags);
99
+ const fn = isMatch.bind(null, regexp);
100
+ fn.options = options;
101
+ fn.pattern = pattern;
102
+ fn.regexp = regexp;
103
+ return fn;
104
+ }
105
+
106
+ //#endregion
107
+ export { wildcardMatch };
108
+ //# sourceMappingURL=wildcard.mjs.map