@digitaldefiance/node-express-suite 1.0.23 → 1.0.25

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 (632) hide show
  1. package/README.md +8 -0
  2. package/package.json +8 -7
  3. package/src/application-base.d.ts +112 -0
  4. package/src/application-base.d.ts.map +1 -0
  5. package/src/application-base.js +335 -0
  6. package/src/application-base.js.map +1 -0
  7. package/src/application.d.ts +20 -0
  8. package/src/application.d.ts.map +1 -0
  9. package/src/application.js +124 -0
  10. package/src/application.js.map +1 -0
  11. package/src/backup-code.d.ts +67 -0
  12. package/src/backup-code.d.ts.map +1 -0
  13. package/src/backup-code.js +238 -0
  14. package/src/backup-code.js.map +1 -0
  15. package/src/constants.d.ts +16 -0
  16. package/src/constants.d.ts.map +1 -0
  17. package/src/constants.js +54 -0
  18. package/src/constants.js.map +1 -0
  19. package/src/controllers/base.d.ts +63 -0
  20. package/src/controllers/base.d.ts.map +1 -0
  21. package/src/controllers/base.js +272 -0
  22. package/src/controllers/base.js.map +1 -0
  23. package/src/controllers/{index.ts → index.d.ts} +1 -0
  24. package/src/controllers/index.d.ts.map +1 -0
  25. package/src/controllers/index.js +6 -0
  26. package/src/controllers/index.js.map +1 -0
  27. package/src/controllers/user.d.ts +45 -0
  28. package/src/controllers/user.d.ts.map +1 -0
  29. package/src/controllers/user.js +748 -0
  30. package/src/controllers/user.js.map +1 -0
  31. package/src/decorators/base-controller.d.ts +14 -0
  32. package/src/decorators/base-controller.d.ts.map +1 -0
  33. package/src/decorators/base-controller.js +49 -0
  34. package/src/decorators/base-controller.js.map +1 -0
  35. package/src/decorators/controller.d.ts +32 -0
  36. package/src/decorators/controller.d.ts.map +1 -0
  37. package/src/decorators/controller.js +67 -0
  38. package/src/decorators/controller.js.map +1 -0
  39. package/src/decorators/{index.ts → index.d.ts} +1 -0
  40. package/src/decorators/index.d.ts.map +1 -0
  41. package/src/decorators/index.js +7 -0
  42. package/src/decorators/index.js.map +1 -0
  43. package/src/decorators/zod-validation.d.ts +5 -0
  44. package/src/decorators/zod-validation.d.ts.map +1 -0
  45. package/src/decorators/zod-validation.js +47 -0
  46. package/src/decorators/zod-validation.js.map +1 -0
  47. package/src/defaults.d.ts +7 -0
  48. package/src/defaults.d.ts.map +1 -0
  49. package/src/defaults.js +83 -0
  50. package/src/defaults.js.map +1 -0
  51. package/src/documents/base.d.ts +3 -0
  52. package/src/documents/base.d.ts.map +1 -0
  53. package/src/documents/base.js +3 -0
  54. package/src/documents/base.js.map +1 -0
  55. package/src/documents/email-token.d.ts +8 -0
  56. package/src/documents/email-token.d.ts.map +1 -0
  57. package/src/documents/email-token.js +3 -0
  58. package/src/documents/email-token.js.map +1 -0
  59. package/src/documents/{index.ts → index.d.ts} +1 -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.ts → mnemonic.d.ts} +2 -5
  64. package/src/documents/mnemonic.d.ts.map +1 -0
  65. package/src/documents/mnemonic.js +3 -0
  66. package/src/documents/mnemonic.js.map +1 -0
  67. package/src/documents/{role.ts → role.d.ts} +2 -5
  68. package/src/documents/role.d.ts.map +1 -0
  69. package/src/documents/role.js +3 -0
  70. package/src/documents/role.js.map +1 -0
  71. package/src/documents/used-direct-login-token.d.ts +5 -0
  72. package/src/documents/used-direct-login-token.d.ts.map +1 -0
  73. package/src/documents/used-direct-login-token.js +3 -0
  74. package/src/documents/used-direct-login-token.js.map +1 -0
  75. package/src/documents/{user-role.ts → user-role.d.ts} +2 -5
  76. package/src/documents/user-role.d.ts.map +1 -0
  77. package/src/documents/user-role.js +3 -0
  78. package/src/documents/user-role.js.map +1 -0
  79. package/src/documents/{user.ts → user.d.ts} +2 -4
  80. package/src/documents/user.d.ts.map +1 -0
  81. package/src/documents/user.js +3 -0
  82. package/src/documents/user.js.map +1 -0
  83. package/src/enumerations/base-model-name.d.ts +38 -0
  84. package/src/enumerations/base-model-name.d.ts.map +1 -0
  85. package/src/enumerations/base-model-name.js +34 -0
  86. package/src/enumerations/base-model-name.js.map +1 -0
  87. package/src/enumerations/{index.ts → index.d.ts} +1 -0
  88. package/src/enumerations/index.d.ts.map +1 -0
  89. package/src/enumerations/index.js +8 -0
  90. package/src/enumerations/index.js.map +1 -0
  91. package/src/enumerations/length-encoding-type.d.ts +7 -0
  92. package/src/enumerations/length-encoding-type.d.ts.map +1 -0
  93. package/src/enumerations/length-encoding-type.js +11 -0
  94. package/src/enumerations/length-encoding-type.js.map +1 -0
  95. package/src/enumerations/schema-collection.d.ts +34 -0
  96. package/src/enumerations/schema-collection.d.ts.map +1 -0
  97. package/src/enumerations/schema-collection.js +38 -0
  98. package/src/enumerations/schema-collection.js.map +1 -0
  99. package/src/enumerations/symmetric-error-type.d.ts +5 -0
  100. package/src/enumerations/symmetric-error-type.d.ts.map +1 -0
  101. package/src/enumerations/symmetric-error-type.js +9 -0
  102. package/src/enumerations/symmetric-error-type.js.map +1 -0
  103. package/src/environment.d.ts +189 -0
  104. package/src/environment.d.ts.map +1 -0
  105. package/src/environment.js +620 -0
  106. package/src/environment.js.map +1 -0
  107. package/src/errors/express-validation.d.ts +9 -0
  108. package/src/errors/express-validation.d.ts.map +1 -0
  109. package/src/errors/express-validation.js +18 -0
  110. package/src/errors/express-validation.js.map +1 -0
  111. package/src/errors/{index.ts → index.d.ts} +1 -0
  112. package/src/errors/index.d.ts.map +1 -0
  113. package/src/errors/index.js +16 -0
  114. package/src/errors/index.js.map +1 -0
  115. package/src/errors/invalid-backup-code-version.d.ts +6 -0
  116. package/src/errors/invalid-backup-code-version.d.ts.map +1 -0
  117. package/src/errors/invalid-backup-code-version.js +15 -0
  118. package/src/errors/invalid-backup-code-version.js.map +1 -0
  119. package/src/errors/invalid-jwt-token.d.ts +5 -0
  120. package/src/errors/invalid-jwt-token.d.ts.map +1 -0
  121. package/src/errors/invalid-jwt-token.js +11 -0
  122. package/src/errors/invalid-jwt-token.js.map +1 -0
  123. package/src/errors/invalid-model.d.ts +6 -0
  124. package/src/errors/invalid-model.d.ts.map +1 -0
  125. package/src/errors/invalid-model.js +14 -0
  126. package/src/errors/invalid-model.js.map +1 -0
  127. package/src/errors/invalid-new-password.d.ts +5 -0
  128. package/src/errors/invalid-new-password.d.ts.map +1 -0
  129. package/src/errors/invalid-new-password.js +14 -0
  130. package/src/errors/invalid-new-password.js.map +1 -0
  131. package/src/errors/invalid-password.d.ts +5 -0
  132. package/src/errors/invalid-password.d.ts.map +1 -0
  133. package/src/errors/invalid-password.js +14 -0
  134. package/src/errors/invalid-password.js.map +1 -0
  135. package/src/errors/missing-validated-data.d.ts +7 -0
  136. package/src/errors/missing-validated-data.d.ts.map +1 -0
  137. package/src/errors/missing-validated-data.js +36 -0
  138. package/src/errors/missing-validated-data.js.map +1 -0
  139. package/src/errors/mnemonic-or-password-required.d.ts +5 -0
  140. package/src/errors/mnemonic-or-password-required.d.ts.map +1 -0
  141. package/src/errors/mnemonic-or-password-required.js +13 -0
  142. package/src/errors/mnemonic-or-password-required.js.map +1 -0
  143. package/src/errors/model-not-registered.d.ts +5 -0
  144. package/src/errors/model-not-registered.d.ts.map +1 -0
  145. package/src/errors/model-not-registered.js +12 -0
  146. package/src/errors/model-not-registered.js.map +1 -0
  147. package/src/errors/mongoose-validation.d.ts +11 -0
  148. package/src/errors/mongoose-validation.d.ts.map +1 -0
  149. package/src/errors/mongoose-validation.js +17 -0
  150. package/src/errors/mongoose-validation.js.map +1 -0
  151. package/src/errors/symmetric.d.ts +8 -0
  152. package/src/errors/symmetric.d.ts.map +1 -0
  153. package/src/errors/symmetric.js +23 -0
  154. package/src/errors/symmetric.js.map +1 -0
  155. package/src/errors/token-expired.d.ts +5 -0
  156. package/src/errors/token-expired.d.ts.map +1 -0
  157. package/src/errors/token-expired.js +11 -0
  158. package/src/errors/token-expired.js.map +1 -0
  159. package/src/get-language.d.ts +2 -0
  160. package/src/get-language.d.ts.map +1 -0
  161. package/src/get-language.js +30 -0
  162. package/src/get-language.js.map +1 -0
  163. package/src/get-timezone.d.ts +3 -0
  164. package/src/get-timezone.d.ts.map +1 -0
  165. package/src/get-timezone.js +31 -0
  166. package/src/get-timezone.js.map +1 -0
  167. package/src/{index.ts → index.d.ts} +1 -1
  168. package/src/index.d.ts.map +1 -0
  169. package/src/index.js +28 -0
  170. package/src/index.js.map +1 -0
  171. package/src/interfaces/{api-error-response.ts → api-error-response.d.ts} +2 -2
  172. package/src/interfaces/api-error-response.d.ts.map +1 -0
  173. package/src/interfaces/api-error-response.js +3 -0
  174. package/src/interfaces/api-error-response.js.map +1 -0
  175. package/src/interfaces/api-express-validation-error-response.d.ts +7 -0
  176. package/src/interfaces/api-express-validation-error-response.d.ts.map +1 -0
  177. package/src/interfaces/api-express-validation-error-response.js +3 -0
  178. package/src/interfaces/api-express-validation-error-response.js.map +1 -0
  179. package/src/interfaces/api-message-response.d.ts +4 -0
  180. package/src/interfaces/api-message-response.d.ts.map +1 -0
  181. package/src/interfaces/api-message-response.js +3 -0
  182. package/src/interfaces/api-message-response.js.map +1 -0
  183. package/src/interfaces/{api-mongo-validation-error-response.ts → api-mongo-validation-error-response.d.ts} +2 -2
  184. package/src/interfaces/api-mongo-validation-error-response.d.ts.map +1 -0
  185. package/src/interfaces/api-mongo-validation-error-response.js +3 -0
  186. package/src/interfaces/api-mongo-validation-error-response.js.map +1 -0
  187. package/src/interfaces/api-responses/{backup-codes-response.ts → backup-codes-response.d.ts} +2 -2
  188. package/src/interfaces/api-responses/backup-codes-response.d.ts.map +1 -0
  189. package/src/interfaces/api-responses/backup-codes-response.js +3 -0
  190. package/src/interfaces/api-responses/backup-codes-response.js.map +1 -0
  191. package/src/interfaces/api-responses/{challenge-response.ts → challenge-response.d.ts} +3 -3
  192. package/src/interfaces/api-responses/challenge-response.d.ts.map +1 -0
  193. package/src/interfaces/api-responses/challenge-response.js +3 -0
  194. package/src/interfaces/api-responses/challenge-response.js.map +1 -0
  195. package/src/interfaces/api-responses/{code-count-response.ts → code-count-response.d.ts} +2 -2
  196. package/src/interfaces/api-responses/code-count-response.d.ts.map +1 -0
  197. package/src/interfaces/api-responses/code-count-response.js +3 -0
  198. package/src/interfaces/api-responses/code-count-response.js.map +1 -0
  199. package/src/interfaces/api-responses/{index.ts → index.d.ts} +1 -0
  200. package/src/interfaces/api-responses/index.d.ts.map +1 -0
  201. package/src/interfaces/api-responses/index.js +11 -0
  202. package/src/interfaces/api-responses/index.js.map +1 -0
  203. package/src/interfaces/api-responses/{login-response.ts → login-response.d.ts} +4 -4
  204. package/src/interfaces/api-responses/login-response.d.ts.map +1 -0
  205. package/src/interfaces/api-responses/login-response.js +3 -0
  206. package/src/interfaces/api-responses/login-response.js.map +1 -0
  207. package/src/interfaces/api-responses/{mnemonic-response.ts → mnemonic-response.d.ts} +2 -2
  208. package/src/interfaces/api-responses/mnemonic-response.d.ts.map +1 -0
  209. package/src/interfaces/api-responses/mnemonic-response.js +3 -0
  210. package/src/interfaces/api-responses/mnemonic-response.js.map +1 -0
  211. package/src/interfaces/api-responses/{registration-response.ts → registration-response.d.ts} +3 -3
  212. package/src/interfaces/api-responses/registration-response.d.ts.map +1 -0
  213. package/src/interfaces/api-responses/registration-response.js +3 -0
  214. package/src/interfaces/api-responses/registration-response.js.map +1 -0
  215. package/src/interfaces/api-responses/{request-user-response.ts → request-user-response.d.ts} +2 -2
  216. package/src/interfaces/api-responses/request-user-response.d.ts.map +1 -0
  217. package/src/interfaces/api-responses/request-user-response.js +3 -0
  218. package/src/interfaces/api-responses/request-user-response.js.map +1 -0
  219. package/src/interfaces/{application.ts → application.d.ts} +7 -7
  220. package/src/interfaces/application.d.ts.map +1 -0
  221. package/src/interfaces/application.js +3 -0
  222. package/src/interfaces/application.js.map +1 -0
  223. package/src/interfaces/backend-objects/email-token.d.ts +4 -0
  224. package/src/interfaces/backend-objects/email-token.d.ts.map +1 -0
  225. package/src/interfaces/backend-objects/email-token.js +3 -0
  226. package/src/interfaces/backend-objects/email-token.js.map +1 -0
  227. package/src/interfaces/backend-objects/{index.ts → index.d.ts} +1 -0
  228. package/src/interfaces/backend-objects/index.d.ts.map +1 -0
  229. package/src/interfaces/backend-objects/index.js +8 -0
  230. package/src/interfaces/backend-objects/index.js.map +1 -0
  231. package/src/interfaces/backend-objects/{request-user.ts → request-user.d.ts} +2 -7
  232. package/src/interfaces/backend-objects/request-user.d.ts.map +1 -0
  233. package/src/interfaces/backend-objects/request-user.js +3 -0
  234. package/src/interfaces/backend-objects/request-user.js.map +1 -0
  235. package/src/interfaces/backend-objects/{role.ts → role.d.ts} +1 -1
  236. package/src/interfaces/backend-objects/role.d.ts.map +1 -0
  237. package/src/interfaces/backend-objects/role.js +3 -0
  238. package/src/interfaces/backend-objects/role.js.map +1 -0
  239. package/src/interfaces/backend-objects/user.d.ts +4 -0
  240. package/src/interfaces/backend-objects/user.d.ts.map +1 -0
  241. package/src/interfaces/backend-objects/user.js +3 -0
  242. package/src/interfaces/backend-objects/user.js.map +1 -0
  243. package/src/interfaces/checksum-config.d.ts +5 -0
  244. package/src/interfaces/checksum-config.d.ts.map +1 -0
  245. package/src/interfaces/checksum-config.js +3 -0
  246. package/src/interfaces/checksum-config.js.map +1 -0
  247. package/src/interfaces/checksum-consts.d.ts +11 -0
  248. package/src/interfaces/checksum-consts.d.ts.map +1 -0
  249. package/src/interfaces/checksum-consts.js +3 -0
  250. package/src/interfaces/checksum-consts.js.map +1 -0
  251. package/src/interfaces/{constants.ts → constants.d.ts} +5 -5
  252. package/src/interfaces/constants.d.ts.map +1 -0
  253. package/src/interfaces/constants.js +3 -0
  254. package/src/interfaces/constants.js.map +1 -0
  255. package/src/interfaces/create-user-basics.d.ts +18 -0
  256. package/src/interfaces/create-user-basics.d.ts.map +1 -0
  257. package/src/interfaces/create-user-basics.js +3 -0
  258. package/src/interfaces/create-user-basics.js.map +1 -0
  259. package/src/interfaces/csp-config.d.ts +14 -0
  260. package/src/interfaces/csp-config.d.ts.map +1 -0
  261. package/src/interfaces/csp-config.js +3 -0
  262. package/src/interfaces/csp-config.js.map +1 -0
  263. package/src/interfaces/deep-partial.d.ts +4 -0
  264. package/src/interfaces/deep-partial.d.ts.map +1 -0
  265. package/src/interfaces/deep-partial.js +3 -0
  266. package/src/interfaces/deep-partial.js.map +1 -0
  267. package/src/interfaces/{discriminator-collections.ts → discriminator-collections.d.ts} +3 -3
  268. package/src/interfaces/discriminator-collections.d.ts.map +1 -0
  269. package/src/interfaces/discriminator-collections.js +3 -0
  270. package/src/interfaces/discriminator-collections.js.map +1 -0
  271. package/src/interfaces/email-service.d.ts +4 -0
  272. package/src/interfaces/email-service.d.ts.map +1 -0
  273. package/src/interfaces/email-service.js +3 -0
  274. package/src/interfaces/email-service.js.map +1 -0
  275. package/src/interfaces/environment-mongo.d.ts +76 -0
  276. package/src/interfaces/environment-mongo.d.ts.map +1 -0
  277. package/src/interfaces/environment-mongo.js +3 -0
  278. package/src/interfaces/environment-mongo.js.map +1 -0
  279. package/src/interfaces/environment.d.ts +181 -0
  280. package/src/interfaces/environment.d.ts.map +1 -0
  281. package/src/interfaces/environment.js +3 -0
  282. package/src/interfaces/environment.js.map +1 -0
  283. package/src/interfaces/failable-result.d.ts +7 -0
  284. package/src/interfaces/failable-result.d.ts.map +1 -0
  285. package/src/interfaces/failable-result.js +3 -0
  286. package/src/interfaces/failable-result.js.map +1 -0
  287. package/src/interfaces/fec-consts.d.ts +5 -0
  288. package/src/interfaces/fec-consts.d.ts.map +1 -0
  289. package/src/interfaces/fec-consts.js +3 -0
  290. package/src/interfaces/fec-consts.js.map +1 -0
  291. package/src/interfaces/handleable-error-options.d.ts +7 -0
  292. package/src/interfaces/handleable-error-options.d.ts.map +1 -0
  293. package/src/interfaces/handleable-error-options.js +3 -0
  294. package/src/interfaces/handleable-error-options.js.map +1 -0
  295. package/src/interfaces/{index.ts → index.d.ts} +1 -0
  296. package/src/interfaces/index.d.ts.map +1 -0
  297. package/src/interfaces/index.js +33 -0
  298. package/src/interfaces/index.js.map +1 -0
  299. package/src/interfaces/jwt-consts.d.ts +11 -0
  300. package/src/interfaces/jwt-consts.d.ts.map +1 -0
  301. package/src/interfaces/jwt-consts.js +3 -0
  302. package/src/interfaces/jwt-consts.js.map +1 -0
  303. package/src/interfaces/jwt-sign-response.d.ts +11 -0
  304. package/src/interfaces/jwt-sign-response.d.ts.map +1 -0
  305. package/src/interfaces/jwt-sign-response.js +3 -0
  306. package/src/interfaces/jwt-sign-response.js.map +1 -0
  307. package/src/interfaces/mongo-errors.d.ts +5 -0
  308. package/src/interfaces/mongo-errors.d.ts.map +1 -0
  309. package/src/interfaces/mongo-errors.js +3 -0
  310. package/src/interfaces/mongo-errors.js.map +1 -0
  311. package/src/interfaces/request-user.d.ts +42 -0
  312. package/src/interfaces/request-user.d.ts.map +1 -0
  313. package/src/interfaces/request-user.js +3 -0
  314. package/src/interfaces/request-user.js.map +1 -0
  315. package/src/interfaces/required-string-keys.d.ts +22 -0
  316. package/src/interfaces/required-string-keys.d.ts.map +1 -0
  317. package/src/interfaces/required-string-keys.js +3 -0
  318. package/src/interfaces/required-string-keys.js.map +1 -0
  319. package/src/interfaces/schema.d.ts +29 -0
  320. package/src/interfaces/schema.d.ts.map +1 -0
  321. package/src/interfaces/schema.js +3 -0
  322. package/src/interfaces/schema.js.map +1 -0
  323. package/src/interfaces/server-init-result.d.ts +35 -0
  324. package/src/interfaces/server-init-result.d.ts.map +1 -0
  325. package/src/interfaces/server-init-result.js +3 -0
  326. package/src/interfaces/server-init-result.js.map +1 -0
  327. package/src/interfaces/status-code-response.d.ts +7 -0
  328. package/src/interfaces/status-code-response.d.ts.map +1 -0
  329. package/src/interfaces/status-code-response.js +3 -0
  330. package/src/interfaces/status-code-response.js.map +1 -0
  331. package/src/interfaces/symmetric-encryption-results.d.ts +3 -3
  332. package/src/interfaces/symmetric-encryption-results.d.ts.map +1 -1
  333. package/src/interfaces/symmetric-encryption-results.js.map +1 -1
  334. package/src/interfaces/{token-response.ts → token-response.d.ts} +2 -2
  335. package/src/interfaces/token-response.d.ts.map +1 -0
  336. package/src/interfaces/token-response.js +3 -0
  337. package/src/interfaces/token-response.js.map +1 -0
  338. package/src/middlewares/authenticate-crypto.d.ts +13 -0
  339. package/src/middlewares/authenticate-crypto.d.ts.map +1 -0
  340. package/src/middlewares/authenticate-crypto.js +146 -0
  341. package/src/middlewares/authenticate-crypto.js.map +1 -0
  342. package/src/middlewares/authenticate-token.d.ts +24 -0
  343. package/src/middlewares/authenticate-token.d.ts.map +1 -0
  344. package/src/middlewares/authenticate-token.js +102 -0
  345. package/src/middlewares/authenticate-token.js.map +1 -0
  346. package/src/middlewares/cleanup-crypto.d.ts +7 -0
  347. package/src/middlewares/cleanup-crypto.d.ts.map +1 -0
  348. package/src/middlewares/cleanup-crypto.js +32 -0
  349. package/src/middlewares/cleanup-crypto.js.map +1 -0
  350. package/src/middlewares/{index.ts → index.d.ts} +1 -0
  351. package/src/middlewares/index.d.ts.map +1 -0
  352. package/src/middlewares/index.js +8 -0
  353. package/src/middlewares/index.js.map +1 -0
  354. package/src/middlewares/set-global-context-language.d.ts +3 -0
  355. package/src/middlewares/set-global-context-language.d.ts.map +1 -0
  356. package/src/middlewares/set-global-context-language.js +14 -0
  357. package/src/middlewares/set-global-context-language.js.map +1 -0
  358. package/src/middlewares.d.ts +18 -0
  359. package/src/middlewares.d.ts.map +1 -0
  360. package/src/middlewares.js +74 -0
  361. package/src/middlewares.js.map +1 -0
  362. package/src/model-registry.d.ts +23 -0
  363. package/src/model-registry.d.ts.map +1 -0
  364. package/src/model-registry.js +47 -0
  365. package/src/model-registry.js.map +1 -0
  366. package/src/models/email-token.d.ts +11 -0
  367. package/src/models/email-token.d.ts.map +1 -0
  368. package/src/models/email-token.js +11 -0
  369. package/src/models/email-token.js.map +1 -0
  370. package/src/models/{index.ts → index.d.ts} +1 -0
  371. package/src/models/index.d.ts.map +1 -0
  372. package/src/models/index.js +10 -0
  373. package/src/models/index.js.map +1 -0
  374. package/src/models/mnemonic.d.ts +11 -0
  375. package/src/models/mnemonic.d.ts.map +1 -0
  376. package/src/models/mnemonic.js +11 -0
  377. package/src/models/mnemonic.js.map +1 -0
  378. package/src/models/role.d.ts +11 -0
  379. package/src/models/role.d.ts.map +1 -0
  380. package/src/models/role.js +11 -0
  381. package/src/models/role.js.map +1 -0
  382. package/src/models/used-direct-login-token.d.ts +11 -0
  383. package/src/models/used-direct-login-token.d.ts.map +1 -0
  384. package/src/models/used-direct-login-token.js +11 -0
  385. package/src/models/used-direct-login-token.js.map +1 -0
  386. package/src/models/user-role.d.ts +6 -0
  387. package/src/models/user-role.d.ts.map +1 -0
  388. package/src/models/user-role.js +10 -0
  389. package/src/models/user-role.js.map +1 -0
  390. package/src/models/user.d.ts +7 -0
  391. package/src/models/user.d.ts.map +1 -0
  392. package/src/models/user.js +11 -0
  393. package/src/models/user.js.map +1 -0
  394. package/src/registry/email-service-registry.d.ts +9 -0
  395. package/src/registry/email-service-registry.d.ts.map +1 -0
  396. package/src/registry/email-service-registry.js +18 -0
  397. package/src/registry/email-service-registry.js.map +1 -0
  398. package/src/registry/{index.ts → index.d.ts} +1 -0
  399. package/src/registry/index.d.ts.map +1 -0
  400. package/src/registry/index.js +6 -0
  401. package/src/registry/index.js.map +1 -0
  402. package/src/routers/api.d.ts +27 -0
  403. package/src/routers/api.d.ts.map +1 -0
  404. package/src/routers/api.js +52 -0
  405. package/src/routers/api.js.map +1 -0
  406. package/src/routers/app.d.ts +28 -0
  407. package/src/routers/app.d.ts.map +1 -0
  408. package/src/routers/app.js +186 -0
  409. package/src/routers/app.js.map +1 -0
  410. package/src/routers/base.d.ts +12 -0
  411. package/src/routers/base.d.ts.map +1 -0
  412. package/src/routers/base.js +14 -0
  413. package/src/routers/base.js.map +1 -0
  414. package/src/routers/{index.ts → index.d.ts} +1 -0
  415. package/src/routers/index.d.ts.map +1 -0
  416. package/src/routers/index.js +7 -0
  417. package/src/routers/index.js.map +1 -0
  418. package/src/schemas/email-token.d.ts +38 -0
  419. package/src/schemas/email-token.d.ts.map +1 -0
  420. package/src/schemas/email-token.js +54 -0
  421. package/src/schemas/email-token.js.map +1 -0
  422. package/src/schemas/{index.ts → index.d.ts} +2 -1
  423. package/src/schemas/index.d.ts.map +1 -0
  424. package/src/schemas/index.js +11 -0
  425. package/src/schemas/index.js.map +1 -0
  426. package/src/schemas/mnemonic.d.ts +20 -0
  427. package/src/schemas/mnemonic.d.ts.map +1 -0
  428. package/src/schemas/mnemonic.js +30 -0
  429. package/src/schemas/mnemonic.js.map +1 -0
  430. package/src/schemas/role.d.ts +32 -0
  431. package/src/schemas/role.d.ts.map +1 -0
  432. package/src/schemas/role.js +86 -0
  433. package/src/schemas/role.js.map +1 -0
  434. package/src/schemas/schema.d.ts +40 -0
  435. package/src/schemas/schema.d.ts.map +1 -0
  436. package/src/schemas/schema.js +62 -0
  437. package/src/schemas/schema.js.map +1 -0
  438. package/src/schemas/used-direct-login-token.d.ts +27 -0
  439. package/src/schemas/used-direct-login-token.d.ts.map +1 -0
  440. package/src/schemas/used-direct-login-token.js +23 -0
  441. package/src/schemas/used-direct-login-token.js.map +1 -0
  442. package/src/schemas/user-role.d.ts +29 -0
  443. package/src/schemas/user-role.d.ts.map +1 -0
  444. package/src/schemas/user-role.js +54 -0
  445. package/src/schemas/user-role.js.map +1 -0
  446. package/src/schemas/user.d.ts +21 -0
  447. package/src/schemas/user.d.ts.map +1 -0
  448. package/src/schemas/user.js +176 -0
  449. package/src/schemas/user.js.map +1 -0
  450. package/src/services/backup-code.d.ts +78 -0
  451. package/src/services/backup-code.d.ts.map +1 -0
  452. package/src/services/backup-code.js +184 -0
  453. package/src/services/backup-code.js.map +1 -0
  454. package/src/services/base.d.ts +13 -0
  455. package/src/services/base.d.ts.map +1 -0
  456. package/src/services/base.js +15 -0
  457. package/src/services/base.js.map +1 -0
  458. package/src/services/checksum.d.ts +67 -0
  459. package/src/services/checksum.d.ts.map +1 -0
  460. package/src/services/checksum.js +143 -0
  461. package/src/services/checksum.js.map +1 -0
  462. package/src/services/crc.d.ts +87 -0
  463. package/src/services/crc.d.ts.map +1 -0
  464. package/src/services/crc.js +198 -0
  465. package/src/services/crc.js.map +1 -0
  466. package/src/services/database-initialization.d.ts +105 -0
  467. package/src/services/database-initialization.d.ts.map +1 -0
  468. package/src/services/database-initialization.js +782 -0
  469. package/src/services/database-initialization.js.map +1 -0
  470. package/src/services/db-init-cache.d.ts +7 -13
  471. package/src/services/db-init-cache.d.ts.map +1 -0
  472. package/src/services/db-init-cache.js +3 -0
  473. package/src/services/db-init-cache.js.map +1 -0
  474. package/src/services/direct-login-token.d.ts +9 -0
  475. package/src/services/direct-login-token.d.ts.map +1 -0
  476. package/src/services/direct-login-token.js +41 -0
  477. package/src/services/direct-login-token.js.map +1 -0
  478. package/src/services/fec-usage-example.d.ts +38 -0
  479. package/src/services/fec-usage-example.d.ts.map +1 -0
  480. package/src/services/fec-usage-example.js +75 -0
  481. package/src/services/fec-usage-example.js.map +1 -0
  482. package/src/services/fec.d.ts +46 -0
  483. package/src/services/fec.d.ts.map +1 -0
  484. package/src/services/fec.js +192 -0
  485. package/src/services/fec.js.map +1 -0
  486. package/src/services/{index.ts → index.d.ts} +1 -0
  487. package/src/services/index.d.ts.map +1 -0
  488. package/src/services/index.js +22 -0
  489. package/src/services/index.js.map +1 -0
  490. package/src/services/jwt.d.ts +33 -0
  491. package/src/services/jwt.d.ts.map +1 -0
  492. package/src/services/jwt.js +91 -0
  493. package/src/services/jwt.js.map +1 -0
  494. package/src/services/key-wrapping.d.ts +60 -0
  495. package/src/services/key-wrapping.d.ts.map +1 -0
  496. package/src/services/key-wrapping.js +311 -0
  497. package/src/services/key-wrapping.js.map +1 -0
  498. package/src/services/mnemonic.d.ts +61 -0
  499. package/src/services/mnemonic.d.ts.map +1 -0
  500. package/src/services/mnemonic.js +115 -0
  501. package/src/services/mnemonic.js.map +1 -0
  502. package/src/services/request-user.d.ts +20 -0
  503. package/src/services/request-user.d.ts.map +1 -0
  504. package/src/services/request-user.js +50 -0
  505. package/src/services/request-user.js.map +1 -0
  506. package/src/services/role.d.ts +88 -0
  507. package/src/services/role.d.ts.map +1 -0
  508. package/src/services/role.js +263 -0
  509. package/src/services/role.js.map +1 -0
  510. package/src/services/symmetric.d.ts +42 -0
  511. package/src/services/symmetric.d.ts.map +1 -0
  512. package/src/services/symmetric.js +101 -0
  513. package/src/services/symmetric.js.map +1 -0
  514. package/src/services/system-user.d.ts +17 -0
  515. package/src/services/system-user.d.ts.map +1 -0
  516. package/src/services/system-user.js +46 -0
  517. package/src/services/system-user.js.map +1 -0
  518. package/src/services/user.d.ts +320 -0
  519. package/src/services/user.d.ts.map +1 -0
  520. package/src/services/user.js +1378 -0
  521. package/src/services/user.js.map +1 -0
  522. package/src/services/xor.d.ts +24 -0
  523. package/src/services/xor.d.ts.map +1 -0
  524. package/src/services/xor.js +37 -0
  525. package/src/services/xor.js.map +1 -0
  526. package/src/types.d.ts +66 -40
  527. package/src/types.d.ts.map +1 -0
  528. package/src/types.js +14 -0
  529. package/src/types.js.map +1 -0
  530. package/src/utils.d.ts +202 -0
  531. package/src/utils.d.ts.map +1 -0
  532. package/src/utils.js +784 -0
  533. package/src/utils.js.map +1 -0
  534. package/LICENSE +0 -21
  535. package/src/application-base.ts +0 -492
  536. package/src/application.ts +0 -254
  537. package/src/backup-code.ts +0 -336
  538. package/src/constants.ts +0 -69
  539. package/src/controllers/base.ts +0 -440
  540. package/src/controllers/user.ts +0 -1451
  541. package/src/decorators/base-controller.ts +0 -61
  542. package/src/decorators/controller.ts +0 -109
  543. package/src/decorators/zod-validation.ts +0 -57
  544. package/src/defaults.ts +0 -94
  545. package/src/documents/base.ts +0 -7
  546. package/src/documents/email-token.ts +0 -14
  547. package/src/documents/used-direct-login-token.ts +0 -7
  548. package/src/enumerations/base-model-name.ts +0 -41
  549. package/src/enumerations/length-encoding-type.ts +0 -6
  550. package/src/enumerations/schema-collection.ts +0 -33
  551. package/src/enumerations/symmetric-error-type.ts +0 -4
  552. package/src/environment.ts +0 -770
  553. package/src/errors/express-validation.ts +0 -21
  554. package/src/errors/invalid-backup-code-version.ts +0 -14
  555. package/src/errors/invalid-jwt-token.ts +0 -10
  556. package/src/errors/invalid-model.ts +0 -11
  557. package/src/errors/invalid-new-password.ts +0 -18
  558. package/src/errors/invalid-password.ts +0 -13
  559. package/src/errors/missing-validated-data.ts +0 -36
  560. package/src/errors/mnemonic-or-password-required.ts +0 -12
  561. package/src/errors/model-not-registered.ts +0 -11
  562. package/src/errors/mongoose-validation.ts +0 -34
  563. package/src/errors/symmetric.ts +0 -41
  564. package/src/errors/token-expired.ts +0 -10
  565. package/src/get-language.ts +0 -53
  566. package/src/get-timezone.ts +0 -45
  567. package/src/interfaces/api-express-validation-error-response.ts +0 -8
  568. package/src/interfaces/api-message-response.ts +0 -3
  569. package/src/interfaces/backend-objects/email-token.ts +0 -11
  570. package/src/interfaces/backend-objects/user.ts +0 -9
  571. package/src/interfaces/checksum-config.ts +0 -4
  572. package/src/interfaces/checksum-consts.ts +0 -13
  573. package/src/interfaces/create-user-basics.ts +0 -17
  574. package/src/interfaces/csp-config.ts +0 -35
  575. package/src/interfaces/deep-partial.ts +0 -3
  576. package/src/interfaces/email-service.ts +0 -8
  577. package/src/interfaces/environment-mongo.ts +0 -76
  578. package/src/interfaces/environment.ts +0 -181
  579. package/src/interfaces/failable-result.ts +0 -6
  580. package/src/interfaces/fec-consts.ts +0 -4
  581. package/src/interfaces/handleable-error-options.ts +0 -6
  582. package/src/interfaces/jwt-consts.ts +0 -23
  583. package/src/interfaces/jwt-sign-response.ts +0 -19
  584. package/src/interfaces/mongo-errors.ts +0 -5
  585. package/src/interfaces/request-user.ts +0 -50
  586. package/src/interfaces/required-string-keys.ts +0 -26
  587. package/src/interfaces/schema.ts +0 -31
  588. package/src/interfaces/server-init-result.ts +0 -37
  589. package/src/interfaces/status-code-response.ts +0 -7
  590. package/src/interfaces/symmetric-encryption-results.ts +0 -4
  591. package/src/middlewares/authenticate-crypto.ts +0 -243
  592. package/src/middlewares/authenticate-token.ts +0 -152
  593. package/src/middlewares/cleanup-crypto.ts +0 -40
  594. package/src/middlewares/set-global-context-language.ts +0 -24
  595. package/src/middlewares.ts +0 -120
  596. package/src/model-registry.ts +0 -75
  597. package/src/models/email-token.ts +0 -19
  598. package/src/models/mnemonic.ts +0 -19
  599. package/src/models/role.ts +0 -19
  600. package/src/models/used-direct-login-token.ts +0 -23
  601. package/src/models/user-role.ts +0 -17
  602. package/src/models/user.ts +0 -19
  603. package/src/registry/email-service-registry.ts +0 -24
  604. package/src/routers/api.ts +0 -151
  605. package/src/routers/app.ts +0 -258
  606. package/src/routers/base.ts +0 -17
  607. package/src/schemas/email-token.ts +0 -91
  608. package/src/schemas/mnemonic.ts +0 -37
  609. package/src/schemas/role.ts +0 -127
  610. package/src/schemas/schema.ts +0 -140
  611. package/src/schemas/used-direct-login-token.ts +0 -38
  612. package/src/schemas/user-role.ts +0 -75
  613. package/src/schemas/user.ts +0 -202
  614. package/src/services/backup-code.ts +0 -316
  615. package/src/services/base.ts +0 -33
  616. package/src/services/checksum.ts +0 -161
  617. package/src/services/crc.ts +0 -213
  618. package/src/services/database-initialization.ts +0 -1479
  619. package/src/services/direct-login-token.ts +0 -62
  620. package/src/services/fec-usage-example.ts +0 -102
  621. package/src/services/fec.ts +0 -296
  622. package/src/services/jwt.ts +0 -134
  623. package/src/services/key-wrapping.ts +0 -434
  624. package/src/services/mnemonic.ts +0 -167
  625. package/src/services/request-user.ts +0 -62
  626. package/src/services/role.ts +0 -396
  627. package/src/services/symmetric.ts +0 -139
  628. package/src/services/system-user.ts +0 -82
  629. package/src/services/user.ts +0 -2137
  630. package/src/services/xor.ts +0 -34
  631. package/src/types.ts +0 -128
  632. package/src/utils.ts +0 -1022
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SymmetricService = void 0;
4
+ const ecies_lib_1 = require("@digitaldefiance/ecies-lib");
5
+ const crypto_1 = require("crypto");
6
+ const symmetric_error_type_1 = require("../enumerations/symmetric-error-type");
7
+ const symmetric_1 = require("../errors/symmetric");
8
+ function hasToJsonMethod(obj) {
9
+ return typeof obj === 'object' && obj !== null && 'toJson' in obj;
10
+ }
11
+ /**
12
+ * Service for handling symmetric encryption operations.
13
+ * This service provides functionality for:
14
+ * - AES encryption/decryption of buffers and JSON data
15
+ * - Key and IV generation
16
+ * - Secure cryptographic operations
17
+ */
18
+ class SymmetricService {
19
+ static symmetricKeyBits(eciesConstants = ecies_lib_1.ECIES) {
20
+ return eciesConstants.SYMMETRIC.KEY_BITS;
21
+ }
22
+ static symmetricKeyBytes(eciesConstants = ecies_lib_1.ECIES) {
23
+ return eciesConstants.SYMMETRIC.KEY_SIZE;
24
+ }
25
+ /**
26
+ * Encrypt data with AES
27
+ * @param data The data to encrypt
28
+ * @param encryptionKey Optional encryption key (will be randomly generated if not provided)
29
+ * @returns Object containing encrypted data and key
30
+ */
31
+ static encryptBuffer(data, encryptionKey, eciesConstants = ecies_lib_1.ECIES) {
32
+ if (encryptionKey &&
33
+ encryptionKey.length != eciesConstants.SYMMETRIC.KEY_SIZE) {
34
+ throw new symmetric_1.SymmetricError(symmetric_error_type_1.SymmetricErrorType.InvalidKeyLength);
35
+ }
36
+ // encrypt the document using AES-256 and the key
37
+ // Initialization Vector
38
+ const ivBuffer = (0, crypto_1.randomBytes)(eciesConstants.IV_SIZE);
39
+ const key = encryptionKey ?? (0, crypto_1.randomBytes)(eciesConstants.SYMMETRIC.KEY_SIZE);
40
+ const cipher = (0, crypto_1.createCipheriv)(eciesConstants.SYMMETRIC_ALGORITHM_CONFIGURATION, key, ivBuffer);
41
+ const ciphertextBuffer = cipher.update(data);
42
+ const finalBuffer = cipher.final();
43
+ const authTag = cipher.getAuthTag();
44
+ const encryptionIvPlusData = Buffer.concat([
45
+ ivBuffer,
46
+ ciphertextBuffer,
47
+ finalBuffer,
48
+ authTag,
49
+ ]);
50
+ return {
51
+ encryptedData: encryptionIvPlusData,
52
+ key: key,
53
+ };
54
+ }
55
+ /**
56
+ * Decrypt the given buffer with AES
57
+ * @param encryptedData The encrypted data to decrypt
58
+ * @param key The key to use for decryption
59
+ * @returns Decrypted data as a Buffer
60
+ */
61
+ static decryptBuffer(encryptedData, key, eciesConstants = ecies_lib_1.ECIES) {
62
+ const ivBuffer = encryptedData.subarray(0, eciesConstants.IV_SIZE);
63
+ const authTagStart = encryptedData.length - eciesConstants.AUTH_TAG_SIZE;
64
+ const ciphertextBuffer = encryptedData.subarray(eciesConstants.IV_SIZE, authTagStart);
65
+ const authTag = encryptedData.subarray(authTagStart);
66
+ const decipher = (0, crypto_1.createDecipheriv)(eciesConstants.SYMMETRIC_ALGORITHM_CONFIGURATION, key, ivBuffer);
67
+ decipher.setAuthTag(authTag);
68
+ return Buffer.concat([decipher.update(ciphertextBuffer), decipher.final()]);
69
+ }
70
+ /**
71
+ * Encrypt JSON data with AES
72
+ * @param data The data to encrypt
73
+ * @param encryptionKey Optional encryption key (will be randomly generated if not provided)
74
+ * @returns Object containing encrypted data and key
75
+ */
76
+ static encryptJson(data, encryptionKey) {
77
+ if (data === null || data === undefined) {
78
+ throw new symmetric_1.SymmetricError(symmetric_error_type_1.SymmetricErrorType.DataNullOrUndefined);
79
+ }
80
+ let dataBuffer;
81
+ if (hasToJsonMethod(data)) {
82
+ // amazonq-ignore-next-line false positive
83
+ dataBuffer = Buffer.from(data.toJson(), 'utf8');
84
+ }
85
+ else {
86
+ dataBuffer = Buffer.from(JSON.stringify(data), 'utf8');
87
+ }
88
+ return SymmetricService.encryptBuffer(dataBuffer, encryptionKey);
89
+ }
90
+ /**
91
+ * Decrypt the given buffer with AES and parse as JSON
92
+ * @param encryptedData The encrypted data to decrypt
93
+ * @param key The key to use for decryption
94
+ * @returns Decrypted data parsed as type T
95
+ */
96
+ static decryptJson(encryptedData, key) {
97
+ return JSON.parse(SymmetricService.decryptBuffer(encryptedData, key).toString('utf8'));
98
+ }
99
+ }
100
+ exports.SymmetricService = SymmetricService;
101
+ //# sourceMappingURL=symmetric.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symmetric.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/services/symmetric.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { Member as BackendMember } from '@digitaldefiance/node-ecies-lib';
2
+ import { IConstants } from '@digitaldefiance/suite-core-lib';
3
+ import { Environment } from '../environment';
4
+ /**
5
+ * Service to manage the system member's wallet.
6
+ */
7
+ export declare class SystemUserService {
8
+ private static systemUser;
9
+ private static eciesService;
10
+ /**
11
+ * Initializes and returns the system member's Member instance.
12
+ * The mnemonic should be stored securely in environment variables.
13
+ */
14
+ static getSystemUser(environment: Environment, constants?: IConstants): BackendMember;
15
+ static setSystemUser(user: BackendMember, constants?: IConstants): void;
16
+ }
17
+ //# sourceMappingURL=system-user.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-user.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/services/system-user.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,MAAM,IAAI,aAAa,EAExB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAEL,UAAU,EAGX,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,UAAU,CAA8B;IACvD,OAAO,CAAC,MAAM,CAAC,YAAY,CAAoC;IAE/D;;;OAGG;WACW,aAAa,CACzB,WAAW,EAAE,WAAW,EACxB,SAAS,GAAE,UAAsB,GAChC,aAAa;WAsCF,aAAa,CACzB,IAAI,EAAE,aAAa,EACnB,SAAS,GAAE,UAAsB,GAChC,IAAI;CAQR"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SystemUserService = void 0;
4
+ const ecies_lib_1 = require("@digitaldefiance/ecies-lib");
5
+ const node_ecies_lib_1 = require("@digitaldefiance/node-ecies-lib");
6
+ const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
7
+ /**
8
+ * Service to manage the system member's wallet.
9
+ */
10
+ class SystemUserService {
11
+ static systemUser = null;
12
+ static eciesService = new node_ecies_lib_1.ECIESService();
13
+ /**
14
+ * Initializes and returns the system member's Member instance.
15
+ * The mnemonic should be stored securely in environment variables.
16
+ */
17
+ static getSystemUser(environment, constants = suite_core_lib_1.Constants) {
18
+ if (!SystemUserService.systemUser) {
19
+ if (!environment.systemMnemonic) {
20
+ throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Admin_EnvNotSetTemplate, {
21
+ NAME: 'SYSTEM_MNEMONIC',
22
+ });
23
+ }
24
+ const mnemonic = environment.systemMnemonic;
25
+ const { wallet } = SystemUserService.eciesService.walletAndSeedFromMnemonic(mnemonic);
26
+ const keyPair = SystemUserService.eciesService.walletToSimpleKeyPairBuffer(wallet);
27
+ SystemUserService.systemUser = new node_ecies_lib_1.Member(SystemUserService.eciesService, ecies_lib_1.MemberType.System, constants.SystemUser, new ecies_lib_1.EmailString(constants.SystemEmail), keyPair.publicKey, new ecies_lib_1.SecureBuffer(keyPair.privateKey), wallet);
28
+ if (SystemUserService.systemUser.publicKey.toString('hex') !==
29
+ environment.systemPublicKeyHex) {
30
+ console.warn('System public key does not match environment variable', {
31
+ derived: SystemUserService.systemUser.publicKey.toString('hex'),
32
+ expected: environment.systemPublicKeyHex,
33
+ });
34
+ }
35
+ }
36
+ return SystemUserService.systemUser;
37
+ }
38
+ static setSystemUser(user, constants = suite_core_lib_1.Constants) {
39
+ if (user.type !== ecies_lib_1.MemberType.System || user.name !== constants.SystemUser) {
40
+ throw new Error('setSystemUser can only be called with a MemberType.System user');
41
+ }
42
+ SystemUserService.systemUser = user;
43
+ }
44
+ }
45
+ exports.SystemUserService = SystemUserService;
46
+ //# sourceMappingURL=system-user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-user.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/services/system-user.ts"],"names":[],"mappings":";;;AAAA,0DAKoC;AACpC,oEAGyC;AACzC,oEAKyC;AAGzC;;GAEG;AACH,MAAa,iBAAiB;IACpB,MAAM,CAAC,UAAU,GAAyB,IAAI,CAAC;IAC/C,MAAM,CAAC,YAAY,GAAiB,IAAI,6BAAY,EAAE,CAAC;IAE/D;;;OAGG;IACI,MAAM,CAAC,aAAa,CACzB,WAAwB,EACxB,YAAwB,0BAAS;QAEjC,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC;YAClC,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;gBAChC,MAAM,IAAI,uCAAsB,CAC9B,mCAAkB,CAAC,uBAAuB,EAC1C;oBACE,IAAI,EAAE,iBAAiB;iBACxB,CACF,CAAC;YACJ,CAAC;YACD,MAAM,QAAQ,GAAiB,WAAW,CAAC,cAAc,CAAC;YAC1D,MAAM,EAAE,MAAM,EAAE,GACd,iBAAiB,CAAC,YAAY,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;YACrE,MAAM,OAAO,GACX,iBAAiB,CAAC,YAAY,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;YAErE,iBAAiB,CAAC,UAAU,GAAG,IAAI,uBAAa,CAC9C,iBAAiB,CAAC,YAAY,EAC9B,sBAAU,CAAC,MAAM,EACjB,SAAS,CAAC,UAAU,EACpB,IAAI,uBAAW,CAAC,SAAS,CAAC,WAAW,CAAC,EACtC,OAAO,CAAC,SAAS,EACjB,IAAI,wBAAY,CAAC,OAAO,CAAC,UAAU,CAAC,EACpC,MAAM,CACP,CAAC;YACF,IACE,iBAAiB,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACtD,WAAW,CAAC,kBAAkB,EAC9B,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,uDAAuD,EAAE;oBACpE,OAAO,EAAE,iBAAiB,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAC/D,QAAQ,EAAE,WAAW,CAAC,kBAAkB;iBACzC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,OAAO,iBAAiB,CAAC,UAAU,CAAC;IACtC,CAAC;IAEM,MAAM,CAAC,aAAa,CACzB,IAAmB,EACnB,YAAwB,0BAAS;QAEjC,IAAI,IAAI,CAAC,IAAI,KAAK,sBAAU,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,UAAU,EAAE,CAAC;YAC1E,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE,CAAC;QACJ,CAAC;QACD,iBAAiB,CAAC,UAAU,GAAG,IAAI,CAAC;IACtC,CAAC;;AA3DH,8CA4DC"}
@@ -0,0 +1,320 @@
1
+ import { SecureBuffer, SecureString, SignatureString } from '@digitaldefiance/ecies-lib';
2
+ import { Member as BackendMember, ECIESService } from '@digitaldefiance/node-ecies-lib';
3
+ import { EmailTokenType, IBackupCode, IRequestUserDTO, ITokenRole, IUserBase, IUserDTO } from '@digitaldefiance/suite-core-lib';
4
+ import { Wallet } from '@ethereumjs/wallet';
5
+ import { ClientSession, ProjectionType, Types } from 'mongoose';
6
+ import { BackupCode } from '../backup-code';
7
+ import { IBaseDocument } from '../documents';
8
+ import { IEmailTokenDocument } from '../documents/email-token';
9
+ import { IUserDocument } from '../documents/user';
10
+ import { Environment } from '../environment';
11
+ import { ICreateUserBasics } from '../interfaces';
12
+ import { IApplication } from '../interfaces/application';
13
+ import { IUserBackendObject } from '../interfaces/backend-objects/user';
14
+ import { IConstants } from '../interfaces/constants';
15
+ import { IEmailService } from '../interfaces/email-service';
16
+ import { BackupCodeService } from './backup-code';
17
+ import { BaseService } from './base';
18
+ import { KeyWrappingService } from './key-wrapping';
19
+ import { MnemonicService } from './mnemonic';
20
+ import { RoleService } from './role';
21
+ export declare class UserService<T, I extends Types.ObjectId | string, D extends Date, S extends string, A extends string, TEnvironment extends Environment = Environment, TConstants extends IConstants = IConstants, TBaseDocument extends IBaseDocument<T, I> = IBaseDocument<T, I>, TUser extends IUserBase<I, D, S, A> = IUserBase<I, D, S, A>, TTokenRole extends ITokenRole<I, D> = ITokenRole<I, D>, TApplication extends IApplication<T, I, TBaseDocument, TEnvironment, TConstants> = IApplication<T, I, TBaseDocument, TEnvironment, TConstants>> extends BaseService {
22
+ protected readonly roleService: RoleService<I, D, TTokenRole>;
23
+ protected readonly eciesService: ECIESService;
24
+ protected readonly keyWrappingService: KeyWrappingService;
25
+ protected readonly mnemonicService: MnemonicService;
26
+ protected readonly emailService: IEmailService;
27
+ protected readonly backupCodeService: BackupCodeService<I, D, TTokenRole, TApplication>;
28
+ protected readonly serverUrl: string;
29
+ protected readonly disableEmailSend: boolean;
30
+ constructor(application: IApplication<T, I, TBaseDocument, TEnvironment, TConstants>, roleService: RoleService<I, D, TTokenRole>, emailService: IEmailService, keyWrappingService: KeyWrappingService, backupCodeService: BackupCodeService<I, D, TTokenRole, TApplication>);
31
+ /**
32
+ * Given a User Document, make a User DTO
33
+ * @param user a User Document
34
+ * @returns An IUserDTO
35
+ */
36
+ static userToUserDTO(user: IUserDocument | Record<string, unknown>): IUserDTO;
37
+ /**
38
+ * Given a User DTO, reconstitute ids and dates
39
+ * @param user a User DTO
40
+ * @returns An IUserBackendObject
41
+ */
42
+ hydrateUserDTOToBackend(user: IUserDTO): IUserBackendObject<string>;
43
+ /**
44
+ * Create a new email token to send to the user for email verification
45
+ * @param userDoc The user to create the email token for
46
+ * @param type The type of email token to create
47
+ * @param session The session to use for the query
48
+ * @returns The email token document
49
+ */
50
+ createEmailToken(userDoc: IUserDocument, type: EmailTokenType, session?: ClientSession): Promise<IEmailTokenDocument>;
51
+ /**
52
+ * Create and send an email token to the user for email verification
53
+ * @param user The user to send the email token to
54
+ * @param type The type of email token to send
55
+ * @param session The session to use for the query
56
+ * @returns The email token document
57
+ */
58
+ createAndSendEmailToken(user: IUserDocument, type?: EmailTokenType, session?: ClientSession, debug?: boolean): Promise<IEmailTokenDocument>;
59
+ /**
60
+ * Create and send an email token directly within an existing transaction
61
+ * @param user The user to send the email token to
62
+ * @param type The type of email token to send
63
+ * @param session The session to use for the query (required)
64
+ * @param debug Whether to enable debug logging
65
+ * @returns The email token document
66
+ */
67
+ createAndSendEmailTokenDirect(user: IUserDocument, type: EmailTokenType | undefined, session: ClientSession, debug?: boolean): Promise<IEmailTokenDocument>;
68
+ /**
69
+ * Send an email token to the user for email verification
70
+ * @param emailToken The email token to send
71
+ * @param session The session to use for the query
72
+ * @returns void
73
+ */
74
+ sendEmailToken(emailToken: IEmailTokenDocument, session?: ClientSession, debug?: boolean): Promise<void>;
75
+ /**
76
+ * Find a user by email or username and enforce account status checks
77
+ * @param email Optional email
78
+ * @param username Optional username
79
+ * @param session Optional mongoose session
80
+ * @throws UsernameOrEmailRequiredError if neither provided
81
+ * @throws InvalidCredentialsError if not found or deleted
82
+ * @throws AccountLockedError | PendingEmailVerificationError | AccountStatusError per status
83
+ */
84
+ findUser(email?: string, username?: string, session?: ClientSession): Promise<IUserDocument>;
85
+ /**
86
+ * Finds a user record by ID
87
+ * @param userId The user ID
88
+ * @param throwIfNotActive Whether to throw if the user is inactive
89
+ * @param session The active session, if present
90
+ * @returns The user document
91
+ */
92
+ findUserById(userId: Types.ObjectId, throwIfNotActive: boolean, session?: ClientSession, select?: ProjectionType<IUserDocument>): Promise<IUserDocument>;
93
+ /**
94
+ * Ensure required fields are present in a projection for queries that rely on them.
95
+ * Supports string and object-style projections. For inclusion projections, adds fields.
96
+ * For exclusion projections, ensures required fields are not excluded.
97
+ */
98
+ private ensureRequiredFieldsInProjection;
99
+ /**
100
+ * Fill in the default values to a user object
101
+ * @param newUser The user object to fill in
102
+ * @param createdBy The user ID of the user creating the new user
103
+ * @returns The filled in user
104
+ */
105
+ fillUserDefaults(newUser: ICreateUserBasics, createdBy: Types.ObjectId, backupCodes: Array<IBackupCode>, encryptedMnemonic: string, userId?: Types.ObjectId): IUserBackendObject<string>;
106
+ /**
107
+ * Create a new user document from an IUser and unhashed password
108
+ * @param newUser The user object
109
+ * @returns The new user document
110
+ */
111
+ makeUserDoc(newUser: TUser): Promise<IUserDocument>;
112
+ /**
113
+ * Create a new user.
114
+ * Do not set createdBy to a new (non-existing) ObjectId unless you also set newUserId to it.
115
+ * If newUserId is not set, one will be generated.
116
+ * @param systemUser The system user performing the operation
117
+ * @param userData Username, email, password in a ICreateUserBasics object
118
+ * @param createdBy The user id of the user creating the user
119
+ * @param newUserId the user id of the new user object- usually the createdBy user id.
120
+ * @param session The session to use for the query
121
+ * @param debug Whether to log debug information
122
+ * @param password The password to use for the new user (optional, if not provided, mnemonic will be used)
123
+ * @returns The new user document
124
+ */
125
+ newUser(systemUser: BackendMember, userData: ICreateUserBasics, createdBy?: Types.ObjectId, newUserId?: Types.ObjectId, session?: ClientSession, debug?: boolean, password?: string): Promise<{
126
+ user: IUserDocument;
127
+ mnemonic: string;
128
+ backupCodes: Array<string>;
129
+ password?: string;
130
+ }>;
131
+ /**
132
+ * Get the backup codes for a user.
133
+ * Requires the user not be deleted or inactive
134
+ */
135
+ getEncryptedUserBackupCodes(userId: Types.ObjectId, session?: ClientSession): Promise<Array<IBackupCode>>;
136
+ /**
137
+ * Resets the given user's backup codes
138
+ * @param backupUser The user to generate codes for
139
+ * @param session The current session, if any
140
+ * @returns A promise of an array of backup codes
141
+ */
142
+ resetUserBackupCodes(backupUser: BackendMember, systemUser: BackendMember, session?: ClientSession): Promise<Array<BackupCode>>;
143
+ /**
144
+ * Recover a user's mnemonic from an encrypted mnemonic
145
+ * @param user The user whose mnemonic to recover
146
+ * @param encryptedMnemonic The encrypted mnemonic
147
+ * @returns The recovered mnemonic
148
+ */
149
+ recoverMnemonic(user: BackendMember, encryptedMnemonic: string): SecureString;
150
+ /**
151
+ * Make a Member from a user document and optional private key
152
+ * @param userDoc The user document
153
+ * @param privateKey Optional private key to load the wallet
154
+ * @param publicKey Optional public key to override the userDoc public key
155
+ * @param session The current session, if any
156
+ * @returns A promise containing the created Member
157
+ */
158
+ makeUserFromUserDoc(userDoc: IUserDocument, privateKey?: SecureBuffer, publicKey?: Buffer, mnemonic?: SecureString, wallet?: Wallet, session?: ClientSession): Promise<BackendMember>;
159
+ /**
160
+ * Challenges a given userDoc with a given mnemonic, returns a system and user Member
161
+ * @param userDoc The userDoc in question
162
+ * @param mnemonic The mnemonic to challenge against
163
+ * @returns A promise containing the user and system Members
164
+ * @throws InvalidCredentialsError if the challenge fails
165
+ * @throws AccountLockedError if the account is locked
166
+ * @throws PendingEmailVerificationError if the email is not verified
167
+ * @throws AccountStatusError if the account status is invalid
168
+ */
169
+ challengeUserWithMnemonic(userDoc: IUserDocument, mnemonic: SecureString, session?: ClientSession): Promise<{
170
+ userMember: BackendMember;
171
+ adminMember: BackendMember;
172
+ }>;
173
+ /**
174
+ * Validates a login challenge response
175
+ * @param challengeResponse The challenge response bytes in hex
176
+ * @param email The email address of the user
177
+ * @param username The username of the user
178
+ * @param session The mongo session for the query
179
+ * @returns A promise that resolves to the user document, user member, and system member
180
+ */
181
+ loginWithChallengeResponse(challengeResponse: string, email?: string, username?: string, session?: ClientSession): Promise<{
182
+ userDoc: IUserDocument;
183
+ userMember: BackendMember;
184
+ adminMember: BackendMember;
185
+ }>;
186
+ /**
187
+ * Authenticate a user with client-verified challenge (skips server-side challenge)
188
+ * @returns The authenticated user document.
189
+ */
190
+ loginWithClientVerifiedChallenge(usernameOrEmail: string, mnemonic: SecureString, session?: ClientSession): Promise<{
191
+ userDoc: IUserDocument;
192
+ userMember: BackendMember;
193
+ adminMember: BackendMember;
194
+ }>;
195
+ /**
196
+ * Authenticate a user with their mnemonic.
197
+ * @returns The authenticated user document.
198
+ */
199
+ loginWithMnemonic(usernameOrEmail: string, mnemonic: SecureString, session?: ClientSession): Promise<{
200
+ userDoc: IUserDocument;
201
+ userMember: BackendMember;
202
+ adminMember: BackendMember;
203
+ }>;
204
+ /**
205
+ * Authenticate a user with their password (for key-wrapped accounts).
206
+ * @returns The authenticated user document.
207
+ */
208
+ loginWithPassword(usernameOrEmail: string, password: string, session?: ClientSession): Promise<{
209
+ userDoc: IUserDocument;
210
+ userMember: BackendMember;
211
+ adminMember: BackendMember;
212
+ }>;
213
+ /**
214
+ * Re-send a previously sent email token
215
+ * @param userId The user id
216
+ * @param session The session to use for the query
217
+ * @returns void
218
+ * @throws EmailTokenUsedOrInvalidError
219
+ */
220
+ resendEmailToken(userId: string, type: EmailTokenType, session?: ClientSession, debug?: boolean): Promise<void>;
221
+ /**
222
+ * Verify the email token and update the user's account status
223
+ * @param emailToken The email token to verify
224
+ * @param session The session to use for the query
225
+ * @returns void
226
+ * @throws EmailTokenUsedOrInvalidError
227
+ * @throws EmailTokenExpiredError
228
+ * @throws EmailVerifiedError
229
+ * @throws UserNotFoundError
230
+ */
231
+ verifyAccountTokenAndComplete(emailToken: string, session?: ClientSession): Promise<void>;
232
+ /**
233
+ * Validate the email token
234
+ * @param token The token to validate
235
+ * @param restrictType The type of email token to validate (or throw)
236
+ * @param session The session to use for the query
237
+ * @returns void
238
+ * @throws EmailTokenUsedOrInvalidError
239
+ */
240
+ validateEmailToken(token: string, restrictType?: EmailTokenType, session?: ClientSession): Promise<void>;
241
+ /**
242
+ * Updates the user's language
243
+ * @param userId - The ID of the user
244
+ * @param newLanguage - The new language
245
+ * @param session - The session to use for the query
246
+ * @returns The updated user
247
+ */
248
+ updateSiteLanguage(userId: string, newLanguage: string, session?: ClientSession): Promise<IRequestUserDTO>;
249
+ /**
250
+ * Changes the user's password by re-wrapping their master key
251
+ * @param userId - The ID of the user
252
+ * @param currentPassword - The current password
253
+ * @param newPassword - The new password
254
+ * @param session - The session to use for the query
255
+ * @returns void
256
+ */
257
+ changePassword(userId: string, currentPassword: string, newPassword: string, session?: ClientSession): Promise<void>;
258
+ /**
259
+ * Retrieve an email token by its token string and type
260
+ * @param token - The token string
261
+ * @param type - The type of the email token
262
+ * @param session - The session to use for the query
263
+ * @returns The email token document or null if not found
264
+ */
265
+ findEmailToken(token: string, type?: EmailTokenType, session?: ClientSession): Promise<IEmailTokenDocument | null>;
266
+ /**
267
+ * Verify email token is valid
268
+ * @param token - The email token
269
+ * @param session - The session to use for the query
270
+ * @returns void
271
+ */
272
+ verifyEmailToken(token: string, type: EmailTokenType, session?: ClientSession): Promise<void>;
273
+ /**
274
+ * Reset password using email token
275
+ * @param token - The email token
276
+ * @param newPassword - The new password
277
+ * @param session - The session to use for the query
278
+ * @returns void
279
+ */
280
+ resetPasswordWithToken(token: string, newPassword: string, credential?: string, // either mnemonic or current password; required
281
+ session?: ClientSession): Promise<void>;
282
+ /**
283
+ * Generate a login challenge for the client to sign
284
+ * @returns The login challenge in hex
285
+ */
286
+ generateDirectLoginChallenge(): string;
287
+ /**
288
+ * Verifies a direct login challenge response
289
+ * @param serverSignedRequest The login challenge response in hex
290
+ * @param session The mongoose session, if provided
291
+ * @returns A promise with the user document and user member object
292
+ */
293
+ verifyDirectLoginChallenge(serverSignedRequest: string, signature: SignatureString, username?: string, email?: string, session?: ClientSession): Promise<{
294
+ userDoc: IUserDocument;
295
+ userMember: BackendMember;
296
+ }>;
297
+ /**
298
+ * Request a login link via email
299
+ * @param email Email address
300
+ * @param username Username
301
+ * @param session Existing session, if any
302
+ * @returns void
303
+ */
304
+ requestEmailLogin(email?: string, username?: string, session?: ClientSession): Promise<void>;
305
+ /**
306
+ * Validate an email login token challenge
307
+ * @param token The token to challenge
308
+ * @param signature The signature of the token by the user's private key
309
+ * @param session The session to use for the query
310
+ * @returns The user document if the challenge is valid
311
+ */
312
+ validateEmailLoginTokenChallenge(token: string, signature: SignatureString, session?: ClientSession): Promise<IUserDocument>;
313
+ /**
314
+ * Updates the user's last login time atomically
315
+ * @param userId - The ID of the user
316
+ * @returns void
317
+ */
318
+ updateLastLogin(userId: Types.ObjectId): Promise<void>;
319
+ }
320
+ //# sourceMappingURL=user.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/services/user.ts"],"names":[],"mappings":"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"}