@digitaldefiance/node-express-suite 1.0.21 → 1.0.23

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 (633) hide show
  1. package/README.md +9 -0
  2. package/package.json +27 -32
  3. package/src/application-base.ts +492 -0
  4. package/src/application.ts +254 -0
  5. package/src/backup-code.ts +336 -0
  6. package/src/constants.ts +69 -0
  7. package/src/controllers/base.ts +440 -0
  8. package/{dist/controllers/index.d.ts → src/controllers/index.ts} +0 -1
  9. package/src/controllers/user.ts +1451 -0
  10. package/src/decorators/base-controller.ts +61 -0
  11. package/src/decorators/controller.ts +109 -0
  12. package/{dist/decorators/index.d.ts → src/decorators/index.ts} +0 -1
  13. package/src/decorators/zod-validation.ts +57 -0
  14. package/src/defaults.ts +94 -0
  15. package/src/documents/base.ts +7 -0
  16. package/src/documents/email-token.ts +14 -0
  17. package/{dist/documents/index.d.ts → src/documents/index.ts} +0 -1
  18. package/{dist/documents/mnemonic.d.ts → src/documents/mnemonic.ts} +5 -2
  19. package/{dist/documents/role.d.ts → src/documents/role.ts} +5 -2
  20. package/src/documents/used-direct-login-token.ts +7 -0
  21. package/{dist/documents/user-role.d.ts → src/documents/user-role.ts} +5 -2
  22. package/{dist/documents/user.d.ts → src/documents/user.ts} +4 -2
  23. package/src/enumerations/base-model-name.ts +41 -0
  24. package/{dist/enumerations/index.d.ts → src/enumerations/index.ts} +0 -1
  25. package/src/enumerations/length-encoding-type.ts +6 -0
  26. package/src/enumerations/schema-collection.ts +33 -0
  27. package/src/enumerations/symmetric-error-type.ts +4 -0
  28. package/src/environment.ts +770 -0
  29. package/src/errors/express-validation.ts +21 -0
  30. package/{dist/errors/index.d.ts → src/errors/index.ts} +0 -1
  31. package/src/errors/invalid-backup-code-version.ts +14 -0
  32. package/src/errors/invalid-jwt-token.ts +10 -0
  33. package/src/errors/invalid-model.ts +11 -0
  34. package/src/errors/invalid-new-password.ts +18 -0
  35. package/src/errors/invalid-password.ts +13 -0
  36. package/src/errors/missing-validated-data.ts +36 -0
  37. package/src/errors/mnemonic-or-password-required.ts +12 -0
  38. package/src/errors/model-not-registered.ts +11 -0
  39. package/src/errors/mongoose-validation.ts +34 -0
  40. package/src/errors/symmetric.ts +41 -0
  41. package/src/errors/token-expired.ts +10 -0
  42. package/src/get-language.ts +53 -0
  43. package/src/get-timezone.ts +45 -0
  44. package/{dist/index.d.ts → src/index.ts} +3 -2
  45. package/{dist/interfaces/api-error-response.d.ts → src/interfaces/api-error-response.ts} +2 -2
  46. package/src/interfaces/api-express-validation-error-response.ts +8 -0
  47. package/src/interfaces/api-message-response.ts +3 -0
  48. package/{dist/interfaces/api-mongo-validation-error-response.d.ts → src/interfaces/api-mongo-validation-error-response.ts} +2 -2
  49. package/{dist/interfaces/api-responses/backup-codes-response.d.ts → src/interfaces/api-responses/backup-codes-response.ts} +2 -2
  50. package/{dist/interfaces/api-responses/challenge-response.d.ts → src/interfaces/api-responses/challenge-response.ts} +3 -3
  51. package/{dist/interfaces/api-responses/code-count-response.d.ts → src/interfaces/api-responses/code-count-response.ts} +2 -2
  52. package/{dist/interfaces/api-responses/index.d.ts → src/interfaces/api-responses/index.ts} +0 -1
  53. package/{dist/interfaces/api-responses/login-response.d.ts → src/interfaces/api-responses/login-response.ts} +4 -4
  54. package/{dist/interfaces/api-responses/mnemonic-response.d.ts → src/interfaces/api-responses/mnemonic-response.ts} +2 -2
  55. package/{dist/interfaces/api-responses/registration-response.d.ts → src/interfaces/api-responses/registration-response.ts} +3 -3
  56. package/{dist/interfaces/api-responses/request-user-response.d.ts → src/interfaces/api-responses/request-user-response.ts} +2 -2
  57. package/{dist/interfaces/application.d.ts → src/interfaces/application.ts} +7 -7
  58. package/src/interfaces/backend-objects/email-token.ts +11 -0
  59. package/{dist/interfaces/backend-objects/index.d.ts → src/interfaces/backend-objects/index.ts} +0 -1
  60. package/{dist/interfaces/backend-objects/request-user.d.ts → src/interfaces/backend-objects/request-user.ts} +7 -2
  61. package/{dist/interfaces/backend-objects/role.d.ts → src/interfaces/backend-objects/role.ts} +1 -1
  62. package/src/interfaces/backend-objects/user.ts +9 -0
  63. package/src/interfaces/checksum-config.ts +4 -0
  64. package/src/interfaces/checksum-consts.ts +13 -0
  65. package/{dist/interfaces/constants.d.ts → src/interfaces/constants.ts} +5 -5
  66. package/src/interfaces/create-user-basics.ts +17 -0
  67. package/src/interfaces/csp-config.ts +35 -0
  68. package/src/interfaces/deep-partial.ts +3 -0
  69. package/{dist/interfaces/discriminator-collections.d.ts → src/interfaces/discriminator-collections.ts} +3 -3
  70. package/src/interfaces/email-service.ts +8 -0
  71. package/src/interfaces/environment-mongo.ts +76 -0
  72. package/src/interfaces/environment.ts +181 -0
  73. package/src/interfaces/failable-result.ts +6 -0
  74. package/src/interfaces/fec-consts.ts +4 -0
  75. package/src/interfaces/handleable-error-options.ts +6 -0
  76. package/{dist/interfaces/index.d.ts → src/interfaces/index.ts} +0 -1
  77. package/src/interfaces/jwt-consts.ts +23 -0
  78. package/src/interfaces/jwt-sign-response.ts +19 -0
  79. package/src/interfaces/mongo-errors.ts +5 -0
  80. package/src/interfaces/request-user.ts +50 -0
  81. package/src/interfaces/required-string-keys.ts +26 -0
  82. package/src/interfaces/schema.ts +31 -0
  83. package/src/interfaces/server-init-result.ts +37 -0
  84. package/src/interfaces/status-code-response.ts +7 -0
  85. package/src/interfaces/symmetric-encryption-results.d.ts +5 -0
  86. package/src/interfaces/symmetric-encryption-results.d.ts.map +1 -0
  87. package/src/interfaces/symmetric-encryption-results.js.map +1 -0
  88. package/src/interfaces/symmetric-encryption-results.ts +4 -0
  89. package/{dist/interfaces/token-response.d.ts → src/interfaces/token-response.ts} +2 -2
  90. package/src/middlewares/authenticate-crypto.ts +243 -0
  91. package/src/middlewares/authenticate-token.ts +152 -0
  92. package/src/middlewares/cleanup-crypto.ts +40 -0
  93. package/{dist/middlewares/index.d.ts → src/middlewares/index.ts} +0 -1
  94. package/src/middlewares/set-global-context-language.ts +24 -0
  95. package/src/middlewares.ts +120 -0
  96. package/src/model-registry.ts +75 -0
  97. package/src/models/email-token.ts +19 -0
  98. package/{dist/models/index.d.ts → src/models/index.ts} +0 -1
  99. package/src/models/mnemonic.ts +19 -0
  100. package/src/models/role.ts +19 -0
  101. package/src/models/used-direct-login-token.ts +23 -0
  102. package/src/models/user-role.ts +17 -0
  103. package/src/models/user.ts +19 -0
  104. package/src/registry/email-service-registry.ts +24 -0
  105. package/{dist/registry/index.d.ts → src/registry/index.ts} +0 -1
  106. package/src/routers/api.ts +151 -0
  107. package/src/routers/app.ts +258 -0
  108. package/src/routers/base.ts +17 -0
  109. package/{dist/routers/index.d.ts → src/routers/index.ts} +0 -1
  110. package/src/schemas/email-token.ts +91 -0
  111. package/{dist/schemas/index.d.ts → src/schemas/index.ts} +1 -2
  112. package/src/schemas/mnemonic.ts +37 -0
  113. package/src/schemas/role.ts +127 -0
  114. package/src/schemas/schema.ts +140 -0
  115. package/src/schemas/used-direct-login-token.ts +38 -0
  116. package/src/schemas/user-role.ts +75 -0
  117. package/src/schemas/user.ts +202 -0
  118. package/src/services/backup-code.ts +316 -0
  119. package/src/services/base.ts +33 -0
  120. package/src/services/checksum.ts +161 -0
  121. package/src/services/crc.ts +213 -0
  122. package/src/services/database-initialization.ts +1479 -0
  123. package/src/services/db-init-cache.d.ts +16 -0
  124. package/src/services/direct-login-token.ts +62 -0
  125. package/src/services/fec-usage-example.ts +102 -0
  126. package/src/services/fec.ts +296 -0
  127. package/{dist/services/index.d.ts → src/services/index.ts} +0 -1
  128. package/src/services/jwt.ts +134 -0
  129. package/src/services/key-wrapping.ts +434 -0
  130. package/src/services/mnemonic.ts +167 -0
  131. package/src/services/request-user.ts +62 -0
  132. package/src/services/role.ts +396 -0
  133. package/src/services/symmetric.ts +139 -0
  134. package/src/services/system-user.ts +82 -0
  135. package/src/services/user.ts +2137 -0
  136. package/src/services/xor.ts +34 -0
  137. package/src/types.d.ts +44 -0
  138. package/src/types.ts +128 -0
  139. package/src/utils.ts +1022 -0
  140. package/dist/application-base.d.ts +0 -112
  141. package/dist/application-base.d.ts.map +0 -1
  142. package/dist/application-base.js +0 -301
  143. package/dist/application-base.js.map +0 -1
  144. package/dist/application.d.ts +0 -23
  145. package/dist/application.d.ts.map +0 -1
  146. package/dist/application.js +0 -126
  147. package/dist/application.js.map +0 -1
  148. package/dist/backup-code.d.ts +0 -67
  149. package/dist/backup-code.d.ts.map +0 -1
  150. package/dist/backup-code.js +0 -270
  151. package/dist/backup-code.js.map +0 -1
  152. package/dist/constants.d.ts +0 -16
  153. package/dist/constants.d.ts.map +0 -1
  154. package/dist/constants.js +0 -54
  155. package/dist/constants.js.map +0 -1
  156. package/dist/controllers/base.d.ts +0 -63
  157. package/dist/controllers/base.d.ts.map +0 -1
  158. package/dist/controllers/base.js +0 -269
  159. package/dist/controllers/base.js.map +0 -1
  160. package/dist/controllers/index.d.ts.map +0 -1
  161. package/dist/controllers/index.js +0 -19
  162. package/dist/controllers/index.js.map +0 -1
  163. package/dist/controllers/user.d.ts +0 -45
  164. package/dist/controllers/user.d.ts.map +0 -1
  165. package/dist/controllers/user.js +0 -750
  166. package/dist/controllers/user.js.map +0 -1
  167. package/dist/decorators/base-controller.d.ts +0 -14
  168. package/dist/decorators/base-controller.d.ts.map +0 -1
  169. package/dist/decorators/base-controller.js +0 -49
  170. package/dist/decorators/base-controller.js.map +0 -1
  171. package/dist/decorators/controller.d.ts +0 -32
  172. package/dist/decorators/controller.d.ts.map +0 -1
  173. package/dist/decorators/controller.js +0 -67
  174. package/dist/decorators/controller.js.map +0 -1
  175. package/dist/decorators/index.d.ts.map +0 -1
  176. package/dist/decorators/index.js +0 -20
  177. package/dist/decorators/index.js.map +0 -1
  178. package/dist/decorators/zod-validation.d.ts +0 -5
  179. package/dist/decorators/zod-validation.d.ts.map +0 -1
  180. package/dist/decorators/zod-validation.js +0 -47
  181. package/dist/decorators/zod-validation.js.map +0 -1
  182. package/dist/defaults.d.ts +0 -7
  183. package/dist/defaults.d.ts.map +0 -1
  184. package/dist/defaults.js +0 -83
  185. package/dist/defaults.js.map +0 -1
  186. package/dist/documents/base.d.ts +0 -3
  187. package/dist/documents/base.d.ts.map +0 -1
  188. package/dist/documents/base.js +0 -3
  189. package/dist/documents/base.js.map +0 -1
  190. package/dist/documents/email-token.d.ts +0 -8
  191. package/dist/documents/email-token.d.ts.map +0 -1
  192. package/dist/documents/email-token.js +0 -3
  193. package/dist/documents/email-token.js.map +0 -1
  194. package/dist/documents/index.d.ts.map +0 -1
  195. package/dist/documents/index.js +0 -3
  196. package/dist/documents/index.js.map +0 -1
  197. package/dist/documents/mnemonic.d.ts.map +0 -1
  198. package/dist/documents/mnemonic.js +0 -3
  199. package/dist/documents/mnemonic.js.map +0 -1
  200. package/dist/documents/role.d.ts.map +0 -1
  201. package/dist/documents/role.js +0 -3
  202. package/dist/documents/role.js.map +0 -1
  203. package/dist/documents/used-direct-login-token.d.ts +0 -5
  204. package/dist/documents/used-direct-login-token.d.ts.map +0 -1
  205. package/dist/documents/used-direct-login-token.js +0 -3
  206. package/dist/documents/used-direct-login-token.js.map +0 -1
  207. package/dist/documents/user-role.d.ts.map +0 -1
  208. package/dist/documents/user-role.js +0 -3
  209. package/dist/documents/user-role.js.map +0 -1
  210. package/dist/documents/user.d.ts.map +0 -1
  211. package/dist/documents/user.js +0 -3
  212. package/dist/documents/user.js.map +0 -1
  213. package/dist/enumerations/base-model-name.d.ts +0 -38
  214. package/dist/enumerations/base-model-name.d.ts.map +0 -1
  215. package/dist/enumerations/base-model-name.js +0 -34
  216. package/dist/enumerations/base-model-name.js.map +0 -1
  217. package/dist/enumerations/index.d.ts.map +0 -1
  218. package/dist/enumerations/index.js +0 -21
  219. package/dist/enumerations/index.js.map +0 -1
  220. package/dist/enumerations/length-encoding-type.d.ts +0 -7
  221. package/dist/enumerations/length-encoding-type.d.ts.map +0 -1
  222. package/dist/enumerations/length-encoding-type.js +0 -11
  223. package/dist/enumerations/length-encoding-type.js.map +0 -1
  224. package/dist/enumerations/schema-collection.d.ts +0 -34
  225. package/dist/enumerations/schema-collection.d.ts.map +0 -1
  226. package/dist/enumerations/schema-collection.js +0 -38
  227. package/dist/enumerations/schema-collection.js.map +0 -1
  228. package/dist/enumerations/symmetric-error-type.d.ts +0 -5
  229. package/dist/enumerations/symmetric-error-type.d.ts.map +0 -1
  230. package/dist/enumerations/symmetric-error-type.js +0 -9
  231. package/dist/enumerations/symmetric-error-type.js.map +0 -1
  232. package/dist/environment.d.ts +0 -189
  233. package/dist/environment.d.ts.map +0 -1
  234. package/dist/environment.js +0 -618
  235. package/dist/environment.js.map +0 -1
  236. package/dist/errors/express-validation.d.ts +0 -9
  237. package/dist/errors/express-validation.d.ts.map +0 -1
  238. package/dist/errors/express-validation.js +0 -17
  239. package/dist/errors/express-validation.js.map +0 -1
  240. package/dist/errors/index.d.ts.map +0 -1
  241. package/dist/errors/index.js +0 -29
  242. package/dist/errors/index.js.map +0 -1
  243. package/dist/errors/invalid-backup-code-version.d.ts +0 -6
  244. package/dist/errors/invalid-backup-code-version.d.ts.map +0 -1
  245. package/dist/errors/invalid-backup-code-version.js +0 -14
  246. package/dist/errors/invalid-backup-code-version.js.map +0 -1
  247. package/dist/errors/invalid-jwt-token.d.ts +0 -5
  248. package/dist/errors/invalid-jwt-token.d.ts.map +0 -1
  249. package/dist/errors/invalid-jwt-token.js +0 -11
  250. package/dist/errors/invalid-jwt-token.js.map +0 -1
  251. package/dist/errors/invalid-model.d.ts +0 -6
  252. package/dist/errors/invalid-model.d.ts.map +0 -1
  253. package/dist/errors/invalid-model.js +0 -13
  254. package/dist/errors/invalid-model.js.map +0 -1
  255. package/dist/errors/invalid-new-password.d.ts +0 -5
  256. package/dist/errors/invalid-new-password.d.ts.map +0 -1
  257. package/dist/errors/invalid-new-password.js +0 -14
  258. package/dist/errors/invalid-new-password.js.map +0 -1
  259. package/dist/errors/invalid-password.d.ts +0 -5
  260. package/dist/errors/invalid-password.d.ts.map +0 -1
  261. package/dist/errors/invalid-password.js +0 -14
  262. package/dist/errors/invalid-password.js.map +0 -1
  263. package/dist/errors/missing-validated-data.d.ts +0 -7
  264. package/dist/errors/missing-validated-data.d.ts.map +0 -1
  265. package/dist/errors/missing-validated-data.js +0 -34
  266. package/dist/errors/missing-validated-data.js.map +0 -1
  267. package/dist/errors/mnemonic-or-password-required.d.ts +0 -5
  268. package/dist/errors/mnemonic-or-password-required.d.ts.map +0 -1
  269. package/dist/errors/mnemonic-or-password-required.js +0 -13
  270. package/dist/errors/mnemonic-or-password-required.js.map +0 -1
  271. package/dist/errors/model-not-registered.d.ts +0 -5
  272. package/dist/errors/model-not-registered.d.ts.map +0 -1
  273. package/dist/errors/model-not-registered.js +0 -12
  274. package/dist/errors/model-not-registered.js.map +0 -1
  275. package/dist/errors/mongoose-validation.d.ts +0 -11
  276. package/dist/errors/mongoose-validation.d.ts.map +0 -1
  277. package/dist/errors/mongoose-validation.js +0 -16
  278. package/dist/errors/mongoose-validation.js.map +0 -1
  279. package/dist/errors/symmetric.d.ts +0 -8
  280. package/dist/errors/symmetric.d.ts.map +0 -1
  281. package/dist/errors/symmetric.js +0 -23
  282. package/dist/errors/symmetric.js.map +0 -1
  283. package/dist/errors/token-expired.d.ts +0 -5
  284. package/dist/errors/token-expired.d.ts.map +0 -1
  285. package/dist/errors/token-expired.js +0 -11
  286. package/dist/errors/token-expired.js.map +0 -1
  287. package/dist/get-language.d.ts +0 -2
  288. package/dist/get-language.d.ts.map +0 -1
  289. package/dist/get-language.js +0 -30
  290. package/dist/get-language.js.map +0 -1
  291. package/dist/get-timezone.d.ts +0 -3
  292. package/dist/get-timezone.d.ts.map +0 -1
  293. package/dist/get-timezone.js +0 -31
  294. package/dist/get-timezone.js.map +0 -1
  295. package/dist/index.d.ts.map +0 -1
  296. package/dist/index.js +0 -40
  297. package/dist/index.js.map +0 -1
  298. package/dist/interfaces/api-error-response.d.ts.map +0 -1
  299. package/dist/interfaces/api-error-response.js +0 -3
  300. package/dist/interfaces/api-error-response.js.map +0 -1
  301. package/dist/interfaces/api-express-validation-error-response.d.ts +0 -7
  302. package/dist/interfaces/api-express-validation-error-response.d.ts.map +0 -1
  303. package/dist/interfaces/api-express-validation-error-response.js +0 -3
  304. package/dist/interfaces/api-express-validation-error-response.js.map +0 -1
  305. package/dist/interfaces/api-message-response.d.ts +0 -4
  306. package/dist/interfaces/api-message-response.d.ts.map +0 -1
  307. package/dist/interfaces/api-message-response.js +0 -3
  308. package/dist/interfaces/api-message-response.js.map +0 -1
  309. package/dist/interfaces/api-mongo-validation-error-response.d.ts.map +0 -1
  310. package/dist/interfaces/api-mongo-validation-error-response.js +0 -3
  311. package/dist/interfaces/api-mongo-validation-error-response.js.map +0 -1
  312. package/dist/interfaces/api-responses/backup-codes-response.d.ts.map +0 -1
  313. package/dist/interfaces/api-responses/backup-codes-response.js +0 -3
  314. package/dist/interfaces/api-responses/backup-codes-response.js.map +0 -1
  315. package/dist/interfaces/api-responses/challenge-response.d.ts.map +0 -1
  316. package/dist/interfaces/api-responses/challenge-response.js +0 -3
  317. package/dist/interfaces/api-responses/challenge-response.js.map +0 -1
  318. package/dist/interfaces/api-responses/code-count-response.d.ts.map +0 -1
  319. package/dist/interfaces/api-responses/code-count-response.js +0 -3
  320. package/dist/interfaces/api-responses/code-count-response.js.map +0 -1
  321. package/dist/interfaces/api-responses/index.d.ts.map +0 -1
  322. package/dist/interfaces/api-responses/index.js +0 -24
  323. package/dist/interfaces/api-responses/index.js.map +0 -1
  324. package/dist/interfaces/api-responses/login-response.d.ts.map +0 -1
  325. package/dist/interfaces/api-responses/login-response.js +0 -3
  326. package/dist/interfaces/api-responses/login-response.js.map +0 -1
  327. package/dist/interfaces/api-responses/mnemonic-response.d.ts.map +0 -1
  328. package/dist/interfaces/api-responses/mnemonic-response.js +0 -3
  329. package/dist/interfaces/api-responses/mnemonic-response.js.map +0 -1
  330. package/dist/interfaces/api-responses/registration-response.d.ts.map +0 -1
  331. package/dist/interfaces/api-responses/registration-response.js +0 -3
  332. package/dist/interfaces/api-responses/registration-response.js.map +0 -1
  333. package/dist/interfaces/api-responses/request-user-response.d.ts.map +0 -1
  334. package/dist/interfaces/api-responses/request-user-response.js +0 -3
  335. package/dist/interfaces/api-responses/request-user-response.js.map +0 -1
  336. package/dist/interfaces/application.d.ts.map +0 -1
  337. package/dist/interfaces/application.js +0 -3
  338. package/dist/interfaces/application.js.map +0 -1
  339. package/dist/interfaces/backend-objects/email-token.d.ts +0 -4
  340. package/dist/interfaces/backend-objects/email-token.d.ts.map +0 -1
  341. package/dist/interfaces/backend-objects/email-token.js +0 -3
  342. package/dist/interfaces/backend-objects/email-token.js.map +0 -1
  343. package/dist/interfaces/backend-objects/index.d.ts.map +0 -1
  344. package/dist/interfaces/backend-objects/index.js +0 -21
  345. package/dist/interfaces/backend-objects/index.js.map +0 -1
  346. package/dist/interfaces/backend-objects/request-user.d.ts.map +0 -1
  347. package/dist/interfaces/backend-objects/request-user.js +0 -3
  348. package/dist/interfaces/backend-objects/request-user.js.map +0 -1
  349. package/dist/interfaces/backend-objects/role.d.ts.map +0 -1
  350. package/dist/interfaces/backend-objects/role.js +0 -3
  351. package/dist/interfaces/backend-objects/role.js.map +0 -1
  352. package/dist/interfaces/backend-objects/user.d.ts +0 -4
  353. package/dist/interfaces/backend-objects/user.d.ts.map +0 -1
  354. package/dist/interfaces/backend-objects/user.js +0 -3
  355. package/dist/interfaces/backend-objects/user.js.map +0 -1
  356. package/dist/interfaces/checksum-config.d.ts +0 -5
  357. package/dist/interfaces/checksum-config.d.ts.map +0 -1
  358. package/dist/interfaces/checksum-config.js +0 -3
  359. package/dist/interfaces/checksum-config.js.map +0 -1
  360. package/dist/interfaces/checksum-consts.d.ts +0 -11
  361. package/dist/interfaces/checksum-consts.d.ts.map +0 -1
  362. package/dist/interfaces/checksum-consts.js +0 -3
  363. package/dist/interfaces/checksum-consts.js.map +0 -1
  364. package/dist/interfaces/constants.d.ts.map +0 -1
  365. package/dist/interfaces/constants.js +0 -3
  366. package/dist/interfaces/constants.js.map +0 -1
  367. package/dist/interfaces/create-user-basics.d.ts +0 -18
  368. package/dist/interfaces/create-user-basics.d.ts.map +0 -1
  369. package/dist/interfaces/create-user-basics.js +0 -3
  370. package/dist/interfaces/create-user-basics.js.map +0 -1
  371. package/dist/interfaces/csp-config.d.ts +0 -14
  372. package/dist/interfaces/csp-config.d.ts.map +0 -1
  373. package/dist/interfaces/csp-config.js +0 -3
  374. package/dist/interfaces/csp-config.js.map +0 -1
  375. package/dist/interfaces/deep-partial.d.ts +0 -4
  376. package/dist/interfaces/deep-partial.d.ts.map +0 -1
  377. package/dist/interfaces/deep-partial.js +0 -3
  378. package/dist/interfaces/deep-partial.js.map +0 -1
  379. package/dist/interfaces/discriminator-collections.d.ts.map +0 -1
  380. package/dist/interfaces/discriminator-collections.js +0 -3
  381. package/dist/interfaces/discriminator-collections.js.map +0 -1
  382. package/dist/interfaces/email-service.d.ts +0 -4
  383. package/dist/interfaces/email-service.d.ts.map +0 -1
  384. package/dist/interfaces/email-service.js +0 -3
  385. package/dist/interfaces/email-service.js.map +0 -1
  386. package/dist/interfaces/environment-mongo.d.ts +0 -76
  387. package/dist/interfaces/environment-mongo.d.ts.map +0 -1
  388. package/dist/interfaces/environment-mongo.js +0 -3
  389. package/dist/interfaces/environment-mongo.js.map +0 -1
  390. package/dist/interfaces/environment.d.ts +0 -181
  391. package/dist/interfaces/environment.d.ts.map +0 -1
  392. package/dist/interfaces/environment.js +0 -3
  393. package/dist/interfaces/environment.js.map +0 -1
  394. package/dist/interfaces/failable-result.d.ts +0 -7
  395. package/dist/interfaces/failable-result.d.ts.map +0 -1
  396. package/dist/interfaces/failable-result.js +0 -3
  397. package/dist/interfaces/failable-result.js.map +0 -1
  398. package/dist/interfaces/fec-consts.d.ts +0 -5
  399. package/dist/interfaces/fec-consts.d.ts.map +0 -1
  400. package/dist/interfaces/fec-consts.js +0 -3
  401. package/dist/interfaces/fec-consts.js.map +0 -1
  402. package/dist/interfaces/handleable-error-options.d.ts +0 -7
  403. package/dist/interfaces/handleable-error-options.d.ts.map +0 -1
  404. package/dist/interfaces/handleable-error-options.js +0 -3
  405. package/dist/interfaces/handleable-error-options.js.map +0 -1
  406. package/dist/interfaces/index.d.ts.map +0 -1
  407. package/dist/interfaces/index.js +0 -46
  408. package/dist/interfaces/index.js.map +0 -1
  409. package/dist/interfaces/jwt-consts.d.ts +0 -11
  410. package/dist/interfaces/jwt-consts.d.ts.map +0 -1
  411. package/dist/interfaces/jwt-consts.js +0 -3
  412. package/dist/interfaces/jwt-consts.js.map +0 -1
  413. package/dist/interfaces/jwt-sign-response.d.ts +0 -11
  414. package/dist/interfaces/jwt-sign-response.d.ts.map +0 -1
  415. package/dist/interfaces/jwt-sign-response.js +0 -3
  416. package/dist/interfaces/jwt-sign-response.js.map +0 -1
  417. package/dist/interfaces/mongo-errors.d.ts +0 -5
  418. package/dist/interfaces/mongo-errors.d.ts.map +0 -1
  419. package/dist/interfaces/mongo-errors.js +0 -3
  420. package/dist/interfaces/mongo-errors.js.map +0 -1
  421. package/dist/interfaces/request-user.d.ts +0 -42
  422. package/dist/interfaces/request-user.d.ts.map +0 -1
  423. package/dist/interfaces/request-user.js +0 -3
  424. package/dist/interfaces/request-user.js.map +0 -1
  425. package/dist/interfaces/required-string-keys.d.ts +0 -22
  426. package/dist/interfaces/required-string-keys.d.ts.map +0 -1
  427. package/dist/interfaces/required-string-keys.js +0 -3
  428. package/dist/interfaces/required-string-keys.js.map +0 -1
  429. package/dist/interfaces/schema.d.ts +0 -29
  430. package/dist/interfaces/schema.d.ts.map +0 -1
  431. package/dist/interfaces/schema.js +0 -3
  432. package/dist/interfaces/schema.js.map +0 -1
  433. package/dist/interfaces/server-init-result.d.ts +0 -35
  434. package/dist/interfaces/server-init-result.d.ts.map +0 -1
  435. package/dist/interfaces/server-init-result.js +0 -3
  436. package/dist/interfaces/server-init-result.js.map +0 -1
  437. package/dist/interfaces/status-code-response.d.ts +0 -7
  438. package/dist/interfaces/status-code-response.d.ts.map +0 -1
  439. package/dist/interfaces/status-code-response.js +0 -3
  440. package/dist/interfaces/status-code-response.js.map +0 -1
  441. package/dist/interfaces/symmetric-encryption-results.d.ts +0 -5
  442. package/dist/interfaces/symmetric-encryption-results.d.ts.map +0 -1
  443. package/dist/interfaces/symmetric-encryption-results.js.map +0 -1
  444. package/dist/interfaces/token-response.d.ts.map +0 -1
  445. package/dist/interfaces/token-response.js +0 -3
  446. package/dist/interfaces/token-response.js.map +0 -1
  447. package/dist/middlewares/authenticate-crypto.d.ts +0 -13
  448. package/dist/middlewares/authenticate-crypto.d.ts.map +0 -1
  449. package/dist/middlewares/authenticate-crypto.js +0 -146
  450. package/dist/middlewares/authenticate-crypto.js.map +0 -1
  451. package/dist/middlewares/authenticate-token.d.ts +0 -24
  452. package/dist/middlewares/authenticate-token.d.ts.map +0 -1
  453. package/dist/middlewares/authenticate-token.js +0 -102
  454. package/dist/middlewares/authenticate-token.js.map +0 -1
  455. package/dist/middlewares/cleanup-crypto.d.ts +0 -7
  456. package/dist/middlewares/cleanup-crypto.d.ts.map +0 -1
  457. package/dist/middlewares/cleanup-crypto.js +0 -32
  458. package/dist/middlewares/cleanup-crypto.js.map +0 -1
  459. package/dist/middlewares/index.d.ts.map +0 -1
  460. package/dist/middlewares/index.js +0 -21
  461. package/dist/middlewares/index.js.map +0 -1
  462. package/dist/middlewares/set-global-context-language.d.ts +0 -3
  463. package/dist/middlewares/set-global-context-language.d.ts.map +0 -1
  464. package/dist/middlewares/set-global-context-language.js +0 -14
  465. package/dist/middlewares/set-global-context-language.js.map +0 -1
  466. package/dist/middlewares.d.ts +0 -18
  467. package/dist/middlewares.d.ts.map +0 -1
  468. package/dist/middlewares.js +0 -76
  469. package/dist/middlewares.js.map +0 -1
  470. package/dist/model-registry.d.ts +0 -23
  471. package/dist/model-registry.d.ts.map +0 -1
  472. package/dist/model-registry.js +0 -47
  473. package/dist/model-registry.js.map +0 -1
  474. package/dist/models/email-token.d.ts +0 -11
  475. package/dist/models/email-token.d.ts.map +0 -1
  476. package/dist/models/email-token.js +0 -11
  477. package/dist/models/email-token.js.map +0 -1
  478. package/dist/models/index.d.ts.map +0 -1
  479. package/dist/models/index.js +0 -23
  480. package/dist/models/index.js.map +0 -1
  481. package/dist/models/mnemonic.d.ts +0 -11
  482. package/dist/models/mnemonic.d.ts.map +0 -1
  483. package/dist/models/mnemonic.js +0 -11
  484. package/dist/models/mnemonic.js.map +0 -1
  485. package/dist/models/role.d.ts +0 -11
  486. package/dist/models/role.d.ts.map +0 -1
  487. package/dist/models/role.js +0 -11
  488. package/dist/models/role.js.map +0 -1
  489. package/dist/models/used-direct-login-token.d.ts +0 -11
  490. package/dist/models/used-direct-login-token.d.ts.map +0 -1
  491. package/dist/models/used-direct-login-token.js +0 -11
  492. package/dist/models/used-direct-login-token.js.map +0 -1
  493. package/dist/models/user-role.d.ts +0 -6
  494. package/dist/models/user-role.d.ts.map +0 -1
  495. package/dist/models/user-role.js +0 -10
  496. package/dist/models/user-role.js.map +0 -1
  497. package/dist/models/user.d.ts +0 -7
  498. package/dist/models/user.d.ts.map +0 -1
  499. package/dist/models/user.js +0 -11
  500. package/dist/models/user.js.map +0 -1
  501. package/dist/registry/email-service-registry.d.ts +0 -9
  502. package/dist/registry/email-service-registry.d.ts.map +0 -1
  503. package/dist/registry/email-service-registry.js +0 -17
  504. package/dist/registry/email-service-registry.js.map +0 -1
  505. package/dist/registry/index.d.ts.map +0 -1
  506. package/dist/registry/index.js +0 -6
  507. package/dist/registry/index.js.map +0 -1
  508. package/dist/routers/api.d.ts +0 -27
  509. package/dist/routers/api.d.ts.map +0 -1
  510. package/dist/routers/api.js +0 -44
  511. package/dist/routers/api.js.map +0 -1
  512. package/dist/routers/app.d.ts +0 -28
  513. package/dist/routers/app.d.ts.map +0 -1
  514. package/dist/routers/app.js +0 -182
  515. package/dist/routers/app.js.map +0 -1
  516. package/dist/routers/base.d.ts +0 -12
  517. package/dist/routers/base.d.ts.map +0 -1
  518. package/dist/routers/base.js +0 -12
  519. package/dist/routers/base.js.map +0 -1
  520. package/dist/routers/index.d.ts.map +0 -1
  521. package/dist/routers/index.js +0 -20
  522. package/dist/routers/index.js.map +0 -1
  523. package/dist/schemas/email-token.d.ts +0 -38
  524. package/dist/schemas/email-token.d.ts.map +0 -1
  525. package/dist/schemas/email-token.js +0 -56
  526. package/dist/schemas/email-token.js.map +0 -1
  527. package/dist/schemas/index.d.ts.map +0 -1
  528. package/dist/schemas/index.js +0 -24
  529. package/dist/schemas/index.js.map +0 -1
  530. package/dist/schemas/mnemonic.d.ts +0 -20
  531. package/dist/schemas/mnemonic.d.ts.map +0 -1
  532. package/dist/schemas/mnemonic.js +0 -30
  533. package/dist/schemas/mnemonic.js.map +0 -1
  534. package/dist/schemas/role.d.ts +0 -32
  535. package/dist/schemas/role.d.ts.map +0 -1
  536. package/dist/schemas/role.js +0 -86
  537. package/dist/schemas/role.js.map +0 -1
  538. package/dist/schemas/schema.d.ts +0 -40
  539. package/dist/schemas/schema.d.ts.map +0 -1
  540. package/dist/schemas/schema.js +0 -64
  541. package/dist/schemas/schema.js.map +0 -1
  542. package/dist/schemas/used-direct-login-token.d.ts +0 -27
  543. package/dist/schemas/used-direct-login-token.d.ts.map +0 -1
  544. package/dist/schemas/used-direct-login-token.js +0 -23
  545. package/dist/schemas/used-direct-login-token.js.map +0 -1
  546. package/dist/schemas/user-role.d.ts +0 -29
  547. package/dist/schemas/user-role.d.ts.map +0 -1
  548. package/dist/schemas/user-role.js +0 -54
  549. package/dist/schemas/user-role.js.map +0 -1
  550. package/dist/schemas/user.d.ts +0 -21
  551. package/dist/schemas/user.d.ts.map +0 -1
  552. package/dist/schemas/user.js +0 -178
  553. package/dist/schemas/user.js.map +0 -1
  554. package/dist/services/backup-code.d.ts +0 -78
  555. package/dist/services/backup-code.d.ts.map +0 -1
  556. package/dist/services/backup-code.js +0 -180
  557. package/dist/services/backup-code.js.map +0 -1
  558. package/dist/services/base.d.ts +0 -13
  559. package/dist/services/base.d.ts.map +0 -1
  560. package/dist/services/base.js +0 -14
  561. package/dist/services/base.js.map +0 -1
  562. package/dist/services/checksum.d.ts +0 -67
  563. package/dist/services/checksum.d.ts.map +0 -1
  564. package/dist/services/checksum.js +0 -175
  565. package/dist/services/checksum.js.map +0 -1
  566. package/dist/services/crc.d.ts +0 -87
  567. package/dist/services/crc.d.ts.map +0 -1
  568. package/dist/services/crc.js +0 -198
  569. package/dist/services/crc.js.map +0 -1
  570. package/dist/services/database-initialization.d.ts +0 -105
  571. package/dist/services/database-initialization.d.ts.map +0 -1
  572. package/dist/services/database-initialization.js +0 -779
  573. package/dist/services/database-initialization.js.map +0 -1
  574. package/dist/services/direct-login-token.d.ts +0 -9
  575. package/dist/services/direct-login-token.d.ts.map +0 -1
  576. package/dist/services/direct-login-token.js +0 -41
  577. package/dist/services/direct-login-token.js.map +0 -1
  578. package/dist/services/fec-usage-example.d.ts +0 -38
  579. package/dist/services/fec-usage-example.d.ts.map +0 -1
  580. package/dist/services/fec-usage-example.js +0 -77
  581. package/dist/services/fec-usage-example.js.map +0 -1
  582. package/dist/services/fec.d.ts +0 -46
  583. package/dist/services/fec.d.ts.map +0 -1
  584. package/dist/services/fec.js +0 -192
  585. package/dist/services/fec.js.map +0 -1
  586. package/dist/services/index.d.ts.map +0 -1
  587. package/dist/services/index.js +0 -35
  588. package/dist/services/index.js.map +0 -1
  589. package/dist/services/jwt.d.ts +0 -33
  590. package/dist/services/jwt.d.ts.map +0 -1
  591. package/dist/services/jwt.js +0 -90
  592. package/dist/services/jwt.js.map +0 -1
  593. package/dist/services/key-wrapping.d.ts +0 -60
  594. package/dist/services/key-wrapping.d.ts.map +0 -1
  595. package/dist/services/key-wrapping.js +0 -311
  596. package/dist/services/key-wrapping.js.map +0 -1
  597. package/dist/services/mnemonic.d.ts +0 -61
  598. package/dist/services/mnemonic.d.ts.map +0 -1
  599. package/dist/services/mnemonic.js +0 -112
  600. package/dist/services/mnemonic.js.map +0 -1
  601. package/dist/services/request-user.d.ts +0 -20
  602. package/dist/services/request-user.d.ts.map +0 -1
  603. package/dist/services/request-user.js +0 -50
  604. package/dist/services/request-user.js.map +0 -1
  605. package/dist/services/role.d.ts +0 -88
  606. package/dist/services/role.d.ts.map +0 -1
  607. package/dist/services/role.js +0 -263
  608. package/dist/services/role.js.map +0 -1
  609. package/dist/services/symmetric.d.ts +0 -42
  610. package/dist/services/symmetric.d.ts.map +0 -1
  611. package/dist/services/symmetric.js +0 -101
  612. package/dist/services/symmetric.js.map +0 -1
  613. package/dist/services/system-user.d.ts +0 -17
  614. package/dist/services/system-user.d.ts.map +0 -1
  615. package/dist/services/system-user.js +0 -46
  616. package/dist/services/system-user.js.map +0 -1
  617. package/dist/services/user.d.ts +0 -320
  618. package/dist/services/user.d.ts.map +0 -1
  619. package/dist/services/user.js +0 -1374
  620. package/dist/services/user.js.map +0 -1
  621. package/dist/services/xor.d.ts +0 -24
  622. package/dist/services/xor.d.ts.map +0 -1
  623. package/dist/services/xor.js +0 -37
  624. package/dist/services/xor.js.map +0 -1
  625. package/dist/types.d.ts +0 -70
  626. package/dist/types.d.ts.map +0 -1
  627. package/dist/types.js +0 -14
  628. package/dist/types.js.map +0 -1
  629. package/dist/utils.d.ts +0 -202
  630. package/dist/utils.d.ts.map +0 -1
  631. package/dist/utils.js +0 -786
  632. package/dist/utils.js.map +0 -1
  633. /package/{dist → src}/interfaces/symmetric-encryption-results.js +0 -0
