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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/dist/adapters/drizzle-adapter/index.cjs +186 -249
  2. package/dist/adapters/drizzle-adapter/index.d.cts +11 -49
  3. package/dist/adapters/drizzle-adapter/index.d.mts +11 -49
  4. package/dist/adapters/drizzle-adapter/index.d.ts +11 -49
  5. package/dist/adapters/drizzle-adapter/index.mjs +186 -249
  6. package/dist/adapters/index.cjs +26 -0
  7. package/dist/adapters/index.d.cts +17 -0
  8. package/dist/adapters/index.d.mts +17 -0
  9. package/dist/adapters/index.d.ts +17 -0
  10. package/dist/adapters/index.mjs +20 -0
  11. package/dist/adapters/kysely-adapter/index.cjs +7 -7
  12. package/dist/adapters/kysely-adapter/index.d.cts +17 -49
  13. package/dist/adapters/kysely-adapter/index.d.mts +17 -49
  14. package/dist/adapters/kysely-adapter/index.d.ts +17 -49
  15. package/dist/adapters/kysely-adapter/index.mjs +8 -8
  16. package/dist/adapters/memory-adapter/index.cjs +7 -8
  17. package/dist/adapters/memory-adapter/index.d.cts +9 -49
  18. package/dist/adapters/memory-adapter/index.d.mts +9 -49
  19. package/dist/adapters/memory-adapter/index.d.ts +9 -49
  20. package/dist/adapters/memory-adapter/index.mjs +8 -9
  21. package/dist/adapters/mongodb-adapter/index.cjs +2 -2
  22. package/dist/adapters/mongodb-adapter/index.d.cts +4 -4
  23. package/dist/adapters/mongodb-adapter/index.d.mts +4 -4
  24. package/dist/adapters/mongodb-adapter/index.d.ts +4 -4
  25. package/dist/adapters/mongodb-adapter/index.mjs +3 -3
  26. package/dist/adapters/prisma-adapter/index.cjs +130 -203
  27. package/dist/adapters/prisma-adapter/index.d.cts +17 -49
  28. package/dist/adapters/prisma-adapter/index.d.mts +17 -49
  29. package/dist/adapters/prisma-adapter/index.d.ts +17 -49
  30. package/dist/adapters/prisma-adapter/index.mjs +131 -204
  31. package/dist/adapters/test.cjs +710 -377
  32. package/dist/adapters/test.d.cts +64 -5
  33. package/dist/adapters/test.d.mts +64 -5
  34. package/dist/adapters/test.d.ts +64 -5
  35. package/dist/adapters/test.mjs +712 -380
  36. package/dist/api/index.cjs +61 -25
  37. package/dist/api/index.d.cts +3 -3
  38. package/dist/api/index.d.mts +3 -3
  39. package/dist/api/index.d.ts +3 -3
  40. package/dist/api/index.mjs +63 -27
  41. package/dist/client/index.d.cts +3 -3
  42. package/dist/client/index.d.mts +3 -3
  43. package/dist/client/index.d.ts +3 -3
  44. package/dist/client/plugins/index.cjs +13 -15
  45. package/dist/client/plugins/index.d.cts +80 -19
  46. package/dist/client/plugins/index.d.mts +80 -19
  47. package/dist/client/plugins/index.d.ts +80 -19
  48. package/dist/client/plugins/index.mjs +13 -16
  49. package/dist/client/react/index.cjs +4 -4
  50. package/dist/client/react/index.d.cts +3 -3
  51. package/dist/client/react/index.d.mts +3 -3
  52. package/dist/client/react/index.d.ts +3 -3
  53. package/dist/client/solid/index.d.cts +3 -3
  54. package/dist/client/solid/index.d.mts +3 -3
  55. package/dist/client/solid/index.d.ts +3 -3
  56. package/dist/client/svelte/index.d.cts +3 -3
  57. package/dist/client/svelte/index.d.mts +3 -3
  58. package/dist/client/svelte/index.d.ts +3 -3
  59. package/dist/client/vue/index.d.cts +3 -3
  60. package/dist/client/vue/index.d.mts +3 -3
  61. package/dist/client/vue/index.d.ts +3 -3
  62. package/dist/cookies/index.cjs +13 -2
  63. package/dist/cookies/index.d.cts +3 -3
  64. package/dist/cookies/index.d.mts +3 -3
  65. package/dist/cookies/index.d.ts +3 -3
  66. package/dist/cookies/index.mjs +13 -2
  67. package/dist/db/index.cjs +6 -5
  68. package/dist/db/index.d.cts +4 -4
  69. package/dist/db/index.d.mts +4 -4
  70. package/dist/db/index.d.ts +4 -4
  71. package/dist/db/index.mjs +7 -6
  72. package/dist/index.cjs +11 -7
  73. package/dist/index.d.cts +4 -4
  74. package/dist/index.d.mts +4 -4
  75. package/dist/index.d.ts +4 -4
  76. package/dist/index.mjs +14 -10
  77. package/dist/integrations/next-js.cjs +4 -5
  78. package/dist/integrations/next-js.d.cts +3 -3
  79. package/dist/integrations/next-js.d.mts +3 -3
  80. package/dist/integrations/next-js.d.ts +3 -3
  81. package/dist/integrations/next-js.mjs +5 -6
  82. package/dist/integrations/node.d.cts +3 -3
  83. package/dist/integrations/node.d.mts +3 -3
  84. package/dist/integrations/node.d.ts +3 -3
  85. package/dist/integrations/react-start.cjs +5 -6
  86. package/dist/integrations/react-start.d.cts +3 -3
  87. package/dist/integrations/react-start.d.mts +3 -3
  88. package/dist/integrations/react-start.d.ts +3 -3
  89. package/dist/integrations/react-start.mjs +6 -7
  90. package/dist/integrations/svelte-kit.d.cts +3 -3
  91. package/dist/integrations/svelte-kit.d.mts +3 -3
  92. package/dist/integrations/svelte-kit.d.ts +3 -3
  93. package/dist/oauth2/index.d.cts +5 -5
  94. package/dist/oauth2/index.d.mts +5 -5
  95. package/dist/oauth2/index.d.ts +5 -5
  96. package/dist/plugins/access/index.d.cts +1 -1
  97. package/dist/plugins/access/index.d.mts +1 -1
  98. package/dist/plugins/access/index.d.ts +1 -1
  99. package/dist/plugins/admin/access/index.d.cts +1 -1
  100. package/dist/plugins/admin/access/index.d.mts +1 -1
  101. package/dist/plugins/admin/access/index.d.ts +1 -1
  102. package/dist/plugins/admin/index.cjs +4 -4
  103. package/dist/plugins/admin/index.d.cts +74 -14
  104. package/dist/plugins/admin/index.d.mts +74 -14
  105. package/dist/plugins/admin/index.d.ts +74 -14
  106. package/dist/plugins/admin/index.mjs +5 -5
  107. package/dist/plugins/anonymous/index.cjs +4 -5
  108. package/dist/plugins/anonymous/index.d.cts +3 -3
  109. package/dist/plugins/anonymous/index.d.mts +3 -3
  110. package/dist/plugins/anonymous/index.d.ts +3 -3
  111. package/dist/plugins/anonymous/index.mjs +5 -6
  112. package/dist/plugins/bearer/index.cjs +2 -2
  113. package/dist/plugins/bearer/index.d.cts +3 -3
  114. package/dist/plugins/bearer/index.d.mts +3 -3
  115. package/dist/plugins/bearer/index.d.ts +3 -3
  116. package/dist/plugins/bearer/index.mjs +3 -3
  117. package/dist/plugins/captcha/index.cjs +110 -45
  118. package/dist/plugins/captcha/index.d.cts +26 -6
  119. package/dist/plugins/captcha/index.d.mts +26 -6
  120. package/dist/plugins/captcha/index.d.ts +26 -6
  121. package/dist/plugins/captcha/index.mjs +110 -45
  122. package/dist/plugins/custom-session/index.cjs +24 -5
  123. package/dist/plugins/custom-session/index.d.cts +25 -6
  124. package/dist/plugins/custom-session/index.d.mts +25 -6
  125. package/dist/plugins/custom-session/index.d.ts +25 -6
  126. package/dist/plugins/custom-session/index.mjs +25 -6
  127. package/dist/plugins/email-otp/index.cjs +96 -30
  128. package/dist/plugins/email-otp/index.d.cts +33 -10
  129. package/dist/plugins/email-otp/index.d.mts +33 -10
  130. package/dist/plugins/email-otp/index.d.ts +33 -10
  131. package/dist/plugins/email-otp/index.mjs +97 -31
  132. package/dist/plugins/generic-oauth/index.cjs +81 -20
  133. package/dist/plugins/generic-oauth/index.d.cts +46 -3
  134. package/dist/plugins/generic-oauth/index.d.mts +46 -3
  135. package/dist/plugins/generic-oauth/index.d.ts +46 -3
  136. package/dist/plugins/generic-oauth/index.mjs +82 -21
  137. package/dist/plugins/haveibeenpwned/index.cjs +98 -0
  138. package/dist/plugins/haveibeenpwned/index.d.cts +36 -0
  139. package/dist/plugins/haveibeenpwned/index.d.mts +36 -0
  140. package/dist/plugins/haveibeenpwned/index.d.ts +36 -0
  141. package/dist/plugins/haveibeenpwned/index.mjs +96 -0
  142. package/dist/plugins/index.cjs +583 -19
  143. package/dist/plugins/index.d.cts +7 -5
  144. package/dist/plugins/index.d.mts +7 -5
  145. package/dist/plugins/index.d.ts +7 -5
  146. package/dist/plugins/index.mjs +583 -21
  147. package/dist/plugins/jwt/index.cjs +45 -21
  148. package/dist/plugins/jwt/index.d.cts +52 -6
  149. package/dist/plugins/jwt/index.d.mts +52 -6
  150. package/dist/plugins/jwt/index.d.ts +52 -6
  151. package/dist/plugins/jwt/index.mjs +46 -22
  152. package/dist/plugins/magic-link/index.cjs +3 -3
  153. package/dist/plugins/magic-link/index.mjs +4 -4
  154. package/dist/plugins/multi-session/index.cjs +3 -3
  155. package/dist/plugins/multi-session/index.d.cts +3 -3
  156. package/dist/plugins/multi-session/index.d.mts +3 -3
  157. package/dist/plugins/multi-session/index.d.ts +3 -3
  158. package/dist/plugins/multi-session/index.mjs +4 -4
  159. package/dist/plugins/oauth-proxy/index.cjs +4 -4
  160. package/dist/plugins/oauth-proxy/index.d.cts +3 -3
  161. package/dist/plugins/oauth-proxy/index.d.mts +3 -3
  162. package/dist/plugins/oauth-proxy/index.d.ts +3 -3
  163. package/dist/plugins/oauth-proxy/index.mjs +5 -5
  164. package/dist/plugins/oidc-provider/index.cjs +227 -8
  165. package/dist/plugins/oidc-provider/index.d.cts +215 -3
  166. package/dist/plugins/oidc-provider/index.d.mts +215 -3
  167. package/dist/plugins/oidc-provider/index.d.ts +215 -3
  168. package/dist/plugins/oidc-provider/index.mjs +228 -9
  169. package/dist/plugins/one-tap/index.cjs +5 -5
  170. package/dist/plugins/one-tap/index.mjs +6 -6
  171. package/dist/plugins/one-time-token/index.cjs +119 -0
  172. package/dist/plugins/one-time-token/index.d.cts +134 -0
  173. package/dist/plugins/one-time-token/index.d.mts +134 -0
  174. package/dist/plugins/one-time-token/index.d.ts +134 -0
  175. package/dist/plugins/one-time-token/index.mjs +117 -0
  176. package/dist/plugins/open-api/index.cjs +3 -3
  177. package/dist/plugins/open-api/index.d.cts +3 -3
  178. package/dist/plugins/open-api/index.d.mts +3 -3
  179. package/dist/plugins/open-api/index.d.ts +3 -3
  180. package/dist/plugins/open-api/index.mjs +4 -4
  181. package/dist/plugins/organization/access/index.d.cts +1 -1
  182. package/dist/plugins/organization/access/index.d.mts +1 -1
  183. package/dist/plugins/organization/access/index.d.ts +1 -1
  184. package/dist/plugins/organization/index.cjs +4 -4
  185. package/dist/plugins/organization/index.d.cts +708 -55
  186. package/dist/plugins/organization/index.d.mts +708 -55
  187. package/dist/plugins/organization/index.d.ts +708 -55
  188. package/dist/plugins/organization/index.mjs +5 -5
  189. package/dist/plugins/passkey/index.cjs +82 -8
  190. package/dist/plugins/passkey/index.d.cts +72 -3
  191. package/dist/plugins/passkey/index.d.mts +72 -3
  192. package/dist/plugins/passkey/index.d.ts +72 -3
  193. package/dist/plugins/passkey/index.mjs +83 -9
  194. package/dist/plugins/phone-number/index.cjs +194 -26
  195. package/dist/plugins/phone-number/index.d.cts +132 -8
  196. package/dist/plugins/phone-number/index.d.mts +132 -8
  197. package/dist/plugins/phone-number/index.d.ts +132 -8
  198. package/dist/plugins/phone-number/index.mjs +195 -27
  199. package/dist/plugins/sso/index.cjs +190 -7
  200. package/dist/plugins/sso/index.d.cts +181 -15
  201. package/dist/plugins/sso/index.d.mts +181 -15
  202. package/dist/plugins/sso/index.d.ts +181 -15
  203. package/dist/plugins/sso/index.mjs +191 -8
  204. package/dist/plugins/two-factor/index.cjs +443 -92
  205. package/dist/plugins/two-factor/index.d.cts +230 -396
  206. package/dist/plugins/two-factor/index.d.mts +230 -396
  207. package/dist/plugins/two-factor/index.d.ts +230 -396
  208. package/dist/plugins/two-factor/index.mjs +431 -80
  209. package/dist/plugins/username/index.cjs +34 -31
  210. package/dist/plugins/username/index.d.cts +15 -12
  211. package/dist/plugins/username/index.d.mts +15 -12
  212. package/dist/plugins/username/index.d.ts +15 -12
  213. package/dist/plugins/username/index.mjs +35 -32
  214. package/dist/shared/better-auth.1DR6suCQ.mjs +307 -0
  215. package/dist/shared/{better-auth.BSsp73pg.cjs → better-auth.B7cZ2juS.cjs} +15 -14
  216. package/dist/shared/{better-auth.bKwabe3I.d.mts → better-auth.B88xucNq.d.mts} +529 -39
  217. package/dist/shared/{better-auth.CApEjVDP.cjs → better-auth.BW8BpneG.cjs} +4 -1
  218. package/dist/shared/{better-auth.BiQsvaIP.d.cts → better-auth.BcU1Kjyq.d.cts} +2051 -518
  219. package/dist/shared/better-auth.BfG24BjZ.cjs +118 -0
  220. package/dist/shared/{better-auth.A3TjrU8G.mjs → better-auth.Bk5IMdhM.mjs} +32 -12
  221. package/dist/shared/{better-auth.D9VnBkRI.mjs → better-auth.Bm9HxIzE.mjs} +47 -24
  222. package/dist/shared/{better-auth.BRf6Iynu.d.ts → better-auth.Bwc-6kOr.d.ts} +1 -1
  223. package/dist/shared/{better-auth.D-oLmHIj.d.mts → better-auth.CA2hFK4N.d.ts} +2051 -518
  224. package/dist/shared/{better-auth.Dmhe30iW.d.mts → better-auth.CGukGrxT.d.cts} +1 -1
  225. package/dist/shared/{better-auth.CsSpq0zL.cjs → better-auth.CHUzBidy.cjs} +46 -23
  226. package/dist/shared/{better-auth.DWRligF8.d.cts → better-auth.CT9J6rD-.d.cts} +539 -7
  227. package/dist/shared/better-auth.CVCo5Z2T.cjs +310 -0
  228. package/dist/shared/{better-auth.D4jH-sJA.mjs → better-auth.CWwVo_61.mjs} +458 -118
  229. package/dist/shared/{better-auth.Bi8FQwDD.d.cts → better-auth.CYegVoq1.d.cts} +1 -1
  230. package/dist/shared/{better-auth.Bi8FQwDD.d.mts → better-auth.CYegVoq1.d.mts} +1 -1
  231. package/dist/shared/{better-auth.Bi8FQwDD.d.ts → better-auth.CYegVoq1.d.ts} +1 -1
  232. package/dist/shared/{better-auth.CepcSj5H.mjs → better-auth.Cc72UxUH.mjs} +1 -2
  233. package/dist/shared/{better-auth.BWp5dztg.d.ts → better-auth.CmN4mlPh.d.ts} +539 -7
  234. package/dist/shared/{better-auth.DH3YjMQH.mjs → better-auth.Cqykj82J.mjs} +1 -1
  235. package/dist/shared/{better-auth.wcdMj2cT.d.mts → better-auth.DIt2e3lu.d.mts} +539 -7
  236. package/dist/shared/{better-auth.BANAxdkL.d.ts → better-auth.DNTAFSt1.d.ts} +529 -39
  237. package/dist/shared/{better-auth.DU2QNVc_.d.ts → better-auth.DQ7OSJbI.d.mts} +2051 -518
  238. package/dist/shared/{better-auth.DLTzKoOS.cjs → better-auth.DSVbLSt7.cjs} +4 -1
  239. package/dist/shared/{better-auth.B2Fw1vhH.d.cts → better-auth.DTiSPWEk.d.cts} +529 -39
  240. package/dist/shared/better-auth.DURsStt9.mjs +116 -0
  241. package/dist/shared/{better-auth.BIjcZ_vt.cjs → better-auth.DYoLD99C.cjs} +31 -11
  242. package/dist/shared/{better-auth.CV1L7TPV.cjs → better-auth.D_ZIX1O8.cjs} +317 -47
  243. package/dist/shared/{better-auth.C5H9XEzZ.cjs → better-auth.DcWKCjjf.cjs} +1 -2
  244. package/dist/shared/{better-auth.BDYXUcLv.cjs → better-auth.Dg0siV5C.cjs} +457 -117
  245. package/dist/shared/better-auth.DjryM8pE.cjs +760 -0
  246. package/dist/shared/{better-auth.DPBQN9Fs.mjs → better-auth.Dn_Ms1Uf.mjs} +318 -48
  247. package/dist/shared/{better-auth.DiG4KL2x.mjs → better-auth.OuYYTHC7.mjs} +4 -1
  248. package/dist/shared/{better-auth.DtC8i3pf.d.cts → better-auth.S1jimRbX.d.mts} +1 -1
  249. package/dist/shared/better-auth.SPmq4a4z.d.mts +344 -0
  250. package/dist/shared/{better-auth.cOCrlspr.mjs → better-auth.bkwPl2G4.mjs} +4 -1
  251. package/dist/shared/better-auth.cp2rC2iM.d.ts +344 -0
  252. package/dist/shared/better-auth.eVy4DZvP.d.cts +344 -0
  253. package/dist/shared/{better-auth.BrOpzmqo.mjs → better-auth.iKoUsdFE.mjs} +15 -14
  254. package/dist/shared/better-auth.rSYJCd3o.mjs +758 -0
  255. package/dist/social-providers/index.cjs +75 -3
  256. package/dist/social-providers/index.d.cts +2 -2
  257. package/dist/social-providers/index.d.mts +2 -2
  258. package/dist/social-providers/index.d.ts +2 -2
  259. package/dist/social-providers/index.mjs +77 -6
  260. package/dist/types/index.d.cts +4 -4
  261. package/dist/types/index.d.mts +4 -4
  262. package/dist/types/index.d.ts +4 -4
  263. package/package.json +42 -5
  264. package/dist/chunks/server.cjs +0 -905
  265. package/dist/chunks/server.mjs +0 -895
  266. package/dist/shared/better-auth.BcoSd9tC.mjs +0 -10
  267. package/dist/shared/better-auth.BnRFp-t0.mjs +0 -405
  268. package/dist/shared/better-auth.C1-vpKly.cjs +0 -12
  269. package/dist/shared/better-auth.ClTSOgiD.mjs +0 -140
  270. package/dist/shared/better-auth.DC8JQbiE.mjs +0 -173
  271. package/dist/shared/better-auth.DWHWPllD.cjs +0 -175
  272. package/dist/shared/better-auth.DqLjzBlO.cjs +0 -408
  273. package/dist/shared/better-auth.m575EIBC.cjs +0 -144
