@digitaldefiance/node-express-suite 3.6.21 → 3.6.22

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