modelence 0.9.0-dev.0 → 0.9.0

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 (377) hide show
  1. package/dist/bin/modelence.js +3 -57
  2. package/dist/bin/modelence.js.map +1 -1
  3. package/dist/chunk-3S2FFBNS.js +2 -0
  4. package/dist/chunk-3S2FFBNS.js.map +1 -0
  5. package/dist/chunk-55J6XMHW.js +2 -0
  6. package/dist/chunk-55J6XMHW.js.map +1 -0
  7. package/dist/chunk-C3UESBRX.js +2 -0
  8. package/dist/chunk-C3UESBRX.js.map +1 -0
  9. package/dist/chunk-DO5TZLF5.js +2 -0
  10. package/dist/chunk-DO5TZLF5.js.map +1 -0
  11. package/dist/chunk-PB6WQQ4L.js +3 -0
  12. package/dist/chunk-PB6WQQ4L.js.map +1 -0
  13. package/dist/chunk-YOLALUSB.js +3 -0
  14. package/dist/chunk-YOLALUSB.js.map +1 -0
  15. package/dist/client.d.ts +133 -10
  16. package/dist/client.js +1 -14
  17. package/dist/client.js.map +1 -1
  18. package/dist/index-CwdohC5n.d.ts +15 -0
  19. package/dist/index.d.ts +31 -6
  20. package/dist/index.js +1 -2
  21. package/dist/index.js.map +1 -1
  22. package/dist/mongo.d.ts +3 -2
  23. package/dist/mongo.js +1 -2
  24. package/dist/mongo.js.map +1 -1
  25. package/dist/package-FGEKA4ES.js +2 -0
  26. package/dist/package-FGEKA4ES.js.map +1 -0
  27. package/dist/server.d.ts +537 -19
  28. package/dist/server.js +18 -15
  29. package/dist/server.js.map +1 -1
  30. package/dist/telemetry.d.ts +11 -2
  31. package/dist/telemetry.js +1 -1
  32. package/dist/telemetry.js.map +1 -1
  33. package/dist/types-BOFsm7A2.d.ts +155 -0
  34. package/dist/{data/store.d.ts → types-SXHKNPNY.d.ts} +196 -14
  35. package/dist/types.d.ts +7 -10
  36. package/dist/types.js +1 -1
  37. package/dist/types.js.map +1 -1
  38. package/package.json +6 -5
  39. package/dist/app/authConfig.d.ts +0 -68
  40. package/dist/app/authConfig.d.ts.map +0 -1
  41. package/dist/app/authConfig.js +0 -8
  42. package/dist/app/authConfig.js.map +0 -1
  43. package/dist/app/backendApi.d.ts +0 -29
  44. package/dist/app/backendApi.d.ts.map +0 -1
  45. package/dist/app/backendApi.js +0 -69
  46. package/dist/app/backendApi.js.map +0 -1
  47. package/dist/app/email.d.ts +0 -3
  48. package/dist/app/email.d.ts.map +0 -1
  49. package/dist/app/email.js +0 -8
  50. package/dist/app/email.js.map +0 -1
  51. package/dist/app/emailConfig.d.ts +0 -27
  52. package/dist/app/emailConfig.d.ts.map +0 -1
  53. package/dist/app/emailConfig.js +0 -8
  54. package/dist/app/emailConfig.js.map +0 -1
  55. package/dist/app/index.d.ts +0 -20
  56. package/dist/app/index.d.ts.map +0 -1
  57. package/dist/app/index.js +0 -258
  58. package/dist/app/index.js.map +0 -1
  59. package/dist/app/loggerProcess.d.ts +0 -5
  60. package/dist/app/loggerProcess.d.ts.map +0 -1
  61. package/dist/app/loggerProcess.js +0 -90
  62. package/dist/app/loggerProcess.js.map +0 -1
  63. package/dist/app/metrics.d.ts +0 -6
  64. package/dist/app/metrics.d.ts.map +0 -1
  65. package/dist/app/metrics.js +0 -92
  66. package/dist/app/metrics.js.map +0 -1
  67. package/dist/app/module.d.ts +0 -77
  68. package/dist/app/module.d.ts.map +0 -1
  69. package/dist/app/module.js +0 -46
  70. package/dist/app/module.js.map +0 -1
  71. package/dist/app/server.d.ts +0 -37
  72. package/dist/app/server.d.ts.map +0 -1
  73. package/dist/app/server.js +0 -198
  74. package/dist/app/server.js.map +0 -1
  75. package/dist/app/state.d.ts +0 -19
  76. package/dist/app/state.d.ts.map +0 -1
  77. package/dist/app/state.js +0 -27
  78. package/dist/app/state.js.map +0 -1
  79. package/dist/app/websocketConfig.d.ts +0 -7
  80. package/dist/app/websocketConfig.d.ts.map +0 -1
  81. package/dist/app/websocketConfig.js +0 -8
  82. package/dist/app/websocketConfig.js.map +0 -1
  83. package/dist/auth/client/index.d.ts +0 -69
  84. package/dist/auth/client/index.d.ts.map +0 -1
  85. package/dist/auth/client/index.js +0 -79
  86. package/dist/auth/client/index.js.map +0 -1
  87. package/dist/auth/db.d.ts +0 -176
  88. package/dist/auth/db.d.ts.map +0 -1
  89. package/dist/auth/db.js +0 -117
  90. package/dist/auth/db.js.map +0 -1
  91. package/dist/auth/deleteUser.d.ts +0 -5
  92. package/dist/auth/deleteUser.d.ts.map +0 -1
  93. package/dist/auth/deleteUser.js +0 -34
  94. package/dist/auth/deleteUser.js.map +0 -1
  95. package/dist/auth/disposableEmails.d.ts +0 -6
  96. package/dist/auth/disposableEmails.d.ts.map +0 -1
  97. package/dist/auth/disposableEmails.js +0 -47
  98. package/dist/auth/disposableEmails.js.map +0 -1
  99. package/dist/auth/index.d.ts +0 -7
  100. package/dist/auth/index.d.ts.map +0 -1
  101. package/dist/auth/index.js +0 -33
  102. package/dist/auth/index.js.map +0 -1
  103. package/dist/auth/login.d.ts +0 -9
  104. package/dist/auth/login.d.ts.map +0 -1
  105. package/dist/auth/login.js +0 -100
  106. package/dist/auth/login.js.map +0 -1
  107. package/dist/auth/password.d.ts +0 -14
  108. package/dist/auth/password.d.ts.map +0 -1
  109. package/dist/auth/password.js +0 -26
  110. package/dist/auth/password.js.map +0 -1
  111. package/dist/auth/profile.d.ts +0 -10
  112. package/dist/auth/profile.d.ts.map +0 -1
  113. package/dist/auth/profile.js +0 -13
  114. package/dist/auth/profile.js.map +0 -1
  115. package/dist/auth/providers/github.d.ts +0 -3
  116. package/dist/auth/providers/github.d.ts.map +0 -1
  117. package/dist/auth/providers/github.js +0 -122
  118. package/dist/auth/providers/github.js.map +0 -1
  119. package/dist/auth/providers/google.d.ts +0 -3
  120. package/dist/auth/providers/google.d.ts.map +0 -1
  121. package/dist/auth/providers/google.js +0 -108
  122. package/dist/auth/providers/google.js.map +0 -1
  123. package/dist/auth/providers/oauth-common.d.ts +0 -13
  124. package/dist/auth/providers/oauth-common.d.ts.map +0 -1
  125. package/dist/auth/providers/oauth-common.js +0 -109
  126. package/dist/auth/providers/oauth-common.js.map +0 -1
  127. package/dist/auth/resetPassword.d.ts +0 -10
  128. package/dist/auth/resetPassword.d.ts.map +0 -1
  129. package/dist/auth/resetPassword.js +0 -108
  130. package/dist/auth/resetPassword.js.map +0 -1
  131. package/dist/auth/role.d.ts +0 -8
  132. package/dist/auth/role.d.ts.map +0 -1
  133. package/dist/auth/role.js +0 -37
  134. package/dist/auth/role.js.map +0 -1
  135. package/dist/auth/session.d.ts +0 -24
  136. package/dist/auth/session.d.ts.map +0 -1
  137. package/dist/auth/session.js +0 -84
  138. package/dist/auth/session.js.map +0 -1
  139. package/dist/auth/signup.d.ts +0 -3
  140. package/dist/auth/signup.d.ts.map +0 -1
  141. package/dist/auth/signup.js +0 -89
  142. package/dist/auth/signup.js.map +0 -1
  143. package/dist/auth/templates/emailVerficationTemplate.d.ts +0 -6
  144. package/dist/auth/templates/emailVerficationTemplate.d.ts.map +0 -1
  145. package/dist/auth/templates/emailVerficationTemplate.js +0 -9
  146. package/dist/auth/templates/emailVerficationTemplate.js.map +0 -1
  147. package/dist/auth/types.d.ts +0 -22
  148. package/dist/auth/types.d.ts.map +0 -1
  149. package/dist/auth/types.js +0 -2
  150. package/dist/auth/types.js.map +0 -1
  151. package/dist/auth/user.d.ts +0 -5
  152. package/dist/auth/user.d.ts.map +0 -1
  153. package/dist/auth/user.js +0 -152
  154. package/dist/auth/user.js.map +0 -1
  155. package/dist/auth/validators.d.ts +0 -3
  156. package/dist/auth/validators.d.ts.map +0 -1
  157. package/dist/auth/validators.js +0 -8
  158. package/dist/auth/validators.js.map +0 -1
  159. package/dist/auth/verification.d.ts +0 -8
  160. package/dist/auth/verification.d.ts.map +0 -1
  161. package/dist/auth/verification.js +0 -94
  162. package/dist/auth/verification.js.map +0 -1
  163. package/dist/bin/auth.d.ts +0 -4
  164. package/dist/bin/auth.d.ts.map +0 -1
  165. package/dist/bin/auth.js +0 -48
  166. package/dist/bin/auth.js.map +0 -1
  167. package/dist/bin/build.d.ts +0 -2
  168. package/dist/bin/build.d.ts.map +0 -1
  169. package/dist/bin/build.js +0 -78
  170. package/dist/bin/build.js.map +0 -1
  171. package/dist/bin/config.d.ts +0 -11
  172. package/dist/bin/config.d.ts.map +0 -1
  173. package/dist/bin/config.js +0 -91
  174. package/dist/bin/config.js.map +0 -1
  175. package/dist/bin/deploy.d.ts +0 -6
  176. package/dist/bin/deploy.d.ts.map +0 -1
  177. package/dist/bin/deploy.js +0 -129
  178. package/dist/bin/deploy.js.map +0 -1
  179. package/dist/bin/dev.d.ts +0 -2
  180. package/dist/bin/dev.d.ts.map +0 -1
  181. package/dist/bin/dev.js +0 -14
  182. package/dist/bin/dev.js.map +0 -1
  183. package/dist/bin/modelence.d.ts +0 -3
  184. package/dist/bin/modelence.d.ts.map +0 -1
  185. package/dist/bin/setup.d.ts +0 -5
  186. package/dist/bin/setup.d.ts.map +0 -1
  187. package/dist/bin/setup.js +0 -91
  188. package/dist/bin/setup.js.map +0 -1
  189. package/dist/bin/start.d.ts +0 -2
  190. package/dist/bin/start.d.ts.map +0 -1
  191. package/dist/bin/start.js +0 -15
  192. package/dist/bin/start.js.map +0 -1
  193. package/dist/client/AppProvider.d.ts +0 -8
  194. package/dist/client/AppProvider.d.ts.map +0 -1
  195. package/dist/client/AppProvider.js +0 -31
  196. package/dist/client/AppProvider.js.map +0 -1
  197. package/dist/client/errorHandler.d.ts +0 -4
  198. package/dist/client/errorHandler.d.ts.map +0 -1
  199. package/dist/client/errorHandler.js +0 -10
  200. package/dist/client/errorHandler.js.map +0 -1
  201. package/dist/client/localStorage.d.ts +0 -3
  202. package/dist/client/localStorage.d.ts.map +0 -1
  203. package/dist/client/localStorage.js +0 -14
  204. package/dist/client/localStorage.js.map +0 -1
  205. package/dist/client/method.d.ts +0 -6
  206. package/dist/client/method.d.ts.map +0 -1
  207. package/dist/client/method.js +0 -52
  208. package/dist/client/method.js.map +0 -1
  209. package/dist/client/renderApp.d.ts +0 -9
  210. package/dist/client/renderApp.d.ts.map +0 -1
  211. package/dist/client/renderApp.js +0 -28
  212. package/dist/client/renderApp.js.map +0 -1
  213. package/dist/client/session.d.ts +0 -34
  214. package/dist/client/session.d.ts.map +0 -1
  215. package/dist/client/session.js +0 -83
  216. package/dist/client/session.js.map +0 -1
  217. package/dist/client.d.ts.map +0 -1
  218. package/dist/config/client.d.ts +0 -10
  219. package/dist/config/client.d.ts.map +0 -1
  220. package/dist/config/client.js +0 -14
  221. package/dist/config/client.js.map +0 -1
  222. package/dist/config/server.d.ts +0 -48
  223. package/dist/config/server.d.ts.map +0 -1
  224. package/dist/config/server.js +0 -85
  225. package/dist/config/server.js.map +0 -1
  226. package/dist/config/sync.d.ts +0 -2
  227. package/dist/config/sync.d.ts.map +0 -1
  228. package/dist/config/sync.js +0 -32
  229. package/dist/config/sync.js.map +0 -1
  230. package/dist/config/types.d.ts +0 -19
  231. package/dist/config/types.d.ts.map +0 -1
  232. package/dist/config/types.js +0 -2
  233. package/dist/config/types.js.map +0 -1
  234. package/dist/cron/jobs.d.ts +0 -13
  235. package/dist/cron/jobs.d.ts.map +0 -1
  236. package/dist/cron/jobs.js +0 -155
  237. package/dist/cron/jobs.js.map +0 -1
  238. package/dist/cron/types.d.ts +0 -29
  239. package/dist/cron/types.d.ts.map +0 -1
  240. package/dist/cron/types.js +0 -2
  241. package/dist/cron/types.js.map +0 -1
  242. package/dist/data/schemaSerializer.d.ts +0 -37
  243. package/dist/data/schemaSerializer.d.ts.map +0 -1
  244. package/dist/data/schemaSerializer.js +0 -104
  245. package/dist/data/schemaSerializer.js.map +0 -1
  246. package/dist/data/store.d.ts.map +0 -1
  247. package/dist/data/store.js +0 -501
  248. package/dist/data/store.js.map +0 -1
  249. package/dist/data/types.d.ts +0 -47
  250. package/dist/data/types.d.ts.map +0 -1
  251. package/dist/data/types.js +0 -35
  252. package/dist/data/types.js.map +0 -1
  253. package/dist/db/client.d.ts +0 -5
  254. package/dist/db/client.d.ts.map +0 -1
  255. package/dist/db/client.js +0 -41
  256. package/dist/db/client.js.map +0 -1
  257. package/dist/error.d.ts +0 -16
  258. package/dist/error.d.ts.map +0 -1
  259. package/dist/error.js +0 -24
  260. package/dist/error.js.map +0 -1
  261. package/dist/index.d.ts.map +0 -1
  262. package/dist/lock/db.d.ts +0 -19
  263. package/dist/lock/db.d.ts.map +0 -1
  264. package/dist/lock/db.js +0 -28
  265. package/dist/lock/db.js.map +0 -1
  266. package/dist/lock/helpers.d.ts +0 -28
  267. package/dist/lock/helpers.d.ts.map +0 -1
  268. package/dist/lock/helpers.js +0 -107
  269. package/dist/lock/helpers.js.map +0 -1
  270. package/dist/lock/index.d.ts +0 -4
  271. package/dist/lock/index.d.ts.map +0 -1
  272. package/dist/lock/index.js +0 -4
  273. package/dist/lock/index.js.map +0 -1
  274. package/dist/lock/module.d.ts +0 -7
  275. package/dist/lock/module.d.ts.map +0 -1
  276. package/dist/lock/module.js +0 -9
  277. package/dist/lock/module.js.map +0 -1
  278. package/dist/methods/index.d.ts +0 -7
  279. package/dist/methods/index.d.ts.map +0 -1
  280. package/dist/methods/index.js +0 -65
  281. package/dist/methods/index.js.map +0 -1
  282. package/dist/methods/serialize.d.ts +0 -15
  283. package/dist/methods/serialize.d.ts.map +0 -1
  284. package/dist/methods/serialize.js +0 -56
  285. package/dist/methods/serialize.js.map +0 -1
  286. package/dist/methods/types.d.ts +0 -37
  287. package/dist/methods/types.d.ts.map +0 -1
  288. package/dist/methods/types.js +0 -2
  289. package/dist/methods/types.js.map +0 -1
  290. package/dist/migration/db.d.ts +0 -17
  291. package/dist/migration/db.d.ts.map +0 -1
  292. package/dist/migration/db.js +0 -13
  293. package/dist/migration/db.js.map +0 -1
  294. package/dist/migration/index.d.ts +0 -11
  295. package/dist/migration/index.d.ts.map +0 -1
  296. package/dist/migration/index.js +0 -85
  297. package/dist/migration/index.js.map +0 -1
  298. package/dist/mongo.d.ts.map +0 -1
  299. package/dist/rate-limit/db.d.ts +0 -29
  300. package/dist/rate-limit/db.d.ts.map +0 -1
  301. package/dist/rate-limit/db.js +0 -25
  302. package/dist/rate-limit/db.js.map +0 -1
  303. package/dist/rate-limit/index.d.ts +0 -4
  304. package/dist/rate-limit/index.d.ts.map +0 -1
  305. package/dist/rate-limit/index.js +0 -6
  306. package/dist/rate-limit/index.js.map +0 -1
  307. package/dist/rate-limit/rules.d.ts +0 -22
  308. package/dist/rate-limit/rules.d.ts.map +0 -1
  309. package/dist/rate-limit/rules.js +0 -112
  310. package/dist/rate-limit/rules.js.map +0 -1
  311. package/dist/rate-limit/types.d.ts +0 -12
  312. package/dist/rate-limit/types.d.ts.map +0 -1
  313. package/dist/rate-limit/types.js +0 -2
  314. package/dist/rate-limit/types.js.map +0 -1
  315. package/dist/routes/handler.d.ts +0 -4
  316. package/dist/routes/handler.d.ts.map +0 -1
  317. package/dist/routes/handler.js +0 -66
  318. package/dist/routes/handler.js.map +0 -1
  319. package/dist/routes/types.d.ts +0 -45
  320. package/dist/routes/types.d.ts.map +0 -1
  321. package/dist/routes/types.js +0 -2
  322. package/dist/routes/types.js.map +0 -1
  323. package/dist/server.d.ts.map +0 -1
  324. package/dist/system/index.d.ts +0 -4
  325. package/dist/system/index.d.ts.map +0 -1
  326. package/dist/system/index.js +0 -21
  327. package/dist/system/index.js.map +0 -1
  328. package/dist/telemetry/index.d.ts +0 -11
  329. package/dist/telemetry/index.d.ts.map +0 -1
  330. package/dist/telemetry/index.js +0 -79
  331. package/dist/telemetry/index.js.map +0 -1
  332. package/dist/telemetry.d.ts.map +0 -1
  333. package/dist/time.d.ts +0 -8
  334. package/dist/time.d.ts.map +0 -1
  335. package/dist/time.js +0 -13
  336. package/dist/time.js.map +0 -1
  337. package/dist/types/email.d.ts +0 -25
  338. package/dist/types/email.d.ts.map +0 -1
  339. package/dist/types/email.js +0 -2
  340. package/dist/types/email.js.map +0 -1
  341. package/dist/types/index.d.ts +0 -14
  342. package/dist/types/index.d.ts.map +0 -1
  343. package/dist/types/index.js +0 -2
  344. package/dist/types/index.js.map +0 -1
  345. package/dist/types.d.ts.map +0 -1
  346. package/dist/utils/index.d.ts +0 -4
  347. package/dist/utils/index.d.ts.map +0 -1
  348. package/dist/utils/index.js +0 -15
  349. package/dist/utils/index.js.map +0 -1
  350. package/dist/viteServer.d.ts +0 -13
  351. package/dist/viteServer.d.ts.map +0 -1
  352. package/dist/viteServer.js +0 -132
  353. package/dist/viteServer.js.map +0 -1
  354. package/dist/websocket/client.d.ts +0 -9
  355. package/dist/websocket/client.d.ts.map +0 -1
  356. package/dist/websocket/client.js +0 -16
  357. package/dist/websocket/client.js.map +0 -1
  358. package/dist/websocket/clientChannel.d.ts +0 -9
  359. package/dist/websocket/clientChannel.d.ts.map +0 -1
  360. package/dist/websocket/clientChannel.js +0 -26
  361. package/dist/websocket/clientChannel.js.map +0 -1
  362. package/dist/websocket/serverChannel.d.ts +0 -14
  363. package/dist/websocket/serverChannel.d.ts.map +0 -1
  364. package/dist/websocket/serverChannel.js +0 -21
  365. package/dist/websocket/serverChannel.js.map +0 -1
  366. package/dist/websocket/socketio/client.d.ts +0 -4
  367. package/dist/websocket/socketio/client.d.ts.map +0 -1
  368. package/dist/websocket/socketio/client.js +0 -48
  369. package/dist/websocket/socketio/client.js.map +0 -1
  370. package/dist/websocket/socketio/server.d.ts +0 -10
  371. package/dist/websocket/socketio/server.d.ts.map +0 -1
  372. package/dist/websocket/socketio/server.js +0 -80
  373. package/dist/websocket/socketio/server.js.map +0 -1
  374. package/dist/websocket/types.d.ts +0 -45
  375. package/dist/websocket/types.d.ts.map +0 -1
  376. package/dist/websocket/types.js +0 -2
  377. package/dist/websocket/types.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/auth/profile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEjD,wBAAsB,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO;;;;;;;GAYjE"}
