@digitaldefiance/node-express-suite 1.0.23 → 1.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (632) hide show
  1. package/README.md +8 -0
  2. package/package.json +8 -7
  3. package/src/application-base.d.ts +112 -0
  4. package/src/application-base.d.ts.map +1 -0
  5. package/src/application-base.js +335 -0
  6. package/src/application-base.js.map +1 -0
  7. package/src/application.d.ts +20 -0
  8. package/src/application.d.ts.map +1 -0
  9. package/src/application.js +124 -0
  10. package/src/application.js.map +1 -0
  11. package/src/backup-code.d.ts +67 -0
  12. package/src/backup-code.d.ts.map +1 -0
  13. package/src/backup-code.js +238 -0
  14. package/src/backup-code.js.map +1 -0
  15. package/src/constants.d.ts +16 -0
  16. package/src/constants.d.ts.map +1 -0
  17. package/src/constants.js +54 -0
  18. package/src/constants.js.map +1 -0
  19. package/src/controllers/base.d.ts +63 -0
  20. package/src/controllers/base.d.ts.map +1 -0
  21. package/src/controllers/base.js +272 -0
  22. package/src/controllers/base.js.map +1 -0
  23. package/src/controllers/{index.ts → index.d.ts} +1 -0
  24. package/src/controllers/index.d.ts.map +1 -0
  25. package/src/controllers/index.js +6 -0
  26. package/src/controllers/index.js.map +1 -0
  27. package/src/controllers/user.d.ts +45 -0
  28. package/src/controllers/user.d.ts.map +1 -0
  29. package/src/controllers/user.js +748 -0
  30. package/src/controllers/user.js.map +1 -0
  31. package/src/decorators/base-controller.d.ts +14 -0
  32. package/src/decorators/base-controller.d.ts.map +1 -0
  33. package/src/decorators/base-controller.js +49 -0
  34. package/src/decorators/base-controller.js.map +1 -0
  35. package/src/decorators/controller.d.ts +32 -0
  36. package/src/decorators/controller.d.ts.map +1 -0
  37. package/src/decorators/controller.js +67 -0
  38. package/src/decorators/controller.js.map +1 -0
  39. package/src/decorators/{index.ts → index.d.ts} +1 -0
  40. package/src/decorators/index.d.ts.map +1 -0
  41. package/src/decorators/index.js +7 -0
  42. package/src/decorators/index.js.map +1 -0
  43. package/src/decorators/zod-validation.d.ts +5 -0
  44. package/src/decorators/zod-validation.d.ts.map +1 -0
  45. package/src/decorators/zod-validation.js +47 -0
  46. package/src/decorators/zod-validation.js.map +1 -0
  47. package/src/defaults.d.ts +7 -0
  48. package/src/defaults.d.ts.map +1 -0
  49. package/src/defaults.js +83 -0
  50. package/src/defaults.js.map +1 -0
  51. package/src/documents/base.d.ts +3 -0
  52. package/src/documents/base.d.ts.map +1 -0
  53. package/src/documents/base.js +3 -0
  54. package/src/documents/base.js.map +1 -0
  55. package/src/documents/email-token.d.ts +8 -0
  56. package/src/documents/email-token.d.ts.map +1 -0
  57. package/src/documents/email-token.js +3 -0
  58. package/src/documents/email-token.js.map +1 -0
  59. package/src/documents/{index.ts → index.d.ts} +1 -0
  60. package/src/documents/index.d.ts.map +1 -0
  61. package/src/documents/index.js +3 -0
  62. package/src/documents/index.js.map +1 -0
  63. package/src/documents/{mnemonic.ts → mnemonic.d.ts} +2 -5
  64. package/src/documents/mnemonic.d.ts.map +1 -0
  65. package/src/documents/mnemonic.js +3 -0
  66. package/src/documents/mnemonic.js.map +1 -0
  67. package/src/documents/{role.ts → role.d.ts} +2 -5
  68. package/src/documents/role.d.ts.map +1 -0
  69. package/src/documents/role.js +3 -0
  70. package/src/documents/role.js.map +1 -0
  71. package/src/documents/used-direct-login-token.d.ts +5 -0
  72. package/src/documents/used-direct-login-token.d.ts.map +1 -0
  73. package/src/documents/used-direct-login-token.js +3 -0
  74. package/src/documents/used-direct-login-token.js.map +1 -0
  75. package/src/documents/{user-role.ts → user-role.d.ts} +2 -5
  76. package/src/documents/user-role.d.ts.map +1 -0
  77. package/src/documents/user-role.js +3 -0
  78. package/src/documents/user-role.js.map +1 -0
  79. package/src/documents/{user.ts → user.d.ts} +2 -4
  80. package/src/documents/user.d.ts.map +1 -0
  81. package/src/documents/user.js +3 -0
  82. package/src/documents/user.js.map +1 -0
  83. package/src/enumerations/base-model-name.d.ts +38 -0
  84. package/src/enumerations/base-model-name.d.ts.map +1 -0
  85. package/src/enumerations/base-model-name.js +34 -0
  86. package/src/enumerations/base-model-name.js.map +1 -0
  87. package/src/enumerations/{index.ts → index.d.ts} +1 -0
  88. package/src/enumerations/index.d.ts.map +1 -0
  89. package/src/enumerations/index.js +8 -0
  90. package/src/enumerations/index.js.map +1 -0
  91. package/src/enumerations/length-encoding-type.d.ts +7 -0
  92. package/src/enumerations/length-encoding-type.d.ts.map +1 -0
  93. package/src/enumerations/length-encoding-type.js +11 -0
  94. package/src/enumerations/length-encoding-type.js.map +1 -0
  95. package/src/enumerations/schema-collection.d.ts +34 -0
  96. package/src/enumerations/schema-collection.d.ts.map +1 -0
  97. package/src/enumerations/schema-collection.js +38 -0
  98. package/src/enumerations/schema-collection.js.map +1 -0
  99. package/src/enumerations/symmetric-error-type.d.ts +5 -0
  100. package/src/enumerations/symmetric-error-type.d.ts.map +1 -0
  101. package/src/enumerations/symmetric-error-type.js +9 -0
  102. package/src/enumerations/symmetric-error-type.js.map +1 -0
  103. package/src/environment.d.ts +189 -0
  104. package/src/environment.d.ts.map +1 -0
  105. package/src/environment.js +620 -0
  106. package/src/environment.js.map +1 -0
  107. package/src/errors/express-validation.d.ts +9 -0
  108. package/src/errors/express-validation.d.ts.map +1 -0
  109. package/src/errors/express-validation.js +18 -0
  110. package/src/errors/express-validation.js.map +1 -0
  111. package/src/errors/{index.ts → index.d.ts} +1 -0
  112. package/src/errors/index.d.ts.map +1 -0
  113. package/src/errors/index.js +16 -0
  114. package/src/errors/index.js.map +1 -0
  115. package/src/errors/invalid-backup-code-version.d.ts +6 -0
  116. package/src/errors/invalid-backup-code-version.d.ts.map +1 -0
  117. package/src/errors/invalid-backup-code-version.js +15 -0
  118. package/src/errors/invalid-backup-code-version.js.map +1 -0
  119. package/src/errors/invalid-jwt-token.d.ts +5 -0
  120. package/src/errors/invalid-jwt-token.d.ts.map +1 -0
  121. package/src/errors/invalid-jwt-token.js +11 -0
  122. package/src/errors/invalid-jwt-token.js.map +1 -0
  123. package/src/errors/invalid-model.d.ts +6 -0
  124. package/src/errors/invalid-model.d.ts.map +1 -0
  125. package/src/errors/invalid-model.js +14 -0
  126. package/src/errors/invalid-model.js.map +1 -0
  127. package/src/errors/invalid-new-password.d.ts +5 -0
  128. package/src/errors/invalid-new-password.d.ts.map +1 -0
  129. package/src/errors/invalid-new-password.js +14 -0
  130. package/src/errors/invalid-new-password.js.map +1 -0
  131. package/src/errors/invalid-password.d.ts +5 -0
  132. package/src/errors/invalid-password.d.ts.map +1 -0
  133. package/src/errors/invalid-password.js +14 -0
  134. package/src/errors/invalid-password.js.map +1 -0
  135. package/src/errors/missing-validated-data.d.ts +7 -0
  136. package/src/errors/missing-validated-data.d.ts.map +1 -0
  137. package/src/errors/missing-validated-data.js +36 -0
  138. package/src/errors/missing-validated-data.js.map +1 -0
  139. package/src/errors/mnemonic-or-password-required.d.ts +5 -0
  140. package/src/errors/mnemonic-or-password-required.d.ts.map +1 -0
  141. package/src/errors/mnemonic-or-password-required.js +13 -0
  142. package/src/errors/mnemonic-or-password-required.js.map +1 -0
  143. package/src/errors/model-not-registered.d.ts +5 -0
  144. package/src/errors/model-not-registered.d.ts.map +1 -0
  145. package/src/errors/model-not-registered.js +12 -0
  146. package/src/errors/model-not-registered.js.map +1 -0
  147. package/src/errors/mongoose-validation.d.ts +11 -0
  148. package/src/errors/mongoose-validation.d.ts.map +1 -0
  149. package/src/errors/mongoose-validation.js +17 -0
  150. package/src/errors/mongoose-validation.js.map +1 -0
  151. package/src/errors/symmetric.d.ts +8 -0
  152. package/src/errors/symmetric.d.ts.map +1 -0
  153. package/src/errors/symmetric.js +23 -0
  154. package/src/errors/symmetric.js.map +1 -0
  155. package/src/errors/token-expired.d.ts +5 -0
  156. package/src/errors/token-expired.d.ts.map +1 -0
  157. package/src/errors/token-expired.js +11 -0
  158. package/src/errors/token-expired.js.map +1 -0
  159. package/src/get-language.d.ts +2 -0
  160. package/src/get-language.d.ts.map +1 -0
  161. package/src/get-language.js +30 -0
  162. package/src/get-language.js.map +1 -0
  163. package/src/get-timezone.d.ts +3 -0
  164. package/src/get-timezone.d.ts.map +1 -0
  165. package/src/get-timezone.js +31 -0
  166. package/src/get-timezone.js.map +1 -0
  167. package/src/{index.ts → index.d.ts} +1 -1
  168. package/src/index.d.ts.map +1 -0
  169. package/src/index.js +28 -0
  170. package/src/index.js.map +1 -0
  171. package/src/interfaces/{api-error-response.ts → api-error-response.d.ts} +2 -2
  172. package/src/interfaces/api-error-response.d.ts.map +1 -0
  173. package/src/interfaces/api-error-response.js +3 -0
  174. package/src/interfaces/api-error-response.js.map +1 -0
  175. package/src/interfaces/api-express-validation-error-response.d.ts +7 -0
  176. package/src/interfaces/api-express-validation-error-response.d.ts.map +1 -0
  177. package/src/interfaces/api-express-validation-error-response.js +3 -0
  178. package/src/interfaces/api-express-validation-error-response.js.map +1 -0
  179. package/src/interfaces/api-message-response.d.ts +4 -0
  180. package/src/interfaces/api-message-response.d.ts.map +1 -0
  181. package/src/interfaces/api-message-response.js +3 -0
  182. package/src/interfaces/api-message-response.js.map +1 -0
  183. package/src/interfaces/{api-mongo-validation-error-response.ts → api-mongo-validation-error-response.d.ts} +2 -2
  184. package/src/interfaces/api-mongo-validation-error-response.d.ts.map +1 -0
  185. package/src/interfaces/api-mongo-validation-error-response.js +3 -0
  186. package/src/interfaces/api-mongo-validation-error-response.js.map +1 -0
  187. package/src/interfaces/api-responses/{backup-codes-response.ts → backup-codes-response.d.ts} +2 -2
  188. package/src/interfaces/api-responses/backup-codes-response.d.ts.map +1 -0
  189. package/src/interfaces/api-responses/backup-codes-response.js +3 -0
  190. package/src/interfaces/api-responses/backup-codes-response.js.map +1 -0
  191. package/src/interfaces/api-responses/{challenge-response.ts → challenge-response.d.ts} +3 -3
  192. package/src/interfaces/api-responses/challenge-response.d.ts.map +1 -0
  193. package/src/interfaces/api-responses/challenge-response.js +3 -0
  194. package/src/interfaces/api-responses/challenge-response.js.map +1 -0
  195. package/src/interfaces/api-responses/{code-count-response.ts → code-count-response.d.ts} +2 -2
  196. package/src/interfaces/api-responses/code-count-response.d.ts.map +1 -0
  197. package/src/interfaces/api-responses/code-count-response.js +3 -0
  198. package/src/interfaces/api-responses/code-count-response.js.map +1 -0
  199. package/src/interfaces/api-responses/{index.ts → index.d.ts} +1 -0
  200. package/src/interfaces/api-responses/index.d.ts.map +1 -0
  201. package/src/interfaces/api-responses/index.js +11 -0
  202. package/src/interfaces/api-responses/index.js.map +1 -0
  203. package/src/interfaces/api-responses/{login-response.ts → login-response.d.ts} +4 -4
  204. package/src/interfaces/api-responses/login-response.d.ts.map +1 -0
  205. package/src/interfaces/api-responses/login-response.js +3 -0
  206. package/src/interfaces/api-responses/login-response.js.map +1 -0
  207. package/src/interfaces/api-responses/{mnemonic-response.ts → mnemonic-response.d.ts} +2 -2
  208. package/src/interfaces/api-responses/mnemonic-response.d.ts.map +1 -0
  209. package/src/interfaces/api-responses/mnemonic-response.js +3 -0
  210. package/src/interfaces/api-responses/mnemonic-response.js.map +1 -0
  211. package/src/interfaces/api-responses/{registration-response.ts → registration-response.d.ts} +3 -3
  212. package/src/interfaces/api-responses/registration-response.d.ts.map +1 -0
  213. package/src/interfaces/api-responses/registration-response.js +3 -0
  214. package/src/interfaces/api-responses/registration-response.js.map +1 -0
  215. package/src/interfaces/api-responses/{request-user-response.ts → request-user-response.d.ts} +2 -2
  216. package/src/interfaces/api-responses/request-user-response.d.ts.map +1 -0
  217. package/src/interfaces/api-responses/request-user-response.js +3 -0
  218. package/src/interfaces/api-responses/request-user-response.js.map +1 -0
  219. package/src/interfaces/{application.ts → application.d.ts} +7 -7
  220. package/src/interfaces/application.d.ts.map +1 -0
  221. package/src/interfaces/application.js +3 -0
  222. package/src/interfaces/application.js.map +1 -0
  223. package/src/interfaces/backend-objects/email-token.d.ts +4 -0
  224. package/src/interfaces/backend-objects/email-token.d.ts.map +1 -0
  225. package/src/interfaces/backend-objects/email-token.js +3 -0
  226. package/src/interfaces/backend-objects/email-token.js.map +1 -0
  227. package/src/interfaces/backend-objects/{index.ts → index.d.ts} +1 -0
  228. package/src/interfaces/backend-objects/index.d.ts.map +1 -0
  229. package/src/interfaces/backend-objects/index.js +8 -0
  230. package/src/interfaces/backend-objects/index.js.map +1 -0
  231. package/src/interfaces/backend-objects/{request-user.ts → request-user.d.ts} +2 -7
  232. package/src/interfaces/backend-objects/request-user.d.ts.map +1 -0
  233. package/src/interfaces/backend-objects/request-user.js +3 -0
  234. package/src/interfaces/backend-objects/request-user.js.map +1 -0
  235. package/src/interfaces/backend-objects/{role.ts → role.d.ts} +1 -1
  236. package/src/interfaces/backend-objects/role.d.ts.map +1 -0
  237. package/src/interfaces/backend-objects/role.js +3 -0
  238. package/src/interfaces/backend-objects/role.js.map +1 -0
  239. package/src/interfaces/backend-objects/user.d.ts +4 -0
  240. package/src/interfaces/backend-objects/user.d.ts.map +1 -0
  241. package/src/interfaces/backend-objects/user.js +3 -0
  242. package/src/interfaces/backend-objects/user.js.map +1 -0
  243. package/src/interfaces/checksum-config.d.ts +5 -0
  244. package/src/interfaces/checksum-config.d.ts.map +1 -0
  245. package/src/interfaces/checksum-config.js +3 -0
  246. package/src/interfaces/checksum-config.js.map +1 -0
  247. package/src/interfaces/checksum-consts.d.ts +11 -0
  248. package/src/interfaces/checksum-consts.d.ts.map +1 -0
  249. package/src/interfaces/checksum-consts.js +3 -0
  250. package/src/interfaces/checksum-consts.js.map +1 -0
  251. package/src/interfaces/{constants.ts → constants.d.ts} +5 -5
  252. package/src/interfaces/constants.d.ts.map +1 -0
  253. package/src/interfaces/constants.js +3 -0
  254. package/src/interfaces/constants.js.map +1 -0
  255. package/src/interfaces/create-user-basics.d.ts +18 -0
  256. package/src/interfaces/create-user-basics.d.ts.map +1 -0
  257. package/src/interfaces/create-user-basics.js +3 -0
  258. package/src/interfaces/create-user-basics.js.map +1 -0
  259. package/src/interfaces/csp-config.d.ts +14 -0
  260. package/src/interfaces/csp-config.d.ts.map +1 -0
  261. package/src/interfaces/csp-config.js +3 -0
  262. package/src/interfaces/csp-config.js.map +1 -0
  263. package/src/interfaces/deep-partial.d.ts +4 -0
  264. package/src/interfaces/deep-partial.d.ts.map +1 -0
  265. package/src/interfaces/deep-partial.js +3 -0
  266. package/src/interfaces/deep-partial.js.map +1 -0
  267. package/src/interfaces/{discriminator-collections.ts → discriminator-collections.d.ts} +3 -3
  268. package/src/interfaces/discriminator-collections.d.ts.map +1 -0
  269. package/src/interfaces/discriminator-collections.js +3 -0
  270. package/src/interfaces/discriminator-collections.js.map +1 -0
  271. package/src/interfaces/email-service.d.ts +4 -0
  272. package/src/interfaces/email-service.d.ts.map +1 -0
  273. package/src/interfaces/email-service.js +3 -0
  274. package/src/interfaces/email-service.js.map +1 -0
  275. package/src/interfaces/environment-mongo.d.ts +76 -0
  276. package/src/interfaces/environment-mongo.d.ts.map +1 -0
  277. package/src/interfaces/environment-mongo.js +3 -0
  278. package/src/interfaces/environment-mongo.js.map +1 -0
  279. package/src/interfaces/environment.d.ts +181 -0
  280. package/src/interfaces/environment.d.ts.map +1 -0
  281. package/src/interfaces/environment.js +3 -0
  282. package/src/interfaces/environment.js.map +1 -0
  283. package/src/interfaces/failable-result.d.ts +7 -0
  284. package/src/interfaces/failable-result.d.ts.map +1 -0
  285. package/src/interfaces/failable-result.js +3 -0
  286. package/src/interfaces/failable-result.js.map +1 -0
  287. package/src/interfaces/fec-consts.d.ts +5 -0
  288. package/src/interfaces/fec-consts.d.ts.map +1 -0
  289. package/src/interfaces/fec-consts.js +3 -0
  290. package/src/interfaces/fec-consts.js.map +1 -0
  291. package/src/interfaces/handleable-error-options.d.ts +7 -0
  292. package/src/interfaces/handleable-error-options.d.ts.map +1 -0
  293. package/src/interfaces/handleable-error-options.js +3 -0
  294. package/src/interfaces/handleable-error-options.js.map +1 -0
  295. package/src/interfaces/{index.ts → index.d.ts} +1 -0
  296. package/src/interfaces/index.d.ts.map +1 -0
  297. package/src/interfaces/index.js +33 -0
  298. package/src/interfaces/index.js.map +1 -0
  299. package/src/interfaces/jwt-consts.d.ts +11 -0
  300. package/src/interfaces/jwt-consts.d.ts.map +1 -0
  301. package/src/interfaces/jwt-consts.js +3 -0
  302. package/src/interfaces/jwt-consts.js.map +1 -0
  303. package/src/interfaces/jwt-sign-response.d.ts +11 -0
  304. package/src/interfaces/jwt-sign-response.d.ts.map +1 -0
  305. package/src/interfaces/jwt-sign-response.js +3 -0
  306. package/src/interfaces/jwt-sign-response.js.map +1 -0
  307. package/src/interfaces/mongo-errors.d.ts +5 -0
  308. package/src/interfaces/mongo-errors.d.ts.map +1 -0
  309. package/src/interfaces/mongo-errors.js +3 -0
  310. package/src/interfaces/mongo-errors.js.map +1 -0
  311. package/src/interfaces/request-user.d.ts +42 -0
  312. package/src/interfaces/request-user.d.ts.map +1 -0
  313. package/src/interfaces/request-user.js +3 -0
  314. package/src/interfaces/request-user.js.map +1 -0
  315. package/src/interfaces/required-string-keys.d.ts +22 -0
  316. package/src/interfaces/required-string-keys.d.ts.map +1 -0
  317. package/src/interfaces/required-string-keys.js +3 -0
  318. package/src/interfaces/required-string-keys.js.map +1 -0
  319. package/src/interfaces/schema.d.ts +29 -0
  320. package/src/interfaces/schema.d.ts.map +1 -0
  321. package/src/interfaces/schema.js +3 -0
  322. package/src/interfaces/schema.js.map +1 -0
  323. package/src/interfaces/server-init-result.d.ts +35 -0
  324. package/src/interfaces/server-init-result.d.ts.map +1 -0
  325. package/src/interfaces/server-init-result.js +3 -0
  326. package/src/interfaces/server-init-result.js.map +1 -0
  327. package/src/interfaces/status-code-response.d.ts +7 -0
  328. package/src/interfaces/status-code-response.d.ts.map +1 -0
  329. package/src/interfaces/status-code-response.js +3 -0
  330. package/src/interfaces/status-code-response.js.map +1 -0
  331. package/src/interfaces/symmetric-encryption-results.d.ts +3 -3
  332. package/src/interfaces/symmetric-encryption-results.d.ts.map +1 -1
  333. package/src/interfaces/symmetric-encryption-results.js.map +1 -1
  334. package/src/interfaces/{token-response.ts → token-response.d.ts} +2 -2
  335. package/src/interfaces/token-response.d.ts.map +1 -0
  336. package/src/interfaces/token-response.js +3 -0
  337. package/src/interfaces/token-response.js.map +1 -0
  338. package/src/middlewares/authenticate-crypto.d.ts +13 -0
  339. package/src/middlewares/authenticate-crypto.d.ts.map +1 -0
  340. package/src/middlewares/authenticate-crypto.js +146 -0
  341. package/src/middlewares/authenticate-crypto.js.map +1 -0
  342. package/src/middlewares/authenticate-token.d.ts +24 -0
  343. package/src/middlewares/authenticate-token.d.ts.map +1 -0
  344. package/src/middlewares/authenticate-token.js +102 -0
  345. package/src/middlewares/authenticate-token.js.map +1 -0
  346. package/src/middlewares/cleanup-crypto.d.ts +7 -0
  347. package/src/middlewares/cleanup-crypto.d.ts.map +1 -0
  348. package/src/middlewares/cleanup-crypto.js +32 -0
  349. package/src/middlewares/cleanup-crypto.js.map +1 -0
  350. package/src/middlewares/{index.ts → index.d.ts} +1 -0
  351. package/src/middlewares/index.d.ts.map +1 -0
  352. package/src/middlewares/index.js +8 -0
  353. package/src/middlewares/index.js.map +1 -0
  354. package/src/middlewares/set-global-context-language.d.ts +3 -0
  355. package/src/middlewares/set-global-context-language.d.ts.map +1 -0
  356. package/src/middlewares/set-global-context-language.js +14 -0
  357. package/src/middlewares/set-global-context-language.js.map +1 -0
  358. package/src/middlewares.d.ts +18 -0
  359. package/src/middlewares.d.ts.map +1 -0
  360. package/src/middlewares.js +74 -0
  361. package/src/middlewares.js.map +1 -0
  362. package/src/model-registry.d.ts +23 -0
  363. package/src/model-registry.d.ts.map +1 -0
  364. package/src/model-registry.js +47 -0
  365. package/src/model-registry.js.map +1 -0
  366. package/src/models/email-token.d.ts +11 -0
  367. package/src/models/email-token.d.ts.map +1 -0
  368. package/src/models/email-token.js +11 -0
  369. package/src/models/email-token.js.map +1 -0
  370. package/src/models/{index.ts → index.d.ts} +1 -0
  371. package/src/models/index.d.ts.map +1 -0
  372. package/src/models/index.js +10 -0
  373. package/src/models/index.js.map +1 -0
  374. package/src/models/mnemonic.d.ts +11 -0
  375. package/src/models/mnemonic.d.ts.map +1 -0
  376. package/src/models/mnemonic.js +11 -0
  377. package/src/models/mnemonic.js.map +1 -0
  378. package/src/models/role.d.ts +11 -0
  379. package/src/models/role.d.ts.map +1 -0
  380. package/src/models/role.js +11 -0
  381. package/src/models/role.js.map +1 -0
  382. package/src/models/used-direct-login-token.d.ts +11 -0
  383. package/src/models/used-direct-login-token.d.ts.map +1 -0
  384. package/src/models/used-direct-login-token.js +11 -0
  385. package/src/models/used-direct-login-token.js.map +1 -0
  386. package/src/models/user-role.d.ts +6 -0
  387. package/src/models/user-role.d.ts.map +1 -0
  388. package/src/models/user-role.js +10 -0
  389. package/src/models/user-role.js.map +1 -0
  390. package/src/models/user.d.ts +7 -0
  391. package/src/models/user.d.ts.map +1 -0
  392. package/src/models/user.js +11 -0
  393. package/src/models/user.js.map +1 -0
  394. package/src/registry/email-service-registry.d.ts +9 -0
  395. package/src/registry/email-service-registry.d.ts.map +1 -0
  396. package/src/registry/email-service-registry.js +18 -0
  397. package/src/registry/email-service-registry.js.map +1 -0
  398. package/src/registry/{index.ts → index.d.ts} +1 -0
  399. package/src/registry/index.d.ts.map +1 -0
  400. package/src/registry/index.js +6 -0
  401. package/src/registry/index.js.map +1 -0
  402. package/src/routers/api.d.ts +27 -0
  403. package/src/routers/api.d.ts.map +1 -0
  404. package/src/routers/api.js +52 -0
  405. package/src/routers/api.js.map +1 -0
  406. package/src/routers/app.d.ts +28 -0
  407. package/src/routers/app.d.ts.map +1 -0
  408. package/src/routers/app.js +186 -0
  409. package/src/routers/app.js.map +1 -0
  410. package/src/routers/base.d.ts +12 -0
  411. package/src/routers/base.d.ts.map +1 -0
  412. package/src/routers/base.js +14 -0
  413. package/src/routers/base.js.map +1 -0
  414. package/src/routers/{index.ts → index.d.ts} +1 -0
  415. package/src/routers/index.d.ts.map +1 -0
  416. package/src/routers/index.js +7 -0
  417. package/src/routers/index.js.map +1 -0
  418. package/src/schemas/email-token.d.ts +38 -0
  419. package/src/schemas/email-token.d.ts.map +1 -0
  420. package/src/schemas/email-token.js +54 -0
  421. package/src/schemas/email-token.js.map +1 -0
  422. package/src/schemas/{index.ts → index.d.ts} +2 -1
  423. package/src/schemas/index.d.ts.map +1 -0
  424. package/src/schemas/index.js +11 -0
  425. package/src/schemas/index.js.map +1 -0
  426. package/src/schemas/mnemonic.d.ts +20 -0
  427. package/src/schemas/mnemonic.d.ts.map +1 -0
  428. package/src/schemas/mnemonic.js +30 -0
  429. package/src/schemas/mnemonic.js.map +1 -0
  430. package/src/schemas/role.d.ts +32 -0
  431. package/src/schemas/role.d.ts.map +1 -0
  432. package/src/schemas/role.js +86 -0
  433. package/src/schemas/role.js.map +1 -0
  434. package/src/schemas/schema.d.ts +40 -0
  435. package/src/schemas/schema.d.ts.map +1 -0
  436. package/src/schemas/schema.js +62 -0
  437. package/src/schemas/schema.js.map +1 -0
  438. package/src/schemas/used-direct-login-token.d.ts +27 -0
  439. package/src/schemas/used-direct-login-token.d.ts.map +1 -0
  440. package/src/schemas/used-direct-login-token.js +23 -0
  441. package/src/schemas/used-direct-login-token.js.map +1 -0
  442. package/src/schemas/user-role.d.ts +29 -0
  443. package/src/schemas/user-role.d.ts.map +1 -0
  444. package/src/schemas/user-role.js +54 -0
  445. package/src/schemas/user-role.js.map +1 -0
  446. package/src/schemas/user.d.ts +21 -0
  447. package/src/schemas/user.d.ts.map +1 -0
  448. package/src/schemas/user.js +176 -0
  449. package/src/schemas/user.js.map +1 -0
  450. package/src/services/backup-code.d.ts +78 -0
  451. package/src/services/backup-code.d.ts.map +1 -0
  452. package/src/services/backup-code.js +184 -0
  453. package/src/services/backup-code.js.map +1 -0
  454. package/src/services/base.d.ts +13 -0
  455. package/src/services/base.d.ts.map +1 -0
  456. package/src/services/base.js +15 -0
  457. package/src/services/base.js.map +1 -0
  458. package/src/services/checksum.d.ts +67 -0
  459. package/src/services/checksum.d.ts.map +1 -0
  460. package/src/services/checksum.js +143 -0
  461. package/src/services/checksum.js.map +1 -0
  462. package/src/services/crc.d.ts +87 -0
  463. package/src/services/crc.d.ts.map +1 -0
  464. package/src/services/crc.js +198 -0
  465. package/src/services/crc.js.map +1 -0
  466. package/src/services/database-initialization.d.ts +105 -0
  467. package/src/services/database-initialization.d.ts.map +1 -0
  468. package/src/services/database-initialization.js +782 -0
  469. package/src/services/database-initialization.js.map +1 -0
  470. package/src/services/db-init-cache.d.ts +7 -13
  471. package/src/services/db-init-cache.d.ts.map +1 -0
  472. package/src/services/db-init-cache.js +3 -0
  473. package/src/services/db-init-cache.js.map +1 -0
  474. package/src/services/direct-login-token.d.ts +9 -0
  475. package/src/services/direct-login-token.d.ts.map +1 -0
  476. package/src/services/direct-login-token.js +41 -0
  477. package/src/services/direct-login-token.js.map +1 -0
  478. package/src/services/fec-usage-example.d.ts +38 -0
  479. package/src/services/fec-usage-example.d.ts.map +1 -0
  480. package/src/services/fec-usage-example.js +75 -0
  481. package/src/services/fec-usage-example.js.map +1 -0
  482. package/src/services/fec.d.ts +46 -0
  483. package/src/services/fec.d.ts.map +1 -0
  484. package/src/services/fec.js +192 -0
  485. package/src/services/fec.js.map +1 -0
  486. package/src/services/{index.ts → index.d.ts} +1 -0
  487. package/src/services/index.d.ts.map +1 -0
  488. package/src/services/index.js +22 -0
  489. package/src/services/index.js.map +1 -0
  490. package/src/services/jwt.d.ts +33 -0
  491. package/src/services/jwt.d.ts.map +1 -0
  492. package/src/services/jwt.js +91 -0
  493. package/src/services/jwt.js.map +1 -0
  494. package/src/services/key-wrapping.d.ts +60 -0
  495. package/src/services/key-wrapping.d.ts.map +1 -0
  496. package/src/services/key-wrapping.js +311 -0
  497. package/src/services/key-wrapping.js.map +1 -0
  498. package/src/services/mnemonic.d.ts +61 -0
  499. package/src/services/mnemonic.d.ts.map +1 -0
  500. package/src/services/mnemonic.js +115 -0
  501. package/src/services/mnemonic.js.map +1 -0
  502. package/src/services/request-user.d.ts +20 -0
  503. package/src/services/request-user.d.ts.map +1 -0
  504. package/src/services/request-user.js +50 -0
  505. package/src/services/request-user.js.map +1 -0
  506. package/src/services/role.d.ts +88 -0
  507. package/src/services/role.d.ts.map +1 -0
  508. package/src/services/role.js +263 -0
  509. package/src/services/role.js.map +1 -0
  510. package/src/services/symmetric.d.ts +42 -0
  511. package/src/services/symmetric.d.ts.map +1 -0
  512. package/src/services/symmetric.js +101 -0
  513. package/src/services/symmetric.js.map +1 -0
  514. package/src/services/system-user.d.ts +17 -0
  515. package/src/services/system-user.d.ts.map +1 -0
  516. package/src/services/system-user.js +46 -0
  517. package/src/services/system-user.js.map +1 -0
  518. package/src/services/user.d.ts +320 -0
  519. package/src/services/user.d.ts.map +1 -0
  520. package/src/services/user.js +1378 -0
  521. package/src/services/user.js.map +1 -0
  522. package/src/services/xor.d.ts +24 -0
  523. package/src/services/xor.d.ts.map +1 -0
  524. package/src/services/xor.js +37 -0
  525. package/src/services/xor.js.map +1 -0
  526. package/src/types.d.ts +66 -40
  527. package/src/types.d.ts.map +1 -0
  528. package/src/types.js +14 -0
  529. package/src/types.js.map +1 -0
  530. package/src/utils.d.ts +202 -0
  531. package/src/utils.d.ts.map +1 -0
  532. package/src/utils.js +784 -0
  533. package/src/utils.js.map +1 -0
  534. package/LICENSE +0 -21
  535. package/src/application-base.ts +0 -492
  536. package/src/application.ts +0 -254
  537. package/src/backup-code.ts +0 -336
  538. package/src/constants.ts +0 -69
  539. package/src/controllers/base.ts +0 -440
  540. package/src/controllers/user.ts +0 -1451
  541. package/src/decorators/base-controller.ts +0 -61
  542. package/src/decorators/controller.ts +0 -109
  543. package/src/decorators/zod-validation.ts +0 -57
  544. package/src/defaults.ts +0 -94
  545. package/src/documents/base.ts +0 -7
  546. package/src/documents/email-token.ts +0 -14
  547. package/src/documents/used-direct-login-token.ts +0 -7
  548. package/src/enumerations/base-model-name.ts +0 -41
  549. package/src/enumerations/length-encoding-type.ts +0 -6
  550. package/src/enumerations/schema-collection.ts +0 -33
  551. package/src/enumerations/symmetric-error-type.ts +0 -4
  552. package/src/environment.ts +0 -770
  553. package/src/errors/express-validation.ts +0 -21
  554. package/src/errors/invalid-backup-code-version.ts +0 -14
  555. package/src/errors/invalid-jwt-token.ts +0 -10
  556. package/src/errors/invalid-model.ts +0 -11
  557. package/src/errors/invalid-new-password.ts +0 -18
  558. package/src/errors/invalid-password.ts +0 -13
  559. package/src/errors/missing-validated-data.ts +0 -36
  560. package/src/errors/mnemonic-or-password-required.ts +0 -12
  561. package/src/errors/model-not-registered.ts +0 -11
  562. package/src/errors/mongoose-validation.ts +0 -34
  563. package/src/errors/symmetric.ts +0 -41
  564. package/src/errors/token-expired.ts +0 -10
  565. package/src/get-language.ts +0 -53
  566. package/src/get-timezone.ts +0 -45
  567. package/src/interfaces/api-express-validation-error-response.ts +0 -8
  568. package/src/interfaces/api-message-response.ts +0 -3
  569. package/src/interfaces/backend-objects/email-token.ts +0 -11
  570. package/src/interfaces/backend-objects/user.ts +0 -9
  571. package/src/interfaces/checksum-config.ts +0 -4
  572. package/src/interfaces/checksum-consts.ts +0 -13
  573. package/src/interfaces/create-user-basics.ts +0 -17
  574. package/src/interfaces/csp-config.ts +0 -35
  575. package/src/interfaces/deep-partial.ts +0 -3
  576. package/src/interfaces/email-service.ts +0 -8
  577. package/src/interfaces/environment-mongo.ts +0 -76
  578. package/src/interfaces/environment.ts +0 -181
  579. package/src/interfaces/failable-result.ts +0 -6
  580. package/src/interfaces/fec-consts.ts +0 -4
  581. package/src/interfaces/handleable-error-options.ts +0 -6
  582. package/src/interfaces/jwt-consts.ts +0 -23
  583. package/src/interfaces/jwt-sign-response.ts +0 -19
  584. package/src/interfaces/mongo-errors.ts +0 -5
  585. package/src/interfaces/request-user.ts +0 -50
  586. package/src/interfaces/required-string-keys.ts +0 -26
  587. package/src/interfaces/schema.ts +0 -31
  588. package/src/interfaces/server-init-result.ts +0 -37
  589. package/src/interfaces/status-code-response.ts +0 -7
  590. package/src/interfaces/symmetric-encryption-results.ts +0 -4
  591. package/src/middlewares/authenticate-crypto.ts +0 -243
  592. package/src/middlewares/authenticate-token.ts +0 -152
  593. package/src/middlewares/cleanup-crypto.ts +0 -40
  594. package/src/middlewares/set-global-context-language.ts +0 -24
  595. package/src/middlewares.ts +0 -120
  596. package/src/model-registry.ts +0 -75
  597. package/src/models/email-token.ts +0 -19
  598. package/src/models/mnemonic.ts +0 -19
  599. package/src/models/role.ts +0 -19
  600. package/src/models/used-direct-login-token.ts +0 -23
  601. package/src/models/user-role.ts +0 -17
  602. package/src/models/user.ts +0 -19
  603. package/src/registry/email-service-registry.ts +0 -24
  604. package/src/routers/api.ts +0 -151
  605. package/src/routers/app.ts +0 -258
  606. package/src/routers/base.ts +0 -17
  607. package/src/schemas/email-token.ts +0 -91
  608. package/src/schemas/mnemonic.ts +0 -37
  609. package/src/schemas/role.ts +0 -127
  610. package/src/schemas/schema.ts +0 -140
  611. package/src/schemas/used-direct-login-token.ts +0 -38
  612. package/src/schemas/user-role.ts +0 -75
  613. package/src/schemas/user.ts +0 -202
  614. package/src/services/backup-code.ts +0 -316
  615. package/src/services/base.ts +0 -33
  616. package/src/services/checksum.ts +0 -161
  617. package/src/services/crc.ts +0 -213
  618. package/src/services/database-initialization.ts +0 -1479
  619. package/src/services/direct-login-token.ts +0 -62
  620. package/src/services/fec-usage-example.ts +0 -102
  621. package/src/services/fec.ts +0 -296
  622. package/src/services/jwt.ts +0 -134
  623. package/src/services/key-wrapping.ts +0 -434
  624. package/src/services/mnemonic.ts +0 -167
  625. package/src/services/request-user.ts +0 -62
  626. package/src/services/role.ts +0 -396
  627. package/src/services/symmetric.ts +0 -139
  628. package/src/services/system-user.ts +0 -82
  629. package/src/services/user.ts +0 -2137
  630. package/src/services/xor.ts +0 -34
  631. package/src/types.ts +0 -128
  632. package/src/utils.ts +0 -1022
