@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
@@ -1,1479 +0,0 @@
1
- import {
2
- ECIES,
3
- EmailString,
4
- IECIESConfig,
5
- MemberType,
6
- SecureBuffer,
7
- SecureString,
8
- } from '@digitaldefiance/ecies-lib';
9
- import { CoreLanguageCode } from '@digitaldefiance/i18n-lib';
10
- import {
11
- Member as BackendMember,
12
- ECIESService,
13
- } from '@digitaldefiance/node-ecies-lib';
14
- import {
15
- AccountStatus,
16
- Constants as AppConstants,
17
- getSuiteCoreI18nEngine,
18
- IFailableResult,
19
- IMnemonicBase,
20
- SuiteCoreComponentId,
21
- SuiteCoreStringKey,
22
- TranslatableSuiteError,
23
- } from '@digitaldefiance/suite-core-lib';
24
- import { crc32 } from 'crc';
25
- import { createHash, randomBytes } from 'crypto';
26
- import { ObjectId as MongoObjectId } from 'mongodb';
27
- import { Connection, Types } from 'mongoose';
28
- import { BackupCode } from '../backup-code';
29
- import { IBaseDocument } from '../documents/base';
30
- import { IRoleDocument } from '../documents/role';
31
- import { IUserDocument } from '../documents/user';
32
- import { IUserRoleDocument } from '../documents/user-role';
33
- import { BaseModelName } from '../enumerations/base-model-name';
34
- import { Environment } from '../environment';
35
- import { IConstants } from '../interfaces';
36
- import { IApplication } from '../interfaces/application';
37
- import { IServerInitResult } from '../interfaces/server-init-result';
38
- import { ModelRegistry } from '../model-registry';
39
- import { KeyWrappingService } from '../services/key-wrapping';
40
- import { debugLog, withTransaction } from '../utils';
41
- import { BackupCodeService } from './backup-code';
42
- import { MnemonicService } from './mnemonic';
43
- import { RoleService } from './role';
44
- import { SystemUserService } from './system-user';
45
-
46
- export abstract class DatabaseInitializationService {
47
- // Static initialization state management
48
- protected static initializationPromises = new Map<
49
- string,
50
- Promise<IFailableResult<IServerInitResult>>
51
- >();
52
- protected static initializationLock = new Map<string, boolean>();
53
- protected static defaultI18nTFunc: (
54
- str: string,
55
- language?: CoreLanguageCode,
56
- ...otherVars: Record<string, string | number>[]
57
- ) => string = getSuiteCoreI18nEngine().t;
58
-
59
- /**
60
- * Get the mnemonic or generate a new one if not present
61
- * @param mnemonic The existing mnemonic or undefined
62
- * @param eciesService The ECIES service to generate a new mnemonic
63
- * @returns The existing or new mnemonic
64
- */
65
- public static mnemonicOrNew(
66
- mnemonic: SecureString | undefined,
67
- eciesService: ECIESService,
68
- ): SecureString {
69
- return mnemonic && mnemonic.hasValue
70
- ? mnemonic
71
- : eciesService.generateNewMnemonic();
72
- }
73
- /**
74
- * Generate a cache key for a user based on their details
75
- * @param username The username
76
- * @param email The email address
77
- * @param mnemonic The mnemonic
78
- * @param id The user ID
79
- * @returns The generated cache key
80
- */
81
- public static cacheKey(
82
- username: string,
83
- email: EmailString,
84
- mnemonic: SecureString,
85
- id: Types.ObjectId,
86
- ): string {
87
- const combined = `${username}|${email.email}|${
88
- mnemonic.value
89
- }|${id.toString()}`;
90
- const buffer = Buffer.from(combined, 'utf-8');
91
- const crcHash = crc32(buffer);
92
- return crcHash.toString(16).padStart(8, '0');
93
- }
94
- /**
95
- * Get a cached BackendMember or create a new one if not cached
96
- * @param username The username
97
- * @param email The email address
98
- * @param mnemonic The mnemonic or undefined to generate a new one
99
- * @param memberType The type of member (Admin, Member, System)
100
- * @param eciesService The ECIES service to handle key generation
101
- * @param memberId Optional specific member ID to use
102
- * @param createdBy Optional ID of the user who created this member
103
- * @returns The cached or newly created BackendMember and the mnemonic used
104
- */
105
- public static cacheOrNew(
106
- username: string,
107
- email: EmailString,
108
- mnemonic: SecureString | undefined,
109
- memberType: MemberType,
110
- eciesService: ECIESService,
111
- memberId?: Types.ObjectId,
112
- createdBy?: Types.ObjectId,
113
- ): {
114
- member: BackendMember;
115
- mnemonic: SecureString;
116
- } {
117
- const m = this.mnemonicOrNew(mnemonic, eciesService);
118
-
119
- const newId: Types.ObjectId = memberId ? memberId : new MongoObjectId();
120
- const key = DatabaseInitializationService.cacheKey(
121
- username,
122
- email,
123
- m,
124
- newId,
125
- );
126
- if (!global.__MEMBER_CACHE__) {
127
- global.__MEMBER_CACHE__ = new Map<
128
- string,
129
- {
130
- member: BackendMember;
131
- mnemonic: SecureString;
132
- }
133
- >();
134
- }
135
- if (!global.__MEMBER_CACHE__.has(key)) {
136
- const { wallet } = eciesService.walletAndSeedFromMnemonic(m);
137
-
138
- // Get private key from wallet
139
- const privateKey = wallet.getPrivateKey();
140
- // Get public key with 0x04 prefix
141
- const publicKeyWithPrefix = Buffer.concat([
142
- Buffer.from([ECIES.PUBLIC_KEY_MAGIC]),
143
- wallet.getPublicKey(),
144
- ]);
145
-
146
- const user: BackendMember = new BackendMember(
147
- eciesService,
148
- memberType,
149
- username,
150
- email,
151
- publicKeyWithPrefix,
152
- new SecureBuffer(privateKey),
153
- wallet,
154
- newId,
155
- undefined,
156
- undefined,
157
- createdBy,
158
- );
159
- global.__MEMBER_CACHE__.set(key, { mnemonic: m, member: user });
160
- return { mnemonic: m, member: user };
161
- } else {
162
- return global.__MEMBER_CACHE__.get(key)!;
163
- }
164
- }
165
-
166
- /**
167
- * Generate a random password
168
- * @param length The length of the password
169
- * @returns The generated password
170
- */
171
- public static generatePassword(length: number): string {
172
- const specialCharacters = "!@#$%^&*()_+-=[]{};':|,.<>/?";
173
- const numbers = '0123456789';
174
- const letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
175
-
176
- // Get a random character from a string
177
- const getRandomChar = (chars: string): string => {
178
- // amazonq-ignore-next-line false positive
179
- const randomIndex = randomBytes(1)[0] % chars.length;
180
- return chars[randomIndex];
181
- };
182
-
183
- // Start with one of each required character type
184
- // amazonq-ignore-next-line false positive
185
- let password = '';
186
- password += getRandomChar(letters);
187
- password += getRandomChar(numbers);
188
- password += getRandomChar(specialCharacters);
189
-
190
- // Fill the rest with random characters from all types
191
- const allCharacters = specialCharacters + numbers + letters;
192
- for (let i = password.length; i < length; i++) {
193
- password += getRandomChar(allCharacters);
194
- }
195
-
196
- // Shuffle the password characters to avoid predictable pattern
197
- const chars = password.split('');
198
- for (let i = chars.length - 1; i > 0; i--) {
199
- // amazonq-ignore-next-line already fixed
200
- const j = randomBytes(1)[0] % (i + 1);
201
- [chars[i], chars[j]] = [chars[j], chars[i]];
202
- }
203
- return chars.join('');
204
- }
205
-
206
- /**
207
- * Drops the database
208
- * @param connection The database connection
209
- * @returns True if the database was dropped, false if not connected
210
- */
211
- public static async dropDatabase(connection: Connection): Promise<boolean> {
212
- if (!connection.db) return false;
213
- debugLog(
214
- true,
215
- 'warn',
216
- this.defaultI18nTFunc('{{StringName.Admin_DroppingDatabase}}'),
217
- );
218
- return connection.db.dropDatabase();
219
- }
220
-
221
- public static getInitOptions(
222
- application: IApplication<
223
- any,
224
- Types.ObjectId,
225
- IBaseDocument<any, Types.ObjectId>,
226
- Environment,
227
- IConstants
228
- >,
229
- ): {
230
- adminId?: Types.ObjectId;
231
- adminMnemonic?: SecureString;
232
- adminPassword?: SecureString;
233
- adminRoleId?: Types.ObjectId;
234
- adminUserRoleId?: Types.ObjectId;
235
- adminBackupCodes?: BackupCode[];
236
- memberId?: Types.ObjectId;
237
- memberMnemonic?: SecureString;
238
- memberPassword?: SecureString;
239
- memberRoleId?: Types.ObjectId;
240
- memberUserRoleId?: Types.ObjectId;
241
- memberBackupCodes?: BackupCode[];
242
- systemId?: Types.ObjectId;
243
- systemMnemonic?: SecureString;
244
- systemPassword?: SecureString;
245
- systemRoleId?: Types.ObjectId;
246
- systemUserRoleId?: Types.ObjectId;
247
- systemBackupCodes?: BackupCode[];
248
- } {
249
- return {
250
- adminId: application.environment.adminId
251
- ? application.environment.adminId
252
- : undefined,
253
- adminMnemonic: application.environment.adminMnemonic?.hasValue
254
- ? application.environment.adminMnemonic
255
- : undefined,
256
- adminPassword: application.environment.adminPassword?.hasValue
257
- ? application.environment.adminPassword
258
- : undefined,
259
- adminRoleId: application.environment.adminRoleId
260
- ? application.environment.adminRoleId
261
- : undefined,
262
- adminUserRoleId: application.environment.adminUserRoleId
263
- ? application.environment.adminUserRoleId
264
- : undefined,
265
- adminBackupCodes: application.environment.adminBackupCodes
266
- ? application.environment.adminBackupCodes
267
- : undefined,
268
- memberId: application.environment.memberId
269
- ? application.environment.memberId
270
- : undefined,
271
- memberMnemonic: application.environment.memberMnemonic?.hasValue
272
- ? application.environment.memberMnemonic
273
- : undefined,
274
- memberPassword: application.environment.memberPassword?.hasValue
275
- ? application.environment.memberPassword
276
- : undefined,
277
- memberRoleId: application.environment.memberRoleId
278
- ? application.environment.memberRoleId
279
- : undefined,
280
- memberUserRoleId: application.environment.memberUserRoleId
281
- ? application.environment.memberUserRoleId
282
- : undefined,
283
- memberBackupCodes: application.environment.memberBackupCodes
284
- ? application.environment.memberBackupCodes
285
- : undefined,
286
- systemId: application.environment.systemId
287
- ? application.environment.systemId
288
- : undefined,
289
- systemMnemonic: application.environment.systemMnemonic?.hasValue
290
- ? application.environment.systemMnemonic
291
- : undefined,
292
- systemPassword: application.environment.systemPassword?.hasValue
293
- ? application.environment.systemPassword
294
- : undefined,
295
- systemRoleId: application.environment.systemRoleId
296
- ? application.environment.systemRoleId
297
- : undefined,
298
- systemUserRoleId: application.environment.systemUserRoleId
299
- ? application.environment.systemUserRoleId
300
- : undefined,
301
- systemBackupCodes: application.environment.systemBackupCodes
302
- ? application.environment.systemBackupCodes
303
- : undefined,
304
- };
305
- }
306
-
307
- public static serverInitResultHash(
308
- serverInitResult: IServerInitResult,
309
- ): string {
310
- const h = createHash('sha256');
311
- h.update(serverInitResult.adminUser._id.toHexString());
312
- h.update(serverInitResult.adminRole._id.toHexString());
313
- h.update(serverInitResult.adminUserRole._id.toHexString());
314
- h.update(serverInitResult.adminUsername);
315
- h.update(serverInitResult.adminEmail);
316
- h.update(serverInitResult.adminMnemonic);
317
- h.update(serverInitResult.adminPassword);
318
- h.update(serverInitResult.adminUser.publicKey);
319
- serverInitResult.adminBackupCodes.map((bc) => h.update(bc));
320
- h.update(serverInitResult.memberUser._id.toHexString());
321
- h.update(serverInitResult.memberRole._id.toHexString());
322
- h.update(serverInitResult.memberUserRole._id.toHexString());
323
- h.update(serverInitResult.memberUsername);
324
- h.update(serverInitResult.memberEmail);
325
- h.update(serverInitResult.memberMnemonic);
326
- h.update(serverInitResult.memberPassword);
327
- h.update(serverInitResult.memberUser.publicKey);
328
- serverInitResult.memberBackupCodes.map((bc) => h.update(bc));
329
- h.update(serverInitResult.systemUser._id.toHexString());
330
- h.update(serverInitResult.systemRole._id.toHexString());
331
- h.update(serverInitResult.systemUserRole._id.toHexString());
332
- h.update(serverInitResult.systemUsername);
333
- h.update(serverInitResult.systemEmail);
334
- h.update(serverInitResult.systemMnemonic);
335
- h.update(serverInitResult.systemPassword);
336
- h.update(serverInitResult.systemUser.publicKey);
337
- serverInitResult.systemBackupCodes.map((bc) => h.update(bc));
338
- return h.digest('hex');
339
- }
340
-
341
- /**
342
- * Initialize the user database with default users and roles (with dependency injection)
343
- * @param application The application
344
- * @param keyWrappingService The key wrapping service
345
- * @param mnemonicService The mnemonic service
346
- * @param eciesService The ECIES service
347
- * @param roleService The role service
348
- * @param backupCodeService The backup code service
349
- * @returns The result of the initialization
350
- */
351
- public static async initUserDbWithServices(
352
- application: IApplication<
353
- any,
354
- Types.ObjectId,
355
- IBaseDocument<any, Types.ObjectId>,
356
- Environment,
357
- IConstants
358
- >,
359
- keyWrappingService: KeyWrappingService,
360
- mnemonicService: MnemonicService,
361
- eciesService: ECIESService,
362
- roleService: RoleService,
363
- backupCodeService: BackupCodeService,
364
- ): Promise<IFailableResult<IServerInitResult>> {
365
- const isTestEnvironment = process.env['NODE_ENV'] === 'test';
366
- const options = DatabaseInitializationService.getInitOptions(application);
367
- const UserModel = ModelRegistry.instance.getTypedModel<IUserDocument>(
368
- BaseModelName.User,
369
- );
370
- const RoleModel = ModelRegistry.instance.getTypedModel<IRoleDocument>(
371
- BaseModelName.Role,
372
- );
373
- const adminUserId = options.adminId ?? new Types.ObjectId();
374
- const adminRoleId = options.adminRoleId ?? new Types.ObjectId();
375
- const adminUserRoleId = options.adminUserRoleId ?? new Types.ObjectId();
376
- const memberUserId = options.memberId ?? new Types.ObjectId();
377
- const memberRoleId = options.memberRoleId ?? new Types.ObjectId();
378
- const memberUserRoleId = options.memberUserRoleId ?? new Types.ObjectId();
379
- const systemUserId = options.systemId ?? new Types.ObjectId();
380
- const systemRoleId = options.systemRoleId ?? new Types.ObjectId();
381
- const systemUserRoleId = options.systemUserRoleId ?? new Types.ObjectId();
382
-
383
- // Check for existing users and roles with optimized queries
384
- // Use lean() for better performance on read-only operations
385
- const [existingUsers, existingRoles] = await Promise.all([
386
- UserModel.find({
387
- username: {
388
- $in: [
389
- AppConstants.SystemUser,
390
- AppConstants.AdministratorUser,
391
- AppConstants.MemberUser,
392
- ],
393
- },
394
- }).lean(),
395
- RoleModel.find({
396
- name: {
397
- $in: [
398
- AppConstants.AdministratorRole,
399
- AppConstants.MemberRole,
400
- AppConstants.SystemRole,
401
- ],
402
- },
403
- }).lean(),
404
- ]);
405
-
406
- if (existingUsers.length > 0 || existingRoles.length > 0) {
407
- // Database is already initialized, return the existing data
408
- const existingAdminUser = existingUsers.find(
409
- (u) => u.username === AppConstants.AdministratorUser,
410
- );
411
- const existingMemberUser = existingUsers.find(
412
- (u) => u.username === AppConstants.MemberUser,
413
- );
414
- const existingSystemUser = existingUsers.find(
415
- (u) => u.username === AppConstants.SystemUser,
416
- );
417
-
418
- if (existingAdminUser && existingMemberUser && existingSystemUser) {
419
- const adminUserDoc = UserModel.hydrate(existingAdminUser);
420
- const memberUserDoc = UserModel.hydrate(existingMemberUser);
421
- const systemUserDoc = UserModel.hydrate(existingSystemUser);
422
-
423
- // Try to construct a minimal result from existing data
424
- // Note: This is a fallback case and some data may not be available
425
- const UserRoleModel =
426
- ModelRegistry.instance.getTypedModel<IUserRoleDocument>(
427
- BaseModelName.UserRole,
428
- );
429
- const [
430
- adminRole,
431
- memberRole,
432
- systemRole,
433
- adminUserRole,
434
- memberUserRole,
435
- systemUserRole,
436
- ] = await Promise.all([
437
- RoleModel.findOne({ name: AppConstants.AdministratorRole }),
438
- RoleModel.findOne({ name: AppConstants.MemberRole }),
439
- RoleModel.findOne({ name: AppConstants.SystemRole }),
440
- UserRoleModel.findOne({ userId: adminUserDoc._id }),
441
- UserRoleModel.findOne({ userId: memberUserDoc._id }),
442
- UserRoleModel.findOne({ userId: systemUserDoc._id }),
443
- ]);
444
-
445
- if (
446
- adminRole &&
447
- memberRole &&
448
- systemRole &&
449
- adminUserRole &&
450
- memberUserRole &&
451
- systemUserRole
452
- ) {
453
- return {
454
- success: true,
455
- data: {
456
- adminRole,
457
- adminUserRole,
458
- adminUser: adminUserDoc,
459
- adminUsername: adminUserDoc.username,
460
- adminEmail: adminUserDoc.email,
461
- adminMnemonic: '', // Not available in fallback
462
- adminPassword: '', // Not available in fallback
463
- adminBackupCodes: [], // Not available in fallback
464
- adminMember: {} as BackendMember, // Not available in fallback
465
- memberRole,
466
- memberUserRole,
467
- memberUser: memberUserDoc,
468
- memberUsername: memberUserDoc.username,
469
- memberEmail: memberUserDoc.email,
470
- memberMnemonic: '', // Not available in fallback
471
- memberPassword: '', // Not available in fallback
472
- memberBackupCodes: [], // Not available in fallback
473
- memberMember: {} as BackendMember, // Not available in fallback
474
- systemRole,
475
- systemUserRole,
476
- systemUser: systemUserDoc,
477
- systemUsername: systemUserDoc.username,
478
- systemEmail: systemUserDoc.email,
479
- systemMnemonic: '', // Not available in fallback
480
- systemPassword: '', // Not available in fallback
481
- systemBackupCodes: [], // Not available in fallback
482
- systemMember: {} as BackendMember, // Not available in fallback
483
- },
484
- };
485
- }
486
- }
487
-
488
- return {
489
- success: false,
490
- message: getSuiteCoreI18nEngine().translate(
491
- SuiteCoreComponentId,
492
- SuiteCoreStringKey.Admin_DatabaseAlreadyInitialized,
493
- ),
494
- error: new Error(
495
- getSuiteCoreI18nEngine().translate(
496
- SuiteCoreComponentId,
497
- SuiteCoreStringKey.Admin_DatabaseAlreadyInitialized,
498
- ),
499
- ),
500
- };
501
- }
502
-
503
- debugLog(
504
- application.environment.detailedDebug,
505
- 'log',
506
- getSuiteCoreI18nEngine().translate(
507
- SuiteCoreComponentId,
508
- SuiteCoreStringKey.Admin_SettingUpUsersAndRoles,
509
- ),
510
- );
511
- const now = new Date();
512
-
513
- // Add a small random delay in test environments to reduce collision probability
514
- if (isTestEnvironment) {
515
- const delay = (randomBytes(1)[0] % 50) + 10; // 10-60ms random delay (reduced)
516
- await new Promise((resolve) => setTimeout(resolve, delay));
517
- }
518
-
519
- try {
520
- // Use test-optimized settings for better performance
521
- const transactionOptions = isTestEnvironment
522
- ? { timeoutMs: 15000, retryAttempts: 2 } // Reduced timeout and retries for tests
523
- : { timeoutMs: 120000 }; // Keep original production timeout
524
-
525
- const result = await withTransaction<{
526
- adminRole: IRoleDocument;
527
- memberRole: IRoleDocument;
528
- systemRole: IRoleDocument;
529
- systemDoc: IUserDocument;
530
- systemUserRoleDoc: IUserRoleDocument;
531
- systemPassword: string;
532
- systemMnemonic: string;
533
- systemBackupCodes: SecureString[];
534
- systemMember: BackendMember;
535
- adminDoc: IUserDocument;
536
- adminUserRoleDoc: IUserRoleDocument;
537
- adminPassword: string;
538
- adminMnemonic: string;
539
- adminBackupCodes: SecureString[];
540
- adminMember: BackendMember;
541
- memberDoc: IUserDocument;
542
- memberUserRoleDoc: IUserRoleDocument;
543
- memberPassword: string;
544
- memberMnemonic: string;
545
- memberBackupCodes: SecureString[];
546
- memberUser: BackendMember;
547
- }>(
548
- application.db.connection,
549
- application.environment.mongo.useTransactions,
550
- undefined,
551
- async (sess) => {
552
- // Check if admin role already exists
553
- let adminRole = await RoleModel.findOne({
554
- name: AppConstants.AdministratorRole,
555
- }).session(sess ?? null);
556
- if (!adminRole) {
557
- const adminRoleDocs = await RoleModel.create(
558
- [
559
- {
560
- _id: adminRoleId,
561
- name: AppConstants.AdministratorRole,
562
- admin: true,
563
- member: true,
564
- system: false,
565
- child: false,
566
- createdAt: now,
567
- updatedAt: now,
568
- createdBy: systemUserId,
569
- updatedBy: systemUserId,
570
- },
571
- ],
572
- { session: sess },
573
- );
574
- if (adminRoleDocs.length !== 1) {
575
- throw new TranslatableSuiteError(
576
- SuiteCoreStringKey.Error_FailedToCreateRoleTemplate,
577
- {
578
- NAME: AppConstants.AdministratorRole,
579
- },
580
- );
581
- }
582
- adminRole = adminRoleDocs[0];
583
- }
584
-
585
- // Check if member role already exists
586
- let memberRole = await RoleModel.findOne({
587
- name: AppConstants.MemberRole,
588
- }).session(sess ?? null);
589
- if (!memberRole) {
590
- const memberRoleDocs = await RoleModel.create(
591
- [
592
- {
593
- _id: memberRoleId,
594
- name: AppConstants.MemberRole,
595
- admin: false,
596
- member: true,
597
- child: false,
598
- system: false,
599
- createdAt: now,
600
- updatedAt: now,
601
- createdBy: systemUserId,
602
- updatedBy: systemUserId,
603
- },
604
- ],
605
- { session: sess },
606
- );
607
- if (memberRoleDocs.length !== 1) {
608
- throw new TranslatableSuiteError(
609
- SuiteCoreStringKey.Error_FailedToCreateRoleTemplate,
610
- {
611
- NAME: getSuiteCoreI18nEngine().translate(
612
- SuiteCoreComponentId,
613
- SuiteCoreStringKey.Common_Member,
614
- ),
615
- },
616
- );
617
- }
618
- memberRole = memberRoleDocs[0];
619
- }
620
-
621
- // Check if system role already exists
622
- let systemRole = await RoleModel.findOne({
623
- name: AppConstants.SystemRole,
624
- }).session(sess ?? null);
625
- if (!systemRole) {
626
- const systemRoleDocs = await RoleModel.create(
627
- [
628
- {
629
- _id: systemRoleId,
630
- name: AppConstants.SystemRole,
631
- admin: true,
632
- member: true,
633
- system: true,
634
- child: false,
635
- createdAt: now,
636
- updatedAt: now,
637
- createdBy: systemUserId,
638
- updatedBy: systemUserId,
639
- },
640
- ],
641
- { session: sess },
642
- );
643
- if (systemRoleDocs.length !== 1) {
644
- throw new TranslatableSuiteError(
645
- SuiteCoreStringKey.Error_FailedToCreateRoleTemplate,
646
- );
647
- }
648
- systemRole = systemRoleDocs[0];
649
- }
650
-
651
- const systemUser = DatabaseInitializationService.cacheOrNew(
652
- AppConstants.SystemUser,
653
- new EmailString(AppConstants.SystemEmail),
654
- options.systemMnemonic!,
655
- MemberType.System,
656
- eciesService,
657
- options.systemId,
658
- options.systemId,
659
- );
660
- backupCodeService.setSystemUser(systemUser.member);
661
- SystemUserService.setSystemUser(systemUser.member);
662
- // Encrypt mnemonic for recovery
663
- const systemEncryptedMnemonic = systemUser.member
664
- .encryptData(Buffer.from(systemUser.mnemonic.value ?? '', 'utf-8'))
665
- .toString('hex');
666
- const systemMnemonicDoc = await mnemonicService.addMnemonic(
667
- systemUser.mnemonic,
668
- sess,
669
- );
670
- if (!systemMnemonicDoc) {
671
- throw new Error(
672
- getSuiteCoreI18nEngine().translate(
673
- SuiteCoreComponentId,
674
- SuiteCoreStringKey.Error_FailedToStoreUserMnemonicTemplate,
675
- {
676
- NAME: getSuiteCoreI18nEngine().translate(
677
- SuiteCoreComponentId,
678
- SuiteCoreStringKey.Common_System,
679
- ),
680
- },
681
- ),
682
- );
683
- }
684
- const systemPasswordSecure = options.systemPassword
685
- ? options.systemPassword
686
- : new SecureString(this.generatePassword(16));
687
-
688
- const systemWrapped = keyWrappingService.wrapSecret(
689
- systemUser.member.privateKey!,
690
- systemPasswordSecure,
691
- );
692
- const systemBackupCodes =
693
- options.systemBackupCodes ?? BackupCode.generateBackupCodes();
694
- const encryptedSystemBackupCodes =
695
- await BackupCode.encryptBackupCodes(
696
- systemUser.member,
697
- systemUser.member,
698
- systemBackupCodes,
699
- );
700
- const systemDocs = await UserModel.create(
701
- [
702
- {
703
- _id: systemUserId,
704
- username: AppConstants.SystemUser,
705
- email: AppConstants.SystemEmail,
706
- publicKey: systemUser.member.publicKey.toString('hex'),
707
- duressPasswords: [],
708
- mnemonicRecovery: systemEncryptedMnemonic,
709
- mnemonicId: systemMnemonicDoc._id,
710
- passwordWrappedPrivateKey: systemWrapped,
711
- backupCodes: encryptedSystemBackupCodes,
712
- timezone: application.environment.timezone.value,
713
- siteLanguage: 'en-US',
714
- emailVerified: true,
715
- accountStatus: AccountStatus.Active,
716
- createdAt: now,
717
- updatedAt: now,
718
- createdBy: systemUserId,
719
- updatedBy: systemUserId,
720
- },
721
- ],
722
- { session: sess },
723
- );
724
- if (systemDocs.length !== 1) {
725
- throw new Error(
726
- getSuiteCoreI18nEngine().translate(
727
- SuiteCoreComponentId,
728
- SuiteCoreStringKey.Error_FailedToCreateUserTemplate,
729
- {
730
- NAME: getSuiteCoreI18nEngine().translate(
731
- SuiteCoreComponentId,
732
- SuiteCoreStringKey.Common_System,
733
- ),
734
- },
735
- ),
736
- );
737
- }
738
-
739
- const systemDoc = systemDocs[0];
740
-
741
- // Create admin user-role relationship
742
- const systemUserRoleDoc = await roleService.addUserToRole(
743
- systemRoleId,
744
- systemUserId,
745
- systemUserId,
746
- sess,
747
- systemUserRoleId,
748
- );
749
-
750
- if (!systemUser.mnemonic.value) {
751
- throw new Error(
752
- getSuiteCoreI18nEngine().translate(
753
- SuiteCoreComponentId,
754
- SuiteCoreStringKey.Error_MnemonicIsNullTemplate,
755
- {
756
- NAME: SuiteCoreStringKey.Common_System,
757
- },
758
- ),
759
- );
760
- }
761
-
762
- const adminUser = DatabaseInitializationService.cacheOrNew(
763
- AppConstants.AdministratorUser,
764
- new EmailString(AppConstants.AdministratorEmail),
765
- options.adminMnemonic,
766
- MemberType.User,
767
- eciesService,
768
- options.adminId,
769
- systemDoc._id,
770
- );
771
- // Encrypt mnemonic for recovery
772
- const adminEncryptedMnemonic = adminUser.member
773
- .encryptData(Buffer.from(adminUser.mnemonic.value ?? '', 'utf-8'))
774
- .toString('hex');
775
- const adminMnemonicDoc = await mnemonicService.addMnemonic(
776
- adminUser.mnemonic,
777
- sess,
778
- );
779
- if (!adminMnemonicDoc) {
780
- throw new Error(
781
- getSuiteCoreI18nEngine().translate(
782
- SuiteCoreComponentId,
783
- SuiteCoreStringKey.Error_FailedToStoreUserMnemonicTemplate,
784
- {
785
- NAME: getSuiteCoreI18nEngine().translate(
786
- SuiteCoreComponentId,
787
- SuiteCoreStringKey.Common_Admin,
788
- ),
789
- },
790
- ),
791
- );
792
- }
793
- const adminPasswordSecure = options.adminPassword
794
- ? options.adminPassword
795
- : new SecureString(this.generatePassword(16));
796
-
797
- const adminWrapped = keyWrappingService.wrapSecret(
798
- adminUser.member.privateKey!,
799
- adminPasswordSecure,
800
- );
801
- const adminBackupCodes =
802
- options.adminBackupCodes ?? BackupCode.generateBackupCodes();
803
- const encryptedAdminBackupCodes = await BackupCode.encryptBackupCodes(
804
- adminUser.member,
805
- systemUser.member,
806
- adminBackupCodes,
807
- );
808
- const adminDocs = await UserModel.create(
809
- [
810
- {
811
- _id: adminUserId,
812
- username: AppConstants.AdministratorUser,
813
- email: AppConstants.AdministratorEmail,
814
- publicKey: adminUser.member.publicKey.toString('hex'),
815
- duressPasswords: [],
816
- mnemonicRecovery: adminEncryptedMnemonic,
817
- mnemonicId: adminMnemonicDoc._id,
818
- passwordWrappedPrivateKey: adminWrapped,
819
- backupCodes: encryptedAdminBackupCodes,
820
- timezone: application.environment.timezone.value,
821
- siteLanguage: 'en-US',
822
- emailVerified: true,
823
- accountStatus: AccountStatus.Active,
824
- createdAt: now,
825
- updatedAt: now,
826
- createdBy: systemUserId,
827
- updatedBy: systemUserId,
828
- },
829
- ],
830
- { session: sess },
831
- );
832
- if (adminDocs.length !== 1) {
833
- throw new Error(
834
- getSuiteCoreI18nEngine().translate(
835
- SuiteCoreComponentId,
836
- SuiteCoreStringKey.Error_FailedToCreateUserTemplate,
837
- {
838
- NAME: getSuiteCoreI18nEngine().translate(
839
- SuiteCoreComponentId,
840
- SuiteCoreStringKey.Common_Admin,
841
- ),
842
- },
843
- ),
844
- );
845
- }
846
-
847
- const adminDoc = adminDocs[0];
848
-
849
- // Create admin user-role relationship
850
- const adminUserRoleDoc = await roleService.addUserToRole(
851
- adminRoleId,
852
- adminUserId,
853
- systemUserId,
854
- sess,
855
- adminUserRoleId,
856
- );
857
-
858
- if (!adminUser.mnemonic.value) {
859
- throw new Error(
860
- getSuiteCoreI18nEngine().translate(
861
- SuiteCoreComponentId,
862
- SuiteCoreStringKey.Error_MnemonicIsNullTemplate,
863
- {
864
- NAME: getSuiteCoreI18nEngine().translate(
865
- SuiteCoreComponentId,
866
- SuiteCoreStringKey.Common_Admin,
867
- ),
868
- },
869
- ),
870
- );
871
- }
872
-
873
- const memberUser = DatabaseInitializationService.cacheOrNew(
874
- AppConstants.MemberUser,
875
- new EmailString(AppConstants.MemberEmail),
876
- options.memberMnemonic,
877
- MemberType.User,
878
- eciesService,
879
- options.memberId,
880
- systemDoc._id,
881
- );
882
- const memberPasswordSecure = options.memberPassword
883
- ? options.memberPassword
884
- : new SecureString(this.generatePassword(16));
885
-
886
- const memberMnemonicDoc = await mnemonicService.addMnemonic(
887
- memberUser.mnemonic,
888
- sess,
889
- );
890
- if (!memberMnemonicDoc) {
891
- throw new Error(
892
- getSuiteCoreI18nEngine().translate(
893
- SuiteCoreComponentId,
894
- SuiteCoreStringKey.Error_FailedToStoreUserMnemonicTemplate,
895
- {
896
- NAME: getSuiteCoreI18nEngine().translate(
897
- SuiteCoreComponentId,
898
- SuiteCoreStringKey.Common_Member,
899
- ),
900
- },
901
- ),
902
- );
903
- }
904
-
905
- // Encrypt mnemonic for recovery
906
- const encryptedMemberMnemonic = memberUser.member
907
- .encryptData(Buffer.from(memberUser.mnemonic.value ?? '', 'utf-8'))
908
- .toString('hex');
909
- const memberWrapped = keyWrappingService.wrapSecret(
910
- memberUser.member.privateKey!,
911
- memberPasswordSecure,
912
- );
913
- const memberBackupCodes =
914
- options.memberBackupCodes ?? BackupCode.generateBackupCodes();
915
- const encryptedMemberBackupCodes =
916
- await BackupCode.encryptBackupCodes(
917
- memberUser.member,
918
- systemUser.member,
919
- memberBackupCodes,
920
- );
921
- const memberDocs = await UserModel.create(
922
- [
923
- {
924
- _id: memberUserId,
925
- username: AppConstants.MemberUser,
926
- email: AppConstants.MemberEmail,
927
- publicKey: memberUser.member.publicKey.toString('hex'),
928
- mnemonicId: memberMnemonicDoc._id,
929
- mnemonicRecovery: encryptedMemberMnemonic,
930
- passwordWrappedPrivateKey: memberWrapped,
931
- backupCodes: encryptedMemberBackupCodes,
932
- duressPasswords: [],
933
- timezone: application.environment.timezone.value,
934
- siteLanguage: 'en-US',
935
- emailVerified: true,
936
- accountStatus: AccountStatus.Active,
937
- createdAt: now,
938
- updatedAt: now,
939
- createdBy: systemUserId,
940
- updatedBy: systemUserId,
941
- },
942
- ],
943
- { session: sess },
944
- );
945
- if (memberDocs.length !== 1) {
946
- throw new Error(
947
- getSuiteCoreI18nEngine().translate(
948
- SuiteCoreComponentId,
949
- SuiteCoreStringKey.Error_FailedToCreateUserTemplate,
950
- {
951
- NAME: getSuiteCoreI18nEngine().translate(
952
- SuiteCoreComponentId,
953
- SuiteCoreStringKey.Common_Member,
954
- ),
955
- },
956
- ),
957
- );
958
- }
959
-
960
- const memberDoc = memberDocs[0];
961
-
962
- // Create member user-role relationship
963
- const memberUserRoleDoc = await roleService.addUserToRole(
964
- memberRoleId,
965
- memberUserId,
966
- systemUserId,
967
- sess,
968
- memberUserRoleId,
969
- );
970
-
971
- if (!memberUser.mnemonic.value) {
972
- throw new Error(
973
- getSuiteCoreI18nEngine().translate(
974
- SuiteCoreComponentId,
975
- SuiteCoreStringKey.Error_MnemonicIsNullTemplate,
976
- {
977
- NAME: getSuiteCoreI18nEngine().translate(
978
- SuiteCoreComponentId,
979
- SuiteCoreStringKey.Common_Member,
980
- ),
981
- },
982
- ),
983
- );
984
- }
985
-
986
- return {
987
- adminRole,
988
- memberRole,
989
- systemRole,
990
- systemDoc,
991
- systemUserRoleDoc,
992
- systemPassword: systemPasswordSecure.notNullValue,
993
- systemMnemonic: systemUser.mnemonic.notNullValue,
994
- systemBackupCodes: systemBackupCodes as SecureString[],
995
- systemMember: systemUser.member,
996
- adminDoc,
997
- adminUserRoleDoc,
998
- adminPassword: adminPasswordSecure.notNullValue,
999
- adminMnemonic: adminUser.mnemonic.notNullValue,
1000
- adminBackupCodes: adminBackupCodes as SecureString[],
1001
- adminMember: adminUser.member,
1002
- memberDoc,
1003
- memberUserRoleDoc,
1004
- memberPassword: memberPasswordSecure.notNullValue,
1005
- memberMnemonic: memberUser.mnemonic.notNullValue,
1006
- memberBackupCodes: memberBackupCodes as SecureString[],
1007
- memberUser: memberUser.member,
1008
- };
1009
- },
1010
- transactionOptions,
1011
- );
1012
-
1013
- return {
1014
- success: true,
1015
- data: {
1016
- adminRole: result.adminRole,
1017
- adminUserRole: result.adminUserRoleDoc,
1018
- adminUser: result.adminDoc,
1019
- adminUsername: result.adminDoc.username,
1020
- adminEmail: result.adminDoc.email,
1021
- adminMnemonic: result.adminMnemonic,
1022
- adminPassword: result.adminPassword,
1023
- adminBackupCodes: result.adminBackupCodes.map((bc) => bc.value ?? ''),
1024
- adminMember: result.adminMember,
1025
- memberRole: result.memberRole,
1026
- memberUserRole: result.memberUserRoleDoc,
1027
- memberUser: result.memberDoc,
1028
- memberUsername: result.memberDoc.username,
1029
- memberEmail: result.memberDoc.email,
1030
- memberMnemonic: result.memberMnemonic,
1031
- memberPassword: result.memberPassword,
1032
- memberBackupCodes: result.memberBackupCodes.map(
1033
- (bc) => bc.value ?? '',
1034
- ),
1035
- memberMember: result.memberUser,
1036
- systemRole: result.systemRole,
1037
- systemUserRole: result.systemUserRoleDoc,
1038
- systemUser: result.systemDoc,
1039
- systemUsername: result.systemDoc.username,
1040
- systemEmail: result.systemDoc.email,
1041
- systemMnemonic: result.systemMnemonic,
1042
- systemPassword: result.systemPassword,
1043
- systemBackupCodes: result.systemBackupCodes.map(
1044
- (bc) => bc.value ?? '',
1045
- ),
1046
- systemMember: result.systemMember,
1047
- },
1048
- };
1049
- } catch (error) {
1050
- return {
1051
- success: false,
1052
- message: getSuiteCoreI18nEngine().translate(
1053
- SuiteCoreComponentId,
1054
- SuiteCoreStringKey.Admin_Error_FailedToInitializeUserDatabase,
1055
- ),
1056
- error:
1057
- error instanceof Error
1058
- ? error
1059
- : new Error(
1060
- getSuiteCoreI18nEngine().translate(
1061
- SuiteCoreComponentId,
1062
- SuiteCoreStringKey.Admin_Error_FailedToInitializeUserDatabase,
1063
- ),
1064
- ),
1065
- };
1066
- }
1067
- }
1068
-
1069
- public static printServerInitResults(result: IServerInitResult): void {
1070
- debugLog(
1071
- true,
1072
- 'log',
1073
- this.defaultI18nTFunc(
1074
- '\n=== {{StringName.Admin_AccountCredentials}} ===',
1075
- ),
1076
- );
1077
- debugLog(
1078
- true,
1079
- 'log',
1080
- this.defaultI18nTFunc(
1081
- '{{StringName.Common_System}} {{StringName.Common_ID}}: {id}',
1082
- undefined,
1083
- {
1084
- id: result.systemUser._id.toHexString(),
1085
- },
1086
- ),
1087
- );
1088
- debugLog(
1089
- true,
1090
- 'log',
1091
- this.defaultI18nTFunc(
1092
- '{{StringName.Common_System}} {{StringName.Common_Role}}: {roleName}',
1093
- undefined,
1094
- {
1095
- roleName: result.systemRole.name,
1096
- },
1097
- ),
1098
- );
1099
- debugLog(
1100
- true,
1101
- 'log',
1102
- this.defaultI18nTFunc(
1103
- '{{StringName.Common_System}} {{StringName.Common_Role}} {{StringName.Common_ID}}: {roleId}',
1104
- undefined,
1105
- {
1106
- roleId: result.systemRole._id.toString(),
1107
- },
1108
- ),
1109
- );
1110
- debugLog(
1111
- true,
1112
- 'log',
1113
- this.defaultI18nTFunc(
1114
- '{{StringName.Common_System}} {{StringName.Common_User}} {{StringName.Common_Role}} {{StringName.Common_ID}}: {userRoleId}',
1115
- undefined,
1116
- {
1117
- userRoleId: result.systemUserRole._id.toString(),
1118
- },
1119
- ),
1120
- );
1121
- debugLog(
1122
- true,
1123
- 'log',
1124
- this.defaultI18nTFunc(
1125
- '{{StringName.Common_System}} {{StringName.Common_Username}}: {username}',
1126
- undefined,
1127
- {
1128
- username: result.systemUsername,
1129
- },
1130
- ),
1131
- );
1132
- debugLog(
1133
- true,
1134
- 'log',
1135
- this.defaultI18nTFunc(
1136
- '{{StringName.Common_System}} {{StringName.Common_Email}}: {email}',
1137
- undefined,
1138
- {
1139
- email: result.systemEmail,
1140
- },
1141
- ),
1142
- );
1143
- debugLog(
1144
- true,
1145
- 'log',
1146
- this.defaultI18nTFunc(
1147
- '{{StringName.Common_System}} {{StringName.Common_Password}}: {password}',
1148
- undefined,
1149
- {
1150
- password: result.systemPassword,
1151
- },
1152
- ),
1153
- );
1154
- debugLog(
1155
- true,
1156
- 'log',
1157
- this.defaultI18nTFunc(
1158
- '{{StringName.Common_System}} {{StringName.Common_Mnemonic}}: {mnemonic}',
1159
- undefined,
1160
- {
1161
- mnemonic: result.systemMnemonic,
1162
- },
1163
- ),
1164
- );
1165
- debugLog(
1166
- true,
1167
- 'log',
1168
- this.defaultI18nTFunc(
1169
- '{{StringName.Common_System}} {{StringName.Common_PublicKey}}: {publicKey}',
1170
- undefined,
1171
- {
1172
- publicKey: result.systemUser.publicKey,
1173
- },
1174
- ),
1175
- );
1176
- debugLog(
1177
- true,
1178
- 'log',
1179
- `${this.defaultI18nTFunc(
1180
- '{{StringName.Common_System}} {{StringName.Common_BackupCodes}}',
1181
- )}: ${result.systemBackupCodes.join(', ')}`,
1182
- );
1183
- debugLog(true, 'log', '');
1184
- debugLog(
1185
- true,
1186
- 'log',
1187
- this.defaultI18nTFunc(
1188
- '{{StringName.Common_Admin}} {{StringName.Common_ID}}: {id}',
1189
- undefined,
1190
- {
1191
- id: result.adminUser._id.toHexString(),
1192
- },
1193
- ),
1194
- );
1195
- debugLog(
1196
- true,
1197
- 'log',
1198
- this.defaultI18nTFunc(
1199
- '{{StringName.Common_Admin}} {{StringName.Common_Role}}: {roleName}',
1200
- undefined,
1201
- {
1202
- roleName: result.adminRole.name,
1203
- },
1204
- ),
1205
- );
1206
- debugLog(
1207
- true,
1208
- 'log',
1209
- this.defaultI18nTFunc(
1210
- '{{StringName.Common_Admin}} {{StringName.Common_Role}} {{StringName.Common_ID}}: {roleId}',
1211
- undefined,
1212
- {
1213
- roleId: result.adminRole._id.toString(),
1214
- },
1215
- ),
1216
- );
1217
- debugLog(
1218
- true,
1219
- 'log',
1220
- this.defaultI18nTFunc(
1221
- '{{StringName.Common_Admin}} {{StringName.Common_User}} {{StringName.Common_Role}} {{StringName.Common_ID}}: {userRoleId}',
1222
- undefined,
1223
- {
1224
- userRoleId: result.adminUserRole._id.toString(),
1225
- },
1226
- ),
1227
- );
1228
- debugLog(
1229
- true,
1230
- 'log',
1231
- this.defaultI18nTFunc(
1232
- '{{StringName.Common_Admin}} {{StringName.Common_Username}}: {username}',
1233
- undefined,
1234
- {
1235
- username: result.adminUsername,
1236
- },
1237
- ),
1238
- );
1239
- debugLog(
1240
- true,
1241
- 'log',
1242
- this.defaultI18nTFunc(
1243
- '{{StringName.Common_Admin}} {{StringName.Common_Email}}: {email}',
1244
- undefined,
1245
- {
1246
- email: result.adminEmail,
1247
- },
1248
- ),
1249
- );
1250
- debugLog(
1251
- true,
1252
- 'log',
1253
- this.defaultI18nTFunc(
1254
- '{{StringName.Common_Admin}} {{StringName.Common_Password}}: {password}',
1255
- undefined,
1256
- {
1257
- password: result.adminPassword,
1258
- },
1259
- ),
1260
- );
1261
- debugLog(
1262
- true,
1263
- 'log',
1264
- this.defaultI18nTFunc(
1265
- '{{StringName.Common_Admin}} {{StringName.Common_Mnemonic}}: {mnemonic}',
1266
- undefined,
1267
- {
1268
- mnemonic: result.adminMnemonic,
1269
- },
1270
- ),
1271
- );
1272
- debugLog(
1273
- true,
1274
- 'log',
1275
- this.defaultI18nTFunc(
1276
- '{{StringName.Common_Admin}} {{StringName.Common_PublicKey}}: {publicKey}',
1277
- undefined,
1278
- {
1279
- publicKey: result.adminUser.publicKey,
1280
- },
1281
- ),
1282
- );
1283
- debugLog(
1284
- true,
1285
- 'log',
1286
- `${this.defaultI18nTFunc(
1287
- '{{StringName.Common_Admin}} {{StringName.Common_BackupCodes}}',
1288
- )}: ${result.adminBackupCodes.join(', ')}`,
1289
- );
1290
- debugLog(true, 'log', '');
1291
- debugLog(
1292
- true,
1293
- 'log',
1294
- this.defaultI18nTFunc(
1295
- '{{StringName.Common_Member}} {{StringName.Common_ID}}: {id}',
1296
- undefined,
1297
- {
1298
- id: result.memberUser._id.toHexString(),
1299
- },
1300
- ),
1301
- );
1302
- debugLog(
1303
- true,
1304
- 'log',
1305
- this.defaultI18nTFunc(
1306
- '{{StringName.Common_Member}} {{StringName.Common_Role}}: {roleName}',
1307
- undefined,
1308
- {
1309
- roleName: result.memberRole.name,
1310
- },
1311
- ),
1312
- );
1313
- debugLog(
1314
- true,
1315
- 'log',
1316
- this.defaultI18nTFunc(
1317
- '{{StringName.Common_Member}} {{StringName.Common_Role}} {{StringName.Common_ID}}: {roleId}',
1318
- undefined,
1319
- {
1320
- roleId: result.memberRole._id.toString(),
1321
- },
1322
- ),
1323
- );
1324
- debugLog(
1325
- true,
1326
- 'log',
1327
- this.defaultI18nTFunc(
1328
- '{{StringName.Common_Member}} {{StringName.Common_User}} {{StringName.Common_Role}} {{StringName.Common_ID}}: {userRoleId}',
1329
- undefined,
1330
- {
1331
- userRoleId: result.memberUserRole._id.toString(),
1332
- },
1333
- ),
1334
- );
1335
- debugLog(
1336
- true,
1337
- 'log',
1338
- this.defaultI18nTFunc(
1339
- '{{StringName.Common_Member}} {{StringName.Common_Username}}: {username}',
1340
- undefined,
1341
- {
1342
- username: result.memberUsername,
1343
- },
1344
- ),
1345
- );
1346
- debugLog(
1347
- true,
1348
- 'log',
1349
- this.defaultI18nTFunc(
1350
- '{{StringName.Common_Member}} {{StringName.Common_Email}}: {email}',
1351
- undefined,
1352
- {
1353
- email: result.memberEmail,
1354
- },
1355
- ),
1356
- );
1357
- debugLog(
1358
- true,
1359
- 'log',
1360
- this.defaultI18nTFunc(
1361
- '{{StringName.Common_Member}} {{StringName.Common_Password}}: {password}',
1362
- undefined,
1363
- {
1364
- password: result.memberPassword,
1365
- },
1366
- ),
1367
- );
1368
- debugLog(
1369
- true,
1370
- 'log',
1371
- this.defaultI18nTFunc(
1372
- '{{StringName.Common_Member}} {{StringName.Common_Mnemonic}}: {mnemonic}',
1373
- undefined,
1374
- {
1375
- mnemonic: result.memberMnemonic,
1376
- },
1377
- ),
1378
- );
1379
- debugLog(
1380
- true,
1381
- 'log',
1382
- this.defaultI18nTFunc(
1383
- '{{StringName.Common_Member}} {{StringName.Common_PublicKey}}: {publicKey}',
1384
- undefined,
1385
- {
1386
- publicKey: result.memberUser.publicKey,
1387
- },
1388
- ),
1389
- );
1390
- debugLog(
1391
- true,
1392
- 'log',
1393
- `${this.defaultI18nTFunc(
1394
- '{{StringName.Common_Member}} {{StringName.Common_BackupCodes}}',
1395
- )}: ${result.memberBackupCodes.join(', ')}`,
1396
- );
1397
- debugLog(
1398
- true,
1399
- 'log',
1400
- this.defaultI18nTFunc('\n=== {{StringName.Admin_EndCredentials}} ==='),
1401
- );
1402
- }
1403
-
1404
- public static setEnvFromInitResults(result: IServerInitResult): void {
1405
- process.env['ADMIN_ID'] = result.adminUser._id.toHexString();
1406
- process.env['ADMIN_PUBLIC_KEY'] = result.adminUser.publicKey;
1407
- process.env['ADMIN_MNEMONIC'] = result.adminMnemonic;
1408
- process.env['ADMIN_PASSWORD'] = result.adminPassword;
1409
- process.env['ADMIN_ROLE_ID'] = result.adminRole._id.toHexString();
1410
- process.env['ADMIN_USER_ROLE_ID'] = result.adminUserRole._id.toHexString();
1411
- //
1412
- process.env['MEMBER_ID'] = result.memberUser._id.toHexString();
1413
- process.env['MEMBER_PUBLIC_KEY'] = result.memberUser.publicKey;
1414
- process.env['MEMBER_MNEMONIC'] = result.memberMnemonic;
1415
- process.env['MEMBER_PASSWORD'] = result.memberPassword;
1416
- process.env['MEMBER_ROLE_ID'] = result.memberRole._id.toHexString();
1417
- process.env['MEMBER_USER_ROLE_ID'] =
1418
- result.memberUserRole._id.toHexString();
1419
- //
1420
- process.env['SYSTEM_ID'] = result.systemUser._id.toHexString();
1421
- process.env['SYSTEM_PUBLIC_KEY'] = result.systemUser.publicKey;
1422
- process.env['SYSTEM_MNEMONIC'] = result.systemMnemonic;
1423
- process.env['SYSTEM_PASSWORD'] = result.systemPassword;
1424
- process.env['SYSTEM_ROLE_ID'] = result.systemRole._id.toHexString();
1425
- process.env['SYSTEM_USER_ROLE_ID'] =
1426
- result.systemUserRole._id.toHexString();
1427
- }
1428
-
1429
- /**
1430
- * Initialize the user database with default users and roles (convenience method)
1431
- * This method creates the necessary services and calls initUserDbWithServices
1432
- * @param application The application
1433
- * @returns The result of the initialization
1434
- */
1435
- public static async initUserDb(
1436
- application: IApplication<
1437
- any,
1438
- Types.ObjectId,
1439
- IBaseDocument<any, Types.ObjectId>,
1440
- Environment,
1441
- IConstants
1442
- >,
1443
- ): Promise<IFailableResult<IServerInitResult>> {
1444
- const mnemonicModel = ModelRegistry.instance.getTypedModel<
1445
- IBaseDocument<IMnemonicBase<Types.ObjectId>>
1446
- >(BaseModelName.Mnemonic);
1447
- const keyWrappingService = new KeyWrappingService();
1448
- const mnemonicService = new MnemonicService(
1449
- mnemonicModel,
1450
- application.environment.mnemonicHmacSecret,
1451
- keyWrappingService,
1452
- );
1453
- const config: IECIESConfig = {
1454
- curveName: ECIES.CURVE_NAME,
1455
- primaryKeyDerivationPath: ECIES.PRIMARY_KEY_DERIVATION_PATH,
1456
- mnemonicStrength: ECIES.MNEMONIC_STRENGTH,
1457
- symmetricAlgorithm: ECIES.SYMMETRIC_ALGORITHM_CONFIGURATION,
1458
- symmetricKeyBits: ECIES.SYMMETRIC.KEY_BITS,
1459
- symmetricKeyMode: ECIES.SYMMETRIC.MODE,
1460
- };
1461
- const eciesService = new ECIESService(config);
1462
- const roleService = new RoleService(application);
1463
- const backupCodeService = new BackupCodeService(
1464
- application,
1465
- eciesService,
1466
- keyWrappingService,
1467
- roleService,
1468
- );
1469
-
1470
- return this.initUserDbWithServices(
1471
- application,
1472
- keyWrappingService,
1473
- mnemonicService,
1474
- eciesService,
1475
- roleService,
1476
- backupCodeService,
1477
- );
1478
- }
1479
- }