@@ -1,13 +0,0 @@
1
- import { usersCollection } from './db';
2
- export async function getOwnProfile(_args, { user }) {
3
- if (!user) {
4
- throw new Error('Not authenticated');
5
- }
6
- const profile = await usersCollection.requireById(user.id);
7
- return {
8
- handle: profile.handle,
9
- emails: profile.emails,
10
- authMethods: Object.keys(profile.authMethods || {}),
11
- };
12
- }
13
- //# sourceMappingURL=profile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/auth/profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAGvC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAW,EAAE,EAAE,IAAI,EAAW;IAChE,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE3D,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;KACpD,CAAC;AACJ,CAAC"}
@@ -1,3 +0,0 @@
1
- declare function getRouter(): import("express-serve-static-core").Router;
2
- export default getRouter;
3
- //# sourceMappingURL=github.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/auth/providers/github.ts"],"names":[],"mappings":"AA6HA,iBAAS,SAAS,+CA2DjB;AAED,eAAe,SAAS,CAAC"}
@@ -1,122 +0,0 @@
1
- import { getConfig } from '../../server';
2
- import { time } from '../../time';
3
- import { randomBytes } from 'crypto';
4
- import { Router } from 'express';
5
- import { getRedirectUri, handleOAuthUserAuthentication, validateOAuthCode, } from './oauth-common';
6
- async function exchangeCodeForToken(code, clientId, clientSecret, redirectUri) {
7
- const tokenResponse = await fetch('https://github.com/login/oauth/access_token', {
8
- method: 'POST',
9
- headers: {
10
- 'Content-Type': 'application/json',
11
- Accept: 'application/json',
12
- },
13
- body: JSON.stringify({
14
- client_id: clientId,
15
- client_secret: clientSecret,
16
- code,
17
- redirect_uri: redirectUri,
18
- }),
19
- });
20
- if (!tokenResponse.ok) {
21
- throw new Error(`Failed to exchange code for token: ${tokenResponse.statusText}`);
22
- }
23
- return tokenResponse.json();
24
- }
25
- async function fetchGitHubUserInfo(accessToken) {
26
- const userInfoResponse = await fetch('https://api.github.com/user', {
27
- headers: {
28
- Authorization: `Bearer ${accessToken}`,
29
- Accept: 'application/vnd.github.v3+json',
30
- },
31
- });
32
- if (!userInfoResponse.ok) {
33
- throw new Error(`Failed to fetch user info: ${userInfoResponse.statusText}`);
34
- }
35
- return userInfoResponse.json();
36
- }
37
- async function handleGitHubAuthenticationCallback(req, res) {
38
- const code = validateOAuthCode(req.query.code);
39
- const state = req.query.state;
40
- const storedState = req.cookies.authStateGithub;
41
- if (!code) {
42
- res.status(400).json({ error: 'Missing authorization code' });
43
- return;
44
- }
45
- if (!state || !storedState || state !== storedState) {
46
- res.status(400).json({ error: 'Invalid OAuth state - possible CSRF attack' });
47
- return;
48
- }
49
- res.clearCookie('authStateGithub');
50
- const githubClientId = String(getConfig('_system.user.auth.github.clientId'));
51
- const githubClientSecret = String(getConfig('_system.user.auth.github.clientSecret'));
52
- const redirectUri = getRedirectUri('github');
53
- try {
54
- // Exchange code for access token
55
- const tokenData = await exchangeCodeForToken(code, githubClientId, githubClientSecret, redirectUri);
56
- // Fetch user info
57
- const githubUser = await fetchGitHubUserInfo(tokenData.access_token);
58
- // Use the public email from user profile
59
- const githubEmail = githubUser.email || '';
60
- if (!githubEmail) {
61
- res.status(400).json({
62
- error: 'Unable to retrieve email from GitHub. Please ensure your email is public or grant email permissions.',
63
- });
64
- return;
65
- }
66
- const userData = {
67
- id: String(githubUser.id),
68
- email: githubEmail,
69
- emailVerified: true, // Assume public email is verified
70
- providerName: 'github',
71
- };
72
- await handleOAuthUserAuthentication(req, res, userData);
73
- }
74
- catch (error) {
75
- console.error('GitHub OAuth error:', error);
76
- res.status(500).json({ error: 'Authentication failed' });
77
- }
78
- }
79
- function getRouter() {
80
- const githubAuthRouter = Router();
81
- // Middleware to check if GitHub auth is enabled and configured
82
- const checkGitHubEnabled = (_req, res, next) => {
83
- const githubEnabled = Boolean(getConfig('_system.user.auth.github.enabled'));
84
- const githubClientId = String(getConfig('_system.user.auth.github.clientId'));
85
- const githubClientSecret = String(getConfig('_system.user.auth.github.clientSecret'));
86
- if (!githubEnabled || !githubClientId || !githubClientSecret) {
87
- res.status(503).json({ error: 'GitHub authentication is not configured' });
88
- return;
89
- }
90
- next();
91
- };
92
- // Initiate OAuth flow
93
- githubAuthRouter.get('/api/_internal/auth/github', checkGitHubEnabled, (req, res) => {
94
- const githubClientId = String(getConfig('_system.user.auth.github.clientId'));
95
- const redirectUri = getRedirectUri('github');
96
- const githubScopes = getConfig('_system.user.auth.github.scopes');
97
- const scopes = githubScopes
98
- ? String(githubScopes)
99
- .split(',')
100
- .map((s) => s.trim())
101
- .join(' ')
102
- : 'user:email';
103
- const state = randomBytes(32).toString('hex');
104
- res.cookie('authStateGithub', state, {
105
- httpOnly: true,
106
- secure: process.env.NODE_ENV === 'production',
107
- sameSite: 'lax',
108
- maxAge: time.minutes(10), // 10 minutes
109
- });
110
- const authUrl = new URL('https://github.com/login/oauth/authorize');
111
- authUrl.searchParams.append('client_id', githubClientId);
112
- authUrl.searchParams.append('redirect_uri', redirectUri);
113
- authUrl.searchParams.append('scope', scopes);
114
- authUrl.searchParams.append('state', state);
115
- res.redirect(authUrl.toString());
116
- });
117
- // Handle OAuth callback
118
- githubAuthRouter.get('/api/_internal/auth/github/callback', checkGitHubEnabled, handleGitHubAuthenticationCallback);
119
- return githubAuthRouter;
120
- }
121
- export default getRouter;
122
- //# sourceMappingURL=github.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/auth/providers/github.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,MAAM,EAAkD,MAAM,SAAS,CAAC;AACjF,OAAO,EACL,cAAc,EACd,6BAA6B,EAC7B,iBAAiB,GAElB,MAAM,gBAAgB,CAAC;AAgBxB,KAAK,UAAU,oBAAoB,CACjC,IAAY,EACZ,QAAgB,EAChB,YAAoB,EACpB,WAAmB;IAEnB,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,6CAA6C,EAAE;QAC/E,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,MAAM,EAAE,kBAAkB;SAC3B;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,SAAS,EAAE,QAAQ;YACnB,aAAa,EAAE,YAAY;YAC3B,IAAI;YACJ,YAAY,EAAE,WAAW;SAC1B,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,sCAAsC,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,OAAO,aAAa,CAAC,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,WAAmB;IACpD,MAAM,gBAAgB,GAAG,MAAM,KAAK,CAAC,6BAA6B,EAAE;QAClE,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,WAAW,EAAE;YACtC,MAAM,EAAE,gCAAgC;SACzC;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,8BAA8B,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,OAAO,gBAAgB,CAAC,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,KAAK,UAAU,kCAAkC,CAAC,GAAY,EAAE,GAAa;IAC3E,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAe,CAAC;IACxC,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC;IAEhD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC,CAAC;QAC9D,OAAO;IACT,CAAC;IAED,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;QACpD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,4CAA4C,EAAE,CAAC,CAAC;QAC9E,OAAO;IACT,CAAC;IAED,GAAG,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAEnC,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAC9E,MAAM,kBAAkB,GAAG,MAAM,CAAC,SAAS,CAAC,uCAAuC,CAAC,CAAC,CAAC;IACtF,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAE7C,IAAI,CAAC;QACH,iCAAiC;QACjC,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAC1C,IAAI,EACJ,cAAc,EACd,kBAAkB,EAClB,WAAW,CACZ,CAAC;QAEF,kBAAkB;QAClB,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAErE,yCAAyC;QACzC,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC;QAE3C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EACH,sGAAsG;aACzG,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAkB;YAC9B,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YACzB,KAAK,EAAE,WAAW;YAClB,aAAa,EAAE,IAAI,EAAE,kCAAkC;YACvD,YAAY,EAAE,QAAQ;SACvB,CAAC;QAEF,MAAM,6BAA6B,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;QAC5C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,gBAAgB,GAAG,MAAM,EAAE,CAAC;IAElC,+DAA+D;IAC/D,MAAM,kBAAkB,GAAG,CAAC,IAAa,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAC9E,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAC7E,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAC9E,MAAM,kBAAkB,GAAG,MAAM,CAAC,SAAS,CAAC,uCAAuC,CAAC,CAAC,CAAC;QAEtF,IAAI,CAAC,aAAa,IAAI,CAAC,cAAc,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7D,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAC,CAAC;YAC3E,OAAO;QACT,CAAC;QAED,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;IAEF,sBAAsB;IACtB,gBAAgB,CAAC,GAAG,CAClB,4BAA4B,EAC5B,kBAAkB,EAClB,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;QAC9B,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAC9E,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,YAAY,GAAG,SAAS,CAAC,iCAAiC,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,YAAY;YACzB,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;iBACjB,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBACpB,IAAI,CAAC,GAAG,CAAC;YACd,CAAC,CAAC,YAAY,CAAC;QAEjB,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAE9C,GAAG,CAAC,MAAM,CAAC,iBAAiB,EAAE,KAAK,EAAE;YACnC,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;YAC7C,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,aAAa;SACxC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACpE,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QACzD,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QACzD,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7C,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAE5C,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACnC,CAAC,CACF,CAAC;IAEF,wBAAwB;IACxB,gBAAgB,CAAC,GAAG,CAClB,qCAAqC,EACrC,kBAAkB,EAClB,kCAAkC,CACnC,CAAC;IAEF,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,eAAe,SAAS,CAAC"}
@@ -1,3 +0,0 @@
1
- declare function getRouter(): import("express-serve-static-core").Router;
2
- export default getRouter;
3
- //# sourceMappingURL=google.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../../src/auth/providers/google.ts"],"names":[],"mappings":"AAmHA,iBAAS,SAAS,+CAsDjB;AAED,eAAe,SAAS,CAAC"}
@@ -1,108 +0,0 @@
1
- import { getConfig } from '../../server';
2
- import { time } from '../../time';
3
- import { randomBytes } from 'crypto';
4
- import { Router } from 'express';
5
- import { getRedirectUri, handleOAuthUserAuthentication, validateOAuthCode, } from './oauth-common';
6
- async function exchangeCodeForToken(code, clientId, clientSecret, redirectUri) {
7
- const tokenResponse = await fetch('https://oauth2.googleapis.com/token', {
8
- method: 'POST',
9
- headers: {
10
- 'Content-Type': 'application/x-www-form-urlencoded',
11
- },
12
- body: new URLSearchParams({
13
- code,
14
- client_id: clientId,
15
- client_secret: clientSecret,
16
- redirect_uri: redirectUri,
17
- grant_type: 'authorization_code',
18
- }),
19
- });
20
- if (!tokenResponse.ok) {
21
- throw new Error(`Failed to exchange code for token: ${tokenResponse.statusText}`);
22
- }
23
- return tokenResponse.json();
24
- }
25
- async function fetchGoogleUserInfo(accessToken) {
26
- const userInfoResponse = await fetch('https://www.googleapis.com/oauth2/v2/userinfo', {
27
- headers: {
28
- Authorization: `Bearer ${accessToken}`,
29
- },
30
- });
31
- if (!userInfoResponse.ok) {
32
- throw new Error(`Failed to fetch user info: ${userInfoResponse.statusText}`);
33
- }
34
- return userInfoResponse.json();
35
- }
36
- async function handleGoogleAuthenticationCallback(req, res) {
37
- const code = validateOAuthCode(req.query.code);
38
- const state = req.query.state;
39
- const storedState = req.cookies.authStateGoogle;
40
- if (!code) {
41
- res.status(400).json({ error: 'Missing authorization code' });
42
- return;
43
- }
44
- if (!state || !storedState || state !== storedState) {
45
- res.status(400).json({ error: 'Invalid OAuth state - possible CSRF attack' });
46
- return;
47
- }
48
- res.clearCookie('authStateGoogle');
49
- const googleClientId = String(getConfig('_system.user.auth.google.clientId'));
50
- const googleClientSecret = String(getConfig('_system.user.auth.google.clientSecret'));
51
- const redirectUri = getRedirectUri('google');
52
- try {
53
- // Exchange code for tokens
54
- const tokenData = await exchangeCodeForToken(code, googleClientId, googleClientSecret, redirectUri);
55
- // Fetch user info
56
- const googleUser = await fetchGoogleUserInfo(tokenData.access_token);
57
- const userData = {
58
- id: googleUser.id,
59
- email: googleUser.email,
60
- emailVerified: googleUser.verified_email,
61
- providerName: 'google',
62
- };
63
- await handleOAuthUserAuthentication(req, res, userData);
64
- }
65
- catch (error) {
66
- console.error('Google OAuth error:', error);
67
- res.status(500).json({ error: 'Authentication failed' });
68
- }
69
- }
70
- function getRouter() {
71
- const googleAuthRouter = Router();
72
- // Middleware to check if Google auth is enabled and configured
73
- const checkGoogleEnabled = (_req, res, next) => {
74
- const googleEnabled = Boolean(getConfig('_system.user.auth.google.enabled'));
75
- const googleClientId = String(getConfig('_system.user.auth.google.clientId'));
76
- const googleClientSecret = String(getConfig('_system.user.auth.google.clientSecret'));
77
- if (!googleEnabled || !googleClientId || !googleClientSecret) {
78
- res.status(503).json({ error: 'Google authentication is not configured' });
79
- return;
80
- }
81
- next();
82
- };
83
- // Initiate OAuth flow
84
- googleAuthRouter.get('/api/_internal/auth/google', checkGoogleEnabled, (req, res) => {
85
- const googleClientId = String(getConfig('_system.user.auth.google.clientId'));
86
- const redirectUri = getRedirectUri('google');
87
- const state = randomBytes(32).toString('hex');
88
- res.cookie('authStateGoogle', state, {
89
- httpOnly: true,
90
- secure: process.env.NODE_ENV === 'production',
91
- sameSite: 'lax',
92
- maxAge: time.minutes(10), // 10 minutes
93
- });
94
- const authUrl = new URL('https://accounts.google.com/o/oauth2/v2/auth');
95
- authUrl.searchParams.append('client_id', googleClientId);
96
- authUrl.searchParams.append('redirect_uri', redirectUri);
97
- authUrl.searchParams.append('response_type', 'code');
98
- authUrl.searchParams.append('scope', 'profile email');
99
- authUrl.searchParams.append('access_type', 'online');
100
- authUrl.searchParams.append('state', state);
101
- res.redirect(authUrl.toString());
102
- });
103
- // Handle OAuth callback
104
- googleAuthRouter.get('/api/_internal/auth/google/callback', checkGoogleEnabled, handleGoogleAuthenticationCallback);
105
- return googleAuthRouter;
106
- }
107
- export default getRouter;
108
- //# sourceMappingURL=google.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"google.js","sourceRoot":"","sources":["../../../src/auth/providers/google.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- import { type Request, type Response } from 'express';
2
- import { ObjectId } from 'mongodb';
3
- export interface OAuthUserData {
4
- id: string;
5
- email: string;
6
- emailVerified: boolean;
7
- providerName: 'google' | 'github';
8
- }
9
- export declare function authenticateUser(res: Response, userId: ObjectId): Promise<void>;
10
- export declare function getRedirectUri(provider: string): string;
11
- export declare function handleOAuthUserAuthentication(req: Request, res: Response, userData: OAuthUserData): Promise<void>;
12
- export declare function validateOAuthCode(code: unknown): string | null;
13
- //# sourceMappingURL=oauth-common.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oauth-common.d.ts","sourceRoot":"","sources":["../../../src/auth/providers/oauth-common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAOnC,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,QAAQ,GAAG,QAAQ,CAAC;CACnC;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,iBAUrE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAsB,6BAA6B,CACjD,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC,IAAI,CAAC,CAqGf;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAK9D"}
@@ -1,109 +0,0 @@
1
- import { usersCollection } from '../../auth/db';
2
- import { createSession } from '../../auth/session';
3
- import { getAuthConfig } from '../../app/authConfig';
4
- import { getCallContext } from '../../app/server';
5
- import { getConfig } from '../../config/server';
6
- export async function authenticateUser(res, userId) {
7
- const { authToken } = await createSession(userId);
8
- res.cookie('authToken', authToken, {
9
- httpOnly: true,
10
- secure: process.env.NODE_ENV === 'production',
11
- sameSite: 'strict',
12
- });
13
- res.status(301);
14
- res.redirect('/');
15
- }
16
- export function getRedirectUri(provider) {
17
- return `${getConfig('_system.site.url')}/api/_internal/auth/${provider}/callback`;
18
- }
19
- export async function handleOAuthUserAuthentication(req, res, userData) {
20
- const existingUser = await usersCollection.findOne({
21
- [`authMethods.${userData.providerName}.id`]: userData.id,
22
- });
23
- const { session, connectionInfo } = await getCallContext(req);
24
- try {
25
- if (existingUser) {
26
- await authenticateUser(res, existingUser._id);
27
- getAuthConfig().onAfterLogin?.({
28
- user: existingUser,
29
- session,
30
- connectionInfo,
31
- });
32
- getAuthConfig().login?.onSuccess?.(existingUser);
33
- return;
34
- }
35
- }
36
- catch (error) {
37
- if (error instanceof Error) {
38
- getAuthConfig().login?.onError?.(error);
39
- getAuthConfig().onLoginError?.({
40
- error,
41
- session,
42
- connectionInfo,
43
- });
44
- }
45
- throw error;
46
- }
47
- try {
48
- if (!userData.email) {
49
- res.status(400).json({
50
- error: `Email address is required for ${userData.providerName} authentication.`,
51
- });
52
- return;
53
- }
54
- const existingUserByEmail = await usersCollection.findOne({ 'emails.address': userData.email }, { collation: { locale: 'en', strength: 2 } });
55
- // TODO: check if the email is verified
56
- if (existingUserByEmail) {
57
- // TODO: handle case with an HTML page
58
- res.status(400).json({
59
- error: 'User with this email already exists. Please log in instead.',
60
- });
61
- return;
62
- }
63
- // If the user does not exist, create a new user
64
- const newUser = await usersCollection.insertOne({
65
- handle: userData.email,
66
- status: 'active',
67
- emails: [
68
- {
69
- address: userData.email,
70
- verified: userData.emailVerified,
71
- },
72
- ],
73
- createdAt: new Date(),
74
- authMethods: {
75
- [userData.providerName]: {
76
- id: userData.id,
77
- },
78
- },
79
- });
80
- await authenticateUser(res, newUser.insertedId);
81
- const userDocument = await usersCollection.findOne({ _id: newUser.insertedId }, { readPreference: 'primary' });
82
- if (userDocument) {
83
- getAuthConfig().onAfterSignup?.({
84
- user: userDocument,
85
- session,
86
- connectionInfo,
87
- });
88
- getAuthConfig().signup?.onSuccess?.(userDocument);
89
- }
90
- }
91
- catch (error) {
92
- if (error instanceof Error) {
93
- getAuthConfig().onSignupError?.({
94
- error,
95
- session,
96
- connectionInfo,
97
- });
98
- getAuthConfig().signup?.onError?.(error);
99
- }
100
- throw error;
101
- }
102
- }
103
- export function validateOAuthCode(code) {
104
- if (!code || typeof code !== 'string') {
105
- return null;
106
- }
107
- return code;
108
- }
109
- //# sourceMappingURL=oauth-common.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oauth-common.js","sourceRoot":"","sources":["../../../src/auth/providers/oauth-common.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import { Args, Context } from '../methods/types';
2
- export declare function handleSendResetPasswordToken(args: Args, { connectionInfo }: Context): Promise<{
3
- success: boolean;
4
- message: string;
5
- }>;
6
- export declare function handleResetPassword(args: Args, {}: Context): Promise<{
7
- success: boolean;
8
- message: string;
9
- }>;
10
- //# sourceMappingURL=resetPassword.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resetPassword.d.ts","sourceRoot":"","sources":["../../src/auth/resetPassword.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAqChD,wBAAsB,4BAA4B,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,OAAO;;;GAyDzF;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO;;;GAuChE"}
@@ -1,108 +0,0 @@
1
- import { z } from 'zod';
2
- import { randomBytes } from 'crypto';
3
- import { usersCollection, resetPasswordTokensCollection } from './db';
4
- import { getEmailConfig } from '../app/emailConfig';
5
- import { time } from '../time';
6
- import { htmlToText } from '../utils';
7
- import { validateEmail, validatePassword } from './validators';
8
- import { hashPassword } from './password';
9
- function resolveUrl(baseUrl, configuredUrl) {
10
- if (!configuredUrl) {
11
- return baseUrl;
12
- }
13
- if (configuredUrl.startsWith('http://') || configuredUrl.startsWith('https://')) {
14
- return configuredUrl;
15
- }
16
- // Handle relative URL
17
- return `${baseUrl}${configuredUrl.startsWith('/') ? '' : '/'}${configuredUrl}`;
18
- }
19
- function defaultPasswordResetTemplate({ email, resetUrl }) {
20
- return `
21
- <p>Hi,</p>
22
- <p>We received a request to reset your password for ${email}.</p>
23
- <p>Click the link below to reset your password:</p>
24
- <p><a href="${resetUrl}">${resetUrl}</a></p>
25
- <p>This link will expire in 1 hour.</p>
26
- <p>If you did not request this password reset, please ignore this email.</p>
27
- `;
28
- }
29
- const passwordResetSent = {
30
- success: true,
31
- message: 'If an account with that email exists, a password reset link has been sent',
32
- };
33
- export async function handleSendResetPasswordToken(args, { connectionInfo }) {
34
- const email = validateEmail(args.email);
35
- // Find user by email
36
- const userDoc = await usersCollection.findOne({ 'emails.address': email, status: { $nin: ['deleted', 'disabled'] } }, { collation: { locale: 'en', strength: 2 } });
37
- if (!userDoc) {
38
- // For security, don't reveal if email exists or not
39
- return passwordResetSent;
40
- }
41
- // Check if user has password auth method
42
- if (!userDoc.authMethods?.password) {
43
- return passwordResetSent;
44
- }
45
- const emailProvider = getEmailConfig().provider;
46
- if (!emailProvider) {
47
- throw new Error('Email provider is not configured');
48
- }
49
- // Generate reset token
50
- const resetToken = randomBytes(32).toString('hex');
51
- const now = Date.now();
52
- const createdAt = new Date(now);
53
- const expiresAt = new Date(now + time.hours(1)); // 1 hour expiry
54
- // Store reset token
55
- await resetPasswordTokensCollection.insertOne({
56
- userId: userDoc._id,
57
- token: resetToken,
58
- createdAt,
59
- expiresAt,
60
- });
61
- // Build reset URL
62
- const baseUrl = process.env.MODELENCE_SITE_URL || connectionInfo?.baseUrl;
63
- const resetPasswordUrl = resolveUrl(baseUrl, getEmailConfig().passwordReset?.redirectUrl);
64
- const resetUrl = `${resetPasswordUrl}?token=${resetToken}`;
65
- // Send email
66
- const template = getEmailConfig()?.passwordReset?.template || defaultPasswordResetTemplate;
67
- const htmlTemplate = template({ email, resetUrl, name: '' });
68
- const textContent = htmlToText(htmlTemplate);
69
- await emailProvider.sendEmail({
70
- to: email,
71
- from: getEmailConfig()?.from || 'noreply@modelence.com',
72
- subject: getEmailConfig()?.passwordReset?.subject || 'Reset your password',
73
- text: textContent,
74
- html: htmlTemplate,
75
- });
76
- return passwordResetSent;
77
- }
78
- export async function handleResetPassword(args, {}) {
79
- const token = z.string().parse(args.token);
80
- const password = validatePassword(args.password);
81
- // Find the reset token
82
- const resetTokenDoc = await resetPasswordTokensCollection.findOne({ token });
83
- if (!resetTokenDoc) {
84
- throw new Error('Invalid or expired reset token');
85
- }
86
- // Check if token is expired
87
- if (resetTokenDoc.expiresAt < new Date()) {
88
- await resetPasswordTokensCollection.deleteOne({ token });
89
- throw new Error('Reset token has expired');
90
- }
91
- // Find the user
92
- const userDoc = await usersCollection.findOne({ _id: resetTokenDoc.userId });
93
- if (!userDoc) {
94
- throw new Error('User not found');
95
- }
96
- // Hash the new password
97
- const hash = await hashPassword(password);
98
- // Update user's password
99
- await usersCollection.updateOne({ _id: userDoc._id }, {
100
- $set: {
101
- 'authMethods.password.hash': hash,
102
- },
103
- });
104
- // Delete the used reset token
105
- await resetPasswordTokensCollection.deleteOne({ token });
106
- return { success: true, message: 'Password has been reset successfully' };
107
- }
108
- //# sourceMappingURL=resetPassword.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resetPassword.js","sourceRoot":"","sources":["../../src/auth/resetPassword.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAGrC,OAAO,EAAE,eAAe,EAAE,6BAA6B,EAAE,MAAM,MAAM,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,SAAS,UAAU,CAAC,OAAe,EAAE,aAAsB;IACzD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAChF,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,sBAAsB;IACtB,OAAO,GAAG,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,aAAa,EAAE,CAAC;AACjF,CAAC;AAED,SAAS,4BAA4B,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAuC;IAC5F,OAAO;;0DAEiD,KAAK;;kBAE7C,QAAQ,KAAK,QAAQ;;;GAGpC,CAAC;AACJ,CAAC;AAED,MAAM,iBAAiB,GAAG;IACxB,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,2EAA2E;CACrF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,IAAU,EAAE,EAAE,cAAc,EAAW;IACxF,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;IAElD,qBAAqB;IACrB,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,OAAO,CAC3C,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,EAAE,EACtE,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAC7C,CAAC;IAEF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,oDAAoD;QACpD,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,yCAAyC;IACzC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC;QACnC,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,MAAM,aAAa,GAAG,cAAc,EAAE,CAAC,QAAQ,CAAC;IAChD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,uBAAuB;IACvB,MAAM,UAAU,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;IAEjE,oBAAoB;IACpB,MAAM,6BAA6B,CAAC,SAAS,CAAC;QAC5C,MAAM,EAAE,OAAO,CAAC,GAAG;QACnB,KAAK,EAAE,UAAU;QACjB,SAAS;QACT,SAAS;KACV,CAAC,CAAC;IAEH,kBAAkB;IAClB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,cAAc,EAAE,OAAO,CAAC;IAC1E,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAQ,EAAE,cAAc,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IAC3F,MAAM,QAAQ,GAAG,GAAG,gBAAgB,UAAU,UAAU,EAAE,CAAC;IAE3D,aAAa;IACb,MAAM,QAAQ,GAAG,cAAc,EAAE,EAAE,aAAa,EAAE,QAAQ,IAAI,4BAA4B,CAAC;IAC3F,MAAM,YAAY,GAAG,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IAE7C,MAAM,aAAa,CAAC,SAAS,CAAC;QAC5B,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,cAAc,EAAE,EAAE,IAAI,IAAI,uBAAuB;QACvD,OAAO,EAAE,cAAc,EAAE,EAAE,aAAa,EAAE,OAAO,IAAI,qBAAqB;QAC1E,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,YAAY;KACnB,CAAC,CAAC;IAEH,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAU,EAAE,EAAW;IAC/D,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAkB,CAAC,CAAC;IAE3D,uBAAuB;IACvB,MAAM,aAAa,GAAG,MAAM,6BAA6B,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7E,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,4BAA4B;IAC5B,IAAI,aAAa,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;QACzC,MAAM,6BAA6B,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,gBAAgB;IAChB,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACpC,CAAC;IAED,wBAAwB;IACxB,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;IAE1C,yBAAyB;IACzB,MAAM,eAAe,CAAC,SAAS,CAC7B,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EACpB;QACE,IAAI,EAAE;YACJ,2BAA2B,EAAE,IAAI;SAClC;KACF,CACF,CAAC;IAEF,8BAA8B;IAC9B,MAAM,6BAA6B,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAEzD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,sCAAsC,EAAE,CAAC;AAC5E,CAAC"}
@@ -1,8 +0,0 @@
1
- import { RoleDefinition, Role, Permission } from './types';
2
- export declare function initRoles(roles: Record<Role, RoleDefinition>, _defaultRoles: Record<string, Role>): void;
3
- export declare function getUnauthenticatedRoles(): string[];
4
- export declare function getDefaultAuthenticatedRoles(): string[];
5
- export declare function hasAccess(roles: Role[], requiredPermissions: Permission[]): boolean;
6
- export declare function requireAccess(roles: Role[], requiredPermissions: Permission[]): void;
7
- export declare function hasPermission(roles: Role[], permission: Permission): boolean;
8
- //# sourceMappingURL=role.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"role.d.ts","sourceRoot":"","sources":["../../src/auth/role.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,IAAI,EAAgB,UAAU,EAAE,MAAM,SAAS,CAAC;AAQzE,wBAAgB,SAAS,CACvB,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,EACnC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,QAQpC;AAED,wBAAgB,uBAAuB,aAEtC;AAED,wBAAgB,4BAA4B,aAE3C;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,mBAAmB,EAAE,UAAU,EAAE,WAEzE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,mBAAmB,EAAE,UAAU,EAAE,QAQ7E;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,UAAU,WAUlE"}
package/dist/auth/role.js DELETED
@@ -1,37 +0,0 @@
1
- const roleMap = new Map();
2
- const defaultRoles = {
3
- authenticated: null,
4
- unauthenticated: null,
5
- };
6
- export function initRoles(roles, _defaultRoles) {
7
- defaultRoles.authenticated = _defaultRoles.authenticated;
8
- defaultRoles.unauthenticated = _defaultRoles.unauthenticated;
9
- for (const [name, definition] of Object.entries(roles)) {
10
- roleMap.set(name, definition);
11
- }
12
- }
13
- export function getUnauthenticatedRoles() {
14
- return defaultRoles.unauthenticated ? [defaultRoles.unauthenticated] : [];
15
- }
16
- export function getDefaultAuthenticatedRoles() {
17
- return defaultRoles.authenticated ? [defaultRoles.authenticated] : [];
18
- }
19
- export function hasAccess(roles, requiredPermissions) {
20
- return requiredPermissions.every((permission) => hasPermission(roles, permission));
21
- }
22
- export function requireAccess(roles, requiredPermissions) {
23
- const missingPermission = requiredPermissions.find((permission) => !hasPermission(roles, permission));
24
- if (missingPermission) {
25
- throw new Error(`Access denied - missing permission: '${missingPermission}'`);
26
- }
27
- }
28
- export function hasPermission(roles, permission) {
29
- for (const role of roles) {
30
- const definition = roleMap.get(role);
31
- if (definition && definition.permissions.includes(permission)) {
32
- return true;
33
- }
34
- }
35
- return false;
36
- }
37
- //# sourceMappingURL=role.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"role.js","sourceRoot":"","sources":["../../src/auth/role.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;AAChD,MAAM,YAAY,GAAiB;IACjC,aAAa,EAAE,IAAI;IACnB,eAAe,EAAE,IAAI;CACtB,CAAC;AAEF,MAAM,UAAU,SAAS,CACvB,KAAmC,EACnC,aAAmC;IAEnC,YAAY,CAAC,aAAa,GAAG,aAAa,CAAC,aAAa,CAAC;IACzD,YAAY,CAAC,eAAe,GAAG,aAAa,CAAC,eAAe,CAAC;IAE7D,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,OAAO,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC1C,OAAO,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,mBAAiC;IACxE,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,mBAAiC;IAC5E,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,IAAI,CAChD,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,CAClD,CAAC;IAEF,IAAI,iBAAiB,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,wCAAwC,iBAAiB,GAAG,CAAC,CAAC;IAChF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,UAAsB;IACjE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,UAAU,IAAI,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9D,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,24 +0,0 @@
1
- import { ObjectId } from 'mongodb';
2
- import { Module } from '../app/module';
3
- import { Store } from '../data/store';
4
- import { Session } from './types';
5
- export declare const sessionsCollection: Store<{
6
- authToken: import("zod").ZodString;
7
- createdAt: import("zod").ZodDate;
8
- expiresAt: import("zod").ZodDate;
9
- userId: import("zod").ZodNullable<import("zod").ZodType<ObjectId, import("zod").ZodTypeDef, ObjectId>>;
10
- }, Record<string, (this: Pick<import("../types").InferDocumentType<{
11
- authToken: import("zod").ZodString;
12
- createdAt: import("zod").ZodDate;
13
- expiresAt: import("zod").ZodDate;
14
- userId: import("zod").ZodNullable<import("zod").ZodType<ObjectId, import("zod").ZodTypeDef, ObjectId>>;
15
- }>, "authToken" | "createdAt" | "expiresAt" | "userId"> & {
16
- _id: ObjectId;
17
- }, ...args: any[]) => any>>;
18
- export declare function obtainSession(authToken: string | null): Promise<Session>;
19
- export declare function setSessionUser(authToken: string, userId: ObjectId): Promise<void>;
20
- export declare function clearSessionUser(authToken: string): Promise<void>;
21
- export declare function createSession(userId?: ObjectId | null): Promise<Session>;
22
- declare const _default: Module;
23
- export default _default;
24
- //# sourceMappingURL=session.d.ts.map