@digitaldefiance/node-express-suite 3.7.5 → 3.8.0

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