@@ -0,0 +1,782 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DatabaseInitializationService = void 0;
4
+ const ecies_lib_1 = require("@digitaldefiance/ecies-lib");
5
+ const node_ecies_lib_1 = require("@digitaldefiance/node-ecies-lib");
6
+ const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
7
+ const crc_1 = require("crc");
8
+ const crypto_1 = require("crypto");
9
+ const mongodb_1 = require("mongodb");
10
+ const mongoose_1 = require("mongoose");
11
+ const backup_code_1 = require("../backup-code");
12
+ const base_model_name_1 = require("../enumerations/base-model-name");
13
+ const model_registry_1 = require("../model-registry");
14
+ const key_wrapping_1 = require("../services/key-wrapping");
15
+ const utils_1 = require("../utils");
16
+ const backup_code_2 = require("./backup-code");
17
+ const mnemonic_1 = require("./mnemonic");
18
+ const role_1 = require("./role");
19
+ const system_user_1 = require("./system-user");
20
+ class DatabaseInitializationService {
21
+ // Static initialization state management
22
+ static initializationPromises = new Map();
23
+ static initializationLock = new Map();
24
+ static defaultI18nTFunc = (0, suite_core_lib_1.getSuiteCoreI18nEngine)().t;
25
+ /**
26
+ * Get the mnemonic or generate a new one if not present
27
+ * @param mnemonic The existing mnemonic or undefined
28
+ * @param eciesService The ECIES service to generate a new mnemonic
29
+ * @returns The existing or new mnemonic
30
+ */
31
+ static mnemonicOrNew(mnemonic, eciesService) {
32
+ return mnemonic && mnemonic.hasValue
33
+ ? mnemonic
34
+ : eciesService.generateNewMnemonic();
35
+ }
36
+ /**
37
+ * Generate a cache key for a user based on their details
38
+ * @param username The username
39
+ * @param email The email address
40
+ * @param mnemonic The mnemonic
41
+ * @param id The user ID
42
+ * @returns The generated cache key
43
+ */
44
+ static cacheKey(username, email, mnemonic, id) {
45
+ const combined = `${username}|${email.email}|${mnemonic.value}|${id.toString()}`;
46
+ const buffer = Buffer.from(combined, 'utf-8');
47
+ const crcHash = (0, crc_1.crc32)(buffer);
48
+ return crcHash.toString(16).padStart(8, '0');
49
+ }
50
+ /**
51
+ * Get a cached BackendMember or create a new one if not cached
52
+ * @param username The username
53
+ * @param email The email address
54
+ * @param mnemonic The mnemonic or undefined to generate a new one
55
+ * @param memberType The type of member (Admin, Member, System)
56
+ * @param eciesService The ECIES service to handle key generation
57
+ * @param memberId Optional specific member ID to use
58
+ * @param createdBy Optional ID of the user who created this member
59
+ * @returns The cached or newly created BackendMember and the mnemonic used
60
+ */
61
+ static cacheOrNew(username, email, mnemonic, memberType, eciesService, memberId, createdBy) {
62
+ const m = this.mnemonicOrNew(mnemonic, eciesService);
63
+ const newId = memberId ? memberId : new mongodb_1.ObjectId();
64
+ const key = DatabaseInitializationService.cacheKey(username, email, m, newId);
65
+ if (!global.__MEMBER_CACHE__) {
66
+ global.__MEMBER_CACHE__ = new Map();
67
+ }
68
+ if (!global.__MEMBER_CACHE__.has(key)) {
69
+ const { wallet } = eciesService.walletAndSeedFromMnemonic(m);
70
+ // Get private key from wallet
71
+ const privateKey = wallet.getPrivateKey();
72
+ // Get public key with 0x04 prefix
73
+ const publicKeyWithPrefix = Buffer.concat([
74
+ Buffer.from([ecies_lib_1.ECIES.PUBLIC_KEY_MAGIC]),
75
+ wallet.getPublicKey(),
76
+ ]);
77
+ const user = new node_ecies_lib_1.Member(eciesService, memberType, username, email, publicKeyWithPrefix, new ecies_lib_1.SecureBuffer(privateKey), wallet, newId, undefined, undefined, createdBy);
78
+ global.__MEMBER_CACHE__.set(key, { mnemonic: m, member: user });
79
+ return { mnemonic: m, member: user };
80
+ }
81
+ else {
82
+ return global.__MEMBER_CACHE__.get(key);
83
+ }
84
+ }
85
+ /**
86
+ * Generate a random password
87
+ * @param length The length of the password
88
+ * @returns The generated password
89
+ */
90
+ static generatePassword(length) {
91
+ const specialCharacters = "!@#$%^&*()_+-=[]{};':|,.<>/?";
92
+ const numbers = '0123456789';
93
+ const letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
94
+ // Get a random character from a string
95
+ const getRandomChar = (chars) => {
96
+ // amazonq-ignore-next-line false positive
97
+ const randomIndex = (0, crypto_1.randomBytes)(1)[0] % chars.length;
98
+ return chars[randomIndex];
99
+ };
100
+ // Start with one of each required character type
101
+ // amazonq-ignore-next-line false positive
102
+ let password = '';
103
+ password += getRandomChar(letters);
104
+ password += getRandomChar(numbers);
105
+ password += getRandomChar(specialCharacters);
106
+ // Fill the rest with random characters from all types
107
+ const allCharacters = specialCharacters + numbers + letters;
108
+ for (let i = password.length; i < length; i++) {
109
+ password += getRandomChar(allCharacters);
110
+ }
111
+ // Shuffle the password characters to avoid predictable pattern
112
+ const chars = password.split('');
113
+ for (let i = chars.length - 1; i > 0; i--) {
114
+ // amazonq-ignore-next-line already fixed
115
+ const j = (0, crypto_1.randomBytes)(1)[0] % (i + 1);
116
+ [chars[i], chars[j]] = [chars[j], chars[i]];
117
+ }
118
+ return chars.join('');
119
+ }
120
+ /**
121
+ * Drops the database
122
+ * @param connection The database connection
123
+ * @returns True if the database was dropped, false if not connected
124
+ */
125
+ static async dropDatabase(connection) {
126
+ if (!connection.db)
127
+ return false;
128
+ (0, utils_1.debugLog)(true, 'warn', this.defaultI18nTFunc('{{StringName.Admin_DroppingDatabase}}'));
129
+ return connection.db.dropDatabase();
130
+ }
131
+ static getInitOptions(application) {
132
+ return {
133
+ adminId: application.environment.adminId
134
+ ? application.environment.adminId
135
+ : undefined,
136
+ adminMnemonic: application.environment.adminMnemonic?.hasValue
137
+ ? application.environment.adminMnemonic
138
+ : undefined,
139
+ adminPassword: application.environment.adminPassword?.hasValue
140
+ ? application.environment.adminPassword
141
+ : undefined,
142
+ adminRoleId: application.environment.adminRoleId
143
+ ? application.environment.adminRoleId
144
+ : undefined,
145
+ adminUserRoleId: application.environment.adminUserRoleId
146
+ ? application.environment.adminUserRoleId
147
+ : undefined,
148
+ adminBackupCodes: application.environment.adminBackupCodes
149
+ ? application.environment.adminBackupCodes
150
+ : undefined,
151
+ memberId: application.environment.memberId
152
+ ? application.environment.memberId
153
+ : undefined,
154
+ memberMnemonic: application.environment.memberMnemonic?.hasValue
155
+ ? application.environment.memberMnemonic
156
+ : undefined,
157
+ memberPassword: application.environment.memberPassword?.hasValue
158
+ ? application.environment.memberPassword
159
+ : undefined,
160
+ memberRoleId: application.environment.memberRoleId
161
+ ? application.environment.memberRoleId
162
+ : undefined,
163
+ memberUserRoleId: application.environment.memberUserRoleId
164
+ ? application.environment.memberUserRoleId
165
+ : undefined,
166
+ memberBackupCodes: application.environment.memberBackupCodes
167
+ ? application.environment.memberBackupCodes
168
+ : undefined,
169
+ systemId: application.environment.systemId
170
+ ? application.environment.systemId
171
+ : undefined,
172
+ systemMnemonic: application.environment.systemMnemonic?.hasValue
173
+ ? application.environment.systemMnemonic
174
+ : undefined,
175
+ systemPassword: application.environment.systemPassword?.hasValue
176
+ ? application.environment.systemPassword
177
+ : undefined,
178
+ systemRoleId: application.environment.systemRoleId
179
+ ? application.environment.systemRoleId
180
+ : undefined,
181
+ systemUserRoleId: application.environment.systemUserRoleId
182
+ ? application.environment.systemUserRoleId
183
+ : undefined,
184
+ systemBackupCodes: application.environment.systemBackupCodes
185
+ ? application.environment.systemBackupCodes
186
+ : undefined,
187
+ };
188
+ }
189
+ static serverInitResultHash(serverInitResult) {
190
+ const h = (0, crypto_1.createHash)('sha256');
191
+ h.update(serverInitResult.adminUser._id.toHexString());
192
+ h.update(serverInitResult.adminRole._id.toHexString());
193
+ h.update(serverInitResult.adminUserRole._id.toHexString());
194
+ h.update(serverInitResult.adminUsername);
195
+ h.update(serverInitResult.adminEmail);
196
+ h.update(serverInitResult.adminMnemonic);
197
+ h.update(serverInitResult.adminPassword);
198
+ h.update(serverInitResult.adminUser.publicKey);
199
+ serverInitResult.adminBackupCodes.map((bc) => h.update(bc));
200
+ h.update(serverInitResult.memberUser._id.toHexString());
201
+ h.update(serverInitResult.memberRole._id.toHexString());
202
+ h.update(serverInitResult.memberUserRole._id.toHexString());
203
+ h.update(serverInitResult.memberUsername);
204
+ h.update(serverInitResult.memberEmail);
205
+ h.update(serverInitResult.memberMnemonic);
206
+ h.update(serverInitResult.memberPassword);
207
+ h.update(serverInitResult.memberUser.publicKey);
208
+ serverInitResult.memberBackupCodes.map((bc) => h.update(bc));
209
+ h.update(serverInitResult.systemUser._id.toHexString());
210
+ h.update(serverInitResult.systemRole._id.toHexString());
211
+ h.update(serverInitResult.systemUserRole._id.toHexString());
212
+ h.update(serverInitResult.systemUsername);
213
+ h.update(serverInitResult.systemEmail);
214
+ h.update(serverInitResult.systemMnemonic);
215
+ h.update(serverInitResult.systemPassword);
216
+ h.update(serverInitResult.systemUser.publicKey);
217
+ serverInitResult.systemBackupCodes.map((bc) => h.update(bc));
218
+ return h.digest('hex');
219
+ }
220
+ /**
221
+ * Initialize the user database with default users and roles (with dependency injection)
222
+ * @param application The application
223
+ * @param keyWrappingService The key wrapping service
224
+ * @param mnemonicService The mnemonic service
225
+ * @param eciesService The ECIES service
226
+ * @param roleService The role service
227
+ * @param backupCodeService The backup code service
228
+ * @returns The result of the initialization
229
+ */
230
+ static async initUserDbWithServices(application, keyWrappingService, mnemonicService, eciesService, roleService, backupCodeService) {
231
+ const isTestEnvironment = process.env['NODE_ENV'] === 'test';
232
+ const options = DatabaseInitializationService.getInitOptions(application);
233
+ const UserModel = model_registry_1.ModelRegistry.instance.getTypedModel(base_model_name_1.BaseModelName.User);
234
+ const RoleModel = model_registry_1.ModelRegistry.instance.getTypedModel(base_model_name_1.BaseModelName.Role);
235
+ const adminUserId = options.adminId ?? new mongoose_1.Types.ObjectId();
236
+ const adminRoleId = options.adminRoleId ?? new mongoose_1.Types.ObjectId();
237
+ const adminUserRoleId = options.adminUserRoleId ?? new mongoose_1.Types.ObjectId();
238
+ const memberUserId = options.memberId ?? new mongoose_1.Types.ObjectId();
239
+ const memberRoleId = options.memberRoleId ?? new mongoose_1.Types.ObjectId();
240
+ const memberUserRoleId = options.memberUserRoleId ?? new mongoose_1.Types.ObjectId();
241
+ const systemUserId = options.systemId ?? new mongoose_1.Types.ObjectId();
242
+ const systemRoleId = options.systemRoleId ?? new mongoose_1.Types.ObjectId();
243
+ const systemUserRoleId = options.systemUserRoleId ?? new mongoose_1.Types.ObjectId();
244
+ // Check for existing users and roles with optimized queries
245
+ // Use lean() for better performance on read-only operations
246
+ const [existingUsers, existingRoles] = await Promise.all([
247
+ UserModel.find({
248
+ username: {
249
+ $in: [
250
+ suite_core_lib_1.Constants.SystemUser,
251
+ suite_core_lib_1.Constants.AdministratorUser,
252
+ suite_core_lib_1.Constants.MemberUser,
253
+ ],
254
+ },
255
+ }).lean(),
256
+ RoleModel.find({
257
+ name: {
258
+ $in: [
259
+ suite_core_lib_1.Constants.AdministratorRole,
260
+ suite_core_lib_1.Constants.MemberRole,
261
+ suite_core_lib_1.Constants.SystemRole,
262
+ ],
263
+ },
264
+ }).lean(),
265
+ ]);
266
+ if (existingUsers.length > 0 || existingRoles.length > 0) {
267
+ // Database is already initialized, return the existing data
268
+ const existingAdminUser = existingUsers.find((u) => u.username === suite_core_lib_1.Constants.AdministratorUser);
269
+ const existingMemberUser = existingUsers.find((u) => u.username === suite_core_lib_1.Constants.MemberUser);
270
+ const existingSystemUser = existingUsers.find((u) => u.username === suite_core_lib_1.Constants.SystemUser);
271
+ if (existingAdminUser && existingMemberUser && existingSystemUser) {
272
+ const adminUserDoc = UserModel.hydrate(existingAdminUser);
273
+ const memberUserDoc = UserModel.hydrate(existingMemberUser);
274
+ const systemUserDoc = UserModel.hydrate(existingSystemUser);
275
+ // Try to construct a minimal result from existing data
276
+ // Note: This is a fallback case and some data may not be available
277
+ const UserRoleModel = model_registry_1.ModelRegistry.instance.getTypedModel(base_model_name_1.BaseModelName.UserRole);
278
+ const [adminRole, memberRole, systemRole, adminUserRole, memberUserRole, systemUserRole,] = await Promise.all([
279
+ RoleModel.findOne({ name: suite_core_lib_1.Constants.AdministratorRole }),
280
+ RoleModel.findOne({ name: suite_core_lib_1.Constants.MemberRole }),
281
+ RoleModel.findOne({ name: suite_core_lib_1.Constants.SystemRole }),
282
+ UserRoleModel.findOne({ userId: adminUserDoc._id }),
283
+ UserRoleModel.findOne({ userId: memberUserDoc._id }),
284
+ UserRoleModel.findOne({ userId: systemUserDoc._id }),
285
+ ]);
286
+ if (adminRole &&
287
+ memberRole &&
288
+ systemRole &&
289
+ adminUserRole &&
290
+ memberUserRole &&
291
+ systemUserRole) {
292
+ return {
293
+ success: true,
294
+ data: {
295
+ adminRole,
296
+ adminUserRole,
297
+ adminUser: adminUserDoc,
298
+ adminUsername: adminUserDoc.username,
299
+ adminEmail: adminUserDoc.email,
300
+ adminMnemonic: '', // Not available in fallback
301
+ adminPassword: '', // Not available in fallback
302
+ adminBackupCodes: [], // Not available in fallback
303
+ adminMember: {}, // Not available in fallback
304
+ memberRole,
305
+ memberUserRole,
306
+ memberUser: memberUserDoc,
307
+ memberUsername: memberUserDoc.username,
308
+ memberEmail: memberUserDoc.email,
309
+ memberMnemonic: '', // Not available in fallback
310
+ memberPassword: '', // Not available in fallback
311
+ memberBackupCodes: [], // Not available in fallback
312
+ memberMember: {}, // Not available in fallback
313
+ systemRole,
314
+ systemUserRole,
315
+ systemUser: systemUserDoc,
316
+ systemUsername: systemUserDoc.username,
317
+ systemEmail: systemUserDoc.email,
318
+ systemMnemonic: '', // Not available in fallback
319
+ systemPassword: '', // Not available in fallback
320
+ systemBackupCodes: [], // Not available in fallback
321
+ systemMember: {}, // Not available in fallback
322
+ },
323
+ };
324
+ }
325
+ }
326
+ return {
327
+ success: false,
328
+ message: (0, suite_core_lib_1.getSuiteCoreI18nEngine)().translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Admin_DatabaseAlreadyInitialized),
329
+ error: new Error((0, suite_core_lib_1.getSuiteCoreI18nEngine)().translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Admin_DatabaseAlreadyInitialized)),
330
+ };
331
+ }
332
+ (0, utils_1.debugLog)(application.environment.detailedDebug, 'log', (0, suite_core_lib_1.getSuiteCoreI18nEngine)().translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Admin_SettingUpUsersAndRoles));
333
+ const now = new Date();
334
+ // Add a small random delay in test environments to reduce collision probability
335
+ if (isTestEnvironment) {
336
+ const delay = ((0, crypto_1.randomBytes)(1)[0] % 50) + 10; // 10-60ms random delay (reduced)
337
+ await new Promise((resolve) => setTimeout(resolve, delay));
338
+ }
339
+ try {
340
+ // Use test-optimized settings for better performance
341
+ const transactionOptions = isTestEnvironment
342
+ ? { timeoutMs: 15000, retryAttempts: 2 } // Reduced timeout and retries for tests
343
+ : { timeoutMs: 120000 }; // Keep original production timeout
344
+ const result = await (0, utils_1.withTransaction)(application.db.connection, application.environment.mongo.useTransactions, undefined, async (sess) => {
345
+ // Check if admin role already exists
346
+ let adminRole = await RoleModel.findOne({
347
+ name: suite_core_lib_1.Constants.AdministratorRole,
348
+ }).session(sess ?? null);
349
+ if (!adminRole) {
350
+ const adminRoleDocs = await RoleModel.create([
351
+ {
352
+ _id: adminRoleId,
353
+ name: suite_core_lib_1.Constants.AdministratorRole,
354
+ admin: true,
355
+ member: true,
356
+ system: false,
357
+ child: false,
358
+ createdAt: now,
359
+ updatedAt: now,
360
+ createdBy: systemUserId,
361
+ updatedBy: systemUserId,
362
+ },
363
+ ], { session: sess });
364
+ if (adminRoleDocs.length !== 1) {
365
+ throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Error_FailedToCreateRoleTemplate, {
366
+ NAME: suite_core_lib_1.Constants.AdministratorRole,
367
+ });
368
+ }
369
+ adminRole = adminRoleDocs[0];
370
+ }
371
+ // Check if member role already exists
372
+ let memberRole = await RoleModel.findOne({
373
+ name: suite_core_lib_1.Constants.MemberRole,
374
+ }).session(sess ?? null);
375
+ if (!memberRole) {
376
+ const memberRoleDocs = await RoleModel.create([
377
+ {
378
+ _id: memberRoleId,
379
+ name: suite_core_lib_1.Constants.MemberRole,
380
+ admin: false,
381
+ member: true,
382
+ child: false,
383
+ system: false,
384
+ createdAt: now,
385
+ updatedAt: now,
386
+ createdBy: systemUserId,
387
+ updatedBy: systemUserId,
388
+ },
389
+ ], { session: sess });
390
+ if (memberRoleDocs.length !== 1) {
391
+ throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Error_FailedToCreateRoleTemplate, {
392
+ NAME: (0, suite_core_lib_1.getSuiteCoreI18nEngine)().translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Common_Member),
393
+ });
394
+ }
395
+ memberRole = memberRoleDocs[0];
396
+ }
397
+ // Check if system role already exists
398
+ let systemRole = await RoleModel.findOne({
399
+ name: suite_core_lib_1.Constants.SystemRole,
400
+ }).session(sess ?? null);
401
+ if (!systemRole) {
402
+ const systemRoleDocs = await RoleModel.create([
403
+ {
404
+ _id: systemRoleId,
405
+ name: suite_core_lib_1.Constants.SystemRole,
406
+ admin: true,
407
+ member: true,
408
+ system: true,
409
+ child: false,
410
+ createdAt: now,
411
+ updatedAt: now,
412
+ createdBy: systemUserId,
413
+ updatedBy: systemUserId,
414
+ },
415
+ ], { session: sess });
416
+ if (systemRoleDocs.length !== 1) {
417
+ throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Error_FailedToCreateRoleTemplate);
418
+ }
419
+ systemRole = systemRoleDocs[0];
420
+ }
421
+ const systemUser = DatabaseInitializationService.cacheOrNew(suite_core_lib_1.Constants.SystemUser, new ecies_lib_1.EmailString(suite_core_lib_1.Constants.SystemEmail), options.systemMnemonic, ecies_lib_1.MemberType.System, eciesService, options.systemId, options.systemId);
422
+ backupCodeService.setSystemUser(systemUser.member);
423
+ system_user_1.SystemUserService.setSystemUser(systemUser.member);
424
+ // Encrypt mnemonic for recovery
425
+ const systemEncryptedMnemonic = systemUser.member
426
+ .encryptData(Buffer.from(systemUser.mnemonic.value ?? '', 'utf-8'))
427
+ .toString('hex');
428
+ const systemMnemonicDoc = await mnemonicService.addMnemonic(systemUser.mnemonic, sess);
429
+ if (!systemMnemonicDoc) {
430
+ throw new Error((0, suite_core_lib_1.getSuiteCoreI18nEngine)().translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Error_FailedToStoreUserMnemonicTemplate, {
431
+ NAME: (0, suite_core_lib_1.getSuiteCoreI18nEngine)().translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Common_System),
432
+ }));
433
+ }
434
+ const systemPasswordSecure = options.systemPassword
435
+ ? options.systemPassword
436
+ : new ecies_lib_1.SecureString(this.generatePassword(16));
437
+ const systemWrapped = keyWrappingService.wrapSecret(systemUser.member.privateKey, systemPasswordSecure);
438
+ const systemBackupCodes = options.systemBackupCodes ?? backup_code_1.BackupCode.generateBackupCodes();
439
+ const encryptedSystemBackupCodes = await backup_code_1.BackupCode.encryptBackupCodes(systemUser.member, systemUser.member, systemBackupCodes);
440
+ const systemDocs = await UserModel.create([
441
+ {
442
+ _id: systemUserId,
443
+ username: suite_core_lib_1.Constants.SystemUser,
444
+ email: suite_core_lib_1.Constants.SystemEmail,
445
+ publicKey: systemUser.member.publicKey.toString('hex'),
446
+ duressPasswords: [],
447
+ mnemonicRecovery: systemEncryptedMnemonic,
448
+ mnemonicId: systemMnemonicDoc._id,
449
+ passwordWrappedPrivateKey: systemWrapped,
450
+ backupCodes: encryptedSystemBackupCodes,
451
+ timezone: application.environment.timezone.value,
452
+ siteLanguage: 'en-US',
453
+ emailVerified: true,
454
+ accountStatus: suite_core_lib_1.AccountStatus.Active,
455
+ createdAt: now,
456
+ updatedAt: now,
457
+ createdBy: systemUserId,
458
+ updatedBy: systemUserId,
459
+ },
460
+ ], { session: sess });
461
+ if (systemDocs.length !== 1) {
462
+ throw new Error((0, suite_core_lib_1.getSuiteCoreI18nEngine)().translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Error_FailedToCreateUserTemplate, {
463
+ NAME: (0, suite_core_lib_1.getSuiteCoreI18nEngine)().translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Common_System),
464
+ }));
465
+ }
466
+ const systemDoc = systemDocs[0];
467
+ // Create admin user-role relationship
468
+ const systemUserRoleDoc = await roleService.addUserToRole(systemRoleId, systemUserId, systemUserId, sess, systemUserRoleId);
469
+ if (!systemUser.mnemonic.value) {
470
+ throw new Error((0, suite_core_lib_1.getSuiteCoreI18nEngine)().translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Error_MnemonicIsNullTemplate, {
471
+ NAME: suite_core_lib_1.SuiteCoreStringKey.Common_System,
472
+ }));
473
+ }
474
+ const adminUser = DatabaseInitializationService.cacheOrNew(suite_core_lib_1.Constants.AdministratorUser, new ecies_lib_1.EmailString(suite_core_lib_1.Constants.AdministratorEmail), options.adminMnemonic, ecies_lib_1.MemberType.User, eciesService, options.adminId, systemDoc._id);
475
+ // Encrypt mnemonic for recovery
476
+ const adminEncryptedMnemonic = adminUser.member
477
+ .encryptData(Buffer.from(adminUser.mnemonic.value ?? '', 'utf-8'))
478
+ .toString('hex');
479
+ const adminMnemonicDoc = await mnemonicService.addMnemonic(adminUser.mnemonic, sess);
480
+ if (!adminMnemonicDoc) {
481
+ throw new Error((0, suite_core_lib_1.getSuiteCoreI18nEngine)().translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Error_FailedToStoreUserMnemonicTemplate, {
482
+ NAME: (0, suite_core_lib_1.getSuiteCoreI18nEngine)().translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Common_Admin),
483
+ }));
484
+ }
485
+ const adminPasswordSecure = options.adminPassword
486
+ ? options.adminPassword
487
+ : new ecies_lib_1.SecureString(this.generatePassword(16));
488
+ const adminWrapped = keyWrappingService.wrapSecret(adminUser.member.privateKey, adminPasswordSecure);
489
+ const adminBackupCodes = options.adminBackupCodes ?? backup_code_1.BackupCode.generateBackupCodes();
490
+ const encryptedAdminBackupCodes = await backup_code_1.BackupCode.encryptBackupCodes(adminUser.member, systemUser.member, adminBackupCodes);
491
+ const adminDocs = await UserModel.create([
492
+ {
493
+ _id: adminUserId,
494
+ username: suite_core_lib_1.Constants.AdministratorUser,
495
+ email: suite_core_lib_1.Constants.AdministratorEmail,
496
+ publicKey: adminUser.member.publicKey.toString('hex'),
497
+ duressPasswords: [],
498
+ mnemonicRecovery: adminEncryptedMnemonic,
499
+ mnemonicId: adminMnemonicDoc._id,
500
+ passwordWrappedPrivateKey: adminWrapped,
501
+ backupCodes: encryptedAdminBackupCodes,
502
+ timezone: application.environment.timezone.value,
503
+ siteLanguage: 'en-US',
504
+ emailVerified: true,
505
+ accountStatus: suite_core_lib_1.AccountStatus.Active,
506
+ createdAt: now,
507
+ updatedAt: now,
508
+ createdBy: systemUserId,
509
+ updatedBy: systemUserId,
510
+ },
511
+ ], { session: sess });
512
+ if (adminDocs.length !== 1) {
513
+ throw new Error((0, suite_core_lib_1.getSuiteCoreI18nEngine)().translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Error_FailedToCreateUserTemplate, {
514
+ NAME: (0, suite_core_lib_1.getSuiteCoreI18nEngine)().translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Common_Admin),
515
+ }));
516
+ }
517
+ const adminDoc = adminDocs[0];
518
+ // Create admin user-role relationship
519
+ const adminUserRoleDoc = await roleService.addUserToRole(adminRoleId, adminUserId, systemUserId, sess, adminUserRoleId);
520
+ if (!adminUser.mnemonic.value) {
521
+ throw new Error((0, suite_core_lib_1.getSuiteCoreI18nEngine)().translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Error_MnemonicIsNullTemplate, {
522
+ NAME: (0, suite_core_lib_1.getSuiteCoreI18nEngine)().translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Common_Admin),
523
+ }));
524
+ }
525
+ const memberUser = DatabaseInitializationService.cacheOrNew(suite_core_lib_1.Constants.MemberUser, new ecies_lib_1.EmailString(suite_core_lib_1.Constants.MemberEmail), options.memberMnemonic, ecies_lib_1.MemberType.User, eciesService, options.memberId, systemDoc._id);
526
+ const memberPasswordSecure = options.memberPassword
527
+ ? options.memberPassword
528
+ : new ecies_lib_1.SecureString(this.generatePassword(16));
529
+ const memberMnemonicDoc = await mnemonicService.addMnemonic(memberUser.mnemonic, sess);
530
+ if (!memberMnemonicDoc) {
531
+ throw new Error((0, suite_core_lib_1.getSuiteCoreI18nEngine)().translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Error_FailedToStoreUserMnemonicTemplate, {
532
+ NAME: (0, suite_core_lib_1.getSuiteCoreI18nEngine)().translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Common_Member),
533
+ }));
534
+ }
535
+ // Encrypt mnemonic for recovery
536
+ const encryptedMemberMnemonic = memberUser.member
537
+ .encryptData(Buffer.from(memberUser.mnemonic.value ?? '', 'utf-8'))
538
+ .toString('hex');
539
+ const memberWrapped = keyWrappingService.wrapSecret(memberUser.member.privateKey, memberPasswordSecure);
540
+ const memberBackupCodes = options.memberBackupCodes ?? backup_code_1.BackupCode.generateBackupCodes();
541
+ const encryptedMemberBackupCodes = await backup_code_1.BackupCode.encryptBackupCodes(memberUser.member, systemUser.member, memberBackupCodes);
542
+ const memberDocs = await UserModel.create([
543
+ {
544
+ _id: memberUserId,
545
+ username: suite_core_lib_1.Constants.MemberUser,
546
+ email: suite_core_lib_1.Constants.MemberEmail,
547
+ publicKey: memberUser.member.publicKey.toString('hex'),
548
+ mnemonicId: memberMnemonicDoc._id,
549
+ mnemonicRecovery: encryptedMemberMnemonic,
550
+ passwordWrappedPrivateKey: memberWrapped,
551
+ backupCodes: encryptedMemberBackupCodes,
552
+ duressPasswords: [],
553
+ timezone: application.environment.timezone.value,
554
+ siteLanguage: 'en-US',
555
+ emailVerified: true,
556
+ accountStatus: suite_core_lib_1.AccountStatus.Active,
557
+ createdAt: now,
558
+ updatedAt: now,
559
+ createdBy: systemUserId,
560
+ updatedBy: systemUserId,
561
+ },
562
+ ], { session: sess });
563
+ if (memberDocs.length !== 1) {
564
+ throw new Error((0, suite_core_lib_1.getSuiteCoreI18nEngine)().translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Error_FailedToCreateUserTemplate, {
565
+ NAME: (0, suite_core_lib_1.getSuiteCoreI18nEngine)().translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Common_Member),
566
+ }));
567
+ }
568
+ const memberDoc = memberDocs[0];
569
+ // Create member user-role relationship
570
+ const memberUserRoleDoc = await roleService.addUserToRole(memberRoleId, memberUserId, systemUserId, sess, memberUserRoleId);
571
+ if (!memberUser.mnemonic.value) {
572
+ throw new Error((0, suite_core_lib_1.getSuiteCoreI18nEngine)().translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Error_MnemonicIsNullTemplate, {
573
+ NAME: (0, suite_core_lib_1.getSuiteCoreI18nEngine)().translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Common_Member),
574
+ }));
575
+ }
576
+ return {
577
+ adminRole,
578
+ memberRole,
579
+ systemRole,
580
+ systemDoc,
581
+ systemUserRoleDoc,
582
+ systemPassword: systemPasswordSecure.notNullValue,
583
+ systemMnemonic: systemUser.mnemonic.notNullValue,
584
+ systemBackupCodes: systemBackupCodes,
585
+ systemMember: systemUser.member,
586
+ adminDoc,
587
+ adminUserRoleDoc,
588
+ adminPassword: adminPasswordSecure.notNullValue,
589
+ adminMnemonic: adminUser.mnemonic.notNullValue,
590
+ adminBackupCodes: adminBackupCodes,
591
+ adminMember: adminUser.member,
592
+ memberDoc,
593
+ memberUserRoleDoc,
594
+ memberPassword: memberPasswordSecure.notNullValue,
595
+ memberMnemonic: memberUser.mnemonic.notNullValue,
596
+ memberBackupCodes: memberBackupCodes,
597
+ memberUser: memberUser.member,
598
+ };
599
+ }, transactionOptions);
600
+ return {
601
+ success: true,
602
+ data: {
603
+ adminRole: result.adminRole,
604
+ adminUserRole: result.adminUserRoleDoc,
605
+ adminUser: result.adminDoc,
606
+ adminUsername: result.adminDoc.username,
607
+ adminEmail: result.adminDoc.email,
608
+ adminMnemonic: result.adminMnemonic,
609
+ adminPassword: result.adminPassword,
610
+ adminBackupCodes: result.adminBackupCodes.map((bc) => bc.value ?? ''),
611
+ adminMember: result.adminMember,
612
+ memberRole: result.memberRole,
613
+ memberUserRole: result.memberUserRoleDoc,
614
+ memberUser: result.memberDoc,
615
+ memberUsername: result.memberDoc.username,
616
+ memberEmail: result.memberDoc.email,
617
+ memberMnemonic: result.memberMnemonic,
618
+ memberPassword: result.memberPassword,
619
+ memberBackupCodes: result.memberBackupCodes.map((bc) => bc.value ?? ''),
620
+ memberMember: result.memberUser,
621
+ systemRole: result.systemRole,
622
+ systemUserRole: result.systemUserRoleDoc,
623
+ systemUser: result.systemDoc,
624
+ systemUsername: result.systemDoc.username,
625
+ systemEmail: result.systemDoc.email,
626
+ systemMnemonic: result.systemMnemonic,
627
+ systemPassword: result.systemPassword,
628
+ systemBackupCodes: result.systemBackupCodes.map((bc) => bc.value ?? ''),
629
+ systemMember: result.systemMember,
630
+ },
631
+ };
632
+ }
633
+ catch (error) {
634
+ return {
635
+ success: false,
636
+ message: (0, suite_core_lib_1.getSuiteCoreI18nEngine)().translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Admin_Error_FailedToInitializeUserDatabase),
637
+ error: error instanceof Error
638
+ ? error
639
+ : new Error((0, suite_core_lib_1.getSuiteCoreI18nEngine)().translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Admin_Error_FailedToInitializeUserDatabase)),
640
+ };
641
+ }
642
+ }
643
+ static printServerInitResults(result) {
644
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('\n=== {{StringName.Admin_AccountCredentials}} ==='));
645
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_System}} {{StringName.Common_ID}}: {id}', undefined, {
646
+ id: result.systemUser._id.toHexString(),
647
+ }));
648
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_System}} {{StringName.Common_Role}}: {roleName}', undefined, {
649
+ roleName: result.systemRole.name,
650
+ }));
651
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_System}} {{StringName.Common_Role}} {{StringName.Common_ID}}: {roleId}', undefined, {
652
+ roleId: result.systemRole._id.toString(),
653
+ }));
654
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_System}} {{StringName.Common_User}} {{StringName.Common_Role}} {{StringName.Common_ID}}: {userRoleId}', undefined, {
655
+ userRoleId: result.systemUserRole._id.toString(),
656
+ }));
657
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_System}} {{StringName.Common_Username}}: {username}', undefined, {
658
+ username: result.systemUsername,
659
+ }));
660
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_System}} {{StringName.Common_Email}}: {email}', undefined, {
661
+ email: result.systemEmail,
662
+ }));
663
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_System}} {{StringName.Common_Password}}: {password}', undefined, {
664
+ password: result.systemPassword,
665
+ }));
666
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_System}} {{StringName.Common_Mnemonic}}: {mnemonic}', undefined, {
667
+ mnemonic: result.systemMnemonic,
668
+ }));
669
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_System}} {{StringName.Common_PublicKey}}: {publicKey}', undefined, {
670
+ publicKey: result.systemUser.publicKey,
671
+ }));
672
+ (0, utils_1.debugLog)(true, 'log', `${this.defaultI18nTFunc('{{StringName.Common_System}} {{StringName.Common_BackupCodes}}')}: ${result.systemBackupCodes.join(', ')}`);
673
+ (0, utils_1.debugLog)(true, 'log', '');
674
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_Admin}} {{StringName.Common_ID}}: {id}', undefined, {
675
+ id: result.adminUser._id.toHexString(),
676
+ }));
677
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_Admin}} {{StringName.Common_Role}}: {roleName}', undefined, {
678
+ roleName: result.adminRole.name,
679
+ }));
680
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_Admin}} {{StringName.Common_Role}} {{StringName.Common_ID}}: {roleId}', undefined, {
681
+ roleId: result.adminRole._id.toString(),
682
+ }));
683
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_Admin}} {{StringName.Common_User}} {{StringName.Common_Role}} {{StringName.Common_ID}}: {userRoleId}', undefined, {
684
+ userRoleId: result.adminUserRole._id.toString(),
685
+ }));
686
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_Admin}} {{StringName.Common_Username}}: {username}', undefined, {
687
+ username: result.adminUsername,
688
+ }));
689
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_Admin}} {{StringName.Common_Email}}: {email}', undefined, {
690
+ email: result.adminEmail,
691
+ }));
692
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_Admin}} {{StringName.Common_Password}}: {password}', undefined, {
693
+ password: result.adminPassword,
694
+ }));
695
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_Admin}} {{StringName.Common_Mnemonic}}: {mnemonic}', undefined, {
696
+ mnemonic: result.adminMnemonic,
697
+ }));
698
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_Admin}} {{StringName.Common_PublicKey}}: {publicKey}', undefined, {
699
+ publicKey: result.adminUser.publicKey,
700
+ }));
701
+ (0, utils_1.debugLog)(true, 'log', `${this.defaultI18nTFunc('{{StringName.Common_Admin}} {{StringName.Common_BackupCodes}}')}: ${result.adminBackupCodes.join(', ')}`);
702
+ (0, utils_1.debugLog)(true, 'log', '');
703
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_Member}} {{StringName.Common_ID}}: {id}', undefined, {
704
+ id: result.memberUser._id.toHexString(),
705
+ }));
706
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_Member}} {{StringName.Common_Role}}: {roleName}', undefined, {
707
+ roleName: result.memberRole.name,
708
+ }));
709
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_Member}} {{StringName.Common_Role}} {{StringName.Common_ID}}: {roleId}', undefined, {
710
+ roleId: result.memberRole._id.toString(),
711
+ }));
712
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_Member}} {{StringName.Common_User}} {{StringName.Common_Role}} {{StringName.Common_ID}}: {userRoleId}', undefined, {
713
+ userRoleId: result.memberUserRole._id.toString(),
714
+ }));
715
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_Member}} {{StringName.Common_Username}}: {username}', undefined, {
716
+ username: result.memberUsername,
717
+ }));
718
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_Member}} {{StringName.Common_Email}}: {email}', undefined, {
719
+ email: result.memberEmail,
720
+ }));
721
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_Member}} {{StringName.Common_Password}}: {password}', undefined, {
722
+ password: result.memberPassword,
723
+ }));
724
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_Member}} {{StringName.Common_Mnemonic}}: {mnemonic}', undefined, {
725
+ mnemonic: result.memberMnemonic,
726
+ }));
727
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('{{StringName.Common_Member}} {{StringName.Common_PublicKey}}: {publicKey}', undefined, {
728
+ publicKey: result.memberUser.publicKey,
729
+ }));
730
+ (0, utils_1.debugLog)(true, 'log', `${this.defaultI18nTFunc('{{StringName.Common_Member}} {{StringName.Common_BackupCodes}}')}: ${result.memberBackupCodes.join(', ')}`);
731
+ (0, utils_1.debugLog)(true, 'log', this.defaultI18nTFunc('\n=== {{StringName.Admin_EndCredentials}} ==='));
732
+ }
733
+ static setEnvFromInitResults(result) {
734
+ process.env['ADMIN_ID'] = result.adminUser._id.toHexString();
735
+ process.env['ADMIN_PUBLIC_KEY'] = result.adminUser.publicKey;
736
+ process.env['ADMIN_MNEMONIC'] = result.adminMnemonic;
737
+ process.env['ADMIN_PASSWORD'] = result.adminPassword;
738
+ process.env['ADMIN_ROLE_ID'] = result.adminRole._id.toHexString();
739
+ process.env['ADMIN_USER_ROLE_ID'] = result.adminUserRole._id.toHexString();
740
+ //
741
+ process.env['MEMBER_ID'] = result.memberUser._id.toHexString();
742
+ process.env['MEMBER_PUBLIC_KEY'] = result.memberUser.publicKey;
743
+ process.env['MEMBER_MNEMONIC'] = result.memberMnemonic;
744
+ process.env['MEMBER_PASSWORD'] = result.memberPassword;
745
+ process.env['MEMBER_ROLE_ID'] = result.memberRole._id.toHexString();
746
+ process.env['MEMBER_USER_ROLE_ID'] =
747
+ result.memberUserRole._id.toHexString();
748
+ //
749
+ process.env['SYSTEM_ID'] = result.systemUser._id.toHexString();
750
+ process.env['SYSTEM_PUBLIC_KEY'] = result.systemUser.publicKey;
751
+ process.env['SYSTEM_MNEMONIC'] = result.systemMnemonic;
752
+ process.env['SYSTEM_PASSWORD'] = result.systemPassword;
753
+ process.env['SYSTEM_ROLE_ID'] = result.systemRole._id.toHexString();
754
+ process.env['SYSTEM_USER_ROLE_ID'] =
755
+ result.systemUserRole._id.toHexString();
756
+ }
757
+ /**
758
+ * Initialize the user database with default users and roles (convenience method)
759
+ * This method creates the necessary services and calls initUserDbWithServices
760
+ * @param application The application
761
+ * @returns The result of the initialization
762
+ */
763
+ static async initUserDb(application) {
764
+ const mnemonicModel = model_registry_1.ModelRegistry.instance.getTypedModel(base_model_name_1.BaseModelName.Mnemonic);
765
+ const keyWrappingService = new key_wrapping_1.KeyWrappingService();
766
+ const mnemonicService = new mnemonic_1.MnemonicService(mnemonicModel, application.environment.mnemonicHmacSecret, keyWrappingService);
767
+ const config = {
768
+ curveName: ecies_lib_1.ECIES.CURVE_NAME,
769
+ primaryKeyDerivationPath: ecies_lib_1.ECIES.PRIMARY_KEY_DERIVATION_PATH,
770
+ mnemonicStrength: ecies_lib_1.ECIES.MNEMONIC_STRENGTH,
771
+ symmetricAlgorithm: ecies_lib_1.ECIES.SYMMETRIC_ALGORITHM_CONFIGURATION,
772
+ symmetricKeyBits: ecies_lib_1.ECIES.SYMMETRIC.KEY_BITS,
773
+ symmetricKeyMode: ecies_lib_1.ECIES.SYMMETRIC.MODE,
774
+ };
775
+ const eciesService = new node_ecies_lib_1.ECIESService(config);
776
+ const roleService = new role_1.RoleService(application);
777
+ const backupCodeService = new backup_code_2.BackupCodeService(application, eciesService, keyWrappingService, roleService);
778
+ return this.initUserDbWithServices(application, keyWrappingService, mnemonicService, eciesService, roleService, backupCodeService);
779
+ }
780
+ }
781
+ exports.DatabaseInitializationService = DatabaseInitializationService;
782
+ //# sourceMappingURL=database-initialization.js.map