@digitaldefiance/node-express-suite 1.0.22 → 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 +4 -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 -1373
  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
package/dist/utils.js DELETED
@@ -1,786 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.DEFAULT_TRANSACTION_LOCK_REQUEST_TIMEOUT = exports.DEFAULT_TRANSACTION_TIMEOUT = exports.DEFAULT_RETRY_ATTEMPTS = void 0;
7
- exports.debugLog = debugLog;
8
- exports.getValueAtPath = getValueAtPath;
9
- exports.mapZodIssuesToValidationErrors = mapZodIssuesToValidationErrors;
10
- exports.requireValidatedFieldsAsync = requireValidatedFieldsAsync;
11
- exports.requireOneOfValidatedFieldsAsync = requireOneOfValidatedFieldsAsync;
12
- exports.requireValidatedFieldsOrThrow = requireValidatedFieldsOrThrow;
13
- exports.isValidStringId = isValidStringId;
14
- exports.getDefaultBaseDelay = getDefaultBaseDelay;
15
- exports.withTransaction = withTransaction;
16
- exports.sendApiMessageResponse = sendApiMessageResponse;
17
- exports.sendApiErrorResponse = sendApiErrorResponse;
18
- exports.sendApiExpressValidationErrorResponse = sendApiExpressValidationErrorResponse;
19
- exports.sendApiMongoValidationErrorResponse = sendApiMongoValidationErrorResponse;
20
- exports.sendRawJsonResponse = sendRawJsonResponse;
21
- exports.handleError = handleError;
22
- exports.locatePEMRoot = locatePEMRoot;
23
- exports.lengthEncodeData = lengthEncodeData;
24
- exports.decodeLengthEncodedData = decodeLengthEncodedData;
25
- exports.isValidTimezone = isValidTimezone;
26
- exports.omit = omit;
27
- exports.validateEnumCollection = validateEnumCollection;
28
- exports.uint8ArrayToBase64 = uint8ArrayToBase64;
29
- exports.base64ToUint8Array = base64ToUint8Array;
30
- exports.uint8ArrayToHex = uint8ArrayToHex;
31
- exports.hexToUint8Array = hexToUint8Array;
32
- exports.crc16 = crc16;
33
- exports.stringToUint8Array = stringToUint8Array;
34
- exports.uint8ArrayToString = uint8ArrayToString;
35
- exports.randomBytes = randomBytes;
36
- exports.arraysEqual = arraysEqual;
37
- exports.concatUint8Arrays = concatUint8Arrays;
38
- exports.getLengthEncodingTypeForLength = getLengthEncodingTypeForLength;
39
- exports.getLengthEncodingTypeFromValue = getLengthEncodingTypeFromValue;
40
- exports.getLengthForLengthType = getLengthForLengthType;
41
- exports.parseBackupCodes = parseBackupCodes;
42
- /// <reference path="./types.d.ts" />
43
- const i18n_lib_1 = require("@digitaldefiance/i18n-lib");
44
- const express_validator_1 = require("express-validator");
45
- const fs_1 = require("fs");
46
- const mongoose_1 = require("mongoose");
47
- const path_1 = require("path");
48
- const zod_1 = require("zod");
49
- const express_validation_1 = require("./errors/express-validation");
50
- const mongoose_validation_1 = require("./errors/mongoose-validation");
51
- /**
52
- * Optionally prints certain debug messages
53
- * @param debug Whether to print debug messages
54
- * @param type What type of message to print
55
- * @param args Any args to print
56
- */
57
- function debugLog(debug, type = 'log', ...args) {
58
- if (debug && type === 'error') {
59
- console.error(...args);
60
- }
61
- else if (debug && type === 'warn') {
62
- console.warn(...args);
63
- }
64
- else if (debug && type === 'log') {
65
- console.log(...args);
66
- }
67
- }
68
- // Helper: get value at a dotted path from an object
69
- function getValueAtPath(obj, path) {
70
- return path.reduce((acc, key) => {
71
- if (acc == null)
72
- return undefined;
73
- try {
74
- return acc[key];
75
- }
76
- catch {
77
- return undefined;
78
- }
79
- }, obj);
80
- }
81
- // Helper: map Zod issues to express-validator ValidationError[]
82
- function mapZodIssuesToValidationErrors(issues, source, location = 'body') {
83
- return issues.map((issue) => ({
84
- type: 'field',
85
- location,
86
- path: issue.path
87
- .filter((p) => typeof p === 'string' || typeof p === 'number')
88
- .join('.'),
89
- value: getValueAtPath(source, issue.path),
90
- msg: issue.message,
91
- }));
92
- }
93
- /**
94
- * Verifies the required fields were validated by express-validator and sends an error response if not or calls the callback if they are
95
- * @param req The request object
96
- * @param fields The fields to check
97
- * @param callback The callback to call if the fields are valid
98
- * @returns The result of the callback
99
- */
100
- async function requireValidatedFieldsAsync(req, schema, callback) {
101
- if (req.validatedBody === undefined) {
102
- throw new errors_1.MissingValidatedDataError();
103
- }
104
- try {
105
- const validatedData = schema.parse(req.validatedBody);
106
- return await callback(validatedData);
107
- }
108
- catch (error) {
109
- if (error instanceof zod_1.z.ZodError) {
110
- throw new express_validation_1.ExpressValidationError(mapZodIssuesToValidationErrors(error.issues, req.validatedBody ?? {}, 'body'));
111
- }
112
- throw error;
113
- }
114
- }
115
- /**
116
- * Verifies at least one of the required fields were validated by express-validator and sends an error response if not or calls the callback if they are
117
- * @param req The request object
118
- * @param fields The fields to check
119
- * @param callback The callback to call if the fields are valid
120
- * @returns The result of the callback
121
- */
122
- async function requireOneOfValidatedFieldsAsync(req, fields, callback) {
123
- if (req.validatedBody === undefined) {
124
- throw new errors_1.MissingValidatedDataError();
125
- }
126
- const validatedBody = req.validatedBody;
127
- if (!fields.some((field) => validatedBody?.[field] !== undefined)) {
128
- throw new errors_1.MissingValidatedDataError(fields);
129
- }
130
- return await callback();
131
- }
132
- /**
133
- * Verifies the required fields were validated by express-validator and throws an error if not or calls the callback if they are
134
- * @param req The request object
135
- * @param fields The fields to check
136
- * @param callback The callback to call if the fields are valid
137
- * @returns The result of the callback
138
- */
139
- function requireValidatedFieldsOrThrow(req, fields, callback) {
140
- if (req.validatedBody === undefined) {
141
- throw new errors_1.MissingValidatedDataError();
142
- }
143
- const validatedBody = req.validatedBody;
144
- fields.forEach((field) => {
145
- if (validatedBody[field] === undefined) {
146
- throw new errors_1.MissingValidatedDataError(field);
147
- }
148
- });
149
- return callback();
150
- }
151
- /**
152
- * Checks if the given id is a valid string id
153
- * @param id The id to check
154
- * @returns True if the id is a valid string id
155
- */
156
- function isValidStringId(id) {
157
- return typeof id === 'string' && mongoose_1.Types.ObjectId.isValid(id);
158
- }
159
- /**
160
- * The default number of retry attempts for transactions
161
- * Use fewer retries in test environment for faster feedback
162
- */
163
- exports.DEFAULT_RETRY_ATTEMPTS = process.env['NODE_ENV'] === 'test' ? 2 : 3;
164
- /**
165
- * The default transaction timeout in milliseconds
166
- * Use shorter timeout in test environment for faster failure detection
167
- */
168
- exports.DEFAULT_TRANSACTION_TIMEOUT = process.env['NODE_ENV'] === 'test' ? 15000 : 60000;
169
- /**
170
- * The default transaction lock request timeout in milliseconds
171
- */
172
- exports.DEFAULT_TRANSACTION_LOCK_REQUEST_TIMEOUT = process.env['NODE_ENV'] === 'test' ? 10000 : 30000;
173
- /**
174
- * Gets the default base delay for transaction retries from environment variables
175
- * @returns The base delay in milliseconds
176
- */
177
- function getDefaultBaseDelay() {
178
- const envValue = process.env['MONGO_TRANSACTION_RETRY_BASE_DELAY'];
179
- if (envValue) {
180
- const parsed = parseInt(envValue);
181
- if (!isNaN(parsed) && parsed > 0) {
182
- return parsed;
183
- }
184
- }
185
- // Fallback to hardcoded values if environment variable is not set or invalid
186
- return process.env['NODE_ENV'] === 'test' ? 25 : 100;
187
- }
188
- /**
189
- * Wraps a callback in a transaction if necessary
190
- * @param connection The mongoose connection
191
- * @param useTransaction Whether to use a transaction
192
- * @param session The session to use
193
- * @param callback The callback to wrap
194
- * @param options Transaction options including timeout and retry attempts
195
- * @param args The arguments to pass to the callback
196
- * @returns The result of the callback
197
- */
198
- async function withTransaction(connection, useTransaction, session, callback, options = {}, ...args) {
199
- const engine = (0, suite_core_lib_1.getSuiteCoreI18nEngine)();
200
- const isTestEnvironment = process.env['NODE_ENV'] === 'test';
201
- const { timeoutMs = exports.DEFAULT_TRANSACTION_TIMEOUT, retryAttempts = exports.DEFAULT_RETRY_ATTEMPTS, // Use consistent retry attempts
202
- baseDelay = getDefaultBaseDelay(), debugLogEnabled, } = options;
203
- if (!useTransaction) {
204
- return await callback(session, undefined, ...args);
205
- }
206
- const needSession = useTransaction && session === undefined;
207
- const client = connection.getClient();
208
- if (!client) {
209
- // If no client is available, fall back to non-transactional execution
210
- debugLog(debugLogEnabled === true, 'warn', engine.translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Admin_NoMongoDbClientFoundFallingBack));
211
- return await callback(session, undefined, ...args);
212
- }
213
- let attempt = 0;
214
- while (attempt < retryAttempts) {
215
- const s = needSession ? await client.startSession() : session;
216
- try {
217
- if (needSession && s !== undefined) {
218
- await s.startTransaction({
219
- maxCommitTimeMS: timeoutMs,
220
- });
221
- }
222
- // Race the callback against the timeout
223
- const timeoutPromise = new Promise((_, reject) => {
224
- setTimeout(() => {
225
- reject(new Error(engine.translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Admin_TransactionTimeoutTemplate, { timeMs: timeoutMs })));
226
- }, timeoutMs);
227
- });
228
- const result = await Promise.race([callback(s, ...args), timeoutPromise]);
229
- if (needSession && s !== undefined)
230
- await s.commitTransaction();
231
- return result;
232
- }
233
- catch (error) {
234
- if (needSession && s !== undefined && s.inTransaction())
235
- await s.abortTransaction();
236
- // Check if this is a transient transaction error that can be retried
237
- const isTransientError = error?.errorLabelSet?.has('TransientTransactionError') ||
238
- error?.errorLabelSet?.has('UnknownTransactionCommitResult') ||
239
- error?.code === 251 || // NoSuchTransaction
240
- error?.code === 112 || // WriteConflict
241
- error?.code === 11000 || // DuplicateKey - very common in concurrent initialization
242
- error?.code === 16500 || // TransactionAborted
243
- error?.code === 244 || // TransactionTooOld
244
- error?.code === 246 || // ExceededTimeLimit
245
- error?.code === 13436 || // TransactionTooLargeForCache
246
- error?.code === 50 || // MaxTimeMSExpired
247
- error?.message?.includes('Transaction') ||
248
- error?.message?.includes('aborted') ||
249
- error?.message?.includes('WriteConflict') ||
250
- error?.message?.includes('NoSuchTransaction') ||
251
- error?.message?.includes('TransactionTooOld') ||
252
- error?.message?.includes('ExceededTimeLimit') ||
253
- error?.message?.includes('duplicate key error') ||
254
- error?.message?.includes('E11000') ||
255
- (error?.code === 11000 && error?.message?.includes('duplicate')); // More specific duplicate key handling
256
- if (isTransientError && attempt < retryAttempts - 1) {
257
- attempt++;
258
- const jitter = Math.random() * 0.3; // Reduced jitter
259
- const actualBaseDelay = isTestEnvironment
260
- ? Math.floor(baseDelay * 0.5)
261
- : baseDelay; // Shorter base delay in tests
262
- const delay = Math.floor(actualBaseDelay * (1 + attempt * 0.5) * (1 + jitter)); // Linear backoff instead of exponential
263
- debugLog(debugLogEnabled === true, 'warn', engine.translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Admin_TransactionFailedTransientTemplate, {
264
- delayMs: delay,
265
- attempt,
266
- attempts: retryAttempts,
267
- }, undefined));
268
- await new Promise((resolve) => setTimeout(resolve, delay));
269
- continue;
270
- }
271
- throw error;
272
- }
273
- finally {
274
- if (needSession && s !== undefined)
275
- await s.endSession();
276
- }
277
- }
278
- const jitter = Math.random() * 0.3; // Reduced jitter
279
- const actualBaseDelay = isTestEnvironment
280
- ? Math.floor(baseDelay * 0.5)
281
- : baseDelay; // Shorter base delay in tests
282
- const delay = Math.floor(actualBaseDelay * (1 + attempt * 0.5) * (1 + jitter)); // Linear backoff instead of exponential
283
- throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Admin_TransactionFailedTransientTemplate, {
284
- delayMs: delay,
285
- attempt,
286
- attempts: retryAttempts,
287
- });
288
- }
289
- /**
290
- * Sends an API response with the given status and response object.
291
- * @param status
292
- * @param response
293
- * @param res
294
- */
295
- function sendApiMessageResponse(status, response, res) {
296
- res.status(status).json(response);
297
- }
298
- /**
299
- * Sends an API response with the given status, message, and error.
300
- * @param status
301
- * @param message
302
- * @param error
303
- * @param res
304
- */
305
- function sendApiErrorResponse(status, message, error, res) {
306
- sendApiMessageResponse(status, { message, error }, res);
307
- }
308
- /**
309
- * Sends an API response with the given status and validation errors.
310
- * @param status
311
- * @param errors
312
- * @param res
313
- */
314
- function sendApiExpressValidationErrorResponse(status, errors, res) {
315
- const engine = (0, suite_core_lib_1.getSuiteCoreI18nEngine)();
316
- sendApiMessageResponse(status, {
317
- message: engine.translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.ValidationError),
318
- errors,
319
- }, res);
320
- }
321
- /**
322
- * Sends an API response with the given status, message, and MongoDB validation errors.
323
- * @param status
324
- * @param message
325
- * @param errors
326
- * @param res
327
- */
328
- function sendApiMongoValidationErrorResponse(status, message, errors, res) {
329
- sendApiMessageResponse(status, { message, errors }, res);
330
- }
331
- /**
332
- * Sends a raw JSON response with the given status and response object.
333
- * @param status The status code
334
- * @param response The response data
335
- * @param res The response object
336
- */
337
- function sendRawJsonResponse(status, response, res) {
338
- res.status(status).json(response);
339
- }
340
- function isRecursiveError(error) {
341
- return (error !== null &&
342
- typeof error === 'object' &&
343
- '_handlingInProgress' in error &&
344
- !!error._handlingInProgress);
345
- }
346
- function markErrorAsHandling(error) {
347
- if (error && typeof error === 'object') {
348
- error._handlingInProgress = true;
349
- }
350
- }
351
- function getSafeErrorMessage(message) {
352
- if (message && typeof message === 'string' && message.trim() !== '') {
353
- return message;
354
- }
355
- const engine = (0, suite_core_lib_1.getSuiteCoreI18nEngine)();
356
- try {
357
- const translated = engine.translate(suite_core_lib_1.SuiteCoreComponentId, suite_core_lib_1.SuiteCoreStringKey.Common_UnexpectedError);
358
- return translated &&
359
- typeof translated === 'string' &&
360
- translated.trim() !== ''
361
- ? translated
362
- : 'An unexpected error occurred';
363
- }
364
- catch {
365
- return 'An unexpected error occurred';
366
- }
367
- }
368
- function convertToHandleableError(error) {
369
- if (error instanceof i18n_lib_2.HandleableError) {
370
- return {
371
- handleableError: error,
372
- alreadyHandled: error.handled,
373
- errorType: error.name,
374
- };
375
- }
376
- if (error instanceof Error) {
377
- return {
378
- handleableError: new i18n_lib_2.HandleableError(error),
379
- alreadyHandled: false,
380
- errorType: error.name,
381
- };
382
- }
383
- const unknownMessage = getSafeErrorMessage(typeof error === 'object' &&
384
- error !== null &&
385
- 'message' in error
386
- ? error['message']
387
- : undefined);
388
- const unknownError = new Error(unknownMessage);
389
- return {
390
- handleableError: new i18n_lib_2.HandleableError(unknownError, { sourceData: error }),
391
- alreadyHandled: false,
392
- errorType: 'UnexpectedError',
393
- };
394
- }
395
- function sendErrorResponse(error, handleableError, errorType, send, res) {
396
- const engine = i18n_lib_1.I18nEngine.getInstance();
397
- if (error instanceof express_validation_1.ExpressValidationError) {
398
- // amazonq-ignore-next-line false positive
399
- send(handleableError.statusCode, {
400
- message: engine.translate('ValidationError'),
401
- errors: error.errors instanceof express_validator_1.Result ? error.errors.array() : error.errors,
402
- errorType: 'ExpressValidationError',
403
- }, res);
404
- }
405
- else if (error instanceof mongoose_validation_1.MongooseValidationError) {
406
- // amazonq-ignore-next-line false positive
407
- send(handleableError.statusCode, {
408
- message: engine.translate('ValidationError'),
409
- errors: error.errors,
410
- errorType: 'MongooseValidationError',
411
- }, res);
412
- }
413
- else {
414
- // amazonq-ignore-next-line false positive
415
- send(handleableError.statusCode, {
416
- message: handleableError.message,
417
- error: handleableError,
418
- errorType: errorType,
419
- }, res);
420
- }
421
- }
422
- function handleError(error, res, send, next) {
423
- if (isRecursiveError(error)) {
424
- const fallbackError = new i18n_lib_2.HandleableError(new Error('Recursive error handling detected'));
425
- // amazonq-ignore-next-line false positive
426
- send(fallbackError.statusCode, {
427
- message: fallbackError.message,
428
- error: fallbackError,
429
- errorType: 'RecursiveError',
430
- }, res);
431
- return;
432
- }
433
- markErrorAsHandling(error);
434
- const { handleableError, alreadyHandled, errorType } = convertToHandleableError(error);
435
- if (!(error instanceof express_validation_1.ExpressValidationError)) {
436
- console.error('[handleError]', 'type=' + errorType.replace(/[\r\n]/g, ''), 'status=' + String(handleableError.statusCode).replace(/[\r\n]/g, ''), 'message=' +
437
- (handleableError.message || '')
438
- .replace(/[\r\n]/g, ''));
439
- }
440
- if (!res.headersSent) {
441
- sendErrorResponse(error, handleableError, errorType, send, res);
442
- handleableError.handled = true;
443
- }
444
- if (!alreadyHandled) {
445
- handleableError.handled = true;
446
- next(handleableError);
447
- }
448
- }
449
- function locatePEMRoot(devRootDir) {
450
- try {
451
- const normalizedDir = (0, path_1.resolve)(devRootDir);
452
- if (normalizedDir.includes('..') || !normalizedDir.startsWith((0, path_1.resolve)('.'))) {
453
- return undefined;
454
- }
455
- const files = (0, fs_1.readdirSync)(normalizedDir);
456
- const pemFiles = files.filter((file) =>
457
- // Prevent path traversal by rejecting files with path separators
458
- !file.includes('/') &&
459
- !file.includes('\\') &&
460
- !file.includes('..') &&
461
- (file.match(/localhost\+\d+-key\.pem$/) ||
462
- file.match(/localhost\+\d+\.pem$/)));
463
- if (pemFiles.length < 2) {
464
- return undefined;
465
- }
466
- const roots = pemFiles.map((file) => {
467
- const resolved = (0, path_1.resolve)(normalizedDir, file);
468
- if (!resolved.startsWith(normalizedDir)) {
469
- return undefined;
470
- }
471
- const result = /(.*)\/(localhost\+\d+)(.*)\.pem/.exec(resolved);
472
- return result ? `${result[1]}/${result[2]}` : undefined;
473
- });
474
- if (roots.some((root) => root !== roots[0])) {
475
- return undefined;
476
- }
477
- if (!(0, fs_1.existsSync)(roots[0] + '.pem') || !(0, fs_1.existsSync)(roots[0] + '-key.pem')) {
478
- return undefined;
479
- }
480
- return roots[0];
481
- }
482
- catch {
483
- return undefined;
484
- }
485
- }
486
- /**
487
- * Encodes the length of the data in the buffer
488
- * @param buffer The buffer to encode
489
- * @returns The encoded buffer
490
- */
491
- function lengthEncodeData(buffer) {
492
- const lengthType = getLengthEncodingTypeForLength(buffer.length);
493
- const lengthTypeSize = getLengthForLengthType(lengthType);
494
- const result = Buffer.alloc(1 + lengthTypeSize + buffer.length);
495
- result.writeUInt8(lengthType, 0);
496
- switch (lengthType) {
497
- case length_encoding_type_1.LengthEncodingType.UInt8:
498
- result.writeUInt8(buffer.length, 1);
499
- break;
500
- case length_encoding_type_1.LengthEncodingType.UInt16:
501
- result.writeUInt16BE(buffer.length, 1);
502
- break;
503
- case length_encoding_type_1.LengthEncodingType.UInt32:
504
- result.writeUInt32BE(buffer.length, 1);
505
- break;
506
- case length_encoding_type_1.LengthEncodingType.UInt64:
507
- result.writeBigUInt64BE(BigInt(buffer.length), 1);
508
- break;
509
- }
510
- buffer.copy(result, 1 + lengthTypeSize);
511
- return result;
512
- }
513
- function decodeLengthEncodedData(buffer) {
514
- if (buffer.length < 1) {
515
- throw new RangeError('Buffer is too short to read length type.');
516
- }
517
- const lengthType = getLengthEncodingTypeFromValue(buffer.readUint8(0));
518
- const lengthTypeSize = getLengthForLengthType(lengthType);
519
- if (buffer.length < 1 + lengthTypeSize) {
520
- throw new RangeError('Buffer is too short to read the full length value.');
521
- }
522
- let length;
523
- switch (lengthType) {
524
- case length_encoding_type_1.LengthEncodingType.UInt8:
525
- length = buffer.readUint8(1);
526
- break;
527
- case length_encoding_type_1.LengthEncodingType.UInt16:
528
- length = buffer.readUint16BE(1);
529
- break;
530
- case length_encoding_type_1.LengthEncodingType.UInt32:
531
- length = buffer.readUint32BE(1);
532
- break;
533
- case length_encoding_type_1.LengthEncodingType.UInt64:
534
- length = buffer.readBigUInt64BE(1);
535
- if (Number(length) > Number.MAX_SAFE_INTEGER) {
536
- throw new RangeError('Length exceeds maximum safe integer value');
537
- }
538
- break;
539
- default:
540
- throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Error_LengthIsInvalidType);
541
- }
542
- const totalLength = 1 + lengthTypeSize + Number(length);
543
- if (totalLength > buffer.length) {
544
- throw new RangeError('Buffer is too short for declared data length');
545
- }
546
- return {
547
- data: buffer.subarray(1 + lengthTypeSize, totalLength),
548
- totalLength,
549
- };
550
- }
551
- const i18n_lib_2 = require("@digitaldefiance/i18n-lib");
552
- const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
553
- const moment_timezone_1 = __importDefault(require("moment-timezone"));
554
- const backup_code_1 = require("./backup-code");
555
- const length_encoding_type_1 = require("./enumerations/length-encoding-type");
556
- const errors_1 = require("./errors");
557
- function isValidTimezone(timezone) {
558
- return moment_timezone_1.default.tz.zone(timezone) !== null;
559
- }
560
- /**
561
- * Omits keys from an object
562
- */
563
- function omit(obj, keys) {
564
- const keysToOmit = new Set(keys);
565
- return Object.keys(obj).reduce((result, key) => {
566
- if (!keysToOmit.has(key)) {
567
- result[key] = obj[key];
568
- }
569
- return result;
570
- }, {});
571
- }
572
- /**
573
- * Validates that a collection contains exactly the keys from an enum
574
- * @param collection The collection to validate
575
- * @param enumObject The enum object to validate against
576
- * @param collectionName Optional name for the collection (for better error messages)
577
- * @param enumName Optional name for the enum (for better error messages)
578
- * @throws Error if collection has missing, extra, or invalid keys
579
- */
580
- function validateEnumCollection(collection, enumObject, collectionName, enumName) {
581
- // For numeric enums, filter out reverse mappings (number -> string)
582
- const enumKeys = Object.keys(enumObject).filter((key) => isNaN(Number(key)));
583
- const allEnumValues = enumKeys.map((key) => enumObject[key]);
584
- const collectionKeys = Object.keys(collection);
585
- const collectionLabel = collectionName || 'Collection';
586
- const enumLabel = enumName || `enum with keys [${enumKeys.join(', ')}]`;
587
- if (collectionKeys.length !== allEnumValues.length) {
588
- throw new Error(`${collectionLabel} must contain exactly ${allEnumValues.length} keys to match ${enumLabel}. Found ${collectionKeys.length} keys: [${collectionKeys.join(', ')}]`);
589
- }
590
- const invalidKeys = collectionKeys.filter((key) => !allEnumValues.includes(key));
591
- if (invalidKeys.length > 0) {
592
- throw new Error(`${collectionLabel} contains invalid keys for ${enumLabel}: [${invalidKeys.join(', ')}]. Valid keys are: [${allEnumValues.join(', ')}]`);
593
- }
594
- const missingKeys = allEnumValues.filter((value) => !(value in collection));
595
- if (missingKeys.length > 0) {
596
- throw new Error(`${collectionLabel} is missing required keys for ${enumLabel}: [${missingKeys.join(', ')}]`);
597
- }
598
- }
599
- function uint8ArrayToBase64(uint8Array) {
600
- let binaryString = '';
601
- for (let i = 0; i < uint8Array.length; i++) {
602
- binaryString += String.fromCharCode(uint8Array[i]);
603
- }
604
- return btoa(binaryString);
605
- }
606
- function base64ToUint8Array(base64String) {
607
- const binaryString = atob(base64String);
608
- const len = binaryString.length;
609
- const bytes = new Uint8Array(len);
610
- for (let i = 0; i < len; i++) {
611
- bytes[i] = binaryString.charCodeAt(i);
612
- }
613
- return bytes;
614
- }
615
- function uint8ArrayToHex(uint8Array) {
616
- return Array.from(uint8Array)
617
- .map((byte) => byte.toString(16).padStart(2, '0'))
618
- .join('');
619
- }
620
- function hexToUint8Array(hexString) {
621
- const len = hexString.length;
622
- const bytes = new Uint8Array(len / 2);
623
- for (let i = 0; i < len; i += 2) {
624
- bytes[i / 2] = parseInt(hexString.substring(i, i + 2), 16);
625
- }
626
- return bytes;
627
- }
628
- /**
629
- * Utility functions for browser ECIES implementation
630
- */
631
- /**
632
- * CRC16-CCITT implementation for data integrity checking
633
- * Uses the same algorithm as the server-side implementation (CRC16-CCITT-FALSE)
634
- */
635
- function crc16(data) {
636
- let crc = 0xffff; // Initial value for CRC16-CCITT-FALSE
637
- const polynomial = 0x1021; // CRC16-CCITT polynomial
638
- for (let i = 0; i < data.length; i++) {
639
- crc ^= data[i] << 8;
640
- for (let j = 0; j < 8; j++) {
641
- if (crc & 0x8000) {
642
- crc = (crc << 1) ^ polynomial;
643
- }
644
- else {
645
- crc = crc << 1;
646
- }
647
- crc &= 0xffff; // Keep it 16-bit
648
- }
649
- }
650
- const result = new Uint8Array(2);
651
- result[0] = (crc >>> 8) & 0xff; // Big-endian
652
- result[1] = crc & 0xff;
653
- return result;
654
- }
655
- /**
656
- * Convert string to Uint8Array (UTF-8 encoding)
657
- */
658
- function stringToUint8Array(str) {
659
- return new TextEncoder().encode(str);
660
- }
661
- /**
662
- * Convert Uint8Array to string (UTF-8 decoding)
663
- */
664
- function uint8ArrayToString(array) {
665
- return new TextDecoder().decode(array);
666
- }
667
- /**
668
- * Secure random bytes generation
669
- */
670
- function randomBytes(length) {
671
- return crypto.getRandomValues(new Uint8Array(length));
672
- }
673
- /**
674
- * Compare two Uint8Arrays for equality
675
- */
676
- function arraysEqual(a, b) {
677
- if (a.length !== b.length)
678
- return false;
679
- for (let i = 0; i < a.length; i++) {
680
- if (a[i] !== b[i])
681
- return false;
682
- }
683
- return true;
684
- }
685
- /**
686
- * Concatenate multiple Uint8Arrays
687
- */
688
- function concatUint8Arrays(...arrays) {
689
- const totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0);
690
- const result = new Uint8Array(totalLength);
691
- let offset = 0;
692
- for (const array of arrays) {
693
- result.set(array, offset);
694
- offset += array.length;
695
- }
696
- return result;
697
- }
698
- /**
699
- * Get the length encoding type for a given length
700
- * @param length The length to evaluate
701
- * @returns The corresponding LengthEncodingType
702
- */
703
- function getLengthEncodingTypeForLength(length) {
704
- if (typeof length === 'number') {
705
- if (length < 256) {
706
- return length_encoding_type_1.LengthEncodingType.UInt8;
707
- }
708
- else if (length < 65536) {
709
- return length_encoding_type_1.LengthEncodingType.UInt16;
710
- }
711
- else if (length < 4294967296) {
712
- return length_encoding_type_1.LengthEncodingType.UInt32;
713
- }
714
- else if (length < Number.MAX_SAFE_INTEGER) {
715
- return length_encoding_type_1.LengthEncodingType.UInt64;
716
- }
717
- else {
718
- throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Error_LengthExceedsMaximum);
719
- }
720
- }
721
- else if (typeof length === 'bigint') {
722
- if (length < 256n) {
723
- return length_encoding_type_1.LengthEncodingType.UInt8;
724
- }
725
- else if (length < 65536n) {
726
- return length_encoding_type_1.LengthEncodingType.UInt16;
727
- }
728
- else if (length < 4294967296n) {
729
- return length_encoding_type_1.LengthEncodingType.UInt32;
730
- }
731
- else if (length < 18446744073709551616n) {
732
- return length_encoding_type_1.LengthEncodingType.UInt64;
733
- }
734
- else {
735
- throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Error_LengthExceedsMaximum);
736
- }
737
- }
738
- else {
739
- throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Error_LengthIsInvalidType);
740
- }
741
- }
742
- /**
743
- * Get the length encoding type for a given value
744
- * @param value The value to evaluate
745
- * @returns The corresponding LengthEncodingType
746
- */
747
- function getLengthEncodingTypeFromValue(value) {
748
- for (const length of Object.values(length_encoding_type_1.LengthEncodingType)) {
749
- if (length === value) {
750
- return length;
751
- }
752
- }
753
- throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Error_LengthIsInvalidType);
754
- }
755
- /**
756
- * Get the length in bytes for a given LengthEncodingType
757
- * @param type The LengthEncodingType to evaluate
758
- * @returns The length in bytes
759
- */
760
- function getLengthForLengthType(type) {
761
- switch (type) {
762
- case length_encoding_type_1.LengthEncodingType.UInt8:
763
- return 1;
764
- case length_encoding_type_1.LengthEncodingType.UInt16:
765
- return 2;
766
- case length_encoding_type_1.LengthEncodingType.UInt32:
767
- return 4;
768
- case length_encoding_type_1.LengthEncodingType.UInt64:
769
- return 8;
770
- default:
771
- throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Error_LengthIsInvalidType);
772
- }
773
- }
774
- function parseBackupCodes(user, environment) {
775
- const envVarMap = {
776
- admin: 'ADMIN_BACKUP_CODES',
777
- member: 'MEMBER_BACKUP_CODES',
778
- system: 'SYSTEM_BACKUP_CODES',
779
- };
780
- const envVar = envVarMap[user];
781
- const backupCodes = environment[envVar]
782
- ?.split(',')
783
- .map((code) => new backup_code_1.BackupCode(code.trim())) || [];
784
- return backupCodes;
785
- }
786
- //# sourceMappingURL=utils.js.map