@digitaldefiance/node-express-suite 1.0.23 → 1.0.24

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 (629) hide show
  1. package/README.md +4 -0
  2. package/package.json +8 -7
  3. package/src/application-base.d.ts +112 -0
  4. package/src/application-base.d.ts.map +1 -0
  5. package/src/application-base.js +335 -0
  6. package/src/application-base.js.map +1 -0
  7. package/src/application.d.ts +20 -0
  8. package/src/application.d.ts.map +1 -0
  9. package/src/application.js +124 -0
  10. package/src/application.js.map +1 -0
  11. package/src/backup-code.d.ts +67 -0
  12. package/src/backup-code.d.ts.map +1 -0
  13. package/src/backup-code.js +238 -0
  14. package/src/backup-code.js.map +1 -0
  15. package/src/constants.d.ts +16 -0
  16. package/src/constants.d.ts.map +1 -0
  17. package/src/constants.js +54 -0
  18. package/src/constants.js.map +1 -0
  19. package/src/controllers/base.d.ts +63 -0
  20. package/src/controllers/base.d.ts.map +1 -0
  21. package/src/controllers/base.js +272 -0
  22. package/src/controllers/base.js.map +1 -0
  23. package/src/controllers/{index.ts → index.d.ts} +1 -0
  24. package/src/controllers/index.d.ts.map +1 -0
  25. package/src/controllers/index.js +6 -0
  26. package/src/controllers/index.js.map +1 -0
  27. package/src/controllers/user.d.ts +45 -0
  28. package/src/controllers/user.d.ts.map +1 -0
  29. package/src/controllers/user.js +748 -0
  30. package/src/controllers/user.js.map +1 -0
  31. package/src/decorators/base-controller.d.ts +14 -0
  32. package/src/decorators/base-controller.d.ts.map +1 -0
  33. package/src/decorators/base-controller.js +49 -0
  34. package/src/decorators/base-controller.js.map +1 -0
  35. package/src/decorators/controller.d.ts +32 -0
  36. package/src/decorators/controller.d.ts.map +1 -0
  37. package/src/decorators/controller.js +67 -0
  38. package/src/decorators/controller.js.map +1 -0
  39. package/src/decorators/{index.ts → index.d.ts} +1 -0
  40. package/src/decorators/index.d.ts.map +1 -0
  41. package/src/decorators/index.js +7 -0
  42. package/src/decorators/index.js.map +1 -0
  43. package/src/decorators/zod-validation.d.ts +5 -0
  44. package/src/decorators/zod-validation.d.ts.map +1 -0
  45. package/src/decorators/zod-validation.js +47 -0
  46. package/src/decorators/zod-validation.js.map +1 -0
  47. package/src/defaults.d.ts +7 -0
  48. package/src/defaults.d.ts.map +1 -0
  49. package/src/defaults.js +83 -0
  50. package/src/defaults.js.map +1 -0
  51. package/src/documents/base.d.ts +3 -0
  52. package/src/documents/base.d.ts.map +1 -0
  53. package/src/documents/base.js +3 -0
  54. package/src/documents/base.js.map +1 -0
  55. package/src/documents/email-token.d.ts +8 -0
  56. package/src/documents/email-token.d.ts.map +1 -0
  57. package/src/documents/email-token.js +3 -0
  58. package/src/documents/email-token.js.map +1 -0
  59. package/src/documents/{index.ts → index.d.ts} +1 -0
  60. package/src/documents/index.d.ts.map +1 -0
  61. package/src/documents/index.js +3 -0
  62. package/src/documents/index.js.map +1 -0
  63. package/src/documents/{mnemonic.ts → mnemonic.d.ts} +2 -5
  64. package/src/documents/mnemonic.d.ts.map +1 -0
  65. package/src/documents/mnemonic.js +3 -0
  66. package/src/documents/mnemonic.js.map +1 -0
  67. package/src/documents/{role.ts → role.d.ts} +2 -5
  68. package/src/documents/role.d.ts.map +1 -0
  69. package/src/documents/role.js +3 -0
  70. package/src/documents/role.js.map +1 -0
  71. package/src/documents/used-direct-login-token.d.ts +5 -0
  72. package/src/documents/used-direct-login-token.d.ts.map +1 -0
  73. package/src/documents/used-direct-login-token.js +3 -0
  74. package/src/documents/used-direct-login-token.js.map +1 -0
  75. package/src/documents/{user-role.ts → user-role.d.ts} +2 -5
  76. package/src/documents/user-role.d.ts.map +1 -0
  77. package/src/documents/user-role.js +3 -0
  78. package/src/documents/user-role.js.map +1 -0
  79. package/src/documents/{user.ts → user.d.ts} +2 -4
  80. package/src/documents/user.d.ts.map +1 -0
  81. package/src/documents/user.js +3 -0
  82. package/src/documents/user.js.map +1 -0
  83. package/src/enumerations/base-model-name.d.ts +38 -0
  84. package/src/enumerations/base-model-name.d.ts.map +1 -0
  85. package/src/enumerations/base-model-name.js +34 -0
  86. package/src/enumerations/base-model-name.js.map +1 -0
  87. package/src/enumerations/{index.ts → index.d.ts} +1 -0
  88. package/src/enumerations/index.d.ts.map +1 -0
  89. package/src/enumerations/index.js +8 -0
  90. package/src/enumerations/index.js.map +1 -0
  91. package/src/enumerations/length-encoding-type.d.ts +7 -0
  92. package/src/enumerations/length-encoding-type.d.ts.map +1 -0
  93. package/src/enumerations/length-encoding-type.js +11 -0
  94. package/src/enumerations/length-encoding-type.js.map +1 -0
  95. package/src/enumerations/schema-collection.d.ts +34 -0
  96. package/src/enumerations/schema-collection.d.ts.map +1 -0
  97. package/src/enumerations/schema-collection.js +38 -0
  98. package/src/enumerations/schema-collection.js.map +1 -0
  99. package/src/enumerations/symmetric-error-type.d.ts +5 -0
  100. package/src/enumerations/symmetric-error-type.d.ts.map +1 -0
  101. package/src/enumerations/symmetric-error-type.js +9 -0
  102. package/src/enumerations/symmetric-error-type.js.map +1 -0
  103. package/src/environment.d.ts +189 -0
  104. package/src/environment.d.ts.map +1 -0
  105. package/src/environment.js +620 -0
  106. package/src/environment.js.map +1 -0
  107. package/src/errors/express-validation.d.ts +9 -0
  108. package/src/errors/express-validation.d.ts.map +1 -0
  109. package/src/errors/express-validation.js +18 -0
  110. package/src/errors/express-validation.js.map +1 -0
  111. package/src/errors/{index.ts → index.d.ts} +1 -0
  112. package/src/errors/index.d.ts.map +1 -0
  113. package/src/errors/index.js +16 -0
  114. package/src/errors/index.js.map +1 -0
  115. package/src/errors/invalid-backup-code-version.d.ts +6 -0
  116. package/src/errors/invalid-backup-code-version.d.ts.map +1 -0
  117. package/src/errors/invalid-backup-code-version.js +15 -0
  118. package/src/errors/invalid-backup-code-version.js.map +1 -0
  119. package/src/errors/invalid-jwt-token.d.ts +5 -0
  120. package/src/errors/invalid-jwt-token.d.ts.map +1 -0
  121. package/src/errors/invalid-jwt-token.js +11 -0
  122. package/src/errors/invalid-jwt-token.js.map +1 -0
  123. package/src/errors/invalid-model.d.ts +6 -0
  124. package/src/errors/invalid-model.d.ts.map +1 -0
  125. package/src/errors/invalid-model.js +14 -0
  126. package/src/errors/invalid-model.js.map +1 -0
  127. package/src/errors/invalid-new-password.d.ts +5 -0
  128. package/src/errors/invalid-new-password.d.ts.map +1 -0
  129. package/src/errors/invalid-new-password.js +14 -0
  130. package/src/errors/invalid-new-password.js.map +1 -0
  131. package/src/errors/invalid-password.d.ts +5 -0
  132. package/src/errors/invalid-password.d.ts.map +1 -0
  133. package/src/errors/invalid-password.js +14 -0
  134. package/src/errors/invalid-password.js.map +1 -0
  135. package/src/errors/missing-validated-data.d.ts +7 -0
  136. package/src/errors/missing-validated-data.d.ts.map +1 -0
  137. package/src/errors/missing-validated-data.js +36 -0
  138. package/src/errors/missing-validated-data.js.map +1 -0
  139. package/src/errors/mnemonic-or-password-required.d.ts +5 -0
  140. package/src/errors/mnemonic-or-password-required.d.ts.map +1 -0
  141. package/src/errors/mnemonic-or-password-required.js +13 -0
  142. package/src/errors/mnemonic-or-password-required.js.map +1 -0
  143. package/src/errors/model-not-registered.d.ts +5 -0
  144. package/src/errors/model-not-registered.d.ts.map +1 -0
  145. package/src/errors/model-not-registered.js +12 -0
  146. package/src/errors/model-not-registered.js.map +1 -0
  147. package/src/errors/mongoose-validation.d.ts +11 -0
  148. package/src/errors/mongoose-validation.d.ts.map +1 -0
  149. package/src/errors/mongoose-validation.js +17 -0
  150. package/src/errors/mongoose-validation.js.map +1 -0
  151. package/src/errors/symmetric.d.ts +8 -0
  152. package/src/errors/symmetric.d.ts.map +1 -0
  153. package/src/errors/symmetric.js +23 -0
  154. package/src/errors/symmetric.js.map +1 -0
  155. package/src/errors/token-expired.d.ts +5 -0
  156. package/src/errors/token-expired.d.ts.map +1 -0
  157. package/src/errors/token-expired.js +11 -0
  158. package/src/errors/token-expired.js.map +1 -0
  159. package/src/get-language.d.ts +2 -0
  160. package/src/get-language.d.ts.map +1 -0
  161. package/src/get-language.js +30 -0
  162. package/src/get-language.js.map +1 -0
  163. package/src/get-timezone.d.ts +3 -0
  164. package/src/get-timezone.d.ts.map +1 -0
  165. package/src/get-timezone.js +31 -0
  166. package/src/get-timezone.js.map +1 -0
  167. package/src/{index.ts → index.d.ts} +1 -1
  168. package/src/index.d.ts.map +1 -0
  169. package/src/index.js +28 -0
  170. package/src/index.js.map +1 -0
  171. package/src/interfaces/{api-error-response.ts → api-error-response.d.ts} +2 -2
  172. package/src/interfaces/api-error-response.d.ts.map +1 -0
  173. package/src/interfaces/api-error-response.js +3 -0
  174. package/src/interfaces/api-error-response.js.map +1 -0
  175. package/src/interfaces/api-express-validation-error-response.d.ts +7 -0
  176. package/src/interfaces/api-express-validation-error-response.d.ts.map +1 -0
  177. package/src/interfaces/api-express-validation-error-response.js +3 -0
  178. package/src/interfaces/api-express-validation-error-response.js.map +1 -0
  179. package/src/interfaces/api-message-response.d.ts +4 -0
  180. package/src/interfaces/api-message-response.d.ts.map +1 -0
  181. package/src/interfaces/api-message-response.js +3 -0
  182. package/src/interfaces/api-message-response.js.map +1 -0
  183. package/src/interfaces/{api-mongo-validation-error-response.ts → api-mongo-validation-error-response.d.ts} +2 -2
  184. package/src/interfaces/api-mongo-validation-error-response.d.ts.map +1 -0
  185. package/src/interfaces/api-mongo-validation-error-response.js +3 -0
  186. package/src/interfaces/api-mongo-validation-error-response.js.map +1 -0
  187. package/src/interfaces/api-responses/{backup-codes-response.ts → backup-codes-response.d.ts} +2 -2
  188. package/src/interfaces/api-responses/backup-codes-response.d.ts.map +1 -0
  189. package/src/interfaces/api-responses/backup-codes-response.js +3 -0
  190. package/src/interfaces/api-responses/backup-codes-response.js.map +1 -0
  191. package/src/interfaces/api-responses/{challenge-response.ts → challenge-response.d.ts} +3 -3
  192. package/src/interfaces/api-responses/challenge-response.d.ts.map +1 -0
  193. package/src/interfaces/api-responses/challenge-response.js +3 -0
  194. package/src/interfaces/api-responses/challenge-response.js.map +1 -0
  195. package/src/interfaces/api-responses/{code-count-response.ts → code-count-response.d.ts} +2 -2
  196. package/src/interfaces/api-responses/code-count-response.d.ts.map +1 -0
  197. package/src/interfaces/api-responses/code-count-response.js +3 -0
  198. package/src/interfaces/api-responses/code-count-response.js.map +1 -0
  199. package/src/interfaces/api-responses/{index.ts → index.d.ts} +1 -0
  200. package/src/interfaces/api-responses/index.d.ts.map +1 -0
  201. package/src/interfaces/api-responses/index.js +11 -0
  202. package/src/interfaces/api-responses/index.js.map +1 -0
  203. package/src/interfaces/api-responses/{login-response.ts → login-response.d.ts} +4 -4
  204. package/src/interfaces/api-responses/login-response.d.ts.map +1 -0
  205. package/src/interfaces/api-responses/login-response.js +3 -0
  206. package/src/interfaces/api-responses/login-response.js.map +1 -0
  207. package/src/interfaces/api-responses/{mnemonic-response.ts → mnemonic-response.d.ts} +2 -2
  208. package/src/interfaces/api-responses/mnemonic-response.d.ts.map +1 -0
  209. package/src/interfaces/api-responses/mnemonic-response.js +3 -0
  210. package/src/interfaces/api-responses/mnemonic-response.js.map +1 -0
  211. package/src/interfaces/api-responses/{registration-response.ts → registration-response.d.ts} +3 -3
  212. package/src/interfaces/api-responses/registration-response.d.ts.map +1 -0
  213. package/src/interfaces/api-responses/registration-response.js +3 -0
  214. package/src/interfaces/api-responses/registration-response.js.map +1 -0
  215. package/src/interfaces/api-responses/{request-user-response.ts → request-user-response.d.ts} +2 -2
  216. package/src/interfaces/api-responses/request-user-response.d.ts.map +1 -0
  217. package/src/interfaces/api-responses/request-user-response.js +3 -0
  218. package/src/interfaces/api-responses/request-user-response.js.map +1 -0
  219. package/src/interfaces/{application.ts → application.d.ts} +7 -7
  220. package/src/interfaces/application.d.ts.map +1 -0
  221. package/src/interfaces/application.js +3 -0
  222. package/src/interfaces/application.js.map +1 -0
  223. package/src/interfaces/backend-objects/email-token.d.ts +4 -0
  224. package/src/interfaces/backend-objects/email-token.d.ts.map +1 -0
  225. package/src/interfaces/backend-objects/email-token.js +3 -0
  226. package/src/interfaces/backend-objects/email-token.js.map +1 -0
  227. package/src/interfaces/backend-objects/{index.ts → index.d.ts} +1 -0
  228. package/src/interfaces/backend-objects/index.d.ts.map +1 -0
  229. package/src/interfaces/backend-objects/index.js +8 -0
  230. package/src/interfaces/backend-objects/index.js.map +1 -0
  231. package/src/interfaces/backend-objects/{request-user.ts → request-user.d.ts} +2 -7
  232. package/src/interfaces/backend-objects/request-user.d.ts.map +1 -0
  233. package/src/interfaces/backend-objects/request-user.js +3 -0
  234. package/src/interfaces/backend-objects/request-user.js.map +1 -0
  235. package/src/interfaces/backend-objects/{role.ts → role.d.ts} +1 -1
  236. package/src/interfaces/backend-objects/role.d.ts.map +1 -0
  237. package/src/interfaces/backend-objects/role.js +3 -0
  238. package/src/interfaces/backend-objects/role.js.map +1 -0
  239. package/src/interfaces/backend-objects/user.d.ts +4 -0
  240. package/src/interfaces/backend-objects/user.d.ts.map +1 -0
  241. package/src/interfaces/backend-objects/user.js +3 -0
  242. package/src/interfaces/backend-objects/user.js.map +1 -0
  243. package/src/interfaces/checksum-config.d.ts +5 -0
  244. package/src/interfaces/checksum-config.d.ts.map +1 -0
  245. package/src/interfaces/checksum-config.js +3 -0
  246. package/src/interfaces/checksum-config.js.map +1 -0
  247. package/src/interfaces/checksum-consts.d.ts +11 -0
  248. package/src/interfaces/checksum-consts.d.ts.map +1 -0
  249. package/src/interfaces/checksum-consts.js +3 -0
  250. package/src/interfaces/checksum-consts.js.map +1 -0
  251. package/src/interfaces/{constants.ts → constants.d.ts} +5 -5
  252. package/src/interfaces/constants.d.ts.map +1 -0
  253. package/src/interfaces/constants.js +3 -0
  254. package/src/interfaces/constants.js.map +1 -0
  255. package/src/interfaces/create-user-basics.d.ts +18 -0
  256. package/src/interfaces/create-user-basics.d.ts.map +1 -0
  257. package/src/interfaces/create-user-basics.js +3 -0
  258. package/src/interfaces/create-user-basics.js.map +1 -0
  259. package/src/interfaces/csp-config.d.ts +14 -0
  260. package/src/interfaces/csp-config.d.ts.map +1 -0
  261. package/src/interfaces/csp-config.js +3 -0
  262. package/src/interfaces/csp-config.js.map +1 -0
  263. package/src/interfaces/deep-partial.d.ts +4 -0
  264. package/src/interfaces/deep-partial.d.ts.map +1 -0
  265. package/src/interfaces/deep-partial.js +3 -0
  266. package/src/interfaces/deep-partial.js.map +1 -0
  267. package/src/interfaces/{discriminator-collections.ts → discriminator-collections.d.ts} +3 -3
  268. package/src/interfaces/discriminator-collections.d.ts.map +1 -0
  269. package/src/interfaces/discriminator-collections.js +3 -0
  270. package/src/interfaces/discriminator-collections.js.map +1 -0
  271. package/src/interfaces/email-service.d.ts +4 -0
  272. package/src/interfaces/email-service.d.ts.map +1 -0
  273. package/src/interfaces/email-service.js +3 -0
  274. package/src/interfaces/email-service.js.map +1 -0
  275. package/src/interfaces/environment-mongo.d.ts +76 -0
  276. package/src/interfaces/environment-mongo.d.ts.map +1 -0
  277. package/src/interfaces/environment-mongo.js +3 -0
  278. package/src/interfaces/environment-mongo.js.map +1 -0
  279. package/src/interfaces/environment.d.ts +181 -0
  280. package/src/interfaces/environment.d.ts.map +1 -0
  281. package/src/interfaces/environment.js +3 -0
  282. package/src/interfaces/environment.js.map +1 -0
  283. package/src/interfaces/failable-result.d.ts +7 -0
  284. package/src/interfaces/failable-result.d.ts.map +1 -0
  285. package/src/interfaces/failable-result.js +3 -0
  286. package/src/interfaces/failable-result.js.map +1 -0
  287. package/src/interfaces/fec-consts.d.ts +5 -0
  288. package/src/interfaces/fec-consts.d.ts.map +1 -0
  289. package/src/interfaces/fec-consts.js +3 -0
  290. package/src/interfaces/fec-consts.js.map +1 -0
  291. package/src/interfaces/handleable-error-options.d.ts +7 -0
  292. package/src/interfaces/handleable-error-options.d.ts.map +1 -0
  293. package/src/interfaces/handleable-error-options.js +3 -0
  294. package/src/interfaces/handleable-error-options.js.map +1 -0
  295. package/src/interfaces/{index.ts → index.d.ts} +1 -0
  296. package/src/interfaces/index.d.ts.map +1 -0
  297. package/src/interfaces/index.js +33 -0
  298. package/src/interfaces/index.js.map +1 -0
  299. package/src/interfaces/jwt-consts.d.ts +11 -0
  300. package/src/interfaces/jwt-consts.d.ts.map +1 -0
  301. package/src/interfaces/jwt-consts.js +3 -0
  302. package/src/interfaces/jwt-consts.js.map +1 -0
  303. package/src/interfaces/jwt-sign-response.d.ts +11 -0
  304. package/src/interfaces/jwt-sign-response.d.ts.map +1 -0
  305. package/src/interfaces/jwt-sign-response.js +3 -0
  306. package/src/interfaces/jwt-sign-response.js.map +1 -0
  307. package/src/interfaces/mongo-errors.d.ts +5 -0
  308. package/src/interfaces/mongo-errors.d.ts.map +1 -0
  309. package/src/interfaces/mongo-errors.js +3 -0
  310. package/src/interfaces/mongo-errors.js.map +1 -0
  311. package/src/interfaces/request-user.d.ts +42 -0
  312. package/src/interfaces/request-user.d.ts.map +1 -0
  313. package/src/interfaces/request-user.js +3 -0
  314. package/src/interfaces/request-user.js.map +1 -0
  315. package/src/interfaces/required-string-keys.d.ts +22 -0
  316. package/src/interfaces/required-string-keys.d.ts.map +1 -0
  317. package/src/interfaces/required-string-keys.js +3 -0
  318. package/src/interfaces/required-string-keys.js.map +1 -0
  319. package/src/interfaces/schema.d.ts +29 -0
  320. package/src/interfaces/schema.d.ts.map +1 -0
  321. package/src/interfaces/schema.js +3 -0
  322. package/src/interfaces/schema.js.map +1 -0
  323. package/src/interfaces/server-init-result.d.ts +35 -0
  324. package/src/interfaces/server-init-result.d.ts.map +1 -0
  325. package/src/interfaces/server-init-result.js +3 -0
  326. package/src/interfaces/server-init-result.js.map +1 -0
  327. package/src/interfaces/status-code-response.d.ts +7 -0
  328. package/src/interfaces/status-code-response.d.ts.map +1 -0
  329. package/src/interfaces/status-code-response.js +3 -0
  330. package/src/interfaces/status-code-response.js.map +1 -0
  331. package/src/interfaces/symmetric-encryption-results.d.ts +3 -3
  332. package/src/interfaces/symmetric-encryption-results.d.ts.map +1 -1
  333. package/src/interfaces/symmetric-encryption-results.js.map +1 -1
  334. package/src/interfaces/{token-response.ts → token-response.d.ts} +2 -2
  335. package/src/interfaces/token-response.d.ts.map +1 -0
  336. package/src/interfaces/token-response.js +3 -0
  337. package/src/interfaces/token-response.js.map +1 -0
  338. package/src/middlewares/authenticate-crypto.d.ts +13 -0
  339. package/src/middlewares/authenticate-crypto.d.ts.map +1 -0
  340. package/src/middlewares/authenticate-crypto.js +146 -0
  341. package/src/middlewares/authenticate-crypto.js.map +1 -0
  342. package/src/middlewares/authenticate-token.d.ts +24 -0
  343. package/src/middlewares/authenticate-token.d.ts.map +1 -0
  344. package/src/middlewares/authenticate-token.js +102 -0
  345. package/src/middlewares/authenticate-token.js.map +1 -0
  346. package/src/middlewares/cleanup-crypto.d.ts +7 -0
  347. package/src/middlewares/cleanup-crypto.d.ts.map +1 -0
  348. package/src/middlewares/cleanup-crypto.js +32 -0
  349. package/src/middlewares/cleanup-crypto.js.map +1 -0
  350. package/src/middlewares/{index.ts → index.d.ts} +1 -0
  351. package/src/middlewares/index.d.ts.map +1 -0
  352. package/src/middlewares/index.js +8 -0
  353. package/src/middlewares/index.js.map +1 -0
  354. package/src/middlewares/set-global-context-language.d.ts +3 -0
  355. package/src/middlewares/set-global-context-language.d.ts.map +1 -0
  356. package/src/middlewares/set-global-context-language.js +14 -0
  357. package/src/middlewares/set-global-context-language.js.map +1 -0
  358. package/src/middlewares.d.ts +18 -0
  359. package/src/middlewares.d.ts.map +1 -0
  360. package/src/middlewares.js +74 -0
  361. package/src/middlewares.js.map +1 -0
  362. package/src/model-registry.d.ts +23 -0
  363. package/src/model-registry.d.ts.map +1 -0
  364. package/src/model-registry.js +47 -0
  365. package/src/model-registry.js.map +1 -0
  366. package/src/models/email-token.d.ts +11 -0
  367. package/src/models/email-token.d.ts.map +1 -0
  368. package/src/models/email-token.js +11 -0
  369. package/src/models/email-token.js.map +1 -0
  370. package/src/models/{index.ts → index.d.ts} +1 -0
  371. package/src/models/index.d.ts.map +1 -0
  372. package/src/models/index.js +10 -0
  373. package/src/models/index.js.map +1 -0
  374. package/src/models/mnemonic.d.ts +11 -0
  375. package/src/models/mnemonic.d.ts.map +1 -0
  376. package/src/models/mnemonic.js +11 -0
  377. package/src/models/mnemonic.js.map +1 -0
  378. package/src/models/role.d.ts +11 -0
  379. package/src/models/role.d.ts.map +1 -0
  380. package/src/models/role.js +11 -0
  381. package/src/models/role.js.map +1 -0
  382. package/src/models/used-direct-login-token.d.ts +11 -0
  383. package/src/models/used-direct-login-token.d.ts.map +1 -0
  384. package/src/models/used-direct-login-token.js +11 -0
  385. package/src/models/used-direct-login-token.js.map +1 -0
  386. package/src/models/user-role.d.ts +6 -0
  387. package/src/models/user-role.d.ts.map +1 -0
  388. package/src/models/user-role.js +10 -0
  389. package/src/models/user-role.js.map +1 -0
  390. package/src/models/user.d.ts +7 -0
  391. package/src/models/user.d.ts.map +1 -0
  392. package/src/models/user.js +11 -0
  393. package/src/models/user.js.map +1 -0
  394. package/src/registry/email-service-registry.d.ts +9 -0
  395. package/src/registry/email-service-registry.d.ts.map +1 -0
  396. package/src/registry/email-service-registry.js +18 -0
  397. package/src/registry/email-service-registry.js.map +1 -0
  398. package/src/registry/{index.ts → index.d.ts} +1 -0
  399. package/src/registry/index.d.ts.map +1 -0
  400. package/src/registry/index.js +6 -0
  401. package/src/registry/index.js.map +1 -0
  402. package/src/routers/api.d.ts +27 -0
  403. package/src/routers/api.d.ts.map +1 -0
  404. package/src/routers/api.js +52 -0
  405. package/src/routers/api.js.map +1 -0
  406. package/src/routers/app.d.ts +28 -0
  407. package/src/routers/app.d.ts.map +1 -0
  408. package/src/routers/app.js +186 -0
  409. package/src/routers/app.js.map +1 -0
  410. package/src/routers/base.d.ts +12 -0
  411. package/src/routers/base.d.ts.map +1 -0
  412. package/src/routers/base.js +14 -0
  413. package/src/routers/base.js.map +1 -0
  414. package/src/routers/{index.ts → index.d.ts} +1 -0
  415. package/src/routers/index.d.ts.map +1 -0
  416. package/src/routers/index.js +7 -0
  417. package/src/routers/index.js.map +1 -0
  418. package/src/schemas/email-token.d.ts +38 -0
  419. package/src/schemas/email-token.d.ts.map +1 -0
  420. package/src/schemas/email-token.js +54 -0
  421. package/src/schemas/email-token.js.map +1 -0
  422. package/src/schemas/{index.ts → index.d.ts} +2 -1
  423. package/src/schemas/index.d.ts.map +1 -0
  424. package/src/schemas/index.js +11 -0
  425. package/src/schemas/index.js.map +1 -0
  426. package/src/schemas/mnemonic.d.ts +20 -0
  427. package/src/schemas/mnemonic.d.ts.map +1 -0
  428. package/src/schemas/mnemonic.js +30 -0
  429. package/src/schemas/mnemonic.js.map +1 -0
  430. package/src/schemas/role.d.ts +32 -0
  431. package/src/schemas/role.d.ts.map +1 -0
  432. package/src/schemas/role.js +86 -0
  433. package/src/schemas/role.js.map +1 -0
  434. package/src/schemas/schema.d.ts +40 -0
  435. package/src/schemas/schema.d.ts.map +1 -0
  436. package/src/schemas/schema.js +62 -0
  437. package/src/schemas/schema.js.map +1 -0
  438. package/src/schemas/used-direct-login-token.d.ts +27 -0
  439. package/src/schemas/used-direct-login-token.d.ts.map +1 -0
  440. package/src/schemas/used-direct-login-token.js +23 -0
  441. package/src/schemas/used-direct-login-token.js.map +1 -0
  442. package/src/schemas/user-role.d.ts +29 -0
  443. package/src/schemas/user-role.d.ts.map +1 -0
  444. package/src/schemas/user-role.js +54 -0
  445. package/src/schemas/user-role.js.map +1 -0
  446. package/src/schemas/user.d.ts +21 -0
  447. package/src/schemas/user.d.ts.map +1 -0
  448. package/src/schemas/user.js +176 -0
  449. package/src/schemas/user.js.map +1 -0
  450. package/src/services/backup-code.d.ts +78 -0
  451. package/src/services/backup-code.d.ts.map +1 -0
  452. package/src/services/backup-code.js +184 -0
  453. package/src/services/backup-code.js.map +1 -0
  454. package/src/services/base.d.ts +13 -0
  455. package/src/services/base.d.ts.map +1 -0
  456. package/src/services/base.js +15 -0
  457. package/src/services/base.js.map +1 -0
  458. package/src/services/checksum.d.ts +67 -0
  459. package/src/services/checksum.d.ts.map +1 -0
  460. package/src/services/checksum.js +143 -0
  461. package/src/services/checksum.js.map +1 -0
  462. package/src/services/crc.d.ts +87 -0
  463. package/src/services/crc.d.ts.map +1 -0
  464. package/src/services/crc.js +198 -0
  465. package/src/services/crc.js.map +1 -0
  466. package/src/services/database-initialization.d.ts +105 -0
  467. package/src/services/database-initialization.d.ts.map +1 -0
  468. package/src/services/database-initialization.js +782 -0
  469. package/src/services/database-initialization.js.map +1 -0
  470. package/src/services/direct-login-token.d.ts +9 -0
  471. package/src/services/direct-login-token.d.ts.map +1 -0
  472. package/src/services/direct-login-token.js +41 -0
  473. package/src/services/direct-login-token.js.map +1 -0
  474. package/src/services/fec-usage-example.d.ts +38 -0
  475. package/src/services/fec-usage-example.d.ts.map +1 -0
  476. package/src/services/fec-usage-example.js +75 -0
  477. package/src/services/fec-usage-example.js.map +1 -0
  478. package/src/services/fec.d.ts +46 -0
  479. package/src/services/fec.d.ts.map +1 -0
  480. package/src/services/fec.js +192 -0
  481. package/src/services/fec.js.map +1 -0
  482. package/src/services/{index.ts → index.d.ts} +1 -0
  483. package/src/services/index.d.ts.map +1 -0
  484. package/src/services/index.js +22 -0
  485. package/src/services/index.js.map +1 -0
  486. package/src/services/jwt.d.ts +33 -0
  487. package/src/services/jwt.d.ts.map +1 -0
  488. package/src/services/jwt.js +91 -0
  489. package/src/services/jwt.js.map +1 -0
  490. package/src/services/key-wrapping.d.ts +60 -0
  491. package/src/services/key-wrapping.d.ts.map +1 -0
  492. package/src/services/key-wrapping.js +311 -0
  493. package/src/services/key-wrapping.js.map +1 -0
  494. package/src/services/mnemonic.d.ts +61 -0
  495. package/src/services/mnemonic.d.ts.map +1 -0
  496. package/src/services/mnemonic.js +115 -0
  497. package/src/services/mnemonic.js.map +1 -0
  498. package/src/services/request-user.d.ts +20 -0
  499. package/src/services/request-user.d.ts.map +1 -0
  500. package/src/services/request-user.js +50 -0
  501. package/src/services/request-user.js.map +1 -0
  502. package/src/services/role.d.ts +88 -0
  503. package/src/services/role.d.ts.map +1 -0
  504. package/src/services/role.js +263 -0
  505. package/src/services/role.js.map +1 -0
  506. package/src/services/symmetric.d.ts +42 -0
  507. package/src/services/symmetric.d.ts.map +1 -0
  508. package/src/services/symmetric.js +101 -0
  509. package/src/services/symmetric.js.map +1 -0
  510. package/src/services/system-user.d.ts +17 -0
  511. package/src/services/system-user.d.ts.map +1 -0
  512. package/src/services/system-user.js +46 -0
  513. package/src/services/system-user.js.map +1 -0
  514. package/src/services/user.d.ts +320 -0
  515. package/src/services/user.d.ts.map +1 -0
  516. package/src/services/user.js +1378 -0
  517. package/src/services/user.js.map +1 -0
  518. package/src/services/xor.d.ts +24 -0
  519. package/src/services/xor.d.ts.map +1 -0
  520. package/src/services/xor.js +37 -0
  521. package/src/services/xor.js.map +1 -0
  522. package/src/types.d.ts +66 -40
  523. package/src/types.d.ts.map +1 -0
  524. package/src/types.js +14 -0
  525. package/src/types.js.map +1 -0
  526. package/src/utils.d.ts +202 -0
  527. package/src/utils.d.ts.map +1 -0
  528. package/src/utils.js +784 -0
  529. package/src/utils.js.map +1 -0
  530. package/LICENSE +0 -21
  531. package/src/application-base.ts +0 -492
  532. package/src/application.ts +0 -254
  533. package/src/backup-code.ts +0 -336
  534. package/src/constants.ts +0 -69
  535. package/src/controllers/base.ts +0 -440
  536. package/src/controllers/user.ts +0 -1451
  537. package/src/decorators/base-controller.ts +0 -61
  538. package/src/decorators/controller.ts +0 -109
  539. package/src/decorators/zod-validation.ts +0 -57
  540. package/src/defaults.ts +0 -94
  541. package/src/documents/base.ts +0 -7
  542. package/src/documents/email-token.ts +0 -14
  543. package/src/documents/used-direct-login-token.ts +0 -7
  544. package/src/enumerations/base-model-name.ts +0 -41
  545. package/src/enumerations/length-encoding-type.ts +0 -6
  546. package/src/enumerations/schema-collection.ts +0 -33
  547. package/src/enumerations/symmetric-error-type.ts +0 -4
  548. package/src/environment.ts +0 -770
  549. package/src/errors/express-validation.ts +0 -21
  550. package/src/errors/invalid-backup-code-version.ts +0 -14
  551. package/src/errors/invalid-jwt-token.ts +0 -10
  552. package/src/errors/invalid-model.ts +0 -11
  553. package/src/errors/invalid-new-password.ts +0 -18
  554. package/src/errors/invalid-password.ts +0 -13
  555. package/src/errors/missing-validated-data.ts +0 -36
  556. package/src/errors/mnemonic-or-password-required.ts +0 -12
  557. package/src/errors/model-not-registered.ts +0 -11
  558. package/src/errors/mongoose-validation.ts +0 -34
  559. package/src/errors/symmetric.ts +0 -41
  560. package/src/errors/token-expired.ts +0 -10
  561. package/src/get-language.ts +0 -53
  562. package/src/get-timezone.ts +0 -45
  563. package/src/interfaces/api-express-validation-error-response.ts +0 -8
  564. package/src/interfaces/api-message-response.ts +0 -3
  565. package/src/interfaces/backend-objects/email-token.ts +0 -11
  566. package/src/interfaces/backend-objects/user.ts +0 -9
  567. package/src/interfaces/checksum-config.ts +0 -4
  568. package/src/interfaces/checksum-consts.ts +0 -13
  569. package/src/interfaces/create-user-basics.ts +0 -17
  570. package/src/interfaces/csp-config.ts +0 -35
  571. package/src/interfaces/deep-partial.ts +0 -3
  572. package/src/interfaces/email-service.ts +0 -8
  573. package/src/interfaces/environment-mongo.ts +0 -76
  574. package/src/interfaces/environment.ts +0 -181
  575. package/src/interfaces/failable-result.ts +0 -6
  576. package/src/interfaces/fec-consts.ts +0 -4
  577. package/src/interfaces/handleable-error-options.ts +0 -6
  578. package/src/interfaces/jwt-consts.ts +0 -23
  579. package/src/interfaces/jwt-sign-response.ts +0 -19
  580. package/src/interfaces/mongo-errors.ts +0 -5
  581. package/src/interfaces/request-user.ts +0 -50
  582. package/src/interfaces/required-string-keys.ts +0 -26
  583. package/src/interfaces/schema.ts +0 -31
  584. package/src/interfaces/server-init-result.ts +0 -37
  585. package/src/interfaces/status-code-response.ts +0 -7
  586. package/src/interfaces/symmetric-encryption-results.ts +0 -4
  587. package/src/middlewares/authenticate-crypto.ts +0 -243
  588. package/src/middlewares/authenticate-token.ts +0 -152
  589. package/src/middlewares/cleanup-crypto.ts +0 -40
  590. package/src/middlewares/set-global-context-language.ts +0 -24
  591. package/src/middlewares.ts +0 -120
  592. package/src/model-registry.ts +0 -75
  593. package/src/models/email-token.ts +0 -19
  594. package/src/models/mnemonic.ts +0 -19
  595. package/src/models/role.ts +0 -19
  596. package/src/models/used-direct-login-token.ts +0 -23
  597. package/src/models/user-role.ts +0 -17
  598. package/src/models/user.ts +0 -19
  599. package/src/registry/email-service-registry.ts +0 -24
  600. package/src/routers/api.ts +0 -151
  601. package/src/routers/app.ts +0 -258
  602. package/src/routers/base.ts +0 -17
  603. package/src/schemas/email-token.ts +0 -91
  604. package/src/schemas/mnemonic.ts +0 -37
  605. package/src/schemas/role.ts +0 -127
  606. package/src/schemas/schema.ts +0 -140
  607. package/src/schemas/used-direct-login-token.ts +0 -38
  608. package/src/schemas/user-role.ts +0 -75
  609. package/src/schemas/user.ts +0 -202
  610. package/src/services/backup-code.ts +0 -316
  611. package/src/services/base.ts +0 -33
  612. package/src/services/checksum.ts +0 -161
  613. package/src/services/crc.ts +0 -213
  614. package/src/services/database-initialization.ts +0 -1479
  615. package/src/services/db-init-cache.d.ts +0 -16
  616. package/src/services/direct-login-token.ts +0 -62
  617. package/src/services/fec-usage-example.ts +0 -102
  618. package/src/services/fec.ts +0 -296
  619. package/src/services/jwt.ts +0 -134
  620. package/src/services/key-wrapping.ts +0 -434
  621. package/src/services/mnemonic.ts +0 -167
  622. package/src/services/request-user.ts +0 -62
  623. package/src/services/role.ts +0 -396
  624. package/src/services/symmetric.ts +0 -139
  625. package/src/services/system-user.ts +0 -82
  626. package/src/services/user.ts +0 -2137
  627. package/src/services/xor.ts +0 -34
  628. package/src/types.ts +0 -128
  629. package/src/utils.ts +0 -1022