@@ -0,0 +1,307 @@
1
+ import { Kysely, SqliteDialect, MysqlDialect, PostgresDialect, MssqlDialect } from 'kysely';
2
+ import { c as createAdapter } from './better-auth.rSYJCd3o.mjs';
3
+
4
+ function getDatabaseType(db) {
5
+ if (!db) {
6
+ return null;
7
+ }
8
+ if ("dialect" in db) {
9
+ return getDatabaseType(db.dialect);
10
+ }
11
+ if ("createDriver" in db) {
12
+ if (db instanceof SqliteDialect) {
13
+ return "sqlite";
14
+ }
15
+ if (db instanceof MysqlDialect) {
16
+ return "mysql";
17
+ }
18
+ if (db instanceof PostgresDialect) {
19
+ return "postgres";
20
+ }
21
+ if (db instanceof MssqlDialect) {
22
+ return "mssql";
23
+ }
24
+ }
25
+ if ("aggregate" in db) {
26
+ return "sqlite";
27
+ }
28
+ if ("getConnection" in db) {
29
+ return "mysql";
30
+ }
31
+ if ("connect" in db) {
32
+ return "postgres";
33
+ }
34
+ return null;
35
+ }
36
+ const createKyselyAdapter = async (config) => {
37
+ const db = config.database;
38
+ if (!db) {
39
+ return {
40
+ kysely: null,
41
+ databaseType: null
42
+ };
43
+ }
44
+ if ("db" in db) {
45
+ return {
46
+ kysely: db.db,
47
+ databaseType: db.type
48
+ };
49
+ }
50
+ if ("dialect" in db) {
51
+ return {
52
+ kysely: new Kysely({ dialect: db.dialect }),
53
+ databaseType: db.type
54
+ };
55
+ }
56
+ let dialect = void 0;
57
+ const databaseType = getDatabaseType(db);
58
+ if ("createDriver" in db) {
59
+ dialect = db;
60
+ }
61
+ if ("aggregate" in db) {
62
+ dialect = new SqliteDialect({
63
+ database: db
64
+ });
65
+ }
66
+ if ("getConnection" in db) {
67
+ dialect = new MysqlDialect(db);
68
+ }
69
+ if ("connect" in db) {
70
+ dialect = new PostgresDialect({
71
+ pool: db
72
+ });
73
+ }
74
+ return {
75
+ kysely: dialect ? new Kysely({ dialect }) : null,
76
+ databaseType
77
+ };
78
+ };
79
+
80
+ const kyselyAdapter = (db, config) => createAdapter({
81
+ config: {
82
+ adapterId: "kysely",
83
+ adapterName: "Kysely Adapter",
84
+ usePlural: config?.usePlural,
85
+ debugLogs: config?.debugLogs,
86
+ supportsBooleans: config?.type === "sqlite" || config?.type === "mssql" || !config?.type ? false : true,
87
+ supportsDates: config?.type === "sqlite" || config?.type === "mssql" || !config?.type ? false : true,
88
+ supportsJSON: false
89
+ },
90
+ adapter: ({ getFieldName, schema }) => {
91
+ const withReturning = async (values, builder, model, where) => {
92
+ let res;
93
+ if (config?.type === "mysql") {
94
+ await builder.execute();
95
+ const field = values.id ? "id" : where.length > 0 && where[0].field ? where[0].field : "id";
96
+ if (!values.id && where.length === 0) {
97
+ res = await db.selectFrom(model).selectAll().orderBy(getFieldName({ model, field }), "desc").limit(1).executeTakeFirst();
98
+ return res;
99
+ }
100
+ const value = values[field] || where[0].value;
101
+ res = await db.selectFrom(model).selectAll().orderBy(getFieldName({ model, field }), "desc").where(getFieldName({ model, field }), "=", value).limit(1).executeTakeFirst();
102
+ return res;
103
+ }
104
+ if (config?.type === "mssql") {
105
+ res = await builder.outputAll("inserted").executeTakeFirst();
106
+ return res;
107
+ }
108
+ res = await builder.returningAll().executeTakeFirst();
109
+ return res;
110
+ };
111
+ function transformValueToDB(value, model, field) {
112
+ if (field === "id") {
113
+ return value;
114
+ }
115
+ const { type = "sqlite" } = config || {};
116
+ let f = schema[model]?.fields[field];
117
+ if (!f) {
118
+ f = Object.values(schema).find((f2) => f2.modelName === model);
119
+ }
120
+ if (f.type === "boolean" && (type === "sqlite" || type === "mssql") && value !== null && value !== void 0) {
121
+ return value ? 1 : 0;
122
+ }
123
+ if (f.type === "date" && value && value instanceof Date) {
124
+ return type === "sqlite" ? value.toISOString() : value;
125
+ }
126
+ return value;
127
+ }
128
+ function convertWhereClause(model, w) {
129
+ if (!w)
130
+ return {
131
+ and: null,
132
+ or: null
133
+ };
134
+ const conditions = {
135
+ and: [],
136
+ or: []
137
+ };
138
+ w.forEach((condition) => {
139
+ let {
140
+ field: _field,
141
+ value,
142
+ operator = "=",
143
+ connector = "AND"
144
+ } = condition;
145
+ const field = getFieldName({ model, field: _field });
146
+ value = transformValueToDB(value, model, _field);
147
+ const expr = (eb) => {
148
+ if (operator.toLowerCase() === "in") {
149
+ return eb(field, "in", Array.isArray(value) ? value : [value]);
150
+ }
151
+ if (operator === "contains") {
152
+ return eb(field, "like", `%${value}%`);
153
+ }
154
+ if (operator === "starts_with") {
155
+ return eb(field, "like", `${value}%`);
156
+ }
157
+ if (operator === "ends_with") {
158
+ return eb(field, "like", `%${value}`);
159
+ }
160
+ if (operator === "eq") {
161
+ return eb(field, "=", value);
162
+ }
163
+ if (operator === "ne") {
164
+ return eb(field, "<>", value);
165
+ }
166
+ if (operator === "gt") {
167
+ return eb(field, ">", value);
168
+ }
169
+ if (operator === "gte") {
170
+ return eb(field, ">=", value);
171
+ }
172
+ if (operator === "lt") {
173
+ return eb(field, "<", value);
174
+ }
175
+ if (operator === "lte") {
176
+ return eb(field, "<=", value);
177
+ }
178
+ return eb(field, operator, value);
179
+ };
180
+ if (connector === "OR") {
181
+ conditions.or.push(expr);
182
+ } else {
183
+ conditions.and.push(expr);
184
+ }
185
+ });
186
+ return {
187
+ and: conditions.and.length ? conditions.and : null,
188
+ or: conditions.or.length ? conditions.or : null
189
+ };
190
+ }
191
+ return {
192
+ async create({ data, model }) {
193
+ const builder = db.insertInto(model).values(data);
194
+ return await withReturning(data, builder, model, []);
195
+ },
196
+ async findOne({ model, where, select }) {
197
+ const { and, or } = convertWhereClause(model, where);
198
+ let query = db.selectFrom(model).selectAll();
199
+ if (and) {
200
+ query = query.where((eb) => eb.and(and.map((expr) => expr(eb))));
201
+ }
202
+ if (or) {
203
+ query = query.where((eb) => eb.or(or.map((expr) => expr(eb))));
204
+ }
205
+ const res = await query.executeTakeFirst();
206
+ if (!res) return null;
207
+ return res;
208
+ },
209
+ async findMany({ model, where, limit, offset, sortBy }) {
210
+ const { and, or } = convertWhereClause(model, where);
211
+ let query = db.selectFrom(model);
212
+ if (and) {
213
+ query = query.where((eb) => eb.and(and.map((expr) => expr(eb))));
214
+ }
215
+ if (or) {
216
+ query = query.where((eb) => eb.or(or.map((expr) => expr(eb))));
217
+ }
218
+ if (config?.type === "mssql") {
219
+ if (!offset) {
220
+ query = query.top(limit || 100);
221
+ }
222
+ } else {
223
+ query = query.limit(limit || 100);
224
+ }
225
+ if (sortBy) {
226
+ query = query.orderBy(
227
+ getFieldName({ model, field: sortBy.field }),
228
+ sortBy.direction
229
+ );
230
+ }
231
+ if (offset) {
232
+ if (config?.type === "mssql") {
233
+ if (!sortBy) {
234
+ query = query.orderBy(getFieldName({ model, field: "id" }));
235
+ }
236
+ query = query.offset(offset).fetch(limit || 100);
237
+ } else {
238
+ query = query.offset(offset);
239
+ }
240
+ }
241
+ const res = await query.selectAll().execute();
242
+ if (!res) return [];
243
+ return res;
244
+ },
245
+ async update({ model, where, update: values }) {
246
+ const { and, or } = convertWhereClause(model, where);
247
+ let query = db.updateTable(model).set(values);
248
+ if (and) {
249
+ query = query.where((eb) => eb.and(and.map((expr) => expr(eb))));
250
+ }
251
+ if (or) {
252
+ query = query.where((eb) => eb.or(or.map((expr) => expr(eb))));
253
+ }
254
+ return await withReturning(values, query, model, where);
255
+ },
256
+ async updateMany({ model, where, update: values }) {
257
+ const { and, or } = convertWhereClause(model, where);
258
+ let query = db.updateTable(model).set(values);
259
+ if (and) {
260
+ query = query.where((eb) => eb.and(and.map((expr) => expr(eb))));
261
+ }
262
+ if (or) {
263
+ query = query.where((eb) => eb.or(or.map((expr) => expr(eb))));
264
+ }
265
+ const res = await query.execute();
266
+ return res.length;
267
+ },
268
+ async count({ model, where }) {
269
+ const { and, or } = convertWhereClause(model, where);
270
+ let query = db.selectFrom(model).select(db.fn.count("id").as("count"));
271
+ if (and) {
272
+ query = query.where((eb) => eb.and(and.map((expr) => expr(eb))));
273
+ }
274
+ if (or) {
275
+ query = query.where((eb) => eb.or(or.map((expr) => expr(eb))));
276
+ }
277
+ const res = await query.execute();
278
+ return res[0].count;
279
+ },
280
+ async delete({ model, where }) {
281
+ const { and, or } = convertWhereClause(model, where);
282
+ let query = db.deleteFrom(model);
283
+ if (and) {
284
+ query = query.where((eb) => eb.and(and.map((expr) => expr(eb))));
285
+ }
286
+ if (or) {
287
+ query = query.where((eb) => eb.or(or.map((expr) => expr(eb))));
288
+ }
289
+ await query.execute();
290
+ },
291
+ async deleteMany({ model, where }) {
292
+ const { and, or } = convertWhereClause(model, where);
293
+ let query = db.deleteFrom(model);
294
+ if (and) {
295
+ query = query.where((eb) => eb.and(and.map((expr) => expr(eb))));
296
+ }
297
+ if (or) {
298
+ query = query.where((eb) => eb.or(or.map((expr) => expr(eb))));
299
+ }
300
+ return (await query.execute()).length;
301
+ },
302
+ options: config
303
+ };
304
+ }
305
+ });
306
+
307
+ export { createKyselyAdapter as c, kyselyAdapter as k };
@@ -10,27 +10,28 @@ function getIp(req, options) {
10
10
  if (env.isTest) {
11
11
  return testIP;
12
12
  }
13
- const ipHeaders = options.advanced?.ipAddress?.ipAddressHeaders;
14
- const keys = ipHeaders || [
15
- "x-client-ip",
16
- "x-forwarded-for",
17
- "cf-connecting-ip",
18
- "fastly-client-ip",
19
- "x-real-ip",
20
- "x-cluster-client-ip",
21
- "x-forwarded",
22
- "forwarded-for",
23
- "forwarded"
24
- ];
25
13
  const headers = "headers" in req ? req.headers : req;
26
- for (const key of keys) {
14
+ const defaultHeaders = ["x-forwarded-for"];
15
+ const ipHeaders = options.advanced?.ipAddress?.ipAddressHeaders || defaultHeaders;
16
+ for (const key of ipHeaders) {
27
17
  const value = "get" in headers ? headers.get(key) : headers[key];
28
18
  if (typeof value === "string") {
29
19
  const ip = value.split(",")[0].trim();
30
- if (ip) return ip;
20
+ if (isValidIP(ip)) {
21
+ return ip;
22
+ }
31
23
  }
32
24
  }
33
25
  return null;
34
26
  }
27
+ function isValidIP(ip) {
28
+ const ipv4Regex = /^(\d{1,3}\.){3}\d{1,3}$/;
29
+ if (ipv4Regex.test(ip)) {
30
+ const parts = ip.split(".").map(Number);
31
+ return parts.every((part) => part >= 0 && part <= 255);
32
+ }
33
+ const ipv6Regex = /^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/;
34
+ return ipv6Regex.test(ip);
35
+ }
35
36
 
36
37
  exports.getIp = getIp;