@digitaldefiance/node-express-suite 1.0.23 → 1.0.24

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 (629) hide show
  1. package/README.md +4 -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/direct-login-token.d.ts +9 -0
  471. package/src/services/direct-login-token.d.ts.map +1 -0
  472. package/src/services/direct-login-token.js +41 -0
  473. package/src/services/direct-login-token.js.map +1 -0
  474. package/src/services/fec-usage-example.d.ts +38 -0
  475. package/src/services/fec-usage-example.d.ts.map +1 -0
  476. package/src/services/fec-usage-example.js +75 -0
  477. package/src/services/fec-usage-example.js.map +1 -0
  478. package/src/services/fec.d.ts +46 -0
  479. package/src/services/fec.d.ts.map +1 -0
  480. package/src/services/fec.js +192 -0
  481. package/src/services/fec.js.map +1 -0
  482. package/src/services/{index.ts → index.d.ts} +1 -0
  483. package/src/services/index.d.ts.map +1 -0
  484. package/src/services/index.js +22 -0
  485. package/src/services/index.js.map +1 -0
  486. package/src/services/jwt.d.ts +33 -0
  487. package/src/services/jwt.d.ts.map +1 -0
  488. package/src/services/jwt.js +91 -0
  489. package/src/services/jwt.js.map +1 -0
  490. package/src/services/key-wrapping.d.ts +60 -0
  491. package/src/services/key-wrapping.d.ts.map +1 -0
  492. package/src/services/key-wrapping.js +311 -0
  493. package/src/services/key-wrapping.js.map +1 -0
  494. package/src/services/mnemonic.d.ts +61 -0
  495. package/src/services/mnemonic.d.ts.map +1 -0
  496. package/src/services/mnemonic.js +115 -0
  497. package/src/services/mnemonic.js.map +1 -0
  498. package/src/services/request-user.d.ts +20 -0
  499. package/src/services/request-user.d.ts.map +1 -0
  500. package/src/services/request-user.js +50 -0
  501. package/src/services/request-user.js.map +1 -0
  502. package/src/services/role.d.ts +88 -0
  503. package/src/services/role.d.ts.map +1 -0
  504. package/src/services/role.js +263 -0
  505. package/src/services/role.js.map +1 -0
  506. package/src/services/symmetric.d.ts +42 -0
  507. package/src/services/symmetric.d.ts.map +1 -0
  508. package/src/services/symmetric.js +101 -0
  509. package/src/services/symmetric.js.map +1 -0
  510. package/src/services/system-user.d.ts +17 -0
  511. package/src/services/system-user.d.ts.map +1 -0
  512. package/src/services/system-user.js +46 -0
  513. package/src/services/system-user.js.map +1 -0
  514. package/src/services/user.d.ts +320 -0
  515. package/src/services/user.d.ts.map +1 -0
  516. package/src/services/user.js +1378 -0
  517. package/src/services/user.js.map +1 -0
  518. package/src/services/xor.d.ts +24 -0
  519. package/src/services/xor.d.ts.map +1 -0
  520. package/src/services/xor.js +37 -0
  521. package/src/services/xor.js.map +1 -0
  522. package/src/types.d.ts +66 -40
  523. package/src/types.d.ts.map +1 -0
  524. package/src/types.js +14 -0
  525. package/src/types.js.map +1 -0
  526. package/src/utils.d.ts +202 -0
  527. package/src/utils.d.ts.map +1 -0
  528. package/src/utils.js +784 -0
  529. package/src/utils.js.map +1 -0
  530. package/LICENSE +0 -21
  531. package/src/application-base.ts +0 -492
  532. package/src/application.ts +0 -254
  533. package/src/backup-code.ts +0 -336
  534. package/src/constants.ts +0 -69
  535. package/src/controllers/base.ts +0 -440
  536. package/src/controllers/user.ts +0 -1451
  537. package/src/decorators/base-controller.ts +0 -61
  538. package/src/decorators/controller.ts +0 -109
  539. package/src/decorators/zod-validation.ts +0 -57
  540. package/src/defaults.ts +0 -94
  541. package/src/documents/base.ts +0 -7
  542. package/src/documents/email-token.ts +0 -14
  543. package/src/documents/used-direct-login-token.ts +0 -7
  544. package/src/enumerations/base-model-name.ts +0 -41
  545. package/src/enumerations/length-encoding-type.ts +0 -6
  546. package/src/enumerations/schema-collection.ts +0 -33
  547. package/src/enumerations/symmetric-error-type.ts +0 -4
  548. package/src/environment.ts +0 -770
  549. package/src/errors/express-validation.ts +0 -21
  550. package/src/errors/invalid-backup-code-version.ts +0 -14
  551. package/src/errors/invalid-jwt-token.ts +0 -10
  552. package/src/errors/invalid-model.ts +0 -11
  553. package/src/errors/invalid-new-password.ts +0 -18
  554. package/src/errors/invalid-password.ts +0 -13
  555. package/src/errors/missing-validated-data.ts +0 -36
  556. package/src/errors/mnemonic-or-password-required.ts +0 -12
  557. package/src/errors/model-not-registered.ts +0 -11
  558. package/src/errors/mongoose-validation.ts +0 -34
  559. package/src/errors/symmetric.ts +0 -41
  560. package/src/errors/token-expired.ts +0 -10
  561. package/src/get-language.ts +0 -53
  562. package/src/get-timezone.ts +0 -45
  563. package/src/interfaces/api-express-validation-error-response.ts +0 -8
  564. package/src/interfaces/api-message-response.ts +0 -3
  565. package/src/interfaces/backend-objects/email-token.ts +0 -11
  566. package/src/interfaces/backend-objects/user.ts +0 -9
  567. package/src/interfaces/checksum-config.ts +0 -4
  568. package/src/interfaces/checksum-consts.ts +0 -13
  569. package/src/interfaces/create-user-basics.ts +0 -17
  570. package/src/interfaces/csp-config.ts +0 -35
  571. package/src/interfaces/deep-partial.ts +0 -3
  572. package/src/interfaces/email-service.ts +0 -8
  573. package/src/interfaces/environment-mongo.ts +0 -76
  574. package/src/interfaces/environment.ts +0 -181
  575. package/src/interfaces/failable-result.ts +0 -6
  576. package/src/interfaces/fec-consts.ts +0 -4
  577. package/src/interfaces/handleable-error-options.ts +0 -6
  578. package/src/interfaces/jwt-consts.ts +0 -23
  579. package/src/interfaces/jwt-sign-response.ts +0 -19
  580. package/src/interfaces/mongo-errors.ts +0 -5
  581. package/src/interfaces/request-user.ts +0 -50
  582. package/src/interfaces/required-string-keys.ts +0 -26
  583. package/src/interfaces/schema.ts +0 -31
  584. package/src/interfaces/server-init-result.ts +0 -37
  585. package/src/interfaces/status-code-response.ts +0 -7
  586. package/src/interfaces/symmetric-encryption-results.ts +0 -4
  587. package/src/middlewares/authenticate-crypto.ts +0 -243
  588. package/src/middlewares/authenticate-token.ts +0 -152
  589. package/src/middlewares/cleanup-crypto.ts +0 -40
  590. package/src/middlewares/set-global-context-language.ts +0 -24
  591. package/src/middlewares.ts +0 -120
  592. package/src/model-registry.ts +0 -75
  593. package/src/models/email-token.ts +0 -19
  594. package/src/models/mnemonic.ts +0 -19
  595. package/src/models/role.ts +0 -19
  596. package/src/models/used-direct-login-token.ts +0 -23
  597. package/src/models/user-role.ts +0 -17
  598. package/src/models/user.ts +0 -19
  599. package/src/registry/email-service-registry.ts +0 -24
  600. package/src/routers/api.ts +0 -151
  601. package/src/routers/app.ts +0 -258
  602. package/src/routers/base.ts +0 -17
  603. package/src/schemas/email-token.ts +0 -91
  604. package/src/schemas/mnemonic.ts +0 -37
  605. package/src/schemas/role.ts +0 -127
  606. package/src/schemas/schema.ts +0 -140
  607. package/src/schemas/used-direct-login-token.ts +0 -38
  608. package/src/schemas/user-role.ts +0 -75
  609. package/src/schemas/user.ts +0 -202
  610. package/src/services/backup-code.ts +0 -316
  611. package/src/services/base.ts +0 -33
  612. package/src/services/checksum.ts +0 -161
  613. package/src/services/crc.ts +0 -213
  614. package/src/services/database-initialization.ts +0 -1479
  615. package/src/services/db-init-cache.d.ts +0 -16
  616. package/src/services/direct-login-token.ts +0 -62
  617. package/src/services/fec-usage-example.ts +0 -102
  618. package/src/services/fec.ts +0 -296
  619. package/src/services/jwt.ts +0 -134
  620. package/src/services/key-wrapping.ts +0 -434
  621. package/src/services/mnemonic.ts +0 -167
  622. package/src/services/request-user.ts +0 -62
  623. package/src/services/role.ts +0 -396
  624. package/src/services/symmetric.ts +0 -139
  625. package/src/services/system-user.ts +0 -82
  626. package/src/services/user.ts +0 -2137
  627. package/src/services/xor.ts +0 -34
  628. package/src/types.ts +0 -128
  629. package/src/utils.ts +0 -1022
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MnemonicService = void 0;
4
+ const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
5
+ const crypto_1 = require("crypto");
6
+ const constants_1 = require("../constants");
7
+ /**
8
+ * Encrypts and stores mnemonics securely, using an HMAC to check for
9
+ * uniqueness without exposing the mnemonic itself.
10
+ */
11
+ class MnemonicService {
12
+ keyWrappingService;
13
+ hmacSecret;
14
+ MnemonicModel;
15
+ constructor(mnemonicModel, hmacSecret, keyWrappingService) {
16
+ this.MnemonicModel = mnemonicModel;
17
+ // Immediately wrap secrets in secure containers
18
+ this.hmacSecret = hmacSecret;
19
+ this.keyWrappingService = keyWrappingService;
20
+ }
21
+ /**
22
+ * Disposes of the secure secrets held by this service.
23
+ */
24
+ dispose() {
25
+ this.hmacSecret.dispose();
26
+ }
27
+ /**
28
+ * Creates a non-reversible HMAC of the mnemonic for fast, indexed lookups.
29
+ * @param mnemonic The mnemonic to hash, wrapped in a SecureString.
30
+ */
31
+ getMnemonicHmac(mnemonic) {
32
+ // Use the raw secret buffer for the HMAC
33
+ return (0, crypto_1.createHmac)('sha256', this.hmacSecret.value)
34
+ .update(mnemonic.valueAsUint8Array) // Use the raw buffer for consistency
35
+ .digest('hex');
36
+ }
37
+ /**
38
+ * Checks if a mnemonic already exists in the database using its HMAC.
39
+ * @param mnemonic The mnemonic to check, wrapped in a SecureString.
40
+ * @param session Optional Mongoose session for transaction support.
41
+ */
42
+ async mnemonicExists(mnemonic, session) {
43
+ const hmac = this.getMnemonicHmac(mnemonic);
44
+ const count = await this.MnemonicModel.countDocuments({ hmac }).session(session ?? null);
45
+ return count > 0;
46
+ }
47
+ /**
48
+ * Adds a new, unique mnemonic to the database with password-based key wrapping.
49
+ * @param mnemonic The mnemonic to add, wrapped in a SecureString.
50
+ * @param password User's password for key wrapping.
51
+ * @param session Optional Mongoose session for transaction support.
52
+ */
53
+ async addMnemonicWithPassword(mnemonic, _password, session) {
54
+ if (!mnemonic.value || !constants_1.Constants.MnemonicRegex.test(mnemonic.value)) {
55
+ throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Validation_MnemonicRegex);
56
+ }
57
+ if (await this.mnemonicExists(mnemonic, session)) {
58
+ return { document: null };
59
+ }
60
+ try {
61
+ const hmac = this.getMnemonicHmac(mnemonic);
62
+ const [newDoc] = await this.MnemonicModel.create([
63
+ {
64
+ hmac: hmac,
65
+ },
66
+ ], { session });
67
+ return { document: newDoc };
68
+ }
69
+ finally {
70
+ // nothing to dispose
71
+ }
72
+ }
73
+ /**
74
+ * Adds a new, unique mnemonic to the database.
75
+ * @param mnemonic The mnemonic to add, wrapped in a SecureString.
76
+ * @param session Optional Mongoose session for transaction support.
77
+ */
78
+ async addMnemonic(mnemonic, session) {
79
+ if (!mnemonic.value || !constants_1.Constants.MnemonicRegex.test(mnemonic.value)) {
80
+ throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Validation_MnemonicRegex);
81
+ }
82
+ if (await this.mnemonicExists(mnemonic, session)) {
83
+ return null;
84
+ }
85
+ const hmac = this.getMnemonicHmac(mnemonic);
86
+ const [newDoc] = await this.MnemonicModel.create([
87
+ {
88
+ hmac: hmac,
89
+ },
90
+ ], { session });
91
+ return newDoc;
92
+ }
93
+ /**
94
+ * Retrieves a mnemonic document by ID.
95
+ * @param mnemonicId The ID of the mnemonic document.
96
+ * @param session Optional Mongoose session for transaction support.
97
+ */
98
+ async getMnemonicDocument(mnemonicId, session) {
99
+ return await this.MnemonicModel.findById(mnemonicId).session(session ?? null);
100
+ }
101
+ /**
102
+ * Decrypts a mnemonic from a document using the service's master encryption key.
103
+ * @param doc The mnemonic document.
104
+ */
105
+ /**
106
+ * Deletes a mnemonic document by ID.
107
+ * @param mnemonicId The ID of the mnemonic document.
108
+ * @param session Optional Mongoose session for transaction support.
109
+ */
110
+ async deleteMnemonicDocument(mnemonicId, session) {
111
+ await this.MnemonicModel.findByIdAndDelete(mnemonicId).session(session ?? null);
112
+ }
113
+ }
114
+ exports.MnemonicService = MnemonicService;
115
+ //# sourceMappingURL=mnemonic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mnemonic.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/services/mnemonic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { IRequestUserDTO, ITokenRole } from '@digitaldefiance/suite-core-lib';
2
+ import { IUserDocument } from '../documents';
3
+ import { IRequestUserBackendObject } from '../interfaces/backend-objects/request-user';
4
+ export declare class RequestUserService<I, TTokenRole extends ITokenRole<I>> {
5
+ /**
6
+ * Given a user document and an array of role documents, create the IRequestUser
7
+ * @param userDoc
8
+ * @returns
9
+ */
10
+ static makeRequestUserDTO<I, TTokenRole extends ITokenRole<I>, TRequestUserDTO extends IRequestUserDTO>(userDoc: IUserDocument, roles: TTokenRole[]): TRequestUserDTO;
11
+ /**
12
+ * Given a request user, reconstitute dates, objectids, and enums
13
+ * @param requestUser a RequestUser DTO
14
+ * @returns An IRequestUserBackendObject
15
+ */
16
+ static hydrateRequestUser<S extends string, TRequestUserDTO extends IRequestUserDTO & {
17
+ siteLanguage: S;
18
+ }>(requestUser: TRequestUserDTO): IRequestUserBackendObject<S>;
19
+ }
20
+ //# sourceMappingURL=request-user.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-user.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/services/request-user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE9E,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AAGvF,qBAAa,kBAAkB,CAAC,CAAC,EAAE,UAAU,SAAS,UAAU,CAAC,CAAC,CAAC;IACjE;;;;OAIG;WACW,kBAAkB,CAC9B,CAAC,EACD,UAAU,SAAS,UAAU,CAAC,CAAC,CAAC,EAChC,eAAe,SAAS,eAAe,EACvC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,eAAe;IAgB/D;;;;OAIG;WACW,kBAAkB,CAC9B,CAAC,SAAS,MAAM,EAChB,eAAe,SAAS,eAAe,GAAG;QAAE,YAAY,EAAE,CAAC,CAAA;KAAE,EAC7D,WAAW,EAAE,eAAe,GAAG,yBAAyB,CAAC,CAAC,CAAC;CAqB9D"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RequestUserService = void 0;
4
+ const mongoose_1 = require("mongoose");
5
+ const role_1 = require("./role");
6
+ class RequestUserService {
7
+ /**
8
+ * Given a user document and an array of role documents, create the IRequestUser
9
+ * @param userDoc
10
+ * @returns
11
+ */
12
+ static makeRequestUserDTO(userDoc, roles) {
13
+ if (!userDoc._id) {
14
+ throw new Error('User document is missing _id');
15
+ }
16
+ return {
17
+ id: userDoc._id.toString(),
18
+ email: userDoc.email,
19
+ roles: roles.map((r) => role_1.RoleService.roleToRoleDTO(r)),
20
+ username: userDoc.username,
21
+ timezone: userDoc.timezone,
22
+ ...(userDoc.lastLogin && { lastLogin: userDoc.lastLogin.toString() }),
23
+ emailVerified: userDoc.emailVerified,
24
+ siteLanguage: userDoc.siteLanguage,
25
+ };
26
+ }
27
+ /**
28
+ * Given a request user, reconstitute dates, objectids, and enums
29
+ * @param requestUser a RequestUser DTO
30
+ * @returns An IRequestUserBackendObject
31
+ */
32
+ static hydrateRequestUser(requestUser) {
33
+ const hydratedRoles = requestUser.roles.map((role) => role_1.RoleService.hydrateRoleDTOToBackend(role));
34
+ const hydratedUser = {
35
+ id: new mongoose_1.Types.ObjectId(requestUser.id),
36
+ email: requestUser.email,
37
+ roles: hydratedRoles,
38
+ username: requestUser.username,
39
+ timezone: requestUser.timezone,
40
+ emailVerified: requestUser.emailVerified,
41
+ siteLanguage: requestUser.siteLanguage,
42
+ };
43
+ if (requestUser.lastLogin) {
44
+ hydratedUser.lastLogin = new Date(requestUser.lastLogin);
45
+ }
46
+ return hydratedUser;
47
+ }
48
+ }
49
+ exports.RequestUserService = RequestUserService;
50
+ //# sourceMappingURL=request-user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-user.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/services/request-user.ts"],"names":[],"mappings":";;;AACA,uCAAiC;AAGjC,iCAAqC;AAErC,MAAa,kBAAkB;IAC7B;;;;OAIG;IACI,MAAM,CAAC,kBAAkB,CAI9B,OAAsB,EAAE,KAAmB;QAC3C,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QACD,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;YAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YACrD,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;YACrE,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,YAAY,EAAE,OAAO,CAAC,YAAsB;SAC1B,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,kBAAkB,CAG9B,WAA4B;QAC5B,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACnD,kBAAW,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAC1C,CAAC;QAEF,MAAM,YAAY,GAAiC;YACjD,EAAE,EAAE,IAAI,gBAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACtC,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,KAAK,EAAE,aAAa;YACpB,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,aAAa,EAAE,WAAW,CAAC,aAAa;YACxC,YAAY,EAAE,WAAW,CAAC,YAAY;SACvC,CAAC;QAEF,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;YAC1B,YAAY,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AAvDD,gDAuDC"}
@@ -0,0 +1,88 @@
1
+ import { MemberType } from '@digitaldefiance/ecies-lib';
2
+ import { IRoleBase, ITokenRole, ITokenRoleDTO, Role } from '@digitaldefiance/suite-core-lib';
3
+ import { ClientSession, Types } from 'mongoose';
4
+ import { IBaseDocument, IUserDocument } from '../documents';
5
+ import { IRoleDocument } from '../documents/role';
6
+ import { IUserRoleDocument } from '../documents/user-role';
7
+ import { IApplication } from '../interfaces/application';
8
+ import { IRoleBackendObject } from '../interfaces/backend-objects/role';
9
+ import { BaseService } from './base';
10
+ import { Environment } from '../environment';
11
+ import { IConstants } from '../interfaces';
12
+ /**
13
+ * Service for managing roles
14
+ */
15
+ export declare class RoleService<I = Types.ObjectId, D extends Date = Date, TTokenRole extends ITokenRole<I, D> = ITokenRole<I, D>> extends BaseService {
16
+ /**
17
+ * Constructor for the role service
18
+ * @param application The application object
19
+ */
20
+ constructor(application: IApplication<any, Types.ObjectId, IBaseDocument<any, Types.ObjectId>, Environment, IConstants>);
21
+ static roleToRoleDTO<I = Types.ObjectId, D extends Date = Date>(role: ITokenRole<I, D> | IRoleDocument | Partial<IRoleBase<I>>): ITokenRoleDTO;
22
+ /**
23
+ * Given a Role DTO, reconstitute ids and dates
24
+ * @param role The Role DTO
25
+ * @returns An IRoleBackendObject
26
+ */
27
+ static hydrateRoleDTOToBackend(role: ITokenRoleDTO): IRoleBackendObject;
28
+ /**
29
+ * Gets the role ID by name
30
+ * @param roleName The name of the role
31
+ * @returns The role ID or null if not found
32
+ */
33
+ getRoleIdByName(roleName: Role, session?: ClientSession): Promise<Types.ObjectId | null>;
34
+ /**
35
+ * Creates a new role
36
+ * @param roleData The role data
37
+ * @param session Optional mongoose session
38
+ * @returns The created role document
39
+ */
40
+ createRole(roleData: IRoleBase<Types.ObjectId, Date, Role>, session?: ClientSession | null): Promise<IRoleDocument>;
41
+ /**
42
+ * Adds a user to a role
43
+ * @param roleId - The role id
44
+ * @param userId - The user id
45
+ * @param createdBy - The user creating the relationship
46
+ * @param session Optional mongoose session
47
+ */
48
+ addUserToRole(roleId: Types.ObjectId, userId: Types.ObjectId, createdBy: Types.ObjectId, session?: ClientSession, overrideId?: Types.ObjectId): Promise<IUserRoleDocument>;
49
+ /**
50
+ * Removes a user from a role
51
+ * @param roleId - The role id
52
+ * @param userId - The user id
53
+ * @param deletedBy - The user removing the relationship
54
+ * @param session Optional mongoose session
55
+ * @throws LastAdminError if attempting to remove the last admin
56
+ */
57
+ removeUserFromRole(roleId: Types.ObjectId, userId: Types.ObjectId, deletedBy: Types.ObjectId, session?: ClientSession): Promise<void>;
58
+ /**
59
+ * Deletes a role by ID
60
+ * @param roleId The role ID
61
+ * @param deleter The ID of the user deleting the role
62
+ * @param hardDelete Whether to hard delete the role
63
+ * @param session Optional mongoose session
64
+ */
65
+ deleteRole(roleId: Types.ObjectId, deleter: Types.ObjectId, hardDelete: boolean, session?: ClientSession): Promise<void>;
66
+ /**
67
+ * Gets all roles for a user
68
+ * @param userId The user ID
69
+ * @param session Optional mongoose session
70
+ * @returns The roles the user is a member of
71
+ */
72
+ getUserRoles(userId: Types.ObjectId, session?: ClientSession): Promise<IRoleDocument[]>;
73
+ /**
74
+ * Gets all users for a role
75
+ * @param roleId The role ID
76
+ * @param session Optional mongoose session
77
+ * @returns The user IDs that are members of the role
78
+ */
79
+ getRoleUsers(roleId: Types.ObjectId, session?: ClientSession): Promise<Types.ObjectId[]>;
80
+ /** Convert roles to translated TokenRoles */
81
+ rolesToTokenRoles(roles: Array<IRoleBackendObject>, overrideLanguage?: string): Array<TTokenRole>;
82
+ isUserAdmin(userDoc: IUserDocument, session?: ClientSession, providedRoles?: Array<IRoleDocument>): Promise<boolean>;
83
+ isUserMember(userDoc: IUserDocument, session?: ClientSession, providedRoles?: Array<IRoleDocument>): Promise<boolean>;
84
+ isUserChild(userDoc: IUserDocument, session?: ClientSession, providedRoles?: Array<IRoleDocument>): Promise<boolean>;
85
+ isSystemUser(userDoc: IUserDocument, session?: ClientSession, providedRoles?: Array<IRoleDocument>): Promise<boolean>;
86
+ getMemberType(userDoc: IUserDocument, session?: ClientSession, providedRoles?: Array<IRoleDocument>): Promise<MemberType>;
87
+ }
88
+ //# sourceMappingURL=role.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/services/role.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,263 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RoleService = void 0;
4
+ const ecies_lib_1 = require("@digitaldefiance/ecies-lib");
5
+ const i18n_lib_1 = require("@digitaldefiance/i18n-lib");
6
+ const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
7
+ const mongoose_1 = require("mongoose");
8
+ const base_model_name_1 = require("../enumerations/base-model-name");
9
+ const model_registry_1 = require("../model-registry");
10
+ const utils_1 = require("../utils");
11
+ const base_1 = require("./base");
12
+ /**
13
+ * Service for managing roles
14
+ */
15
+ class RoleService extends base_1.BaseService {
16
+ /**
17
+ * Constructor for the role service
18
+ * @param application The application object
19
+ */
20
+ constructor(application) {
21
+ super(application);
22
+ }
23
+ static roleToRoleDTO(role) {
24
+ return {
25
+ ...(role instanceof mongoose_1.Document ? role.toObject() : role),
26
+ _id: (role._id instanceof mongoose_1.Types.ObjectId
27
+ ? role._id.toString()
28
+ : role._id),
29
+ translatedName: 'translatedName' in role ? role.translatedName : role.name,
30
+ createdBy: (role.createdBy instanceof Date
31
+ ? role.createdBy.toString()
32
+ : role.createdBy),
33
+ updatedBy: (role.updatedBy instanceof Date
34
+ ? role.updatedBy.toString()
35
+ : role.updatedBy),
36
+ ...(role.deletedBy
37
+ ? {
38
+ deletedBy: (role.deletedBy instanceof Date
39
+ ? role.deletedBy.toString()
40
+ : role.deletedBy),
41
+ }
42
+ : {}),
43
+ };
44
+ }
45
+ /**
46
+ * Given a Role DTO, reconstitute ids and dates
47
+ * @param role The Role DTO
48
+ * @returns An IRoleBackendObject
49
+ */
50
+ static hydrateRoleDTOToBackend(role) {
51
+ return {
52
+ ...(0, utils_1.omit)(role, [
53
+ 'translatedName',
54
+ ]),
55
+ _id: new mongoose_1.Types.ObjectId(role._id),
56
+ name: role.name,
57
+ createdAt: new Date(role.createdAt),
58
+ createdBy: new mongoose_1.Types.ObjectId(role.createdBy),
59
+ updatedAt: new Date(role.updatedAt),
60
+ updatedBy: new mongoose_1.Types.ObjectId(role.updatedBy),
61
+ ...(role.deletedAt ? { deletedAt: new Date(role.deletedAt) } : {}),
62
+ ...(role.deletedBy
63
+ ? {
64
+ deletedBy: new mongoose_1.Types.ObjectId(role.deletedBy),
65
+ }
66
+ : {}),
67
+ };
68
+ }
69
+ /**
70
+ * Gets the role ID by name
71
+ * @param roleName The name of the role
72
+ * @returns The role ID or null if not found
73
+ */
74
+ async getRoleIdByName(roleName, session) {
75
+ const RoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.Role).model;
76
+ const role = await RoleModel.findOne({ name: roleName }, undefined, {
77
+ session,
78
+ }).select('_id');
79
+ if (!role) {
80
+ return null;
81
+ }
82
+ return role._id;
83
+ }
84
+ /**
85
+ * Creates a new role
86
+ * @param roleData The role data
87
+ * @param session Optional mongoose session
88
+ * @returns The created role document
89
+ */
90
+ async createRole(roleData, session) {
91
+ const RoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.Role).model;
92
+ const role = new RoleModel(roleData);
93
+ const savedRole = await role.save(session ? { session } : {});
94
+ return savedRole;
95
+ }
96
+ /**
97
+ * Adds a user to a role
98
+ * @param roleId - The role id
99
+ * @param userId - The user id
100
+ * @param createdBy - The user creating the relationship
101
+ * @param session Optional mongoose session
102
+ */
103
+ async addUserToRole(roleId, userId, createdBy, session, overrideId) {
104
+ const UserRoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.UserRole).model;
105
+ // Check if the user-role relationship already exists (and is not deleted)
106
+ const existingUserRole = await UserRoleModel.findOne({
107
+ userId,
108
+ roleId,
109
+ deletedAt: { $exists: false },
110
+ }).session(session ?? null);
111
+ if (existingUserRole) {
112
+ // Relationship already exists, no need to create it again
113
+ return existingUserRole;
114
+ }
115
+ const userRole = new UserRoleModel({
116
+ ...(overrideId ? { _id: overrideId } : {}),
117
+ userId,
118
+ roleId,
119
+ createdBy,
120
+ updatedBy: createdBy,
121
+ });
122
+ const result = await userRole.save({ session });
123
+ return result;
124
+ }
125
+ /**
126
+ * Removes a user from a role
127
+ * @param roleId - The role id
128
+ * @param userId - The user id
129
+ * @param deletedBy - The user removing the relationship
130
+ * @param session Optional mongoose session
131
+ * @throws LastAdminError if attempting to remove the last admin
132
+ */
133
+ async removeUserFromRole(roleId, userId, deletedBy, session) {
134
+ const RoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.Role).model;
135
+ const UserRoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.UserRole).model;
136
+ const role = await RoleModel.findById(roleId).session(session ?? null);
137
+ if (role?.admin) {
138
+ const adminCount = await UserRoleModel.countDocuments({
139
+ roleId,
140
+ deletedAt: { $exists: false },
141
+ }).session(session ?? null);
142
+ if (adminCount <= 1) {
143
+ throw new suite_core_lib_1.LastAdminError();
144
+ }
145
+ }
146
+ await UserRoleModel.findOneAndUpdate({ userId, roleId, deletedAt: { $exists: false } }, { deletedAt: new Date(), deletedBy }, { session });
147
+ }
148
+ /**
149
+ * Deletes a role by ID
150
+ * @param roleId The role ID
151
+ * @param deleter The ID of the user deleting the role
152
+ * @param hardDelete Whether to hard delete the role
153
+ * @param session Optional mongoose session
154
+ */
155
+ async deleteRole(roleId, deleter, hardDelete, session) {
156
+ const RoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.Role).model;
157
+ if (hardDelete) {
158
+ await RoleModel.findByIdAndDelete(roleId).session(session ?? null);
159
+ }
160
+ else {
161
+ await RoleModel.findByIdAndUpdate(roleId, {
162
+ deletedAt: new Date(),
163
+ deletedBy: deleter,
164
+ }).session(session ?? null);
165
+ }
166
+ }
167
+ /**
168
+ * Gets all roles for a user
169
+ * @param userId The user ID
170
+ * @param session Optional mongoose session
171
+ * @returns The roles the user is a member of
172
+ */
173
+ async getUserRoles(userId, session) {
174
+ const UserRoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.UserRole).model;
175
+ const RoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.Role).model;
176
+ if (!UserRoleModel || !RoleModel)
177
+ throw new Error('Model not registered');
178
+ // Return full documents
179
+ const userRoles = await UserRoleModel.find({
180
+ userId,
181
+ deletedAt: { $exists: false },
182
+ })
183
+ .select('roleId')
184
+ .session(session ?? null);
185
+ const roleIds = userRoles.map((ur) => ur.roleId);
186
+ return await RoleModel.find({
187
+ _id: { $in: roleIds },
188
+ deletedAt: { $exists: false },
189
+ }).session(session ?? null);
190
+ }
191
+ /**
192
+ * Gets all users for a role
193
+ * @param roleId The role ID
194
+ * @param session Optional mongoose session
195
+ * @returns The user IDs that are members of the role
196
+ */
197
+ async getRoleUsers(roleId, session) {
198
+ const UserRoleModel = model_registry_1.ModelRegistry.instance.get(base_model_name_1.BaseModelName.UserRole).model;
199
+ // Return full documents
200
+ const userRoles = await UserRoleModel.find({
201
+ roleId,
202
+ deletedAt: { $exists: false },
203
+ })
204
+ .select('userId')
205
+ .session(session ?? null);
206
+ return userRoles.map((ur) => ur.userId);
207
+ }
208
+ /** Convert roles to translated TokenRoles */
209
+ rolesToTokenRoles(roles, overrideLanguage) {
210
+ return roles.map((role) => {
211
+ const engine = i18n_lib_1.PluginI18nEngine.getInstance();
212
+ const userLang = i18n_lib_1.GlobalActiveContext.getInstance().userLanguage;
213
+ const lang = (overrideLanguage || userLang || 'en-US');
214
+ const roleTranslation = engine.translateEnum(suite_core_lib_1.Role, role.name, lang);
215
+ return {
216
+ ...role,
217
+ translatedName: roleTranslation,
218
+ };
219
+ });
220
+ }
221
+ async isUserAdmin(userDoc, session, providedRoles) {
222
+ const roles = providedRoles ?? (await this.getUserRoles(userDoc._id, session));
223
+ if (roles.filter((r) => r.admin).length > 0) {
224
+ return true;
225
+ }
226
+ return false;
227
+ }
228
+ async isUserMember(userDoc, session, providedRoles) {
229
+ const roles = providedRoles ?? (await this.getUserRoles(userDoc._id, session));
230
+ if (roles.filter((r) => r.member).length > 0) {
231
+ return true;
232
+ }
233
+ return false;
234
+ }
235
+ async isUserChild(userDoc, session, providedRoles) {
236
+ const roles = providedRoles ?? (await this.getUserRoles(userDoc._id, session));
237
+ if (roles.filter((r) => r.child).length > 0) {
238
+ return true;
239
+ }
240
+ return false;
241
+ }
242
+ async isSystemUser(userDoc, session, providedRoles) {
243
+ const roles = providedRoles ?? (await this.getUserRoles(userDoc._id, session));
244
+ return roles.some((r) => r.system);
245
+ }
246
+ async getMemberType(userDoc, session, providedRoles) {
247
+ const roles = providedRoles ?? (await this.getUserRoles(userDoc._id, session));
248
+ if (await this.isSystemUser(userDoc, session, roles)) {
249
+ return ecies_lib_1.MemberType.System;
250
+ }
251
+ else if (await this.isUserAdmin(userDoc, session, roles)) {
252
+ return ecies_lib_1.MemberType.Admin;
253
+ }
254
+ else if (await this.isUserMember(userDoc, session, roles)) {
255
+ return ecies_lib_1.MemberType.User;
256
+ }
257
+ else {
258
+ return ecies_lib_1.MemberType.Anonymous;
259
+ }
260
+ }
261
+ }
262
+ exports.RoleService = RoleService;
263
+ //# sourceMappingURL=role.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/services/role.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { IECIESConstants } from '@digitaldefiance/ecies-lib';
2
+ import { ISymmetricEncryptionResults } from '../interfaces/symmetric-encryption-results';
3
+ /**
4
+ * Service for handling symmetric encryption operations.
5
+ * This service provides functionality for:
6
+ * - AES encryption/decryption of buffers and JSON data
7
+ * - Key and IV generation
8
+ * - Secure cryptographic operations
9
+ */
10
+ export declare class SymmetricService {
11
+ static symmetricKeyBits(eciesConstants?: IECIESConstants): number;
12
+ static symmetricKeyBytes(eciesConstants?: IECIESConstants): number;
13
+ /**
14
+ * Encrypt data with AES
15
+ * @param data The data to encrypt
16
+ * @param encryptionKey Optional encryption key (will be randomly generated if not provided)
17
+ * @returns Object containing encrypted data and key
18
+ */
19
+ static encryptBuffer(data: Buffer, encryptionKey?: Buffer, eciesConstants?: IECIESConstants): ISymmetricEncryptionResults;
20
+ /**
21
+ * Decrypt the given buffer with AES
22
+ * @param encryptedData The encrypted data to decrypt
23
+ * @param key The key to use for decryption
24
+ * @returns Decrypted data as a Buffer
25
+ */
26
+ static decryptBuffer(encryptedData: Buffer, key: Buffer, eciesConstants?: IECIESConstants): Buffer;
27
+ /**
28
+ * Encrypt JSON data with AES
29
+ * @param data The data to encrypt
30
+ * @param encryptionKey Optional encryption key (will be randomly generated if not provided)
31
+ * @returns Object containing encrypted data and key
32
+ */
33
+ static encryptJson<T>(data: T, encryptionKey?: Buffer): ISymmetricEncryptionResults;
34
+ /**
35
+ * Decrypt the given buffer with AES and parse as JSON
36
+ * @param encryptedData The encrypted data to decrypt
37
+ * @param key The key to use for decryption
38
+ * @returns Decrypted data parsed as type T
39
+ */
40
+ static decryptJson<T>(encryptedData: Buffer, key: Buffer): T;
41
+ }
42
+ //# sourceMappingURL=symmetric.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symmetric.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/services/symmetric.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAIpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AAMzF;;;;;;GAMG;AACH,qBAAa,gBAAgB;WACb,gBAAgB,CAC5B,cAAc,GAAE,eAAuB,GACtC,MAAM;WAIK,iBAAiB,CAC7B,cAAc,GAAE,eAAuB,GACtC,MAAM;IAIT;;;;;OAKG;WACW,aAAa,CACzB,IAAI,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,MAAM,EACtB,cAAc,GAAE,eAAuB,GACtC,2BAA2B;IAmC9B;;;;;OAKG;WACW,aAAa,CACzB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,EACX,cAAc,GAAE,eAAuB,GACtC,MAAM;IAmBT;;;;;OAKG;WACW,WAAW,CAAC,CAAC,EACzB,IAAI,EAAE,CAAC,EACP,aAAa,CAAC,EAAE,MAAM,GACrB,2BAA2B;IAc9B;;;;;OAKG;WACW,WAAW,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC;CAKpE"}