@@ -1,316 +0,0 @@
1
- import {
2
- EmailString,
3
- MemberType,
4
- SecureBuffer,
5
- SecureString,
6
- } from '@digitaldefiance/ecies-lib';
7
- import {
8
- Member as BackendMember,
9
- ECIESService,
10
- } from '@digitaldefiance/node-ecies-lib';
11
- import {
12
- IBackupCode,
13
- InvalidBackupCodeError,
14
- ITokenRole,
15
- } from '@digitaldefiance/suite-core-lib';
16
- import { timingSafeEqual } from 'crypto';
17
- import { ClientSession, Types } from 'mongoose';
18
- import { BackupCode } from '../backup-code';
19
- import { Constants as AppConstants } from '../constants';
20
- import { IBaseDocument, IUserDocument } from '../documents';
21
- import { InvalidBackupCodeVersionError } from '../errors/invalid-backup-code-version';
22
- import { IApplication } from '../interfaces/application';
23
- import { BaseService } from './base';
24
- import { KeyWrappingService } from './index';
25
- import { RoleService } from './role';
26
- import { SymmetricService } from './symmetric';
27
- import { SystemUserService } from './system-user';
28
- import { Environment } from '../environment';
29
- import { IConstants } from '../interfaces';
30
-
31
- /**
32
- * Service handling generation, storage, validation, consumption, and recovery using backup codes.
33
- *
34
- * v1 scheme:
35
- * - Code: 32 lowercase alphanumerics (a–z0–9), displayed as 8 groups of 4: xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx
36
- * - Checksum/tag: HKDF-SHA256(codeUtf8, salt, "backup-checksum") → 32 bytes (stored as hex)
37
- * - KDF for encryption key: Argon2id(codeUtf8, salt) → 32 bytes
38
- * - Encryption: SymmetricService AEAD (encryptedData must embed IV + authTag + ciphertext)
39
- * - Wrapping: AEAD blob wrapped with system user's asymmetric key (ECIES)
40
- */
41
- export class BackupCodeService<
42
- I = Types.ObjectId,
43
- D extends Date = Date,
44
- TTokenRole extends ITokenRole<I, D> = ITokenRole<I, D>,
45
- TApplication extends IApplication<any, Types.ObjectId, IBaseDocument<any, Types.ObjectId>, Environment, IConstants> = IApplication<any, Types.ObjectId, IBaseDocument<any, Types.ObjectId>, Environment, IConstants>,
46
- > extends BaseService {
47
- private readonly eciesService: ECIESService;
48
- private systemUser?: BackendMember;
49
- private readonly keyWrappingService: KeyWrappingService;
50
- private readonly roleService: RoleService<I, D, TTokenRole>;
51
-
52
- /**
53
- * Construct a BackupCodeService.
54
- */
55
- constructor(
56
- application: TApplication,
57
- eciesService: ECIESService,
58
- keyWrappingService: KeyWrappingService,
59
- roleService: RoleService<I, D, TTokenRole>,
60
- ) {
61
- super(application);
62
- this.eciesService = eciesService;
63
- this.keyWrappingService = keyWrappingService;
64
- this.roleService = roleService;
65
- }
66
-
67
- /**
68
- * Get the lazily-initialized system user for key wrapping/unwrapping.
69
- */
70
- private getSystemUser(): BackendMember {
71
- if (!this.systemUser) {
72
- this.systemUser = SystemUserService.getSystemUser(
73
- this.application.environment,
74
- );
75
- }
76
- return this.systemUser;
77
- }
78
-
79
- /**
80
- * Forcibly set the system user (for database initialization)
81
- * @param user
82
- */
83
- public setSystemUser(user: BackendMember): void {
84
- this.systemUser = user;
85
- }
86
-
87
- /**
88
- * v1: Consume (validate and remove) a backup code via constant-time checksum match.
89
- */
90
- public useBackupCodeV1(
91
- encryptedBackupCodes: Array<IBackupCode>,
92
- backupCode: string,
93
- ): { newCodesArray: Array<IBackupCode>; code: IBackupCode } {
94
- const normalizedCode = BackupCode.normalizeCode(backupCode);
95
- if (!AppConstants.BACKUP_CODES.NormalizedHexRegex.test(normalizedCode)) {
96
- throw new InvalidBackupCodeError();
97
- }
98
- const codeBytes = Buffer.from(normalizedCode, 'utf8');
99
- try {
100
- for (const code of encryptedBackupCodes) {
101
- if (code.version !== BackupCode.BackupCodeVersion) continue;
102
- const checksumSalt = Buffer.from(code.checksumSalt, 'hex');
103
- const expected = BackupCode.hkdfSha256(
104
- codeBytes,
105
- checksumSalt,
106
- Buffer.from('backup-checksum'),
107
- 32,
108
- );
109
- if (
110
- code.checksum.length === expected.length * 2 &&
111
- timingSafeEqual(Buffer.from(code.checksum, 'hex'), expected)
112
- ) {
113
- const checksumHex = expected.toString('hex');
114
- return {
115
- newCodesArray: encryptedBackupCodes.filter(
116
- (c) => c.checksum !== checksumHex,
117
- ),
118
- code,
119
- };
120
- }
121
- }
122
- throw new InvalidBackupCodeError();
123
- } finally {
124
- codeBytes.fill(0);
125
- }
126
- }
127
-
128
- /**
129
- * Consume a backup code by first detecting the version and then dispatching to the appropriate handler.
130
- */
131
- public useBackupCode(
132
- encryptedBackupCodes: Array<IBackupCode>,
133
- backupCode: string,
134
- ): { newCodesArray: Array<IBackupCode>; code: IBackupCode } {
135
- const version = BackupCode.detectBackupCodeVersion(
136
- encryptedBackupCodes,
137
- backupCode,
138
- );
139
- switch (version) {
140
- case BackupCode.BackupCodeVersion:
141
- return this.useBackupCodeV1(
142
- encryptedBackupCodes.filter(
143
- (c) => c.version === BackupCode.BackupCodeVersion,
144
- ),
145
- backupCode,
146
- );
147
- default:
148
- throw new InvalidBackupCodeVersionError(version);
149
- }
150
- }
151
-
152
- /**
153
- * v1: Recover a user's private key using a backup code.
154
- */
155
- public async recoverKeyWithBackupCodeV1(
156
- userDoc: IUserDocument,
157
- backupCode: string,
158
- newPassword?: SecureString,
159
- session?: ClientSession,
160
- ): Promise<{
161
- userDoc: IUserDocument;
162
- user: BackendMember;
163
- codeCount: number;
164
- }> {
165
- const normalizedCode = BackupCode.normalizeCode(backupCode);
166
- return await this.withTransaction<{
167
- userDoc: IUserDocument;
168
- user: BackendMember;
169
- codeCount: number;
170
- }>(
171
- async (sess: ClientSession | undefined) => {
172
- const { code, newCodesArray } = this.useBackupCodeV1(
173
- userDoc.backupCodes,
174
- normalizedCode,
175
- );
176
- userDoc.backupCodes = newCodesArray;
177
-
178
- let decryptionKey: Buffer | undefined;
179
- try {
180
- const adminMember = this.getSystemUser();
181
- decryptionKey = await BackupCode.getBackupKeyV1(
182
- code.checksumSalt,
183
- normalizedCode,
184
- );
185
- const privateKeyUnwrapped = adminMember.decryptData(
186
- Buffer.from(code.encrypted, 'hex'),
187
- );
188
- const decryptedPrivateKey = new SecureBuffer(
189
- SymmetricService.decryptBuffer(privateKeyUnwrapped, decryptionKey),
190
- );
191
-
192
- const memberType: MemberType = await this.roleService.getMemberType(
193
- userDoc,
194
- session,
195
- );
196
- const user = new BackendMember(
197
- this.eciesService,
198
- memberType,
199
- userDoc.username,
200
- new EmailString(userDoc.email),
201
- Buffer.from(userDoc.publicKey, 'hex'),
202
- decryptedPrivateKey,
203
- undefined,
204
- userDoc._id,
205
- new Date(userDoc.createdAt),
206
- new Date(userDoc.updatedAt),
207
- );
208
-
209
- if (!newPassword) {
210
- await userDoc.save({ session: sess });
211
- return {
212
- userDoc,
213
- user,
214
- codeCount: newCodesArray.length,
215
- };
216
- }
217
-
218
- const wrapped = this.keyWrappingService.wrapSecret(
219
- decryptedPrivateKey,
220
- newPassword,
221
- );
222
- userDoc.passwordWrappedPrivateKey = wrapped;
223
- await userDoc.save({ session: sess });
224
- return { userDoc, user, codeCount: newCodesArray.length };
225
- } finally {
226
- if (decryptionKey) decryptionKey.fill(0);
227
- }
228
- },
229
- session,
230
- {
231
- timeoutMs: this.application.environment.mongo.transactionTimeout * 5,
232
- },
233
- );
234
- }
235
-
236
- /**
237
- * Recover a user's private key using a backup code (version-dispatched).
238
- */
239
- public async recoverKeyWithBackupCode(
240
- userDoc: IUserDocument,
241
- backupCode: string,
242
- newPassword?: SecureString,
243
- session?: ClientSession,
244
- ): Promise<{
245
- userDoc: IUserDocument;
246
- user: BackendMember;
247
- codeCount: number;
248
- }> {
249
- const version = BackupCode.detectBackupCodeVersion(
250
- userDoc.backupCodes,
251
- backupCode,
252
- );
253
- switch (version) {
254
- case BackupCode.BackupCodeVersion:
255
- return this.recoverKeyWithBackupCodeV1(
256
- userDoc,
257
- backupCode,
258
- newPassword,
259
- session,
260
- );
261
- default:
262
- throw new InvalidBackupCodeVersionError(version);
263
- }
264
- }
265
-
266
- /**
267
- * Rewrap system-wrapped AEAD blobs from old system key to new one without touching inner AEAD.
268
- */
269
- public async rewrapAllUsersBackupCodes(
270
- fetchBatch: (afterId?: string, limit?: number) => Promise<IUserDocument[]>,
271
- saveUser: (user: IUserDocument) => Promise<void>,
272
- oldSystem: BackendMember,
273
- newSystem: BackendMember,
274
- options?: { batchSize?: number; onProgress?: (count: number) => void },
275
- ): Promise<number> {
276
- const batchSize = options?.batchSize ?? 500;
277
- let processed = 0;
278
- let afterId: string | undefined;
279
-
280
- for (;;) {
281
- const users = await fetchBatch(afterId, batchSize);
282
- if (!users.length) break;
283
-
284
- for (const user of users) {
285
- let modified = false;
286
- for (const bc of user.backupCodes ?? []) {
287
- try {
288
- const sealed = oldSystem.decryptData(
289
- Buffer.from(bc.encrypted, 'hex'),
290
- );
291
- const rewrapped = newSystem.encryptData(sealed).toString('hex');
292
- if (rewrapped !== bc.encrypted) {
293
- bc.encrypted = rewrapped;
294
- modified = true;
295
- }
296
- } catch (e) {
297
- throw new Error(
298
- `Failed to rewrap backup code for user ${user._id}: ${
299
- (e as Error).message
300
- }`,
301
- );
302
- }
303
- }
304
- if (modified) {
305
- await saveUser(user);
306
- processed++;
307
- options?.onProgress?.(processed);
308
- }
309
- }
310
-
311
- afterId =
312
- (users[users.length - 1]?._id as unknown as string) ?? undefined;
313
- }
314
- return processed;
315
- }
316
- }
@@ -1,33 +0,0 @@
1
- import { ClientSession, Types } from 'mongoose';
2
- import { IApplication } from '../interfaces/application';
3
- import { TransactionCallback } from '../types';
4
- import {
5
- TransactionOptions,
6
- withTransaction as utilsWithTransaction,
7
- } from '../utils';
8
- import { IBaseDocument } from '../documents';
9
- import { Environment } from '../environment';
10
- import { IConstants } from '../interfaces';
11
-
12
- export class BaseService<TApplication extends IApplication<any, Types.ObjectId, IBaseDocument<any, Types.ObjectId>, Environment, IConstants> = IApplication<any, Types.ObjectId, IBaseDocument<any, Types.ObjectId>, Environment, IConstants>> {
13
- protected readonly application: TApplication;
14
-
15
- constructor(application: TApplication) {
16
- this.application = application;
17
- }
18
- public async withTransaction<T>(
19
- callback: TransactionCallback<T>,
20
- session?: ClientSession,
21
- options?: TransactionOptions,
22
- ...args: any
23
- ) {
24
- return await utilsWithTransaction<T>(
25
- this.application.db.connection,
26
- this.application.environment.mongo.useTransactions,
27
- session,
28
- callback,
29
- options ?? {},
30
- ...args,
31
- );
32
- }
33
- }
@@ -1,161 +0,0 @@
1
- import {
2
- ChecksumBuffer,
3
- ChecksumString,
4
- } from '@digitaldefiance/node-ecies-lib';
5
- import { createHash } from 'crypto';
6
- import { promises as fs } from 'fs';
7
- import { CHECKSUM } from '../constants';
8
- import { IChecksumConfig } from '../interfaces/checksum-config';
9
-
10
- export class ChecksumService {
11
- private readonly config: IChecksumConfig;
12
-
13
- constructor(config?: Partial<IChecksumConfig>) {
14
- this.config = {
15
- algorithm: CHECKSUM.ALGORITHM,
16
- encoding: CHECKSUM.ENCODING,
17
- ...config,
18
- };
19
- }
20
-
21
- /**
22
- * Calculate a checksum for a buffer
23
- * @param data - The data to calculate the checksum for
24
- * @returns The checksum as a Buffer
25
- */
26
- public calculateChecksum(data: Buffer): ChecksumBuffer {
27
- const hash = createHash(this.config.algorithm);
28
- hash.update(data);
29
- const digest = hash.digest();
30
- return Buffer.from(digest) as ChecksumBuffer;
31
- }
32
-
33
- /**
34
- * Calculate a checksum for multiple buffers
35
- * @param buffers - The buffers to calculate the checksum for
36
- * @returns The checksum as a Buffer
37
- */
38
- public calculateChecksumForBuffers(buffers: Buffer[]): ChecksumBuffer {
39
- const hash = createHash(this.config.algorithm);
40
- for (const buffer of buffers) {
41
- hash.update(buffer);
42
- }
43
- const digest = hash.digest();
44
- return Buffer.from(digest) as ChecksumBuffer;
45
- }
46
-
47
- /**
48
- * Calculate a checksum for a string
49
- * @param str - The string to calculate the checksum for
50
- * @returns The checksum as a Buffer
51
- */
52
- public calculateChecksumForString(str: string): ChecksumBuffer {
53
- return this.calculateChecksum(Buffer.from(str, 'utf8'));
54
- }
55
-
56
- /**
57
- * Compare two checksums for equality
58
- * @param checksum1 - The first checksum
59
- * @param checksum2 - The second checksum
60
- * @returns True if the checksums are equal, false otherwise
61
- */
62
- public compareChecksums(
63
- checksum1: ChecksumBuffer,
64
- checksum2: ChecksumBuffer,
65
- ): boolean {
66
- if (
67
- checksum1.length !== CHECKSUM.SHA3_BUFFER_LENGTH ||
68
- checksum2.length !== CHECKSUM.SHA3_BUFFER_LENGTH
69
- ) {
70
- return false;
71
- }
72
- return checksum1.equals(checksum2);
73
- }
74
-
75
- /**
76
- * Convert a checksum to a hex string
77
- * @param checksum - The checksum to convert
78
- * @returns The checksum as a hex string
79
- */
80
- public checksumToHexString(checksum: ChecksumBuffer): ChecksumString {
81
- return checksum.toString(CHECKSUM.ENCODING) as ChecksumString;
82
- }
83
-
84
- /**
85
- * Convert a hex string to a checksum
86
- * @param hexString - The hex string to convert
87
- * @returns The checksum as a Buffer
88
- */
89
- public hexStringToChecksum(hexString: string): ChecksumBuffer {
90
- if (hexString.length !== CHECKSUM.SHA3_BUFFER_LENGTH * 2) {
91
- throw new Error('Invalid checksum hex string length');
92
- }
93
- return Buffer.from(hexString, CHECKSUM.ENCODING) as ChecksumBuffer;
94
- }
95
-
96
- /**
97
- * Validate a checksum buffer
98
- * @param checksum - The checksum to validate
99
- * @returns True if the checksum is valid, false otherwise
100
- */
101
- public validateChecksum(checksum: ChecksumBuffer): boolean {
102
- return checksum.length === CHECKSUM.SHA3_BUFFER_LENGTH;
103
- }
104
-
105
- /**
106
- * Calculate a checksum for a file
107
- * @param filePath - The path to the file
108
- * @returns The checksum as a Buffer
109
- */
110
- public async calculateChecksumForFile(
111
- filePath: string,
112
- ): Promise<ChecksumBuffer> {
113
- // Removed dynamic import by using the data service to read file data
114
- // This is a temporary solution that can be replaced with a proper file service
115
- // The implementation now delegates file reading to the caller
116
- const buffer = Buffer.from(await this.readFile(filePath));
117
- return this.calculateChecksum(buffer);
118
- }
119
-
120
- /**
121
- * Internal file reading method
122
- * @private
123
- */
124
- private async readFile(filePath: string): Promise<Buffer> {
125
- // Import fs using a static import that's available at module load time
126
- // This solves the dynamic import/require issues
127
- try {
128
- return await fs.readFile(filePath);
129
- } catch {
130
- throw new Error(`Failed to read file at path: ${filePath}`);
131
- }
132
- }
133
-
134
- /**
135
- * Calculate a checksum for a stream
136
- * @param stream - The readable stream
137
- * @returns The checksum as a Buffer
138
- */
139
- public calculateChecksumForStream(
140
- stream: NodeJS.ReadableStream,
141
- ): Promise<ChecksumBuffer> {
142
- return new Promise((resolve, reject) => {
143
- const hash = createHash(this.config.algorithm);
144
- stream.on('data', (chunk) => {
145
- // Ensure chunk is a Buffer before updating hash
146
- if (Buffer.isBuffer(chunk)) {
147
- hash.update(chunk);
148
- } else if (typeof chunk === 'number') {
149
- hash.update(Buffer.from([chunk]));
150
- } else {
151
- hash.update(Buffer.from(chunk));
152
- }
153
- });
154
- stream.on('end', () => {
155
- const digest = hash.digest();
156
- resolve(Buffer.from(digest) as ChecksumBuffer);
157
- });
158
- stream.on('error', reject);
159
- });
160
- }
161
- }