@digitaldefiance/node-express-suite-mongo 4.23.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 (390) hide show
  1. package/README.md +152 -0
  2. package/package.json +51 -0
  3. package/src/__tests__/fixtures/index.d.ts +2 -0
  4. package/src/__tests__/fixtures/index.d.ts.map +1 -0
  5. package/src/__tests__/fixtures/index.js +5 -0
  6. package/src/__tests__/fixtures/index.js.map +1 -0
  7. package/src/__tests__/fixtures/model-mocks.mock.d.ts +12 -0
  8. package/src/__tests__/fixtures/model-mocks.mock.d.ts.map +1 -0
  9. package/src/__tests__/fixtures/model-mocks.mock.js +102 -0
  10. package/src/__tests__/fixtures/model-mocks.mock.js.map +1 -0
  11. package/src/__tests__/helpers/application.mock.d.ts +4 -0
  12. package/src/__tests__/helpers/application.mock.d.ts.map +1 -0
  13. package/src/__tests__/helpers/application.mock.js +35 -0
  14. package/src/__tests__/helpers/application.mock.js.map +1 -0
  15. package/src/__tests__/helpers/index.d.ts +5 -0
  16. package/src/__tests__/helpers/index.d.ts.map +1 -0
  17. package/src/__tests__/helpers/index.js +8 -0
  18. package/src/__tests__/helpers/index.js.map +1 -0
  19. package/src/__tests__/helpers/mongoose-memory.d.ts +14 -0
  20. package/src/__tests__/helpers/mongoose-memory.d.ts.map +1 -0
  21. package/src/__tests__/helpers/mongoose-memory.js +49 -0
  22. package/src/__tests__/helpers/mongoose-memory.js.map +1 -0
  23. package/src/__tests__/helpers/setup-test-env.d.ts +13 -0
  24. package/src/__tests__/helpers/setup-test-env.d.ts.map +1 -0
  25. package/src/__tests__/helpers/setup-test-env.js +131 -0
  26. package/src/__tests__/helpers/setup-test-env.js.map +1 -0
  27. package/src/__tests__/index.d.ts +3 -0
  28. package/src/__tests__/index.d.ts.map +1 -0
  29. package/src/__tests__/index.js +6 -0
  30. package/src/__tests__/index.js.map +1 -0
  31. package/src/builders/application-builder.d.ts +38 -0
  32. package/src/builders/application-builder.d.ts.map +1 -0
  33. package/src/builders/application-builder.js +82 -0
  34. package/src/builders/application-builder.js.map +1 -0
  35. package/src/builders/index.d.ts +2 -0
  36. package/src/builders/index.d.ts.map +1 -0
  37. package/src/builders/index.js +5 -0
  38. package/src/builders/index.js.map +1 -0
  39. package/src/controllers/index.d.ts +3 -0
  40. package/src/controllers/index.d.ts.map +1 -0
  41. package/src/controllers/index.js +6 -0
  42. package/src/controllers/index.js.map +1 -0
  43. package/src/controllers/mongo-base.d.ts +55 -0
  44. package/src/controllers/mongo-base.d.ts.map +1 -0
  45. package/src/controllers/mongo-base.js +108 -0
  46. package/src/controllers/mongo-base.js.map +1 -0
  47. package/src/controllers/user.d.ts +61 -0
  48. package/src/controllers/user.d.ts.map +1 -0
  49. package/src/controllers/user.js +944 -0
  50. package/src/controllers/user.js.map +1 -0
  51. package/src/documents/base.d.ts +15 -0
  52. package/src/documents/base.d.ts.map +1 -0
  53. package/src/documents/base.js +8 -0
  54. package/src/documents/base.js.map +1 -0
  55. package/src/documents/email-token.d.ts +15 -0
  56. package/src/documents/email-token.d.ts.map +1 -0
  57. package/src/documents/email-token.js +8 -0
  58. package/src/documents/email-token.js.map +1 -0
  59. package/src/documents/index.d.ts +8 -0
  60. package/src/documents/index.d.ts.map +1 -0
  61. package/src/documents/index.js +3 -0
  62. package/src/documents/index.js.map +1 -0
  63. package/src/documents/mnemonic.d.ts +16 -0
  64. package/src/documents/mnemonic.d.ts.map +1 -0
  65. package/src/documents/mnemonic.js +8 -0
  66. package/src/documents/mnemonic.js.map +1 -0
  67. package/src/documents/role.d.ts +15 -0
  68. package/src/documents/role.d.ts.map +1 -0
  69. package/src/documents/role.js +8 -0
  70. package/src/documents/role.js.map +1 -0
  71. package/src/documents/used-direct-login-token.d.ts +16 -0
  72. package/src/documents/used-direct-login-token.d.ts.map +1 -0
  73. package/src/documents/used-direct-login-token.js +8 -0
  74. package/src/documents/used-direct-login-token.js.map +1 -0
  75. package/src/documents/user-role.d.ts +16 -0
  76. package/src/documents/user-role.d.ts.map +1 -0
  77. package/src/documents/user-role.js +8 -0
  78. package/src/documents/user-role.js.map +1 -0
  79. package/src/documents/user.d.ts +16 -0
  80. package/src/documents/user.d.ts.map +1 -0
  81. package/src/documents/user.js +8 -0
  82. package/src/documents/user.js.map +1 -0
  83. package/src/enumerations/base-model-name.d.ts +43 -0
  84. package/src/enumerations/base-model-name.d.ts.map +1 -0
  85. package/src/enumerations/base-model-name.js +39 -0
  86. package/src/enumerations/base-model-name.js.map +1 -0
  87. package/src/enumerations/index.d.ts +3 -0
  88. package/src/enumerations/index.d.ts.map +1 -0
  89. package/src/enumerations/index.js +6 -0
  90. package/src/enumerations/index.js.map +1 -0
  91. package/src/enumerations/schema-collection.d.ts +39 -0
  92. package/src/enumerations/schema-collection.d.ts.map +1 -0
  93. package/src/enumerations/schema-collection.js +43 -0
  94. package/src/enumerations/schema-collection.js.map +1 -0
  95. package/src/errors/index.d.ts +5 -0
  96. package/src/errors/index.d.ts.map +1 -0
  97. package/src/errors/index.js +8 -0
  98. package/src/errors/index.js.map +1 -0
  99. package/src/errors/invalid-backup-code-version.d.ts +5 -0
  100. package/src/errors/invalid-backup-code-version.d.ts.map +1 -0
  101. package/src/errors/invalid-backup-code-version.js +14 -0
  102. package/src/errors/invalid-backup-code-version.js.map +1 -0
  103. package/src/errors/invalid-model.d.ts +18 -0
  104. package/src/errors/invalid-model.d.ts.map +1 -0
  105. package/src/errors/invalid-model.js +26 -0
  106. package/src/errors/invalid-model.js.map +1 -0
  107. package/src/errors/model-not-registered.d.ts +18 -0
  108. package/src/errors/model-not-registered.d.ts.map +1 -0
  109. package/src/errors/model-not-registered.js +26 -0
  110. package/src/errors/model-not-registered.js.map +1 -0
  111. package/src/errors/mongoose-validation.d.ts +28 -0
  112. package/src/errors/mongoose-validation.d.ts.map +1 -0
  113. package/src/errors/mongoose-validation.js +33 -0
  114. package/src/errors/mongoose-validation.js.map +1 -0
  115. package/src/index.d.ts +19 -0
  116. package/src/index.d.ts.map +1 -0
  117. package/src/index.js +31 -0
  118. package/src/index.js.map +1 -0
  119. package/src/interfaces/api-mongo-validation-error-response.d.ts +16 -0
  120. package/src/interfaces/api-mongo-validation-error-response.d.ts.map +1 -0
  121. package/src/interfaces/api-mongo-validation-error-response.js +8 -0
  122. package/src/interfaces/api-mongo-validation-error-response.js.map +1 -0
  123. package/src/interfaces/database-init-result-tx.d.ts +27 -0
  124. package/src/interfaces/database-init-result-tx.d.ts.map +1 -0
  125. package/src/interfaces/database-init-result-tx.js +3 -0
  126. package/src/interfaces/database-init-result-tx.js.map +1 -0
  127. package/src/interfaces/db-init-result.d.ts +16 -0
  128. package/src/interfaces/db-init-result.d.ts.map +1 -0
  129. package/src/interfaces/db-init-result.js +8 -0
  130. package/src/interfaces/db-init-result.js.map +1 -0
  131. package/src/interfaces/discriminator-collections.d.ts +17 -0
  132. package/src/interfaces/discriminator-collections.d.ts.map +1 -0
  133. package/src/interfaces/discriminator-collections.js +8 -0
  134. package/src/interfaces/discriminator-collections.js.map +1 -0
  135. package/src/interfaces/environment-mongo.d.ts +88 -0
  136. package/src/interfaces/environment-mongo.d.ts.map +1 -0
  137. package/src/interfaces/environment-mongo.js +8 -0
  138. package/src/interfaces/environment-mongo.js.map +1 -0
  139. package/src/interfaces/index.d.ts +13 -0
  140. package/src/interfaces/index.d.ts.map +1 -0
  141. package/src/interfaces/index.js +16 -0
  142. package/src/interfaces/index.js.map +1 -0
  143. package/src/interfaces/models/email-token.d.ts +12 -0
  144. package/src/interfaces/models/email-token.d.ts.map +1 -0
  145. package/src/interfaces/models/email-token.js +8 -0
  146. package/src/interfaces/models/email-token.js.map +1 -0
  147. package/src/interfaces/models/index.d.ts +8 -0
  148. package/src/interfaces/models/index.d.ts.map +1 -0
  149. package/src/interfaces/models/index.js +11 -0
  150. package/src/interfaces/models/index.js.map +1 -0
  151. package/src/interfaces/models/mnemonic.d.ts +13 -0
  152. package/src/interfaces/models/mnemonic.d.ts.map +1 -0
  153. package/src/interfaces/models/mnemonic.js +8 -0
  154. package/src/interfaces/models/mnemonic.js.map +1 -0
  155. package/src/interfaces/models/role.d.ts +12 -0
  156. package/src/interfaces/models/role.d.ts.map +1 -0
  157. package/src/interfaces/models/role.js +8 -0
  158. package/src/interfaces/models/role.js.map +1 -0
  159. package/src/interfaces/models/token-role.d.ts +19 -0
  160. package/src/interfaces/models/token-role.d.ts.map +1 -0
  161. package/src/interfaces/models/token-role.js +8 -0
  162. package/src/interfaces/models/token-role.js.map +1 -0
  163. package/src/interfaces/models/used-direct-login-token.d.ts +19 -0
  164. package/src/interfaces/models/used-direct-login-token.d.ts.map +1 -0
  165. package/src/interfaces/models/used-direct-login-token.js +8 -0
  166. package/src/interfaces/models/used-direct-login-token.js.map +1 -0
  167. package/src/interfaces/models/user-role.d.ts +19 -0
  168. package/src/interfaces/models/user-role.d.ts.map +1 -0
  169. package/src/interfaces/models/user-role.js +8 -0
  170. package/src/interfaces/models/user-role.js.map +1 -0
  171. package/src/interfaces/models/user.d.ts +21 -0
  172. package/src/interfaces/models/user.d.ts.map +1 -0
  173. package/src/interfaces/models/user.js +8 -0
  174. package/src/interfaces/models/user.js.map +1 -0
  175. package/src/interfaces/mongo-application.d.ts +47 -0
  176. package/src/interfaces/mongo-application.d.ts.map +1 -0
  177. package/src/interfaces/mongo-application.js +10 -0
  178. package/src/interfaces/mongo-application.js.map +1 -0
  179. package/src/interfaces/mongo-errors.d.ts +13 -0
  180. package/src/interfaces/mongo-errors.d.ts.map +1 -0
  181. package/src/interfaces/mongo-errors.js +8 -0
  182. package/src/interfaces/mongo-errors.js.map +1 -0
  183. package/src/interfaces/mongoose-document-store.d.ts +42 -0
  184. package/src/interfaces/mongoose-document-store.d.ts.map +1 -0
  185. package/src/interfaces/mongoose-document-store.js +10 -0
  186. package/src/interfaces/mongoose-document-store.js.map +1 -0
  187. package/src/interfaces/schema.d.ts +37 -0
  188. package/src/interfaces/schema.d.ts.map +1 -0
  189. package/src/interfaces/schema.js +8 -0
  190. package/src/interfaces/schema.js.map +1 -0
  191. package/src/interfaces/server-init-result.d.ts +45 -0
  192. package/src/interfaces/server-init-result.d.ts.map +1 -0
  193. package/src/interfaces/server-init-result.js +8 -0
  194. package/src/interfaces/server-init-result.js.map +1 -0
  195. package/src/interfaces/test-environment.d.ts +22 -0
  196. package/src/interfaces/test-environment.d.ts.map +1 -0
  197. package/src/interfaces/test-environment.js +8 -0
  198. package/src/interfaces/test-environment.js.map +1 -0
  199. package/src/model-registry.d.ts +79 -0
  200. package/src/model-registry.d.ts.map +1 -0
  201. package/src/model-registry.js +97 -0
  202. package/src/model-registry.js.map +1 -0
  203. package/src/models/email-token.d.ts +24 -0
  204. package/src/models/email-token.d.ts.map +1 -0
  205. package/src/models/email-token.js +16 -0
  206. package/src/models/email-token.js.map +1 -0
  207. package/src/models/index.d.ts +7 -0
  208. package/src/models/index.d.ts.map +1 -0
  209. package/src/models/index.js +10 -0
  210. package/src/models/index.js.map +1 -0
  211. package/src/models/mnemonic.d.ts +24 -0
  212. package/src/models/mnemonic.d.ts.map +1 -0
  213. package/src/models/mnemonic.js +27 -0
  214. package/src/models/mnemonic.js.map +1 -0
  215. package/src/models/role.d.ts +24 -0
  216. package/src/models/role.d.ts.map +1 -0
  217. package/src/models/role.js +27 -0
  218. package/src/models/role.js.map +1 -0
  219. package/src/models/used-direct-login-token.d.ts +24 -0
  220. package/src/models/used-direct-login-token.d.ts.map +1 -0
  221. package/src/models/used-direct-login-token.js +16 -0
  222. package/src/models/used-direct-login-token.js.map +1 -0
  223. package/src/models/user-role.d.ts +23 -0
  224. package/src/models/user-role.d.ts.map +1 -0
  225. package/src/models/user-role.js +26 -0
  226. package/src/models/user-role.js.map +1 -0
  227. package/src/models/user.d.ts +24 -0
  228. package/src/models/user.d.ts.map +1 -0
  229. package/src/models/user.js +27 -0
  230. package/src/models/user.js.map +1 -0
  231. package/src/mongo-application-concrete.d.ts +30 -0
  232. package/src/mongo-application-concrete.d.ts.map +1 -0
  233. package/src/mongo-application-concrete.js +46 -0
  234. package/src/mongo-application-concrete.js.map +1 -0
  235. package/src/plugins/index.d.ts +2 -0
  236. package/src/plugins/index.d.ts.map +1 -0
  237. package/src/plugins/index.js +5 -0
  238. package/src/plugins/index.js.map +1 -0
  239. package/src/plugins/mongo-database-plugin.d.ts +116 -0
  240. package/src/plugins/mongo-database-plugin.d.ts.map +1 -0
  241. package/src/plugins/mongo-database-plugin.js +230 -0
  242. package/src/plugins/mongo-database-plugin.js.map +1 -0
  243. package/src/routers/api.d.ts +29 -0
  244. package/src/routers/api.d.ts.map +1 -0
  245. package/src/routers/api.js +84 -0
  246. package/src/routers/api.js.map +1 -0
  247. package/src/routers/index.d.ts +2 -0
  248. package/src/routers/index.d.ts.map +1 -0
  249. package/src/routers/index.js +5 -0
  250. package/src/routers/index.js.map +1 -0
  251. package/src/schemas/email-token.d.ts +65 -0
  252. package/src/schemas/email-token.d.ts.map +1 -0
  253. package/src/schemas/email-token.js +68 -0
  254. package/src/schemas/email-token.js.map +1 -0
  255. package/src/schemas/index.d.ts +8 -0
  256. package/src/schemas/index.d.ts.map +1 -0
  257. package/src/schemas/index.js +11 -0
  258. package/src/schemas/index.js.map +1 -0
  259. package/src/schemas/mnemonic.d.ts +37 -0
  260. package/src/schemas/mnemonic.d.ts.map +1 -0
  261. package/src/schemas/mnemonic.js +41 -0
  262. package/src/schemas/mnemonic.js.map +1 -0
  263. package/src/schemas/role.d.ts +57 -0
  264. package/src/schemas/role.d.ts.map +1 -0
  265. package/src/schemas/role.js +102 -0
  266. package/src/schemas/role.js.map +1 -0
  267. package/src/schemas/schema.d.ts +62 -0
  268. package/src/schemas/schema.d.ts.map +1 -0
  269. package/src/schemas/schema.js +81 -0
  270. package/src/schemas/schema.js.map +1 -0
  271. package/src/schemas/used-direct-login-token.d.ts +49 -0
  272. package/src/schemas/used-direct-login-token.d.ts.map +1 -0
  273. package/src/schemas/used-direct-login-token.js +35 -0
  274. package/src/schemas/used-direct-login-token.js.map +1 -0
  275. package/src/schemas/user-role.d.ts +52 -0
  276. package/src/schemas/user-role.d.ts.map +1 -0
  277. package/src/schemas/user-role.js +67 -0
  278. package/src/schemas/user-role.js.map +1 -0
  279. package/src/schemas/user.d.ts +43 -0
  280. package/src/schemas/user.d.ts.map +1 -0
  281. package/src/schemas/user.js +214 -0
  282. package/src/schemas/user.js.map +1 -0
  283. package/src/services/backup-code.d.ts +118 -0
  284. package/src/services/backup-code.d.ts.map +1 -0
  285. package/src/services/backup-code.js +320 -0
  286. package/src/services/backup-code.js.map +1 -0
  287. package/src/services/database-initialization.d.ts +137 -0
  288. package/src/services/database-initialization.d.ts.map +1 -0
  289. package/src/services/database-initialization.js +911 -0
  290. package/src/services/database-initialization.js.map +1 -0
  291. package/src/services/db-init-cache.d.ts +18 -0
  292. package/src/services/db-init-cache.d.ts.map +1 -0
  293. package/src/services/db-init-cache.js +7 -0
  294. package/src/services/db-init-cache.js.map +1 -0
  295. package/src/services/direct-login-token.d.ts +28 -0
  296. package/src/services/direct-login-token.d.ts.map +1 -0
  297. package/src/services/direct-login-token.js +62 -0
  298. package/src/services/direct-login-token.js.map +1 -0
  299. package/src/services/index.d.ts +17 -0
  300. package/src/services/index.d.ts.map +1 -0
  301. package/src/services/index.js +20 -0
  302. package/src/services/index.js.map +1 -0
  303. package/src/services/jwt.d.ts +20 -0
  304. package/src/services/jwt.d.ts.map +1 -0
  305. package/src/services/jwt.js +79 -0
  306. package/src/services/jwt.js.map +1 -0
  307. package/src/services/mnemonic.d.ts +30 -0
  308. package/src/services/mnemonic.d.ts.map +1 -0
  309. package/src/services/mnemonic.js +80 -0
  310. package/src/services/mnemonic.js.map +1 -0
  311. package/src/services/mongo-authentication-provider.d.ts +27 -0
  312. package/src/services/mongo-authentication-provider.d.ts.map +1 -0
  313. package/src/services/mongo-authentication-provider.js +97 -0
  314. package/src/services/mongo-authentication-provider.js.map +1 -0
  315. package/src/services/mongo-backup-code-store.d.ts +40 -0
  316. package/src/services/mongo-backup-code-store.d.ts.map +1 -0
  317. package/src/services/mongo-backup-code-store.js +104 -0
  318. package/src/services/mongo-backup-code-store.js.map +1 -0
  319. package/src/services/mongo-base.d.ts +24 -0
  320. package/src/services/mongo-base.d.ts.map +1 -0
  321. package/src/services/mongo-base.js +28 -0
  322. package/src/services/mongo-base.js.map +1 -0
  323. package/src/services/mongoose-collection.d.ts +52 -0
  324. package/src/services/mongoose-collection.d.ts.map +1 -0
  325. package/src/services/mongoose-collection.js +326 -0
  326. package/src/services/mongoose-collection.js.map +1 -0
  327. package/src/services/mongoose-database.d.ts +64 -0
  328. package/src/services/mongoose-database.d.ts.map +1 -0
  329. package/src/services/mongoose-database.js +121 -0
  330. package/src/services/mongoose-database.js.map +1 -0
  331. package/src/services/mongoose-document-store.d.ts +108 -0
  332. package/src/services/mongoose-document-store.d.ts.map +1 -0
  333. package/src/services/mongoose-document-store.js +265 -0
  334. package/src/services/mongoose-document-store.js.map +1 -0
  335. package/src/services/mongoose-session-adapter.d.ts +39 -0
  336. package/src/services/mongoose-session-adapter.d.ts.map +1 -0
  337. package/src/services/mongoose-session-adapter.js +63 -0
  338. package/src/services/mongoose-session-adapter.js.map +1 -0
  339. package/src/services/request-user.d.ts +22 -0
  340. package/src/services/request-user.d.ts.map +1 -0
  341. package/src/services/request-user.js +66 -0
  342. package/src/services/request-user.js.map +1 -0
  343. package/src/services/role.d.ts +97 -0
  344. package/src/services/role.d.ts.map +1 -0
  345. package/src/services/role.js +288 -0
  346. package/src/services/role.js.map +1 -0
  347. package/src/services/user.d.ts +362 -0
  348. package/src/services/user.d.ts.map +1 -0
  349. package/src/services/user.js +1504 -0
  350. package/src/services/user.js.map +1 -0
  351. package/src/testing.d.ts +9 -0
  352. package/src/testing.d.ts.map +1 -0
  353. package/src/testing.js +12 -0
  354. package/src/testing.js.map +1 -0
  355. package/src/transactions/index.d.ts +2 -0
  356. package/src/transactions/index.d.ts.map +1 -0
  357. package/src/transactions/index.js +5 -0
  358. package/src/transactions/index.js.map +1 -0
  359. package/src/transactions/transaction-manager.d.ts +37 -0
  360. package/src/transactions/transaction-manager.d.ts.map +1 -0
  361. package/src/transactions/transaction-manager.js +50 -0
  362. package/src/transactions/transaction-manager.js.map +1 -0
  363. package/src/types/index.d.ts +26 -0
  364. package/src/types/index.d.ts.map +1 -0
  365. package/src/types/index.js +9 -0
  366. package/src/types/index.js.map +1 -0
  367. package/src/types/mongoose-helpers.d.ts +16 -0
  368. package/src/types/mongoose-helpers.d.ts.map +1 -0
  369. package/src/types/mongoose-helpers.js +8 -0
  370. package/src/types/mongoose-helpers.js.map +1 -0
  371. package/src/utils/default-mongo-uri-validator.d.ts +15 -0
  372. package/src/utils/default-mongo-uri-validator.d.ts.map +1 -0
  373. package/src/utils/default-mongo-uri-validator.js +46 -0
  374. package/src/utils/default-mongo-uri-validator.js.map +1 -0
  375. package/src/utils/index.d.ts +5 -0
  376. package/src/utils/index.d.ts.map +1 -0
  377. package/src/utils/index.js +8 -0
  378. package/src/utils/index.js.map +1 -0
  379. package/src/utils/mongo-error-response.d.ts +17 -0
  380. package/src/utils/mongo-error-response.d.ts.map +1 -0
  381. package/src/utils/mongo-error-response.js +21 -0
  382. package/src/utils/mongo-error-response.js.map +1 -0
  383. package/src/utils/mongo-transaction.d.ts +39 -0
  384. package/src/utils/mongo-transaction.d.ts.map +1 -0
  385. package/src/utils/mongo-transaction.js +131 -0
  386. package/src/utils/mongo-transaction.js.map +1 -0
  387. package/src/utils/object-id.d.ts +11 -0
  388. package/src/utils/object-id.d.ts.map +1 -0
  389. package/src/utils/object-id.js +17 -0
  390. package/src/utils/object-id.js.map +1 -0
