@digitaldefiance/node-express-suite 3.7.5 → 3.7.6

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 (813) hide show
  1. package/package.json +5 -4
  2. package/src/__tests__/fixtures/{index.ts → index.d.ts} +1 -0
  3. package/src/__tests__/fixtures/index.d.ts.map +1 -0
  4. package/src/__tests__/fixtures/index.js +5 -0
  5. package/src/__tests__/fixtures/index.js.map +1 -0
  6. package/src/__tests__/fixtures/model-mocks.mock.d.ts +12 -0
  7. package/src/__tests__/fixtures/model-mocks.mock.d.ts.map +1 -0
  8. package/src/__tests__/fixtures/model-mocks.mock.js +102 -0
  9. package/src/__tests__/fixtures/model-mocks.mock.js.map +1 -0
  10. package/src/__tests__/helpers/application.mock.d.ts +8 -0
  11. package/src/__tests__/helpers/application.mock.d.ts.map +1 -0
  12. package/src/__tests__/helpers/application.mock.js +77 -0
  13. package/src/__tests__/helpers/application.mock.js.map +1 -0
  14. package/src/__tests__/helpers/{index.ts → index.d.ts} +1 -0
  15. package/src/__tests__/helpers/index.d.ts.map +1 -0
  16. package/src/__tests__/helpers/index.js +7 -0
  17. package/src/__tests__/helpers/index.js.map +1 -0
  18. package/src/__tests__/helpers/setup-test-env.d.ts +12 -0
  19. package/src/__tests__/helpers/setup-test-env.d.ts.map +1 -0
  20. package/src/__tests__/helpers/setup-test-env.js +121 -0
  21. package/src/__tests__/helpers/setup-test-env.js.map +1 -0
  22. package/src/__tests__/{index.ts → index.d.ts} +1 -0
  23. package/src/__tests__/index.d.ts.map +1 -0
  24. package/src/__tests__/index.js +6 -0
  25. package/src/__tests__/index.js.map +1 -0
  26. package/src/application-base.d.ts +128 -0
  27. package/src/application-base.d.ts.map +1 -0
  28. package/src/application-base.js +364 -0
  29. package/src/application-base.js.map +1 -0
  30. package/src/application-concrete.d.ts +26 -0
  31. package/src/application-concrete.d.ts.map +1 -0
  32. package/src/application-concrete.js +34 -0
  33. package/src/application-concrete.js.map +1 -0
  34. package/src/application.d.ts +34 -0
  35. package/src/application.d.ts.map +1 -0
  36. package/src/application.js +172 -0
  37. package/src/application.js.map +1 -0
  38. package/src/backup-code.d.ts +72 -0
  39. package/src/backup-code.d.ts.map +1 -0
  40. package/src/backup-code.js +243 -0
  41. package/src/backup-code.js.map +1 -0
  42. package/src/builders/application-builder.d.ts +47 -0
  43. package/src/builders/application-builder.d.ts.map +1 -0
  44. package/src/builders/application-builder.js +76 -0
  45. package/src/builders/application-builder.js.map +1 -0
  46. package/src/builders/{index.ts → index.d.ts} +1 -0
  47. package/src/builders/index.d.ts.map +1 -0
  48. package/src/builders/index.js +5 -0
  49. package/src/builders/index.js.map +1 -0
  50. package/src/constants.d.ts +21 -0
  51. package/src/constants.d.ts.map +1 -0
  52. package/src/constants.js +63 -0
  53. package/src/constants.js.map +1 -0
  54. package/src/container/{index.ts → index.d.ts} +1 -0
  55. package/src/container/index.d.ts.map +1 -0
  56. package/src/container/index.js +6 -0
  57. package/src/container/index.js.map +1 -0
  58. package/src/container/service-container.d.ts +45 -0
  59. package/src/container/service-container.d.ts.map +1 -0
  60. package/src/container/service-container.js +68 -0
  61. package/src/container/service-container.js.map +1 -0
  62. package/src/container/{service-definitions.ts → service-definitions.d.ts} +10 -11
  63. package/src/container/service-definitions.d.ts.map +1 -0
  64. package/src/container/service-definitions.js +21 -0
  65. package/src/container/service-definitions.js.map +1 -0
  66. package/src/controllers/base.d.ts +80 -0
  67. package/src/controllers/base.d.ts.map +1 -0
  68. package/src/controllers/base.js +318 -0
  69. package/src/controllers/base.js.map +1 -0
  70. package/src/controllers/{index.ts → index.d.ts} +1 -0
  71. package/src/controllers/index.d.ts.map +1 -0
  72. package/src/controllers/index.js +6 -0
  73. package/src/controllers/index.js.map +1 -0
  74. package/src/controllers/user.d.ts +66 -0
  75. package/src/controllers/user.d.ts.map +1 -0
  76. package/src/controllers/user.js +936 -0
  77. package/src/controllers/user.js.map +1 -0
  78. package/src/database/{database-initializer.ts → database-initializer.d.ts} +3 -4
  79. package/src/database/database-initializer.d.ts.map +1 -0
  80. package/src/database/database-initializer.js +8 -0
  81. package/src/database/database-initializer.js.map +1 -0
  82. package/src/database/{index.ts → index.d.ts} +1 -0
  83. package/src/database/index.d.ts.map +1 -0
  84. package/src/database/index.js +5 -0
  85. package/src/database/index.js.map +1 -0
  86. package/src/decorators/base-controller.d.ts +22 -0
  87. package/src/decorators/base-controller.d.ts.map +1 -0
  88. package/src/decorators/base-controller.js +71 -0
  89. package/src/decorators/base-controller.js.map +1 -0
  90. package/src/decorators/controller.d.ts +43 -0
  91. package/src/decorators/controller.d.ts.map +1 -0
  92. package/src/decorators/controller.js +73 -0
  93. package/src/decorators/controller.js.map +1 -0
  94. package/src/decorators/{index.ts → index.d.ts} +1 -0
  95. package/src/decorators/index.d.ts.map +1 -0
  96. package/src/decorators/index.js +7 -0
  97. package/src/decorators/index.js.map +1 -0
  98. package/src/decorators/zod-validation.d.ts +10 -0
  99. package/src/decorators/zod-validation.d.ts.map +1 -0
  100. package/src/decorators/zod-validation.js +53 -0
  101. package/src/decorators/zod-validation.js.map +1 -0
  102. package/src/defaults.d.ts +12 -0
  103. package/src/defaults.d.ts.map +1 -0
  104. package/src/defaults.js +210 -0
  105. package/src/defaults.js.map +1 -0
  106. package/src/documents/{base.ts → base.d.ts} +2 -4
  107. package/src/documents/base.d.ts.map +1 -0
  108. package/src/documents/base.js +8 -0
  109. package/src/documents/base.js.map +1 -0
  110. package/src/documents/{email-token.ts → email-token.d.ts} +3 -8
  111. package/src/documents/email-token.d.ts.map +1 -0
  112. package/src/documents/email-token.js +8 -0
  113. package/src/documents/email-token.js.map +1 -0
  114. package/src/documents/{index.ts → index.d.ts} +1 -0
  115. package/src/documents/index.d.ts.map +1 -0
  116. package/src/documents/index.js +3 -0
  117. package/src/documents/index.js.map +1 -0
  118. package/src/documents/{mnemonic.ts → mnemonic.d.ts} +2 -6
  119. package/src/documents/mnemonic.d.ts.map +1 -0
  120. package/src/documents/mnemonic.js +8 -0
  121. package/src/documents/mnemonic.js.map +1 -0
  122. package/src/documents/{role.ts → role.d.ts} +2 -6
  123. package/src/documents/role.d.ts.map +1 -0
  124. package/src/documents/role.js +8 -0
  125. package/src/documents/role.js.map +1 -0
  126. package/src/documents/{used-direct-login-token.ts → used-direct-login-token.d.ts} +2 -4
  127. package/src/documents/used-direct-login-token.d.ts.map +1 -0
  128. package/src/documents/used-direct-login-token.js +8 -0
  129. package/src/documents/used-direct-login-token.js.map +1 -0
  130. package/src/documents/{user-role.ts → user-role.d.ts} +2 -6
  131. package/src/documents/user-role.d.ts.map +1 -0
  132. package/src/documents/user-role.js +8 -0
  133. package/src/documents/user-role.js.map +1 -0
  134. package/src/documents/{user.ts → user.d.ts} +2 -6
  135. package/src/documents/user.d.ts.map +1 -0
  136. package/src/documents/user.js +8 -0
  137. package/src/documents/user.js.map +1 -0
  138. package/src/enumerations/base-model-name.d.ts +43 -0
  139. package/src/enumerations/base-model-name.d.ts.map +1 -0
  140. package/src/enumerations/base-model-name.js +39 -0
  141. package/src/enumerations/base-model-name.js.map +1 -0
  142. package/src/enumerations/{index.ts → index.d.ts} +1 -0
  143. package/src/enumerations/index.d.ts.map +1 -0
  144. package/src/enumerations/index.js +8 -0
  145. package/src/enumerations/index.js.map +1 -0
  146. package/src/enumerations/{length-encoding-type.ts → length-encoding-type.d.ts} +6 -6
  147. package/src/enumerations/length-encoding-type.d.ts.map +1 -0
  148. package/src/enumerations/length-encoding-type.js +20 -0
  149. package/src/enumerations/length-encoding-type.js.map +1 -0
  150. package/src/enumerations/schema-collection.d.ts +39 -0
  151. package/src/enumerations/schema-collection.d.ts.map +1 -0
  152. package/src/enumerations/schema-collection.js +43 -0
  153. package/src/enumerations/schema-collection.js.map +1 -0
  154. package/src/enumerations/{symmetric-error-type.ts → symmetric-error-type.d.ts} +4 -4
  155. package/src/enumerations/symmetric-error-type.d.ts.map +1 -0
  156. package/src/enumerations/symmetric-error-type.js +17 -0
  157. package/src/enumerations/symmetric-error-type.js.map +1 -0
  158. package/src/environment.d.ts +194 -0
  159. package/src/environment.d.ts.map +1 -0
  160. package/src/environment.js +646 -0
  161. package/src/environment.js.map +1 -0
  162. package/src/errors/express-validation.d.ts +24 -0
  163. package/src/errors/express-validation.d.ts.map +1 -0
  164. package/src/errors/express-validation.js +33 -0
  165. package/src/errors/express-validation.js.map +1 -0
  166. package/src/errors/{index.ts → index.d.ts} +1 -0
  167. package/src/errors/index.d.ts.map +1 -0
  168. package/src/errors/index.js +16 -0
  169. package/src/errors/index.js.map +1 -0
  170. package/src/errors/invalid-backup-code-version.d.ts +19 -0
  171. package/src/errors/invalid-backup-code-version.d.ts.map +1 -0
  172. package/src/errors/invalid-backup-code-version.js +29 -0
  173. package/src/errors/invalid-backup-code-version.js.map +1 -0
  174. package/src/errors/invalid-jwt-token.d.ts +17 -0
  175. package/src/errors/invalid-jwt-token.d.ts.map +1 -0
  176. package/src/errors/invalid-jwt-token.js +24 -0
  177. package/src/errors/invalid-jwt-token.js.map +1 -0
  178. package/src/errors/invalid-model.d.ts +18 -0
  179. package/src/errors/invalid-model.d.ts.map +1 -0
  180. package/src/errors/invalid-model.js +26 -0
  181. package/src/errors/invalid-model.js.map +1 -0
  182. package/src/errors/invalid-new-password.d.ts +19 -0
  183. package/src/errors/invalid-new-password.d.ts.map +1 -0
  184. package/src/errors/invalid-new-password.js +28 -0
  185. package/src/errors/invalid-new-password.js.map +1 -0
  186. package/src/errors/invalid-password.d.ts +19 -0
  187. package/src/errors/invalid-password.d.ts.map +1 -0
  188. package/src/errors/invalid-password.js +28 -0
  189. package/src/errors/invalid-password.js.map +1 -0
  190. package/src/errors/missing-validated-data.d.ts +24 -0
  191. package/src/errors/missing-validated-data.d.ts.map +1 -0
  192. package/src/errors/missing-validated-data.js +53 -0
  193. package/src/errors/missing-validated-data.js.map +1 -0
  194. package/src/errors/mnemonic-or-password-required.d.ts +17 -0
  195. package/src/errors/mnemonic-or-password-required.d.ts.map +1 -0
  196. package/src/errors/mnemonic-or-password-required.js +26 -0
  197. package/src/errors/mnemonic-or-password-required.js.map +1 -0
  198. package/src/errors/model-not-registered.d.ts +18 -0
  199. package/src/errors/model-not-registered.d.ts.map +1 -0
  200. package/src/errors/model-not-registered.js +26 -0
  201. package/src/errors/model-not-registered.js.map +1 -0
  202. package/src/errors/mongoose-validation.d.ts +28 -0
  203. package/src/errors/mongoose-validation.d.ts.map +1 -0
  204. package/src/errors/mongoose-validation.js +33 -0
  205. package/src/errors/mongoose-validation.js.map +1 -0
  206. package/src/errors/symmetric.d.ts +23 -0
  207. package/src/errors/symmetric.d.ts.map +1 -0
  208. package/src/errors/symmetric.js +37 -0
  209. package/src/errors/symmetric.js.map +1 -0
  210. package/src/errors/token-expired.d.ts +17 -0
  211. package/src/errors/token-expired.d.ts.map +1 -0
  212. package/src/errors/token-expired.js +24 -0
  213. package/src/errors/token-expired.js.map +1 -0
  214. package/src/get-language.d.ts +12 -0
  215. package/src/get-language.d.ts.map +1 -0
  216. package/src/get-language.js +40 -0
  217. package/src/get-language.js.map +1 -0
  218. package/src/get-timezone.d.ts +12 -0
  219. package/src/get-timezone.d.ts.map +1 -0
  220. package/src/get-timezone.js +53 -0
  221. package/src/get-timezone.js.map +1 -0
  222. package/src/{index.ts → index.d.ts} +2 -44
  223. package/src/index.d.ts.map +1 -0
  224. package/src/index.js +80 -0
  225. package/src/index.js.map +1 -0
  226. package/src/interfaces/{api-error-response.ts → api-error-response.d.ts} +2 -3
  227. package/src/interfaces/api-error-response.d.ts.map +1 -0
  228. package/src/interfaces/api-error-response.js +8 -0
  229. package/src/interfaces/api-error-response.js.map +1 -0
  230. package/src/interfaces/{api-express-validation-error-response.ts → api-express-validation-error-response.d.ts} +3 -4
  231. package/src/interfaces/api-express-validation-error-response.d.ts.map +1 -0
  232. package/src/interfaces/api-express-validation-error-response.js +8 -0
  233. package/src/interfaces/api-express-validation-error-response.js.map +1 -0
  234. package/src/interfaces/{api-message-response.ts → api-message-response.d.ts} +2 -2
  235. package/src/interfaces/api-message-response.d.ts.map +1 -0
  236. package/src/interfaces/api-message-response.js +8 -0
  237. package/src/interfaces/api-message-response.js.map +1 -0
  238. package/src/interfaces/{api-mongo-validation-error-response.ts → api-mongo-validation-error-response.d.ts} +2 -3
  239. package/src/interfaces/api-mongo-validation-error-response.d.ts.map +1 -0
  240. package/src/interfaces/api-mongo-validation-error-response.js +8 -0
  241. package/src/interfaces/api-mongo-validation-error-response.js.map +1 -0
  242. package/src/interfaces/api-responses/{backup-codes-response.ts → backup-codes-response.d.ts} +2 -3
  243. package/src/interfaces/api-responses/backup-codes-response.d.ts.map +1 -0
  244. package/src/interfaces/api-responses/backup-codes-response.js +8 -0
  245. package/src/interfaces/api-responses/backup-codes-response.js.map +1 -0
  246. package/src/interfaces/api-responses/{challenge-response.ts → challenge-response.d.ts} +5 -6
  247. package/src/interfaces/api-responses/challenge-response.d.ts.map +1 -0
  248. package/src/interfaces/api-responses/challenge-response.js +7 -0
  249. package/src/interfaces/api-responses/challenge-response.js.map +1 -0
  250. package/src/interfaces/api-responses/{code-count-response.ts → code-count-response.d.ts} +2 -3
  251. package/src/interfaces/api-responses/code-count-response.d.ts.map +1 -0
  252. package/src/interfaces/api-responses/code-count-response.js +8 -0
  253. package/src/interfaces/api-responses/code-count-response.js.map +1 -0
  254. package/src/interfaces/api-responses/{index.ts → index.d.ts} +1 -0
  255. package/src/interfaces/api-responses/index.d.ts.map +1 -0
  256. package/src/interfaces/api-responses/index.js +12 -0
  257. package/src/interfaces/api-responses/index.js.map +1 -0
  258. package/src/interfaces/api-responses/{login-response.ts → login-response.d.ts} +4 -5
  259. package/src/interfaces/api-responses/login-response.d.ts.map +1 -0
  260. package/src/interfaces/api-responses/login-response.js +8 -0
  261. package/src/interfaces/api-responses/login-response.js.map +1 -0
  262. package/src/interfaces/api-responses/{mnemonic-response.ts → mnemonic-response.d.ts} +3 -4
  263. package/src/interfaces/api-responses/mnemonic-response.d.ts.map +1 -0
  264. package/src/interfaces/api-responses/mnemonic-response.js +7 -0
  265. package/src/interfaces/api-responses/mnemonic-response.js.map +1 -0
  266. package/src/interfaces/api-responses/{registration-response.ts → registration-response.d.ts} +5 -6
  267. package/src/interfaces/api-responses/registration-response.d.ts.map +1 -0
  268. package/src/interfaces/api-responses/registration-response.js +7 -0
  269. package/src/interfaces/api-responses/registration-response.js.map +1 -0
  270. package/src/interfaces/api-responses/{request-user-response.ts → request-user-response.d.ts} +2 -3
  271. package/src/interfaces/api-responses/request-user-response.d.ts.map +1 -0
  272. package/src/interfaces/api-responses/request-user-response.js +8 -0
  273. package/src/interfaces/api-responses/request-user-response.js.map +1 -0
  274. package/src/interfaces/api-responses/{user-settings-response.ts → user-settings-response.d.ts} +9 -10
  275. package/src/interfaces/api-responses/user-settings-response.d.ts.map +1 -0
  276. package/src/interfaces/api-responses/user-settings-response.js +8 -0
  277. package/src/interfaces/api-responses/user-settings-response.js.map +1 -0
  278. package/src/interfaces/application.d.ts +39 -0
  279. package/src/interfaces/application.d.ts.map +1 -0
  280. package/src/interfaces/application.js +8 -0
  281. package/src/interfaces/application.js.map +1 -0
  282. package/src/interfaces/backend-objects/{email-token.ts → email-token.d.ts} +3 -8
  283. package/src/interfaces/backend-objects/email-token.d.ts.map +1 -0
  284. package/src/interfaces/backend-objects/email-token.js +8 -0
  285. package/src/interfaces/backend-objects/email-token.js.map +1 -0
  286. package/src/interfaces/backend-objects/{index.ts → index.d.ts} +1 -0
  287. package/src/interfaces/backend-objects/index.d.ts.map +1 -0
  288. package/src/interfaces/backend-objects/index.js +8 -0
  289. package/src/interfaces/backend-objects/index.js.map +1 -0
  290. package/src/interfaces/backend-objects/{request-user.ts → request-user.d.ts} +2 -6
  291. package/src/interfaces/backend-objects/request-user.d.ts.map +1 -0
  292. package/src/interfaces/backend-objects/request-user.js +8 -0
  293. package/src/interfaces/backend-objects/request-user.js.map +1 -0
  294. package/src/interfaces/backend-objects/{role.ts → role.d.ts} +2 -7
  295. package/src/interfaces/backend-objects/role.d.ts.map +1 -0
  296. package/src/interfaces/backend-objects/role.js +8 -0
  297. package/src/interfaces/backend-objects/role.js.map +1 -0
  298. package/src/interfaces/backend-objects/{user.ts → user.d.ts} +2 -6
  299. package/src/interfaces/backend-objects/user.d.ts.map +1 -0
  300. package/src/interfaces/backend-objects/user.js +8 -0
  301. package/src/interfaces/backend-objects/user.js.map +1 -0
  302. package/src/interfaces/{checksum-config.ts → checksum-config.d.ts} +3 -3
  303. package/src/interfaces/checksum-config.d.ts.map +1 -0
  304. package/src/interfaces/checksum-config.js +8 -0
  305. package/src/interfaces/checksum-config.js.map +1 -0
  306. package/src/interfaces/checksum-consts.d.ts +20 -0
  307. package/src/interfaces/checksum-consts.d.ts.map +1 -0
  308. package/src/interfaces/checksum-consts.js +8 -0
  309. package/src/interfaces/checksum-consts.js.map +1 -0
  310. package/src/interfaces/constants.d.ts +107 -0
  311. package/src/interfaces/constants.d.ts.map +1 -0
  312. package/src/interfaces/constants.js +8 -0
  313. package/src/interfaces/constants.js.map +1 -0
  314. package/src/interfaces/{controller-config.ts → controller-config.d.ts} +15 -31
  315. package/src/interfaces/controller-config.d.ts.map +1 -0
  316. package/src/interfaces/controller-config.js +8 -0
  317. package/src/interfaces/controller-config.js.map +1 -0
  318. package/src/interfaces/{create-user-basics.ts → create-user-basics.d.ts} +13 -13
  319. package/src/interfaces/create-user-basics.d.ts.map +1 -0
  320. package/src/interfaces/create-user-basics.js +8 -0
  321. package/src/interfaces/create-user-basics.js.map +1 -0
  322. package/src/interfaces/{csp-config.ts → csp-config.d.ts} +5 -15
  323. package/src/interfaces/csp-config.d.ts.map +1 -0
  324. package/src/interfaces/csp-config.js +23 -0
  325. package/src/interfaces/csp-config.js.map +1 -0
  326. package/src/interfaces/{csp-definition.ts → csp-definition.d.ts} +9 -46
  327. package/src/interfaces/csp-definition.d.ts.map +1 -0
  328. package/src/interfaces/csp-definition.js +32 -0
  329. package/src/interfaces/csp-definition.js.map +1 -0
  330. package/src/interfaces/{db-init-result.ts → db-init-result.d.ts} +2 -3
  331. package/src/interfaces/db-init-result.d.ts.map +1 -0
  332. package/src/interfaces/db-init-result.js +8 -0
  333. package/src/interfaces/db-init-result.js.map +1 -0
  334. package/src/interfaces/{deep-partial.ts → deep-partial.d.ts} +2 -2
  335. package/src/interfaces/deep-partial.d.ts.map +1 -0
  336. package/src/interfaces/deep-partial.js +8 -0
  337. package/src/interfaces/deep-partial.js.map +1 -0
  338. package/src/interfaces/{discriminator-collections.ts → discriminator-collections.d.ts} +4 -8
  339. package/src/interfaces/discriminator-collections.d.ts.map +1 -0
  340. package/src/interfaces/discriminator-collections.js +8 -0
  341. package/src/interfaces/discriminator-collections.js.map +1 -0
  342. package/src/interfaces/email-service.d.ts +21 -0
  343. package/src/interfaces/email-service.d.ts.map +1 -0
  344. package/src/interfaces/email-service.js +8 -0
  345. package/src/interfaces/email-service.js.map +1 -0
  346. package/src/interfaces/environment-mongo.d.ts +85 -0
  347. package/src/interfaces/environment-mongo.d.ts.map +1 -0
  348. package/src/interfaces/environment-mongo.js +8 -0
  349. package/src/interfaces/environment-mongo.js.map +1 -0
  350. package/src/interfaces/environment.d.ts +190 -0
  351. package/src/interfaces/environment.d.ts.map +1 -0
  352. package/src/interfaces/environment.js +8 -0
  353. package/src/interfaces/environment.js.map +1 -0
  354. package/src/interfaces/{failable-result.ts → failable-result.d.ts} +5 -5
  355. package/src/interfaces/failable-result.d.ts.map +1 -0
  356. package/src/interfaces/failable-result.js +8 -0
  357. package/src/interfaces/failable-result.js.map +1 -0
  358. package/src/interfaces/{fec-consts.ts → fec-consts.d.ts} +3 -3
  359. package/src/interfaces/fec-consts.d.ts.map +1 -0
  360. package/src/interfaces/fec-consts.js +8 -0
  361. package/src/interfaces/fec-consts.js.map +1 -0
  362. package/src/interfaces/{flexible-csp.ts → flexible-csp.d.ts} +5 -16
  363. package/src/interfaces/flexible-csp.d.ts.map +1 -0
  364. package/src/interfaces/flexible-csp.js +24 -0
  365. package/src/interfaces/flexible-csp.js.map +1 -0
  366. package/src/interfaces/{handleable-error-options.ts → handleable-error-options.d.ts} +5 -5
  367. package/src/interfaces/handleable-error-options.d.ts.map +1 -0
  368. package/src/interfaces/handleable-error-options.js +8 -0
  369. package/src/interfaces/handleable-error-options.js.map +1 -0
  370. package/src/interfaces/{index.ts → index.d.ts} +1 -0
  371. package/src/interfaces/index.d.ts.map +1 -0
  372. package/src/interfaces/index.js +38 -0
  373. package/src/interfaces/index.js.map +1 -0
  374. package/src/interfaces/jwt-consts.d.ts +20 -0
  375. package/src/interfaces/jwt-consts.d.ts.map +1 -0
  376. package/src/interfaces/jwt-consts.js +8 -0
  377. package/src/interfaces/jwt-consts.js.map +1 -0
  378. package/src/interfaces/{jwt-sign-response.ts → jwt-sign-response.d.ts} +9 -18
  379. package/src/interfaces/jwt-sign-response.d.ts.map +1 -0
  380. package/src/interfaces/jwt-sign-response.js +8 -0
  381. package/src/interfaces/jwt-sign-response.js.map +1 -0
  382. package/src/interfaces/models/{email-token.ts → email-token.d.ts} +1 -2
  383. package/src/interfaces/models/email-token.d.ts.map +1 -0
  384. package/src/interfaces/models/email-token.js +8 -0
  385. package/src/interfaces/models/email-token.js.map +1 -0
  386. package/src/interfaces/models/{index.ts → index.d.ts} +1 -0
  387. package/src/interfaces/models/index.d.ts.map +1 -0
  388. package/src/interfaces/models/index.js +11 -0
  389. package/src/interfaces/models/index.js.map +1 -0
  390. package/src/interfaces/models/{mnemonic.ts → mnemonic.d.ts} +1 -2
  391. package/src/interfaces/models/mnemonic.d.ts.map +1 -0
  392. package/src/interfaces/models/mnemonic.js +8 -0
  393. package/src/interfaces/models/mnemonic.js.map +1 -0
  394. package/src/interfaces/models/{role.ts → role.d.ts} +1 -2
  395. package/src/interfaces/models/role.d.ts.map +1 -0
  396. package/src/interfaces/models/role.js +8 -0
  397. package/src/interfaces/models/role.js.map +1 -0
  398. package/src/interfaces/models/{token-role.ts → token-role.d.ts} +2 -6
  399. package/src/interfaces/models/token-role.d.ts.map +1 -0
  400. package/src/interfaces/models/token-role.js +8 -0
  401. package/src/interfaces/models/token-role.js.map +1 -0
  402. package/src/interfaces/models/{used-direct-login-token.ts → used-direct-login-token.d.ts} +2 -4
  403. package/src/interfaces/models/used-direct-login-token.d.ts.map +1 -0
  404. package/src/interfaces/models/used-direct-login-token.js +8 -0
  405. package/src/interfaces/models/used-direct-login-token.js.map +1 -0
  406. package/src/interfaces/models/{user-role.ts → user-role.d.ts} +2 -6
  407. package/src/interfaces/models/user-role.d.ts.map +1 -0
  408. package/src/interfaces/models/user-role.js +8 -0
  409. package/src/interfaces/models/user-role.js.map +1 -0
  410. package/src/interfaces/models/{user.ts → user.d.ts} +3 -12
  411. package/src/interfaces/models/user.d.ts.map +1 -0
  412. package/src/interfaces/models/user.js +8 -0
  413. package/src/interfaces/models/user.js.map +1 -0
  414. package/src/interfaces/{mongo-errors.ts → mongo-errors.d.ts} +2 -3
  415. package/src/interfaces/mongo-errors.d.ts.map +1 -0
  416. package/src/interfaces/mongo-errors.js +8 -0
  417. package/src/interfaces/mongo-errors.js.map +1 -0
  418. package/src/interfaces/request-user.d.ts +67 -0
  419. package/src/interfaces/request-user.d.ts.map +1 -0
  420. package/src/interfaces/request-user.js +8 -0
  421. package/src/interfaces/request-user.js.map +1 -0
  422. package/src/interfaces/required-string-keys.d.ts +28 -0
  423. package/src/interfaces/required-string-keys.d.ts.map +1 -0
  424. package/src/interfaces/required-string-keys.js +8 -0
  425. package/src/interfaces/required-string-keys.js.map +1 -0
  426. package/src/interfaces/{schema.ts → schema.d.ts} +22 -28
  427. package/src/interfaces/schema.d.ts.map +1 -0
  428. package/src/interfaces/schema.js +8 -0
  429. package/src/interfaces/schema.js.map +1 -0
  430. package/src/interfaces/server-init-result.d.ts +45 -0
  431. package/src/interfaces/server-init-result.d.ts.map +1 -0
  432. package/src/interfaces/server-init-result.js +8 -0
  433. package/src/interfaces/server-init-result.js.map +1 -0
  434. package/src/interfaces/{status-code-response.ts → status-code-response.d.ts} +4 -5
  435. package/src/interfaces/status-code-response.d.ts.map +1 -0
  436. package/src/interfaces/status-code-response.js +8 -0
  437. package/src/interfaces/status-code-response.js.map +1 -0
  438. package/src/interfaces/{symmetric-encryption-results.ts → symmetric-encryption-results.d.ts} +3 -3
  439. package/src/interfaces/symmetric-encryption-results.d.ts.map +1 -1
  440. package/src/interfaces/symmetric-encryption-results.js +5 -0
  441. package/src/interfaces/symmetric-encryption-results.js.map +1 -1
  442. package/src/interfaces/{test-environment.ts → test-environment.d.ts} +6 -7
  443. package/src/interfaces/test-environment.d.ts.map +1 -0
  444. package/src/interfaces/test-environment.js +8 -0
  445. package/src/interfaces/test-environment.js.map +1 -0
  446. package/src/interfaces/{token-response.ts → token-response.d.ts} +2 -3
  447. package/src/interfaces/token-response.d.ts.map +1 -0
  448. package/src/interfaces/token-response.js +8 -0
  449. package/src/interfaces/token-response.js.map +1 -0
  450. package/src/middleware-utils.d.ts +31 -0
  451. package/src/middleware-utils.d.ts.map +1 -0
  452. package/src/middleware-utils.js +117 -0
  453. package/src/middleware-utils.js.map +1 -0
  454. package/src/middlewares/authenticate-crypto.d.ts +27 -0
  455. package/src/middlewares/authenticate-crypto.d.ts.map +1 -0
  456. package/src/middlewares/authenticate-crypto.js +143 -0
  457. package/src/middlewares/authenticate-crypto.js.map +1 -0
  458. package/src/middlewares/authenticate-token.d.ts +34 -0
  459. package/src/middlewares/authenticate-token.d.ts.map +1 -0
  460. package/src/middlewares/authenticate-token.js +117 -0
  461. package/src/middlewares/authenticate-token.js.map +1 -0
  462. package/src/middlewares/cleanup-crypto.d.ts +16 -0
  463. package/src/middlewares/cleanup-crypto.d.ts.map +1 -0
  464. package/src/middlewares/cleanup-crypto.js +41 -0
  465. package/src/middlewares/cleanup-crypto.js.map +1 -0
  466. package/src/middlewares/{index.ts → index.d.ts} +1 -0
  467. package/src/middlewares/index.d.ts.map +1 -0
  468. package/src/middlewares/index.js +8 -0
  469. package/src/middlewares/index.js.map +1 -0
  470. package/src/middlewares/{set-global-context-language.ts → set-global-context-language.d.ts} +2 -24
  471. package/src/middlewares/set-global-context-language.d.ts.map +1 -0
  472. package/src/middlewares/set-global-context-language.js +27 -0
  473. package/src/middlewares/set-global-context-language.js.map +1 -0
  474. package/src/model-registry.d.ts +79 -0
  475. package/src/model-registry.d.ts.map +1 -0
  476. package/src/model-registry.js +97 -0
  477. package/src/model-registry.js.map +1 -0
  478. package/src/models/{email-token.ts → email-token.d.ts} +2 -27
  479. package/src/models/email-token.d.ts.map +1 -0
  480. package/src/models/email-token.js +16 -0
  481. package/src/models/email-token.js.map +1 -0
  482. package/src/models/{index.ts → index.d.ts} +1 -0
  483. package/src/models/index.d.ts.map +1 -0
  484. package/src/models/index.js +10 -0
  485. package/src/models/index.js.map +1 -0
  486. package/src/models/{mnemonic.ts → mnemonic.d.ts} +2 -20
  487. package/src/models/mnemonic.d.ts.map +1 -0
  488. package/src/models/mnemonic.js +27 -0
  489. package/src/models/mnemonic.js.map +1 -0
  490. package/src/models/{role.ts → role.d.ts} +2 -16
  491. package/src/models/role.d.ts.map +1 -0
  492. package/src/models/role.js +27 -0
  493. package/src/models/role.js.map +1 -0
  494. package/src/models/{used-direct-login-token.ts → used-direct-login-token.d.ts} +2 -27
  495. package/src/models/used-direct-login-token.d.ts.map +1 -0
  496. package/src/models/used-direct-login-token.js +16 -0
  497. package/src/models/used-direct-login-token.js.map +1 -0
  498. package/src/models/{user-role.ts → user-role.d.ts} +2 -19
  499. package/src/models/user-role.d.ts.map +1 -0
  500. package/src/models/user-role.js +26 -0
  501. package/src/models/user-role.js.map +1 -0
  502. package/src/models/{user.ts → user.d.ts} +2 -20
  503. package/src/models/user.d.ts.map +1 -0
  504. package/src/models/user.js +27 -0
  505. package/src/models/user.js.map +1 -0
  506. package/src/pipeline/{index.ts → index.d.ts} +1 -0
  507. package/src/pipeline/index.d.ts.map +1 -0
  508. package/src/pipeline/index.js +5 -0
  509. package/src/pipeline/index.js.map +1 -0
  510. package/src/pipeline/pipeline-builder.d.ts +16 -0
  511. package/src/pipeline/pipeline-builder.d.ts.map +1 -0
  512. package/src/pipeline/pipeline-builder.js +26 -0
  513. package/src/pipeline/pipeline-builder.js.map +1 -0
  514. package/src/plugins/{index.ts → index.d.ts} +1 -0
  515. package/src/plugins/index.d.ts.map +1 -0
  516. package/src/plugins/index.js +6 -0
  517. package/src/plugins/index.js.map +1 -0
  518. package/src/plugins/{plugin-interface.ts → plugin-interface.d.ts} +5 -6
  519. package/src/plugins/plugin-interface.d.ts.map +1 -0
  520. package/src/plugins/plugin-interface.js +8 -0
  521. package/src/plugins/plugin-interface.js.map +1 -0
  522. package/src/plugins/plugin-manager.d.ts +22 -0
  523. package/src/plugins/plugin-manager.d.ts.map +1 -0
  524. package/src/plugins/plugin-manager.js +46 -0
  525. package/src/plugins/plugin-manager.js.map +1 -0
  526. package/src/registry/email-service-registry.d.ts +49 -0
  527. package/src/registry/email-service-registry.d.ts.map +1 -0
  528. package/src/registry/email-service-registry.js +64 -0
  529. package/src/registry/email-service-registry.js.map +1 -0
  530. package/src/registry/{index.ts → index.d.ts} +1 -0
  531. package/src/registry/index.d.ts.map +1 -0
  532. package/src/registry/index.js +6 -0
  533. package/src/registry/index.js.map +1 -0
  534. package/src/responses/{index.ts → index.d.ts} +1 -0
  535. package/src/responses/index.d.ts.map +1 -0
  536. package/src/responses/index.js +5 -0
  537. package/src/responses/index.js.map +1 -0
  538. package/src/responses/response-builder.d.ts +103 -0
  539. package/src/responses/response-builder.d.ts.map +1 -0
  540. package/src/responses/response-builder.js +142 -0
  541. package/src/responses/response-builder.js.map +1 -0
  542. package/src/routers/api.d.ts +59 -0
  543. package/src/routers/api.d.ts.map +1 -0
  544. package/src/routers/api.js +110 -0
  545. package/src/routers/api.js.map +1 -0
  546. package/src/routers/app.d.ts +87 -0
  547. package/src/routers/app.d.ts.map +1 -0
  548. package/src/routers/app.js +285 -0
  549. package/src/routers/app.js.map +1 -0
  550. package/src/routers/{base.ts → base.d.ts} +11 -19
  551. package/src/routers/base.d.ts.map +1 -0
  552. package/src/routers/base.js +31 -0
  553. package/src/routers/base.js.map +1 -0
  554. package/src/routers/{index.ts → index.d.ts} +1 -0
  555. package/src/routers/index.d.ts.map +1 -0
  556. package/src/routers/index.js +7 -0
  557. package/src/routers/index.js.map +1 -0
  558. package/src/routers/router-config.d.ts +35 -0
  559. package/src/routers/router-config.d.ts.map +1 -0
  560. package/src/routers/router-config.js +16 -0
  561. package/src/routers/router-config.js.map +1 -0
  562. package/src/routing/index.d.ts +2 -0
  563. package/src/routing/index.d.ts.map +1 -0
  564. package/src/routing/index.js +5 -0
  565. package/src/routing/index.js.map +1 -0
  566. package/src/routing/route-builder.d.ts +121 -0
  567. package/src/routing/route-builder.d.ts.map +1 -0
  568. package/src/routing/route-builder.js +167 -0
  569. package/src/routing/route-builder.js.map +1 -0
  570. package/src/schemas/email-token.d.ts +65 -0
  571. package/src/schemas/email-token.d.ts.map +1 -0
  572. package/src/schemas/email-token.js +68 -0
  573. package/src/schemas/email-token.js.map +1 -0
  574. package/src/schemas/{index.ts → index.d.ts} +1 -0
  575. package/src/schemas/index.d.ts.map +1 -0
  576. package/src/schemas/index.js +11 -0
  577. package/src/schemas/index.js.map +1 -0
  578. package/src/schemas/mnemonic.d.ts +37 -0
  579. package/src/schemas/mnemonic.d.ts.map +1 -0
  580. package/src/schemas/mnemonic.js +41 -0
  581. package/src/schemas/mnemonic.js.map +1 -0
  582. package/src/schemas/role.d.ts +57 -0
  583. package/src/schemas/role.d.ts.map +1 -0
  584. package/src/schemas/role.js +102 -0
  585. package/src/schemas/role.js.map +1 -0
  586. package/src/schemas/schema.d.ts +62 -0
  587. package/src/schemas/schema.d.ts.map +1 -0
  588. package/src/schemas/schema.js +81 -0
  589. package/src/schemas/schema.js.map +1 -0
  590. package/src/schemas/used-direct-login-token.d.ts +49 -0
  591. package/src/schemas/used-direct-login-token.d.ts.map +1 -0
  592. package/src/schemas/used-direct-login-token.js +35 -0
  593. package/src/schemas/used-direct-login-token.js.map +1 -0
  594. package/src/schemas/user-role.d.ts +52 -0
  595. package/src/schemas/user-role.d.ts.map +1 -0
  596. package/src/schemas/user-role.js +67 -0
  597. package/src/schemas/user-role.js.map +1 -0
  598. package/src/schemas/user.d.ts +43 -0
  599. package/src/schemas/user.d.ts.map +1 -0
  600. package/src/schemas/user.js +214 -0
  601. package/src/schemas/user.js.map +1 -0
  602. package/src/services/backup-code.d.ts +80 -0
  603. package/src/services/backup-code.d.ts.map +1 -0
  604. package/src/services/backup-code.js +189 -0
  605. package/src/services/backup-code.js.map +1 -0
  606. package/src/services/base.d.ts +22 -0
  607. package/src/services/base.d.ts.map +1 -0
  608. package/src/services/base.js +26 -0
  609. package/src/services/base.js.map +1 -0
  610. package/src/services/checksum.d.ts +90 -0
  611. package/src/services/checksum.d.ts.map +1 -0
  612. package/src/services/checksum.js +166 -0
  613. package/src/services/checksum.js.map +1 -0
  614. package/src/services/database-initialization.d.ts +138 -0
  615. package/src/services/database-initialization.d.ts.map +1 -0
  616. package/src/services/database-initialization.js +904 -0
  617. package/src/services/database-initialization.js.map +1 -0
  618. package/src/services/{db-init-cache.ts → db-init-cache.d.ts} +6 -16
  619. package/src/services/db-init-cache.d.ts.map +1 -0
  620. package/src/services/db-init-cache.js +7 -0
  621. package/src/services/db-init-cache.js.map +1 -0
  622. package/src/services/direct-login-token.d.ts +28 -0
  623. package/src/services/direct-login-token.d.ts.map +1 -0
  624. package/src/services/direct-login-token.js +62 -0
  625. package/src/services/direct-login-token.js.map +1 -0
  626. package/src/services/dummy-email-service.d.ts +30 -0
  627. package/src/services/dummy-email-service.d.ts.map +1 -0
  628. package/src/services/dummy-email-service.js +35 -0
  629. package/src/services/dummy-email-service.js.map +1 -0
  630. package/src/services/fec-usage-example.d.ts +58 -0
  631. package/src/services/fec-usage-example.d.ts.map +1 -0
  632. package/src/services/fec-usage-example.js +95 -0
  633. package/src/services/fec-usage-example.js.map +1 -0
  634. package/src/services/fec.d.ts +88 -0
  635. package/src/services/fec.d.ts.map +1 -0
  636. package/src/services/fec.js +246 -0
  637. package/src/services/fec.js.map +1 -0
  638. package/src/services/{index.ts → index.d.ts} +1 -0
  639. package/src/services/index.d.ts.map +1 -0
  640. package/src/services/index.js +22 -0
  641. package/src/services/index.js.map +1 -0
  642. package/src/services/jwt.d.ts +45 -0
  643. package/src/services/jwt.d.ts.map +1 -0
  644. package/src/services/jwt.js +105 -0
  645. package/src/services/jwt.js.map +1 -0
  646. package/src/services/key-wrapping.d.ts +139 -0
  647. package/src/services/key-wrapping.d.ts.map +1 -0
  648. package/src/services/key-wrapping.js +372 -0
  649. package/src/services/key-wrapping.js.map +1 -0
  650. package/src/services/mnemonic.d.ts +68 -0
  651. package/src/services/mnemonic.d.ts.map +1 -0
  652. package/src/services/mnemonic.js +120 -0
  653. package/src/services/mnemonic.js.map +1 -0
  654. package/src/services/request-user.d.ts +45 -0
  655. package/src/services/request-user.d.ts.map +1 -0
  656. package/src/services/request-user.js +90 -0
  657. package/src/services/request-user.js.map +1 -0
  658. package/src/services/role.d.ts +97 -0
  659. package/src/services/role.d.ts.map +1 -0
  660. package/src/services/role.js +289 -0
  661. package/src/services/role.js.map +1 -0
  662. package/src/services/symmetric.d.ts +60 -0
  663. package/src/services/symmetric.d.ts.map +1 -0
  664. package/src/services/symmetric.js +125 -0
  665. package/src/services/symmetric.js.map +1 -0
  666. package/src/services/system-user.d.ts +22 -0
  667. package/src/services/system-user.d.ts.map +1 -0
  668. package/src/services/system-user.js +52 -0
  669. package/src/services/system-user.js.map +1 -0
  670. package/src/services/user.d.ts +368 -0
  671. package/src/services/user.d.ts.map +1 -0
  672. package/src/services/user.js +1470 -0
  673. package/src/services/user.js.map +1 -0
  674. package/src/services/xor.d.ts +28 -0
  675. package/src/services/xor.d.ts.map +1 -0
  676. package/src/services/xor.js +45 -0
  677. package/src/services/xor.js.map +1 -0
  678. package/src/{testing.ts → testing.d.ts} +1 -2
  679. package/src/testing.d.ts.map +1 -0
  680. package/src/testing.js +12 -0
  681. package/src/testing.js.map +1 -0
  682. package/src/transactions/{index.ts → index.d.ts} +1 -0
  683. package/src/transactions/index.d.ts.map +1 -0
  684. package/src/transactions/index.js +5 -0
  685. package/src/transactions/index.js.map +1 -0
  686. package/src/transactions/transaction-manager.d.ts +37 -0
  687. package/src/transactions/transaction-manager.d.ts.map +1 -0
  688. package/src/transactions/transaction-manager.js +50 -0
  689. package/src/transactions/transaction-manager.js.map +1 -0
  690. package/src/types/{app-config.ts → app-config.d.ts} +10 -16
  691. package/src/types/app-config.d.ts.map +1 -0
  692. package/src/types/app-config.js +8 -0
  693. package/src/types/app-config.js.map +1 -0
  694. package/src/types/{controller-config.ts → controller-config.d.ts} +7 -9
  695. package/src/types/controller-config.d.ts.map +1 -0
  696. package/src/types/controller-config.js +8 -0
  697. package/src/types/controller-config.js.map +1 -0
  698. package/src/types/{environment-variables.ts → environment-variables.d.ts} +5 -27
  699. package/src/types/environment-variables.d.ts.map +1 -0
  700. package/src/types/environment-variables.js +41 -0
  701. package/src/types/environment-variables.js.map +1 -0
  702. package/src/types/{index.ts → index.d.ts} +1 -0
  703. package/src/types/index.d.ts.map +1 -0
  704. package/src/types/index.js +6 -0
  705. package/src/types/index.js.map +1 -0
  706. package/src/types/{mongoose-helpers.ts → mongoose-helpers.d.ts} +2 -3
  707. package/src/types/mongoose-helpers.d.ts.map +1 -0
  708. package/src/types/mongoose-helpers.js +8 -0
  709. package/src/types/mongoose-helpers.js.map +1 -0
  710. package/src/types.d.ts +118 -0
  711. package/src/types.d.ts.map +1 -0
  712. package/src/types.js +28 -0
  713. package/src/types.js.map +1 -0
  714. package/src/utils.d.ts +240 -0
  715. package/src/utils.d.ts.map +1 -0
  716. package/src/utils.js +843 -0
  717. package/src/utils.js.map +1 -0
  718. package/src/validation/{index.ts → index.d.ts} +1 -0
  719. package/src/validation/index.d.ts.map +1 -0
  720. package/src/validation/index.js +5 -0
  721. package/src/validation/index.js.map +1 -0
  722. package/src/validation/validation-builder.d.ts +71 -0
  723. package/src/validation/validation-builder.d.ts.map +1 -0
  724. package/src/validation/validation-builder.js +120 -0
  725. package/src/validation/validation-builder.js.map +1 -0
  726. package/LICENSE +0 -21
  727. package/src/__tests__/fixtures/model-mocks.mock.ts +0 -164
  728. package/src/__tests__/helpers/application.mock.ts +0 -89
  729. package/src/__tests__/helpers/setup-test-env.ts +0 -202
  730. package/src/application-base.ts +0 -548
  731. package/src/application-concrete.ts +0 -62
  732. package/src/application.ts +0 -330
  733. package/src/backup-code.ts +0 -348
  734. package/src/builders/application-builder.ts +0 -147
  735. package/src/constants.ts +0 -89
  736. package/src/container/service-container.ts +0 -85
  737. package/src/controllers/base.ts +0 -512
  738. package/src/controllers/user.ts +0 -1734
  739. package/src/decorators/base-controller.ts +0 -91
  740. package/src/decorators/controller.ts +0 -152
  741. package/src/decorators/zod-validation.ts +0 -64
  742. package/src/defaults.ts +0 -259
  743. package/src/enumerations/base-model-name.ts +0 -47
  744. package/src/enumerations/schema-collection.ts +0 -39
  745. package/src/environment.ts +0 -859
  746. package/src/errors/express-validation.ts +0 -38
  747. package/src/errors/invalid-backup-code-version.ts +0 -30
  748. package/src/errors/invalid-jwt-token.ts +0 -24
  749. package/src/errors/invalid-model.ts +0 -24
  750. package/src/errors/invalid-new-password.ts +0 -33
  751. package/src/errors/invalid-password.ts +0 -28
  752. package/src/errors/missing-validated-data.ts +0 -55
  753. package/src/errors/mnemonic-or-password-required.ts +0 -26
  754. package/src/errors/model-not-registered.ts +0 -24
  755. package/src/errors/mongoose-validation.ts +0 -56
  756. package/src/errors/symmetric.ts +0 -53
  757. package/src/errors/token-expired.ts +0 -24
  758. package/src/get-language.ts +0 -64
  759. package/src/get-timezone.ts +0 -76
  760. package/src/interfaces/application.ts +0 -40
  761. package/src/interfaces/checksum-consts.ts +0 -23
  762. package/src/interfaces/constants.ts +0 -114
  763. package/src/interfaces/email-service.ts +0 -26
  764. package/src/interfaces/environment-mongo.ts +0 -86
  765. package/src/interfaces/environment.ts +0 -191
  766. package/src/interfaces/jwt-consts.ts +0 -33
  767. package/src/interfaces/request-user.ts +0 -80
  768. package/src/interfaces/required-string-keys.ts +0 -33
  769. package/src/interfaces/server-init-result.ts +0 -48
  770. package/src/middleware-utils.ts +0 -138
  771. package/src/middlewares/authenticate-crypto.ts +0 -237
  772. package/src/middlewares/authenticate-token.ts +0 -165
  773. package/src/middlewares/cleanup-crypto.ts +0 -47
  774. package/src/model-registry.ts +0 -142
  775. package/src/pipeline/pipeline-builder.ts +0 -27
  776. package/src/plugins/plugin-manager.ts +0 -53
  777. package/src/registry/email-service-registry.ts +0 -76
  778. package/src/responses/response-builder.ts +0 -166
  779. package/src/routers/api.ts +0 -233
  780. package/src/routers/app.ts +0 -395
  781. package/src/routers/router-config.ts +0 -34
  782. package/src/routing/index.ts +0 -1
  783. package/src/routing/route-builder.ts +0 -214
  784. package/src/schemas/email-token.ts +0 -112
  785. package/src/schemas/mnemonic.ts +0 -48
  786. package/src/schemas/role.ts +0 -153
  787. package/src/schemas/schema.ts +0 -185
  788. package/src/schemas/used-direct-login-token.ts +0 -58
  789. package/src/schemas/user-role.ts +0 -93
  790. package/src/schemas/user.ts +0 -244
  791. package/src/services/backup-code.ts +0 -327
  792. package/src/services/base.ts +0 -46
  793. package/src/services/checksum.ts +0 -189
  794. package/src/services/database-initialization.ts +0 -1653
  795. package/src/services/direct-login-token.ts +0 -83
  796. package/src/services/dummy-email-service.ts +0 -43
  797. package/src/services/fec-usage-example.ts +0 -123
  798. package/src/services/fec.ts +0 -399
  799. package/src/services/jwt.ts +0 -146
  800. package/src/services/key-wrapping.ts +0 -528
  801. package/src/services/mnemonic.ts +0 -174
  802. package/src/services/request-user.ts +0 -127
  803. package/src/services/role.ts +0 -417
  804. package/src/services/symmetric.ts +0 -164
  805. package/src/services/system-user.ts +0 -87
  806. package/src/services/user.ts +0 -2324
  807. package/src/services/xor.ts +0 -39
  808. package/src/transactions/transaction-manager.ts +0 -63
  809. package/src/types/mongoose-override.d.ts +0 -1
  810. package/src/types/mongoose.d.ts +0 -1
  811. package/src/types.ts +0 -189
  812. package/src/utils.ts +0 -1116
  813. 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