@@ -0,0 +1,770 @@
1
+ import { SecureBuffer, SecureString } from '@digitaldefiance/ecies-lib';
2
+ import { Timezone } from '@digitaldefiance/i18n-lib';
3
+ import {
4
+ getSuiteCoreTranslation,
5
+ SuiteCoreStringKey,
6
+ TranslatableSuiteError,
7
+ } from '@digitaldefiance/suite-core-lib';
8
+ import { config } from 'dotenv';
9
+ import { existsSync } from 'fs';
10
+ import { ObjectId } from 'mongodb';
11
+ import { Types } from 'mongoose';
12
+ import { BackupCode } from './backup-code';
13
+ import { Constants } from './constants';
14
+ import { setGlobalActiveContextAdminLanguageFromProcessArgvOrEnv } from './get-language';
15
+ import { setGlobalActiveContextAdminTimezoneFromProcessArgvOrEnv } from './get-timezone';
16
+ import { IConstants } from './interfaces/constants';
17
+ import { IEnvironment } from './interfaces/environment';
18
+ import { IMongoEnvironment } from './interfaces/environment-mongo';
19
+ import {
20
+ DEBUG_TYPE,
21
+ debugLog,
22
+ DEFAULT_TRANSACTION_LOCK_REQUEST_TIMEOUT,
23
+ DEFAULT_TRANSACTION_TIMEOUT,
24
+ locatePEMRoot,
25
+ parseBackupCodes,
26
+ } from './utils';
27
+
28
+ export class Environment implements IEnvironment {
29
+ private readonly _environment: IEnvironment;
30
+ private readonly _envObject: object;
31
+ public static requireEnv<T>(key: string, obj: object): T {
32
+ if (!Object.prototype.hasOwnProperty.call(obj, key)) {
33
+ throw new TranslatableSuiteError(SuiteCoreStringKey.Error_MissingRequiredEnvironmentVariableTemplate, { key });
34
+ }
35
+ if (!(obj as any)[key] || (String((obj as any)[key]).trim() === '')) {
36
+ throw new TranslatableSuiteError(SuiteCoreStringKey.Error_EmptyEnvironmentVariableTemplate, { key });
37
+ }
38
+ return ((obj as any)[key]) as T;
39
+ }
40
+ constructor(
41
+ path?: string,
42
+ initialization = false,
43
+ override = true,
44
+ constants: IConstants = Constants,
45
+ ) {
46
+ let envObj = process.env;
47
+ let debug = envObj['DEBUG'] === 'true' || envObj['DEBUG'] === '1';
48
+ let detailedDebug =
49
+ envObj['DETAILED_DEBUG'] === 'true' || envObj['DETAILED_DEBUG'] === '1';
50
+ if (path && existsSync(path)) {
51
+ debugLog(
52
+ debug,
53
+ 'log',
54
+ getSuiteCoreTranslation(
55
+ SuiteCoreStringKey.Admin_LoadingEnvironmentTemplate,
56
+ {
57
+ PATH: path,
58
+ },
59
+ ),
60
+ );
61
+ const result = config({ path, override: override });
62
+ envObj = override
63
+ ? { ...envObj, ...result.parsed }
64
+ : { ...result.parsed, ...envObj };
65
+ // debug / detailedDebug may have changed due to the env loading
66
+ debug = envObj['DEBUG'] === 'true' || envObj['DEBUG'] === '1';
67
+ detailedDebug =
68
+ envObj['DETAILED_DEBUG'] === 'true' || envObj['DETAILED_DEBUG'] === '1';
69
+
70
+ if (result.error || !result.parsed) {
71
+ throw new TranslatableSuiteError(
72
+ SuiteCoreStringKey.Admin_Error_FailedToLoadEnvironment,
73
+ );
74
+ }
75
+ } else if (path) {
76
+ debugLog(
77
+ debug,
78
+ 'warn',
79
+ getSuiteCoreTranslation(
80
+ SuiteCoreStringKey.Admin_EnvFileNotFoundTemplate,
81
+ {
82
+ PATH: path,
83
+ },
84
+ ),
85
+ );
86
+ }
87
+
88
+ const httpsDevCertRoot = process.env['HTTPS_DEV_CERT_DIR']
89
+ ? locatePEMRoot(process.env['HTTPS_DEV_CERT_DIR'])
90
+ : undefined;
91
+ const httpsDevPort = process.env['HTTPS_DEV_PORT']
92
+ ? parseInt(process.env['HTTPS_DEV_PORT'] ?? '3443')
93
+ : 443;
94
+
95
+ this._environment = {
96
+ debug: debug,
97
+ devDatabase:
98
+ envObj['DEV_DATABASE'] !== undefined && envObj['DEV_DATABASE'] !== ''
99
+ ? envObj['DEV_DATABASE']
100
+ : undefined,
101
+ detailedDebug: detailedDebug,
102
+ host: envObj['HOST'] ?? '0.0.0.0',
103
+ port: envObj['PORT'] ? Number(envObj['PORT']) : 3000,
104
+ jwtSecret: Environment.requireEnv<string>('JWT_SECRET', envObj),
105
+ emailSender: envObj['EMAIL_SENDER'] ?? 'noreply@localhost',
106
+ basePath: envObj['BASE_PATH'] ?? '/',
107
+ serverUrl:
108
+ envObj['NODE_ENV'] === 'production'
109
+ ? 'https://localhost'
110
+ : httpsDevCertRoot
111
+ ? `https://localhost:${httpsDevPort}`
112
+ : 'http://localhost:3000',
113
+ // Avoid importing Application here to prevent circular deps
114
+ // Compute dist dir from process.cwd() directly
115
+ apiDistDir:
116
+ Environment.requireEnv<string>('API_DIST_DIR', envObj),
117
+ reactDistDir:
118
+ Environment.requireEnv<string>('REACT_DIST_DIR', envObj),
119
+ httpsDevCertRoot: httpsDevCertRoot,
120
+ httpsDevPort: httpsDevPort,
121
+ disableEmailSend:
122
+ envObj['DISABLE_EMAIL_SEND'] === 'true' ||
123
+ envObj['DISABLE_EMAIL_SEND'] === '1',
124
+ mongo: {
125
+ dbName: envObj['MONGO_DB_NAME'] ?? 'db',
126
+ uri:
127
+ envObj['MONGO_URI'] ??
128
+ `mongodb://db:27017/${envObj['MONGO_DB_NAME'] ?? 'db'}`,
129
+ setParameterSupported:
130
+ envObj['MONGO_SET_PARAMETER_SUPPORTED'] === 'true' ||
131
+ envObj['MONGO_SET_PARAMETER_SUPPORTED'] === '1',
132
+ transactionLifetimeLimitSecondsSupported:
133
+ envObj['MONGO_TRANSACTION_LIFETIME_LIMIT_SECONDS_SUPPORTED'] ===
134
+ 'true' ||
135
+ envObj['MONGO_TRANSACTION_LIFETIME_LIMIT_SECONDS_SUPPORTED'] === '1',
136
+ maxTransactionLockRequestTimeoutMillisSupported:
137
+ envObj[
138
+ 'MONGO_MAX_TRANSACTION_LOCK_REQUEST_TIMEOUT_MILLIS_SUPPORTED'
139
+ ] === 'true' ||
140
+ envObj[
141
+ 'MONGO_MAX_TRANSACTION_LOCK_REQUEST_TIMEOUT_MILLIS_SUPPORTED'
142
+ ] === '1',
143
+ maxPoolSize: envObj['MONGO_MAX_POOL_SIZE']
144
+ ? parseInt(envObj['MONGO_MAX_POOL_SIZE'])
145
+ : 10,
146
+ minPoolSize: envObj['MONGO_MIN_POOL_SIZE']
147
+ ? parseInt(envObj['MONGO_MIN_POOL_SIZE'])
148
+ : 2,
149
+ maxIdleTimeMS: envObj['MONGO_MAX_IDLE_TIME_MS']
150
+ ? parseInt(envObj['MONGO_MAX_IDLE_TIME_MS'])
151
+ : 30000,
152
+ serverSelectionTimeoutMS: envObj['MONGO_SERVER_SELECTION_TIMEOUT_MS']
153
+ ? parseInt(envObj['MONGO_SERVER_SELECTION_TIMEOUT_MS'])
154
+ : 5000,
155
+ socketTimeoutMS: envObj['MONGO_SOCKET_TIMEOUT_MS']
156
+ ? parseInt(envObj['MONGO_SOCKET_TIMEOUT_MS'])
157
+ : 45000,
158
+ retryWrites:
159
+ envObj['MONGO_RETRY_WRITES'] === 'false' ||
160
+ envObj['MONGO_RETRY_WRITES'] === '0'
161
+ ? false
162
+ : envObj['MONGO_RETRY_WRITES'] === 'true' ||
163
+ envObj['MONGO_RETRY_WRITES'] === '1' ||
164
+ true,
165
+ retryReads:
166
+ envObj['MONGO_RETRY_READS'] === 'false' ||
167
+ envObj['MONGO_RETRY_READS'] === '0'
168
+ ? false
169
+ : envObj['MONGO_RETRY_READS'] === 'true' ||
170
+ envObj['MONGO_RETRY_READS'] === '1' ||
171
+ true,
172
+ readConcern: { level: 'majority' },
173
+ writeConcern: { w: 'majority', j: true },
174
+ transactionTimeout: envObj['MONGO_TRANSACTION_TIMEOUT']
175
+ ? parseInt(envObj['MONGO_TRANSACTION_TIMEOUT'])
176
+ : DEFAULT_TRANSACTION_TIMEOUT,
177
+ transactionLockRequestTimeout: envObj[
178
+ 'MONGO_TRANSACTION_LOCK_REQUEST_TIMEOUT'
179
+ ]
180
+ ? parseInt(envObj['MONGO_TRANSACTION_LOCK_REQUEST_TIMEOUT'])
181
+ : DEFAULT_TRANSACTION_LOCK_REQUEST_TIMEOUT,
182
+ useTransactions:
183
+ envObj['MONGO_USE_TRANSACTIONS'] === 'true' ||
184
+ envObj['MONGO_USE_TRANSACTIONS'] === '1',
185
+ transactionRetryBaseDelay: envObj['MONGO_TRANSACTION_RETRY_BASE_DELAY']
186
+ ? parseInt(envObj['MONGO_TRANSACTION_RETRY_BASE_DELAY'])
187
+ : envObj['NODE_ENV'] === 'test'
188
+ ? 25
189
+ : 100,
190
+ },
191
+ adminMnemonic: new SecureString(envObj['ADMIN_MNEMONIC'] ?? null),
192
+ adminCreatedAt: envObj['ADMIN_CREATED_AT']
193
+ ? new Date(envObj['ADMIN_CREATED_AT'])
194
+ : new Date(),
195
+ adminId: envObj['ADMIN_ID']
196
+ ? new ObjectId(envObj['ADMIN_ID'])
197
+ : new ObjectId(),
198
+ adminPassword: envObj['ADMIN_PASSWORD']
199
+ ? new SecureString(envObj['ADMIN_PASSWORD'])
200
+ : undefined,
201
+ adminRoleId: envObj['ADMIN_ROLE_ID']
202
+ ? new ObjectId(envObj['ADMIN_ROLE_ID'])
203
+ : undefined,
204
+ adminUserRoleId: envObj['ADMIN_ROLE_ID']
205
+ ? new ObjectId(envObj['ADMIN_ROLE_ID'])
206
+ : undefined,
207
+ adminBackupCodes: envObj['ADMIN_BACKUP_CODES']
208
+ ? parseBackupCodes('admin', envObj)
209
+ : undefined,
210
+ memberMnemonic: new SecureString(envObj['MEMBER_MNEMONIC'] ?? null),
211
+ memberCreatedAt: envObj['MEMBER_CREATED_AT']
212
+ ? new Date(envObj['MEMBER_CREATED_AT'])
213
+ : new Date(),
214
+ memberId: envObj['MEMBER_ID']
215
+ ? new ObjectId(envObj['MEMBER_ID'])
216
+ : new ObjectId(),
217
+ memberPassword: envObj['MEMBER_PASSWORD']
218
+ ? new SecureString(envObj['MEMBER_PASSWORD'])
219
+ : undefined,
220
+ memberRoleId: envObj['MEMBER_ROLE_ID']
221
+ ? new ObjectId(envObj['MEMBER_ROLE_ID'])
222
+ : undefined,
223
+ memberUserRoleId: envObj['MEMBER_USER_ROLE_ID']
224
+ ? new ObjectId(envObj['MEMBER_USER_ROLE_ID'])
225
+ : undefined,
226
+ memberBackupCodes: envObj['MEMBER_BACKUP_CODES']
227
+ ? parseBackupCodes('member', envObj)
228
+ : undefined,
229
+ systemMnemonic: new SecureString(envObj['SYSTEM_MNEMONIC'] ?? null),
230
+ systemCreatedAt: envObj['SYSTEM_CREATED_AT']
231
+ ? new Date(envObj['SYSTEM_CREATED_AT'])
232
+ : new Date(),
233
+ systemId: envObj['SYSTEM_ID']
234
+ ? new ObjectId(envObj['SYSTEM_ID'])
235
+ : new ObjectId(),
236
+ systemPublicKeyHex: envObj['SYSTEM_PUBLIC_KEY'] ?? undefined,
237
+ systemPassword: envObj['SYSTEM_PASSWORD']
238
+ ? new SecureString(envObj['SYSTEM_PASSWORD'])
239
+ : undefined,
240
+ systemRoleId: envObj['SYSTEM_ROLE_ID']
241
+ ? new ObjectId(envObj['SYSTEM_ROLE_ID'])
242
+ : undefined,
243
+ systemUserRoleId: envObj['SYSTEM_ROLE_ID']
244
+ ? new ObjectId(envObj['SYSTEM_ROLE_ID'])
245
+ : undefined,
246
+ systemBackupCodes: envObj['SYSTEM_BACKUP_CODES']
247
+ ? parseBackupCodes('system', envObj)
248
+ : undefined,
249
+ mnemonicHmacSecret: new SecureBuffer(
250
+ Buffer.from(envObj['MNEMONIC_HMAC_SECRET'] ?? '', 'hex'),
251
+ ),
252
+ mnemonicEncryptionKey: new SecureBuffer(
253
+ Buffer.from(envObj['MNEMONIC_ENCRYPTION_KEY'] ?? '', 'hex'),
254
+ ),
255
+ timezone: setGlobalActiveContextAdminTimezoneFromProcessArgvOrEnv(),
256
+
257
+ // Set language last as it depends on process.env and argv
258
+ adminLanguage: setGlobalActiveContextAdminLanguageFromProcessArgvOrEnv(),
259
+ pbkdf2Iterations: parseInt(envObj['PBKDF2_ITERATIONS'] ?? '100000'),
260
+ production: envObj['NODE_ENV'] === 'production',
261
+ };
262
+ this._envObject = envObj;
263
+ // ensure all required environment variables are set
264
+ if (!this._environment.host) {
265
+ throw new Error(
266
+ getSuiteCoreTranslation(SuiteCoreStringKey.Admin_EnvNotSetTemplate, {
267
+ NAME: 'HOST',
268
+ }),
269
+ );
270
+ }
271
+ if (!this._environment.port) {
272
+ throw new Error(
273
+ getSuiteCoreTranslation(SuiteCoreStringKey.Admin_EnvNotSetTemplate, {
274
+ NAME: 'PORT',
275
+ }),
276
+ );
277
+ }
278
+ if (!this._environment.serverUrl) {
279
+ throw new Error(
280
+ getSuiteCoreTranslation(SuiteCoreStringKey.Admin_EnvNotSetTemplate, {
281
+ NAME: 'SERVER_URL',
282
+ }),
283
+ );
284
+ }
285
+ if (!this._environment.jwtSecret) {
286
+ throw new Error(
287
+ getSuiteCoreTranslation(SuiteCoreStringKey.Admin_EnvNotSetTemplate, {
288
+ NAME: 'JWT_SECRET',
289
+ }),
290
+ );
291
+ }
292
+ if (!this._environment.mongo.uri) {
293
+ throw new Error(
294
+ getSuiteCoreTranslation(SuiteCoreStringKey.Admin_EnvNotSetTemplate, {
295
+ NAME: 'MONGO_URI',
296
+ }),
297
+ );
298
+ }
299
+ if (!this._environment.emailSender) {
300
+ throw new Error(
301
+ getSuiteCoreTranslation(SuiteCoreStringKey.Admin_EnvNotSetTemplate, {
302
+ NAME: 'EMAIL_SENDER',
303
+ }),
304
+ );
305
+ }
306
+ if (!initialization && !this._environment.systemPublicKeyHex) {
307
+ throw new Error(
308
+ getSuiteCoreTranslation(SuiteCoreStringKey.Admin_EnvNotSetTemplate, {
309
+ NAME: 'SYSTEM_PUBLIC_KEY',
310
+ }),
311
+ );
312
+ }
313
+ if (this._environment.mnemonicHmacSecret.length !== 32) {
314
+ throw new Error('MNEMONIC_HMAC_SECRET must be a 64 character hex string');
315
+ }
316
+ if (this._environment.mnemonicEncryptionKey.length !== 32) {
317
+ throw new Error(
318
+ 'MNEMONIC_ENCRYPTION_KEY must be a 64 character hex string',
319
+ );
320
+ }
321
+ if (
322
+ this._environment.adminMnemonic?.value &&
323
+ !constants.MnemonicRegex.test(this._environment.adminMnemonic.value ?? '')
324
+ ) {
325
+ throw new Error('ADMIN_MNEMONIC must be a valid mnemonic phrase');
326
+ }
327
+ if (
328
+ this._environment.memberMnemonic?.value &&
329
+ !constants.MnemonicRegex.test(
330
+ this._environment.memberMnemonic.value ?? '',
331
+ )
332
+ ) {
333
+ throw new Error('MEMBER_MNEMONIC must be a valid mnemonic phrase');
334
+ }
335
+ if (!this._environment.apiDistDir) {
336
+ throw new Error(
337
+ getSuiteCoreTranslation(SuiteCoreStringKey.Admin_EnvNotSetTemplate, {
338
+ NAME: 'API_DIST_DIR',
339
+ }),
340
+ );
341
+ } else if (!existsSync(this._environment.apiDistDir)) {
342
+ throw new Error(
343
+ getSuiteCoreTranslation(
344
+ SuiteCoreStringKey.Admin_EnvDirSetButMissingTemplate,
345
+ {
346
+ VAR: 'API_DIST_DIR',
347
+ PATH: this._environment.apiDistDir,
348
+ },
349
+ ),
350
+ );
351
+ }
352
+ if (!this._environment.reactDistDir) {
353
+ throw new Error(
354
+ getSuiteCoreTranslation(SuiteCoreStringKey.Admin_EnvNotSetTemplate, {
355
+ NAME: 'REACT_DIST_DIR',
356
+ }),
357
+ );
358
+ } else if (!existsSync(this._environment.reactDistDir)) {
359
+ throw new Error(
360
+ getSuiteCoreTranslation(
361
+ SuiteCoreStringKey.Admin_EnvDirSetButMissingTemplate,
362
+ {
363
+ VAR: 'REACT_DIST_DIR',
364
+ PATH: this._environment.reactDistDir,
365
+ },
366
+ ),
367
+ );
368
+ }
369
+ if (this.pbkdf2Iterations < 1) {
370
+ throw new Error('PBKDF2_ITERATIONS must be greater than 0');
371
+ }
372
+ }
373
+
374
+ public has(key: string): boolean {
375
+ return Object.prototype.hasOwnProperty.call(this._envObject, key);
376
+ }
377
+
378
+ public get(key: string): string | undefined {
379
+ return this.has(key) ? String((this._envObject as any)[key]) : undefined;
380
+ }
381
+
382
+ public setEnvironment(key: string, value: any): void {
383
+ // keys are optionally dotted strings for nested objects within the IEnvironment such as mongo.uri
384
+ const keys = key.split('.');
385
+ let obj: any = this._environment;
386
+ for (let i = 0; i < keys.length - 1; i++) {
387
+ obj = obj[keys[i]];
388
+ }
389
+ obj[keys[keys.length - 1]] = value;
390
+ }
391
+
392
+ public getObject(): object {
393
+ return this._envObject;
394
+ }
395
+
396
+ /**
397
+ * Whether to print certain console debug messages and enable certain debug features
398
+ */
399
+ public get debug(): boolean {
400
+ return this._environment.debug;
401
+ }
402
+
403
+ /**
404
+ * Whether to use a development database (eg with less durability and security for ease of local dev)
405
+ */
406
+ public get devDatabase(): string | undefined {
407
+ return this._environment.devDatabase;
408
+ }
409
+
410
+ public get detailedDebug(): boolean {
411
+ return this._environment.detailedDebug;
412
+ }
413
+
414
+ /**
415
+ * The hostname of this server
416
+ */
417
+ public get host(): string {
418
+ return this._environment.host;
419
+ }
420
+
421
+ /**
422
+ * The primary port of this server
423
+ */
424
+ public get port(): number {
425
+ return this._environment.port;
426
+ }
427
+
428
+ /**
429
+ * The JWT secret of this server
430
+ */
431
+ public get jwtSecret(): string {
432
+ return this._environment.jwtSecret;
433
+ }
434
+
435
+ /**
436
+ * The email sernder for this site
437
+ */
438
+ public get emailSender(): string {
439
+ return this._environment.emailSender;
440
+ }
441
+
442
+ /**
443
+ * The base path of the express http server (eg /)
444
+ */
445
+ public get basePath(): string {
446
+ return this._environment.basePath;
447
+ }
448
+
449
+ /**
450
+ * The full URL to the server
451
+ */
452
+ public get serverUrl(): string {
453
+ return this._environment.serverUrl;
454
+ }
455
+
456
+ /**
457
+ * The path to the API dist directory
458
+ */
459
+ public get apiDistDir(): string {
460
+ return this._environment.apiDistDir;
461
+ }
462
+
463
+ /**
464
+ * The path to the react dist directory
465
+ */
466
+ public get reactDistDir(): string {
467
+ return this._environment.reactDistDir;
468
+ }
469
+
470
+ /**
471
+ * The directory + cert root name (eg /workspaces/myapp/locahost+2) to store HTTPS development certificates
472
+ */
473
+ public get httpsDevCertRoot(): string | undefined {
474
+ return this._environment.httpsDevCertRoot;
475
+ }
476
+
477
+ /**
478
+ * The port to use for development HTTPS
479
+ */
480
+ public get httpsDevPort(): number {
481
+ return this._environment.httpsDevPort;
482
+ }
483
+
484
+ /**
485
+ * Whether to disable email sending
486
+ */
487
+ public get disableEmailSend(): boolean {
488
+ return this._environment.disableEmailSend;
489
+ }
490
+
491
+ /**
492
+ * The MongoDB configuration (primarily for transactions)
493
+ */
494
+ public get mongo(): IMongoEnvironment {
495
+ return this._environment.mongo;
496
+ }
497
+
498
+ /**
499
+ * The admin user's mnemonic used to encrypt all files
500
+ */
501
+ public get adminMnemonic(): SecureString | undefined {
502
+ return this._environment.adminMnemonic;
503
+ }
504
+
505
+ /**
506
+ * The date the admin user was created
507
+ */
508
+ public get adminCreatedAt(): Date | undefined {
509
+ return this._environment.adminCreatedAt;
510
+ }
511
+
512
+ /**
513
+ * The ID of the admin user
514
+ */
515
+ public get adminId(): Types.ObjectId | undefined {
516
+ return this._environment.adminId;
517
+ }
518
+
519
+ /**
520
+ * The password of the admin user
521
+ */
522
+ public get adminPassword(): SecureString | undefined {
523
+ return this._environment.adminPassword;
524
+ }
525
+
526
+ /**
527
+ * The role ID of the admin user
528
+ */
529
+ public get adminRoleId(): Types.ObjectId | undefined {
530
+ return this._environment.adminRoleId;
531
+ }
532
+
533
+ /**
534
+ * The user role ID of the admin user
535
+ */
536
+ public get adminUserRoleId(): Types.ObjectId | undefined {
537
+ return this._environment.adminUserRoleId;
538
+ }
539
+
540
+ /**
541
+ * Backup codes for the admin user
542
+ */
543
+ public get adminBackupCodes(): BackupCode[] | undefined {
544
+ return this._environment.adminBackupCodes;
545
+ }
546
+
547
+ /**
548
+ * The test member user's mnemonic used to encrypt all files
549
+ */
550
+ public get memberMnemonic(): SecureString | undefined {
551
+ return this._environment.memberMnemonic;
552
+ }
553
+
554
+ /**
555
+ * The date the member user was created
556
+ */
557
+ public get memberCreatedAt(): Date | undefined {
558
+ return this._environment.memberCreatedAt;
559
+ }
560
+
561
+ /**
562
+ * The date the member user was created
563
+ */
564
+ public get memberId(): Types.ObjectId | undefined {
565
+ return this._environment.memberId;
566
+ }
567
+
568
+ /**
569
+ * The password of the member user
570
+ */
571
+ public get memberPassword(): SecureString | undefined {
572
+ return this._environment.memberPassword;
573
+ }
574
+
575
+ /**
576
+ * The role ID of the member user
577
+ */
578
+ public get memberRoleId(): Types.ObjectId | undefined {
579
+ return this._environment.memberRoleId;
580
+ }
581
+
582
+ /**
583
+ * The user role ID of the member user
584
+ */
585
+ public get memberUserRoleId(): Types.ObjectId | undefined {
586
+ return this._environment.memberUserRoleId;
587
+ }
588
+
589
+ /**
590
+ * Backup codes for the member user
591
+ */
592
+ public get memberBackupCodes(): BackupCode[] | undefined {
593
+ return this._environment.memberBackupCodes;
594
+ }
595
+
596
+ /**
597
+ * The system user's mnemonic used to encrypt all files
598
+ */
599
+ public get systemMnemonic(): SecureString | undefined {
600
+ return this._environment.systemMnemonic;
601
+ }
602
+
603
+ /**
604
+ * The date the system user was created
605
+ */
606
+ public get systemCreatedAt(): Date | undefined {
607
+ return this._environment.systemCreatedAt;
608
+ }
609
+
610
+ /**
611
+ * The ID of the system user
612
+ */
613
+ public get systemId(): Types.ObjectId | undefined {
614
+ return this._environment.systemId;
615
+ }
616
+
617
+ /**
618
+ * The public key of the system user
619
+ */
620
+ public get systemPublicKeyHex(): string | undefined {
621
+ return this._environment.systemPublicKeyHex;
622
+ }
623
+
624
+ /**
625
+ * The password of the system user
626
+ */
627
+ public get systemPassword(): SecureString | undefined {
628
+ return this._environment.systemPassword;
629
+ }
630
+
631
+ /**
632
+ * The role ID of the system user
633
+ */
634
+ public get systemRoleId(): Types.ObjectId | undefined {
635
+ return this._environment.systemRoleId;
636
+ }
637
+
638
+ /**
639
+ * The user role ID of the system user
640
+ */
641
+ public get systemUserRoleId(): Types.ObjectId | undefined {
642
+ return this._environment.systemUserRoleId;
643
+ }
644
+
645
+ /**
646
+ * Backup codes for the system user
647
+ */
648
+ public get systemBackupCodes(): BackupCode[] | undefined {
649
+ return this._environment.systemBackupCodes;
650
+ }
651
+
652
+ /**
653
+ * The system's HMAC secret for the mnemonic tracking collection
654
+ */
655
+ public get mnemonicHmacSecret(): SecureBuffer {
656
+ return this._environment.mnemonicHmacSecret;
657
+ }
658
+
659
+ /**
660
+ * The system's HMAC encryption key for the mnemonic tracking collection
661
+ */
662
+ public get mnemonicEncryptionKey(): SecureBuffer {
663
+ return this._environment.mnemonicEncryptionKey;
664
+ }
665
+
666
+ /**
667
+ * The timezone for the server
668
+ */
669
+ public get timezone(): Timezone {
670
+ return this._environment.timezone;
671
+ }
672
+
673
+ public get adminLanguage(): string {
674
+ return this._environment.adminLanguage;
675
+ }
676
+
677
+ /**
678
+ * The number of pbkdf2 iterations for key wrapping
679
+ */
680
+ public get pbkdf2Iterations(): number {
681
+ return this._environment.pbkdf2Iterations;
682
+ }
683
+
684
+ /**
685
+ * Whether this is a production environment
686
+ */
687
+ public get production(): boolean {
688
+ return this._environment.production;
689
+ }
690
+
691
+ /**
692
+ * Console dump the environment variables for debugging purposes
693
+ */
694
+ public dumpEnvironment(logLevel: DEBUG_TYPE = 'log'): void {
695
+ debugLog(
696
+ true,
697
+ logLevel,
698
+ `Environment Variables:
699
+ -------------------------
700
+ DEBUG: ${this.debug}
701
+ DETAILED_DEBUG: ${this.detailedDebug}
702
+ HOST: ${this.host}
703
+ PORT: ${this.port}
704
+ JWT_SECRET: ${this.jwtSecret}
705
+ EMAIL_SENDER: ${this.emailSender}
706
+ BASE_PATH: ${this.basePath}
707
+ SERVER_URL: ${this.serverUrl}
708
+ API_DIST_DIR: ${this.apiDistDir}
709
+ REACT_DIST_DIR: ${this.reactDistDir}
710
+ DISABLE_EMAIL_SEND: ${this.disableEmailSend}
711
+ TIMEZONE: ${this.timezone.value}
712
+ Mongo:
713
+ -- URI: ${this.mongo.uri}
714
+ -- USE_TRANSACTIONS: ${this.mongo.useTransactions ? 'true' : 'false'}
715
+ -- SET_PARAMETER_SUPPORTED: ${this.mongo.setParameterSupported}
716
+ -- TRANSACTION_LIFETIME_LIMIT_SECONDS_SUPPORTED: ${
717
+ this.mongo.transactionLifetimeLimitSecondsSupported
718
+ }
719
+ -- MAX_TRANSACTION_LOCK_REQUEST_TIMEOUT_MILLIS_SUPPORTED: ${
720
+ this.mongo.maxTransactionLockRequestTimeoutMillisSupported
721
+ }
722
+ -- MAX_POOL_SIZE: ${this.mongo.maxPoolSize}
723
+ -- MIN_POOL_SIZE: ${this.mongo.minPoolSize}
724
+ -- MAX_IDLE_TIME_MS: ${this.mongo.maxIdleTimeMS}
725
+ -- SERVER_SELECTION_TIMEOUT_MS: ${this.mongo.serverSelectionTimeoutMS}
726
+ -- SOCKET_TIMEOUT_MS: ${this.mongo.socketTimeoutMS}
727
+ -- RETRY_WRITES: ${this.mongo.retryWrites ? 'true' : 'false'}
728
+ -- RETRY_READS: ${this.mongo.retryReads ? 'true' : 'false'}
729
+ -- TRANSACTION_TIMEOUT: ${this.mongo.transactionTimeout}
730
+ -- TRANSACTION_LOCK_REQUEST_TIMEOUT: ${this.mongo.transactionLockRequestTimeout}
731
+ LANGUAGE: ${this.adminLanguage}
732
+ Admin User Data:
733
+ -- ADMIN_ID: ${this.adminId?.toString()}
734
+ -- ADMIN_CREATED_AT: ${this.adminCreatedAt?.toISOString()}
735
+ -- ADMIN_MNEMONIC: ${this.adminMnemonic?.value}
736
+ -- ADMIN_PASSWORD: ${this.adminPassword?.value}
737
+ -- ADMIN_ROLE_ID: ${this.adminRoleId?.toString()}
738
+ -- ADMIN_ROLE_ID: ${this.adminUserRoleId?.toString()}
739
+ -- ADMIN_BACKUP_CODES: ${this.adminBackupCodes
740
+ ?.map((code: SecureString) => code.value)
741
+ .join(', ')}
742
+ Member User Data:
743
+ -- MEMBER_ID: ${this.memberId?.toString()}
744
+ -- MEMBER_CREATED_AT: ${this.memberCreatedAt?.toISOString()}
745
+ -- MEMBER_MNEMONIC: ${this.adminMnemonic?.value}
746
+ -- MEMBER_PASSWORD: ${this.memberPassword?.value}
747
+ -- MEMBER_ROLE_ID: ${this.memberRoleId?.toString()}
748
+ -- MEMBER_USER_ROLE_ID: ${this.memberUserRoleId?.toString()}
749
+ -- MEMBER_BACKUP_CODES: ${this.memberBackupCodes
750
+ ?.map((code: SecureString) => code.value)
751
+ .join(', ')}
752
+ System User Data:
753
+ -- SYSTEM_ID: ${this.systemId?.toString()}
754
+ -- SYSTEM_CREATED_AT: ${this.systemCreatedAt?.toISOString()}
755
+ -- SYSTEM_MNEMONIC: ${this.systemMnemonic?.value}
756
+ -- SYSTEM_PUBLIC_KEY: ${this.systemPublicKeyHex}
757
+ -- SYSTEM_PASSWORD: ${this.systemPassword?.value}
758
+ -- SYSTEM_ROLE_ID: ${this.systemRoleId?.toString()}
759
+ -- SYSTEM_ROLE_ID: ${this.systemUserRoleId?.toString()}
760
+ -- SYSTEM_BACKUP_CODES: ${this.systemBackupCodes
761
+ ?.map((code: SecureString) => code.value)
762
+ .join(', ')}
763
+ Mnemonic Service Configuration:
764
+ -- MNEMONIC_HMAC_SECRET: ${this.mnemonicHmacSecret.valueAsHexString}
765
+ -- MNEMONIC_ENCRYPTION_KEY: ${this.mnemonicEncryptionKey.valueAsHexString}
766
+ PBKDF2 Iterations: ${this.pbkdf2Iterations}
767
+ -------------------------`,
768
+ );
769
+ }
770
+ }