@@ -0,0 +1,288 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Role-based access control (RBAC) service.
4
+ * Manages roles, user-role relationships, and permission checks.
5
+ * @module services/role
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.RoleService = void 0;
9
+ const ecies_lib_1 = require("@digitaldefiance/ecies-lib");
10
+ const i18n_lib_1 = require("@digitaldefiance/i18n-lib");
11
+ const mongoose_types_1 = require("@digitaldefiance/mongoose-types");
12
+ const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
13
+ const base_model_name_1 = require("../enumerations/base-model-name");
14
+ const model_registry_1 = require("../model-registry");
15
+ const node_express_suite_1 = require("@digitaldefiance/node-express-suite");
16
+ const node_ecies_lib_1 = require("@digitaldefiance/node-ecies-lib");
17
+ /**
18
+ * Service for managing roles and role-based access control.
19
+ * Handles role creation, user-role assignments, and permission queries.
20
+ * @template TID - Platform ID type (defaults to Buffer)
21
+ * @template TDate - Date type (defaults to Date)
22
+ * @template TTokenRole - Token role interface type
23
+ * @extends {BaseService<TID>}
24
+ */
25
+ class RoleService extends node_express_suite_1.BaseService {
26
+ /**
27
+ * Constructor for the role service
28
+ * @param application The application object
29
+ */
30
+ constructor(application) {
31
+ super(application);
32
+ }
33
+ static roleToRoleDTO(role) {
34
+ const provider = (0, node_ecies_lib_1.getEnhancedNodeIdProvider)();
35
+ const roleObj = role instanceof mongoose_types_1.Document ? role.toObject() : role;
36
+ return {
37
+ _id: provider.idToString(roleObj._id),
38
+ name: roleObj.name,
39
+ admin: roleObj.admin ?? false,
40
+ member: roleObj.member ?? false,
41
+ child: roleObj.child ?? false,
42
+ system: roleObj.system ?? false,
43
+ translatedName: 'translatedName' in role ? role.translatedName : role.name,
44
+ createdAt: (roleObj.createdAt instanceof Date
45
+ ? roleObj.createdAt.toISOString()
46
+ : roleObj.createdAt),
47
+ createdBy: provider.idToString(roleObj.createdBy),
48
+ updatedAt: (roleObj.updatedAt instanceof Date
49
+ ? roleObj.updatedAt.toISOString()
50
+ : roleObj.updatedAt),
51
+ updatedBy: provider.idToString(roleObj.updatedBy),
52
+ ...(roleObj.deletedAt
53
+ ? {
54
+ deletedAt: (roleObj.deletedAt instanceof Date
55
+ ? roleObj.deletedAt.toISOString()
56
+ : roleObj.deletedAt),
57
+ }
58
+ : {}),
59
+ ...(role.deletedBy
60
+ ? {
61
+ deletedBy: provider.idToString(roleObj.deletedBy),
62
+ }
63
+ : {}),
64
+ };
65
+ }
66
+ /**
67
+ * Given a Role DTO, reconstitute ids and dates
68
+ * @param role The Role DTO
69
+ * @returns An IRoleBackendObject
70
+ */
71
+ static hydrateRoleDTOToBackend(role) {
72
+ const idProvider = (0, node_ecies_lib_1.getEnhancedNodeIdProvider)();
73
+ const convert = (id) => idProvider.idFromString(id);
74
+ return {
75
+ ...(0, node_express_suite_1.omit)(role, [
76
+ 'translatedName',
77
+ ]),
78
+ _id: convert(role._id),
79
+ name: role.name,
80
+ createdAt: new Date(role.createdAt),
81
+ createdBy: convert(role.createdBy),
82
+ updatedAt: new Date(role.updatedAt),
83
+ updatedBy: convert(role.updatedBy),
84
+ ...(role.deletedAt ? { deletedAt: new Date(role.deletedAt) } : {}),
85
+ ...(role.deletedBy
86
+ ? {
87
+ deletedBy: convert(role.deletedBy),
88
+ }
89
+ : {}),
90
+ };
91
+ }
92
+ /**
93
+ * Gets the role ID by name
94
+ * @param roleName The name of the role
95
+ * @returns The role ID or null if not found
96
+ */
97
+ async getRoleIdByName(roleName, session) {
98
+ const RoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.Role).model;
99
+ const role = await RoleModel.findOne({ name: roleName }, undefined, {
100
+ session,
101
+ }).select('_id');
102
+ if (!role) {
103
+ return null;
104
+ }
105
+ return role._id;
106
+ }
107
+ /**
108
+ * Creates a new role
109
+ * @param roleData The role data
110
+ * @param session Optional mongoose session
111
+ * @returns The created role document
112
+ */
113
+ async createRole(roleData, session) {
114
+ const RoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.Role).model;
115
+ const role = new RoleModel(roleData);
116
+ const savedRole = await role.save(session ? { session } : {});
117
+ return savedRole;
118
+ }
119
+ /**
120
+ * Adds a user to a role
121
+ * @param roleId - The role id
122
+ * @param userId - The user id
123
+ * @param createdBy - The user creating the relationship
124
+ * @param session Optional mongoose session
125
+ */
126
+ async addUserToRole(roleId, userId, createdBy, session, overrideId) {
127
+ const UserRoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.UserRole).model;
128
+ // Check if the user-role relationship already exists (and is not deleted)
129
+ const existingUserRole = await UserRoleModel.findOne({
130
+ userId,
131
+ roleId,
132
+ deletedAt: { $exists: false },
133
+ }).session(session ?? null);
134
+ if (existingUserRole) {
135
+ // Relationship already exists, no need to create it again
136
+ return existingUserRole;
137
+ }
138
+ const userRole = new UserRoleModel({
139
+ ...(overrideId ? { _id: overrideId } : {}),
140
+ userId,
141
+ roleId,
142
+ createdBy,
143
+ updatedBy: createdBy,
144
+ });
145
+ const result = await userRole.save({ session });
146
+ return result;
147
+ }
148
+ /**
149
+ * Removes a user from a role
150
+ * @param roleId - The role id
151
+ * @param userId - The user id
152
+ * @param deletedBy - The user removing the relationship
153
+ * @param session Optional mongoose session
154
+ * @throws LastAdminError if attempting to remove the last admin
155
+ */
156
+ async removeUserFromRole(roleId, userId, deletedBy, session) {
157
+ const RoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.Role).model;
158
+ const UserRoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.UserRole).model;
159
+ const role = await RoleModel.findById(roleId).session(session ?? null);
160
+ if (role?.admin) {
161
+ const adminCount = await UserRoleModel.countDocuments({
162
+ roleId,
163
+ deletedAt: { $exists: false },
164
+ }).session(session ?? null);
165
+ if (adminCount <= 1) {
166
+ throw new suite_core_lib_1.LastAdminError();
167
+ }
168
+ }
169
+ await UserRoleModel.findOneAndUpdate({ userId, roleId, deletedAt: { $exists: false } }, { deletedAt: new Date(), deletedBy }, { session });
170
+ }
171
+ /**
172
+ * Deletes a role by ID
173
+ * @param roleId The role ID
174
+ * @param deleter The ID of the user deleting the role
175
+ * @param hardDelete Whether to hard delete the role
176
+ * @param session Optional mongoose session
177
+ */
178
+ async deleteRole(roleId, deleter, hardDelete, session) {
179
+ const RoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.Role).model;
180
+ if (hardDelete) {
181
+ await RoleModel.findByIdAndDelete(roleId).session(session ?? null);
182
+ }
183
+ else {
184
+ await RoleModel.findByIdAndUpdate(roleId, {
185
+ deletedAt: new Date(),
186
+ deletedBy: deleter,
187
+ }).session(session ?? null);
188
+ }
189
+ }
190
+ /**
191
+ * Gets all roles for a user
192
+ * @param userId The user ID
193
+ * @param session Optional mongoose session
194
+ * @returns The roles the user is a member of
195
+ */
196
+ async getUserRoles(userId, session) {
197
+ const UserRoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.UserRole).model;
198
+ const RoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.Role).model;
199
+ if (!UserRoleModel || !RoleModel)
200
+ throw new Error('Model not registered');
201
+ // Return full documents
202
+ const userRoles = await UserRoleModel.find({
203
+ userId,
204
+ deletedAt: { $exists: false },
205
+ })
206
+ .select('roleId')
207
+ .session(session ?? null);
208
+ const roleIds = userRoles.map((ur) => ur.roleId);
209
+ return (await RoleModel.find({
210
+ _id: { $in: roleIds },
211
+ deletedAt: { $exists: false },
212
+ }).session(session ?? null));
213
+ }
214
+ /**
215
+ * Gets all users for a role
216
+ * @param roleId The role ID
217
+ * @param session Optional mongoose session
218
+ * @returns The user IDs that are members of the role
219
+ */
220
+ async getRoleUsers(roleId, session) {
221
+ const UserRoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.UserRole).model;
222
+ // Return full documents
223
+ const userRoles = await UserRoleModel.find({
224
+ roleId,
225
+ deletedAt: { $exists: false },
226
+ })
227
+ .select('userId')
228
+ .session(session ?? null);
229
+ return userRoles.map((ur) => ur.userId);
230
+ }
231
+ /** Convert roles to translated TokenRoles */
232
+ rolesToTokenRoles(roles, overrideLanguage) {
233
+ return roles.map((role) => {
234
+ const engine = i18n_lib_1.I18nEngine.getInstance('default');
235
+ const userLang = i18n_lib_1.GlobalActiveContext.getInstance().userLanguage;
236
+ const lang = (overrideLanguage || userLang || 'en-US');
237
+ const roleTranslation = engine.translateEnum(suite_core_lib_1.Role, role.name, lang);
238
+ // Convert Mongoose document to plain object if needed
239
+ const roleObj = role instanceof mongoose_types_1.Document ? role.toObject() : role;
240
+ return {
241
+ ...roleObj,
242
+ translatedName: roleTranslation,
243
+ };
244
+ });
245
+ }
246
+ async isUserAdmin(userDoc, session, providedRoles) {
247
+ const roles = providedRoles ?? (await this.getUserRoles(userDoc._id, session));
248
+ if (roles.filter((r) => r.admin).length > 0) {
249
+ return true;
250
+ }
251
+ return false;
252
+ }
253
+ async isUserMember(userDoc, session, providedRoles) {
254
+ const roles = providedRoles ?? (await this.getUserRoles(userDoc._id, session));
255
+ if (roles.filter((r) => r.member).length > 0) {
256
+ return true;
257
+ }
258
+ return false;
259
+ }
260
+ async isUserChild(userDoc, session, providedRoles) {
261
+ const roles = providedRoles ?? (await this.getUserRoles(userDoc._id, session));
262
+ if (roles.filter((r) => r.child).length > 0) {
263
+ return true;
264
+ }
265
+ return false;
266
+ }
267
+ async isSystemUser(userDoc, session, providedRoles) {
268
+ const roles = providedRoles ?? (await this.getUserRoles(userDoc._id, session));
269
+ return roles.some((r) => r.system);
270
+ }
271
+ async getMemberType(userDoc, session, providedRoles) {
272
+ const roles = providedRoles ?? (await this.getUserRoles(userDoc._id, session));
273
+ if (await this.isSystemUser(userDoc, session, roles)) {
274
+ return ecies_lib_1.MemberType.System;
275
+ }
276
+ else if (await this.isUserAdmin(userDoc, session, roles)) {
277
+ return ecies_lib_1.MemberType.Admin;
278
+ }
279
+ else if (await this.isUserMember(userDoc, session, roles)) {
280
+ return ecies_lib_1.MemberType.User;
281
+ }
282
+ else {
283
+ return ecies_lib_1.MemberType.Anonymous;
284
+ }
285
+ }
286
+ }
287
+ exports.RoleService = RoleService;
288
+ //# sourceMappingURL=role.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/services/role.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,362 @@
1
+ /**
2
+ * @fileoverview Comprehensive user management service.
3
+ * Handles user authentication, registration, password management, email verification,
4
+ * mnemonic recovery, backup codes, and all user-related operations.
5
+ * @module services/user
6
+ */
7
+ import { SecureBuffer, SecureString } from '@digitaldefiance/ecies-lib';
8
+ import { ClientSession, ProjectionType } from '@digitaldefiance/mongoose-types';
9
+ import { Member as BackendMember, ECIESService, PlatformID } from '@digitaldefiance/node-ecies-lib';
10
+ import { EmailTokenType, IBackupCode, IRequestUserDTO, ITokenRole, IUserBase, IUserDTO } from '@digitaldefiance/suite-core-lib';
11
+ import { Wallet } from '@ethereumjs/wallet';
12
+ import { BackupCode, Environment, BaseService, KeyWrappingService } from '@digitaldefiance/node-express-suite';
13
+ import { MnemonicService } from './mnemonic';
14
+ import type { IConstants, ICreateUserBasics, IEmailService, IUserBackendObject } from '@digitaldefiance/node-express-suite';
15
+ import { EmailTokenDocument } from '../documents/email-token';
16
+ import { BaseDocument } from '../documents/base';
17
+ import { UserDocument } from '../documents/user';
18
+ import { IMongoApplication } from '../interfaces/mongo-application';
19
+ import { BackupCodeService } from './backup-code';
20
+ import { RoleService } from './role';
21
+ /**
22
+ * Comprehensive service for user management and authentication.
23
+ * Provides methods for user creation, authentication (mnemonic/password/challenge),
24
+ * email verification, password reset, backup code recovery, and settings management.
25
+ * @template T - User document type
26
+ * @template TID - Platform ID type
27
+ * @template TDate - Date type
28
+ * @template TLanguage - String type for site language
29
+ * @template TAccountStatus - String type for account status
30
+ * @template _TEnvironment - Environment type
31
+ * @template _TConstants - Constants type
32
+ * @template _TBaseDocument - Base document type
33
+ * @template TUser - User base interface type
34
+ * @template TTokenRole - Token role interface type
35
+ * @template TApplication - Application interface type
36
+ * @extends {BaseService<TID, TApplication>}
37
+ */
38
+ export declare class UserService<T, TID extends PlatformID, TDate extends Date, TLanguage extends string, TAccountStatus extends string, _TEnvironment extends Environment<TID> = Environment<TID>, _TConstants extends IConstants = IConstants, _TBaseDocument extends BaseDocument<T, TID> = BaseDocument<T, TID>, TUser extends IUserBase<TID, TDate, TLanguage, TAccountStatus> = IUserBase<TID, TDate, TLanguage, TAccountStatus>, TTokenRole extends ITokenRole<TID, TDate> = ITokenRole<TID, TDate>, TApplication extends IMongoApplication<TID> = IMongoApplication<TID>> extends BaseService<TID, TApplication> {
39
+ protected readonly roleService: RoleService<TID, TDate, TTokenRole>;
40
+ protected readonly eciesService: ECIESService<TID>;
41
+ protected readonly keyWrappingService: KeyWrappingService;
42
+ protected readonly mnemonicService: MnemonicService;
43
+ protected readonly emailService: IEmailService;
44
+ protected readonly backupCodeService: BackupCodeService<TID, TDate, TTokenRole, TApplication>;
45
+ protected readonly serverUrl: string;
46
+ protected readonly disableEmailSend: boolean;
47
+ constructor(application: TApplication, roleService: RoleService<TID, TDate, TTokenRole>, emailService: IEmailService, keyWrappingService: KeyWrappingService, backupCodeService: BackupCodeService<TID, TDate, TTokenRole, TApplication>);
48
+ /**
49
+ * Given a User Document, make a User DTO
50
+ * @param user a User Document
51
+ * @returns An IUserDTO
52
+ */
53
+ static userToUserDTO<TLanguage extends string, TID extends PlatformID = Buffer>(user: UserDocument<TLanguage, TID> | Record<string, unknown>): IUserDTO;
54
+ /**
55
+ * Given a User DTO, reconstitute ids and dates
56
+ * @param user a User DTO
57
+ * @returns An IUserBackendObject
58
+ */
59
+ hydrateUserDTOToBackend(user: IUserDTO): IUserBackendObject<TLanguage, TID>;
60
+ /**
61
+ * Create a new email token to send to the user for email verification
62
+ * @param userDoc The user to create the email token for
63
+ * @param type The type of email token to create
64
+ * @param session The session to use for the query
65
+ * @returns The email token document
66
+ */
67
+ createEmailToken(userDoc: UserDocument<TLanguage, TID>, type: EmailTokenType, session?: ClientSession): Promise<EmailTokenDocument>;
68
+ /**
69
+ * Create and send an email token to the user for email verification
70
+ * @param user The user to send the email token to
71
+ * @param type The type of email token to send
72
+ * @param session The session to use for the query
73
+ * @returns The email token document
74
+ */
75
+ createAndSendEmailToken(user: UserDocument<TLanguage, TID> | (Pick<UserDocument<TLanguage, TID>, keyof UserDocument<TLanguage, TID>> & {
76
+ _id: any;
77
+ }), type?: EmailTokenType, session?: ClientSession, debug?: boolean): Promise<EmailTokenDocument>;
78
+ /**
79
+ * Create and send an email token directly within an existing transaction
80
+ * @param user The user to send the email token to
81
+ * @param type The type of email token to send
82
+ * @param session The session to use for the query (required)
83
+ * @param debug Whether to enable debug logging
84
+ * @returns The email token document
85
+ */
86
+ createAndSendEmailTokenDirect(user: UserDocument<TLanguage, TID>, type: EmailTokenType | undefined, session: ClientSession, debug?: boolean): Promise<EmailTokenDocument>;
87
+ /**
88
+ * Send an email token to the user for email verification
89
+ * @param emailToken The email token to send
90
+ * @param session The session to use for the query
91
+ * @returns void
92
+ */
93
+ sendEmailToken(emailToken: EmailTokenDocument, session?: ClientSession, debug?: boolean): Promise<void>;
94
+ /**
95
+ * Find a user by email or username and enforce account status checks
96
+ * @param email Optional email
97
+ * @param username Optional username
98
+ * @param session Optional mongoose session
99
+ * @throws UsernameOrEmailRequiredError if neither provided
100
+ * @throws InvalidCredentialsError if not found or deleted
101
+ * @throws AccountLockedError | PendingEmailVerificationError | AccountStatusError per status
102
+ */
103
+ findUser(email?: string, username?: string, session?: ClientSession): Promise<UserDocument<TLanguage, TID>>;
104
+ /**
105
+ * Finds a user record by ID
106
+ * @param userId The user ID
107
+ * @param throwIfNotActive Whether to throw if the user is inactive
108
+ * @param session The active session, if present
109
+ * @returns The user document
110
+ */
111
+ findUserById(userId: TID, throwIfNotActive: boolean, session?: ClientSession, select?: ProjectionType<UserDocument<TLanguage, TID>>): Promise<UserDocument<TLanguage, TID>>;
112
+ /**
113
+ * Ensure required fields are present in a projection for queries that rely on them.
114
+ * Supports string and object-style projections. For inclusion projections, adds fields.
115
+ * For exclusion projections, ensures required fields are not excluded.
116
+ */
117
+ private ensureRequiredFieldsInProjection;
118
+ /**
119
+ * Fill in the default values to a user object
120
+ * @param newUser The user object to fill in
121
+ * @param createdBy The user ID of the user creating the new user
122
+ * @returns The filled in user
123
+ */
124
+ fillUserDefaults(newUser: ICreateUserBasics, createdBy: TID, backupCodes: Array<IBackupCode>, encryptedMnemonic: string, userId?: TID): IUserBackendObject<TLanguage, TID>;
125
+ /**
126
+ * Create a new user document from an IUser and unhashed password
127
+ * @param newUser The user object
128
+ * @returns The new user document
129
+ */
130
+ makeUserDoc(newUser: TUser): Promise<UserDocument<TLanguage, TID>>;
131
+ /**
132
+ * Create a new user.
133
+ * Do not set createdBy to a new (non-existing) ObjectId unless you also set newUserId to it.
134
+ * If newUserId is not set, one will be generated.
135
+ * @param systemUser The system user performing the operation
136
+ * @param userData Username, email, password in a ICreateUserBasics object
137
+ * @param createdBy The user id of the user creating the user
138
+ * @param newUserId the user id of the new user object- usually the createdBy user id.
139
+ * @param session The session to use for the query
140
+ * @param debug Whether to log debug information
141
+ * @param password The password to use for the new user (optional, if not provided, mnemonic will be used)
142
+ * @returns The new user document
143
+ */
144
+ newUser(systemUser: BackendMember<TID>, userData: ICreateUserBasics, createdBy?: TID, newUserId?: TID, session?: ClientSession, debug?: boolean, password?: string, userProvidedMnemonic?: string): Promise<{
145
+ user: UserDocument<TLanguage, TID>;
146
+ mnemonic: string;
147
+ backupCodes: Array<string>;
148
+ password?: string;
149
+ }>;
150
+ /**
151
+ * Get the backup codes for a user.
152
+ * Requires the user not be deleted or inactive
153
+ */
154
+ getEncryptedUserBackupCodes(userId: TID, session?: ClientSession): Promise<Array<IBackupCode>>;
155
+ /**
156
+ * Resets the given user's backup codes
157
+ * @param backupUser The user to generate codes for
158
+ * @param session The current session, if any
159
+ * @returns A promise of an array of backup codes
160
+ */
161
+ resetUserBackupCodes(backupUser: BackendMember<TID>, systemUser: BackendMember<TID>, session?: ClientSession): Promise<Array<BackupCode>>;
162
+ /**
163
+ * Recover a user's mnemonic from an encrypted mnemonic
164
+ * @param user The user whose mnemonic to recover
165
+ * @param encryptedMnemonic The encrypted mnemonic
166
+ * @returns The recovered mnemonic
167
+ */
168
+ recoverMnemonic(user: BackendMember<any>, encryptedMnemonic: string): SecureString;
169
+ /**
170
+ * Make a Member from a user document and optional private key
171
+ * @param userDoc The user document
172
+ * @param privateKey Optional private key to load the wallet
173
+ * @param publicKey Optional public key to override the userDoc public key
174
+ * @param session The current session, if any
175
+ * @returns A promise containing the created Member
176
+ */
177
+ makeUserFromUserDoc(userDoc: UserDocument<TLanguage, TID>, privateKey?: SecureBuffer, publicKey?: Buffer, mnemonic?: SecureString, wallet?: Wallet, session?: ClientSession): Promise<BackendMember<TID>>;
178
+ /**
179
+ * Challenges a given userDoc with a given mnemonic, returns a system and user Member
180
+ * @param userDoc The userDoc in question
181
+ * @param mnemonic The mnemonic to challenge against
182
+ * @returns A promise containing the user and system Members
183
+ * @throws InvalidCredentialsError if the challenge fails
184
+ * @throws AccountLockedError if the account is locked
185
+ * @throws PendingEmailVerificationError if the email is not verified
186
+ * @throws AccountStatusError if the account status is invalid
187
+ */
188
+ challengeUserWithMnemonic(userDoc: UserDocument<TLanguage, TID>, mnemonic: SecureString, session?: ClientSession): Promise<{
189
+ userMember: BackendMember<TID>;
190
+ adminMember: BackendMember<TID>;
191
+ }>;
192
+ /**
193
+ * Validates a login challenge response
194
+ * @param challengeResponse The challenge response bytes in hex
195
+ * @param email The email address of the user
196
+ * @param username The username of the user
197
+ * @param session The mongo session for the query
198
+ * @returns A promise that resolves to the user document, user member, and system member
199
+ */
200
+ loginWithChallengeResponse(challengeResponse: string, email?: string, username?: string, session?: ClientSession): Promise<{
201
+ userDoc: UserDocument<TLanguage, TID>;
202
+ userMember: BackendMember<TID>;
203
+ adminMember: BackendMember<TID>;
204
+ }>;
205
+ /**
206
+ * Authenticate a user with client-verified challenge (skips server-side challenge)
207
+ * @returns The authenticated user document.
208
+ */
209
+ loginWithClientVerifiedChallenge(usernameOrEmail: string, mnemonic: SecureString, session?: ClientSession): Promise<{
210
+ userDoc: UserDocument<TLanguage, TID>;
211
+ userMember: BackendMember<TID>;
212
+ adminMember: BackendMember<TID>;
213
+ }>;
214
+ /**
215
+ * Authenticate a user with their mnemonic.
216
+ * @returns The authenticated user document.
217
+ */
218
+ loginWithMnemonic(usernameOrEmail: string, mnemonic: SecureString, session?: ClientSession): Promise<{
219
+ userDoc: UserDocument<TLanguage, TID>;
220
+ userMember: BackendMember<TID>;
221
+ adminMember: BackendMember<TID>;
222
+ }>;
223
+ /**
224
+ * Authenticate a user with their password (for key-wrapped accounts).
225
+ * @returns The authenticated user document.
226
+ */
227
+ loginWithPassword(usernameOrEmail: string, password: string, session?: ClientSession): Promise<{
228
+ userDoc: UserDocument<TLanguage, TID>;
229
+ userMember: BackendMember<TID>;
230
+ adminMember: BackendMember<TID>;
231
+ }>;
232
+ /**
233
+ * Re-send a previously sent email token
234
+ * @param userId The user id
235
+ * @param session The session to use for the query
236
+ * @returns void
237
+ * @throws EmailTokenUsedOrInvalidError
238
+ */
239
+ resendEmailToken(userId: string, type: EmailTokenType, session?: ClientSession, debug?: boolean): Promise<void>;
240
+ /**
241
+ * Verify the email token and update the user's account status
242
+ * @param emailToken The email token to verify
243
+ * @param session The session to use for the query
244
+ * @returns void
245
+ * @throws EmailTokenUsedOrInvalidError
246
+ * @throws EmailTokenExpiredError
247
+ * @throws EmailVerifiedError
248
+ * @throws UserNotFoundError
249
+ */
250
+ verifyAccountTokenAndComplete(emailToken: string, session?: ClientSession): Promise<void>;
251
+ /**
252
+ * Validate the email token
253
+ * @param token The token to validate
254
+ * @param restrictType The type of email token to validate (or throw)
255
+ * @param session The session to use for the query
256
+ * @returns void
257
+ * @throws EmailTokenUsedOrInvalidError
258
+ */
259
+ validateEmailToken(token: string, restrictType?: EmailTokenType, session?: ClientSession): Promise<void>;
260
+ /**
261
+ * Updates the user's language
262
+ * @param userId - The ID of the user
263
+ * @param newLanguage - The new language
264
+ * @param session - The session to use for the query
265
+ * @returns The updated user
266
+ */
267
+ updateSiteLanguage(userId: string, newLanguage: string, session?: ClientSession): Promise<IRequestUserDTO>;
268
+ /**
269
+ * Updates the user's Dark Mode preference
270
+ * @param userId - The ID of the user
271
+ * @param newDarkMode - The new Dark Mode preference
272
+ * @param session - The session to use for the query
273
+ * @returns The updated user
274
+ */
275
+ updateDarkMode(userId: string, newDarkMode: boolean, session?: ClientSession): Promise<IRequestUserDTO>;
276
+ /**
277
+ * Updates multiple user settings at once
278
+ * @param userId - The ID of the user
279
+ * @param settings - Object containing settings to update
280
+ * @param session - The session to use for the query
281
+ * @returns The updated user
282
+ */
283
+ updateUserSettings(userId: string, settings: {
284
+ email?: string;
285
+ timezone?: string;
286
+ siteLanguage?: string;
287
+ currency?: string;
288
+ darkMode?: boolean;
289
+ directChallenge?: boolean;
290
+ }, session?: ClientSession): Promise<IRequestUserDTO>;
291
+ /**
292
+ * Changes the user's password by re-wrapping their master key
293
+ * @param userId - The ID of the user
294
+ * @param currentPassword - The current password
295
+ * @param newPassword - The new password
296
+ * @param session - The session to use for the query
297
+ * @returns void
298
+ */
299
+ changePassword(userId: string, currentPassword: string, newPassword: string, session?: ClientSession): Promise<void>;
300
+ /**
301
+ * Retrieve an email token by its token string and type
302
+ * @param token - The token string
303
+ * @param type - The type of the email token
304
+ * @param session - The session to use for the query
305
+ * @returns The email token document or null if not found
306
+ */
307
+ findEmailToken(token: string, type?: EmailTokenType, session?: ClientSession): Promise<EmailTokenDocument | null>;
308
+ /**
309
+ * Verify email token is valid
310
+ * @param token - The email token
311
+ * @param session - The session to use for the query
312
+ * @returns void
313
+ */
314
+ verifyEmailToken(token: string, type: EmailTokenType, session?: ClientSession): Promise<void>;
315
+ /**
316
+ * Reset password using email token
317
+ * @param token - The email token
318
+ * @param newPassword - The new password
319
+ * @param session - The session to use for the query
320
+ * @returns void
321
+ */
322
+ resetPasswordWithToken(token: string, newPassword: string, credential?: string, // either mnemonic or current password; required
323
+ session?: ClientSession): Promise<void>;
324
+ /**
325
+ * Generate a login challenge for the client to sign
326
+ * @returns The login challenge in hex
327
+ */
328
+ generateDirectLoginChallenge(): string;
329
+ /**
330
+ * Verifies a direct login challenge response
331
+ * @param serverSignedRequest The login challenge response in hex
332
+ * @param session The mongoose session, if provided
333
+ * @returns A promise with the user document and user member object
334
+ */
335
+ verifyDirectLoginChallenge(serverSignedRequest: string, signature: string, username?: string, email?: string, session?: ClientSession): Promise<{
336
+ userDoc: UserDocument<TLanguage, TID>;
337
+ userMember: BackendMember<TID>;
338
+ }>;
339
+ /**
340
+ * Request a login link via email
341
+ * @param email Email address
342
+ * @param username Username
343
+ * @param session Existing session, if any
344
+ * @returns void
345
+ */
346
+ requestEmailLogin(email?: string, username?: string, session?: ClientSession): Promise<void>;
347
+ /**
348
+ * Validate an email login token challenge
349
+ * @param token The token to challenge
350
+ * @param signature The signature of the token by the user's private key
351
+ * @param session The session to use for the query
352
+ * @returns The user document if the challenge is valid
353
+ */
354
+ validateEmailLoginTokenChallenge(token: string, signature: string, session?: ClientSession): Promise<UserDocument<TLanguage, TID>>;
355
+ /**
356
+ * Updates the user's last login time atomically
357
+ * @param userId - The ID of the user
358
+ * @returns void
359
+ */
360
+ updateLastLogin(userId: TID): Promise<void>;
361
+ }
362
+ //# sourceMappingURL=user.d.ts.map