@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,151 +0,0 @@
1
- import { IECIESConfig } from '@digitaldefiance/ecies-lib';
2
- import { ECIESService } from '@digitaldefiance/node-ecies-lib';
3
- import {
4
- ITokenRole,
5
- ITokenUser,
6
- IUserBase,
7
- } from '@digitaldefiance/suite-core-lib';
8
- import { UserController } from '../controllers/user';
9
- import { IApplication } from '../interfaces/application';
10
- import { IEmailService } from '../interfaces/email-service';
11
- import { emailServiceRegistry } from '../registry';
12
- import { BackupCodeService } from '../services/backup-code';
13
- import { JwtService } from '../services/jwt';
14
- import { KeyWrappingService } from '../services/key-wrapping';
15
- import { RoleService } from '../services/role';
16
- import { UserService } from '../services/user';
17
- import { BaseRouter } from './base';
18
- import { Types } from 'mongoose';
19
- import { IBaseDocument } from '../documents';
20
- import { Environment } from '../environment';
21
- import { IConstants } from '../interfaces';
22
-
23
- /**
24
- * Router for the API
25
- */
26
- export class ApiRouter<
27
- I extends Types.ObjectId | string,
28
- D extends Date,
29
- S extends string,
30
- A extends string,
31
- TUser extends IUserBase<I, D, S, A> = IUserBase<I, D, S, A>,
32
- TTokenRole extends ITokenRole<I, D> = ITokenRole<I, D>,
33
- TBaseDocument extends IBaseDocument<any, Types.ObjectId> = IBaseDocument<any, Types.ObjectId>,
34
- TTokenUser extends ITokenUser = ITokenUser,
35
- TConstants extends IConstants = IConstants,
36
- TEnvironment extends Environment = Environment,
37
- TApplication extends IApplication<any, Types.ObjectId, TBaseDocument, TEnvironment, TConstants> = IApplication<any, Types.ObjectId, TBaseDocument, TEnvironment, TConstants>,
38
- > extends BaseRouter<TApplication> {
39
- private readonly userController: UserController<
40
- I,
41
- D,
42
- S,
43
- A,
44
- TUser,
45
- TTokenRole,
46
- TTokenUser,
47
- TApplication
48
- >;
49
- private readonly jwtService: JwtService<
50
- I,
51
- D,
52
- TTokenRole,
53
- TTokenUser,
54
- TApplication
55
- >;
56
- private readonly emailService: IEmailService;
57
- private readonly userService: UserService<
58
- any,
59
- I,
60
- D,
61
- S,
62
- A,
63
- TEnvironment,
64
- TConstants,
65
- TBaseDocument,
66
- TUser,
67
- TTokenRole,
68
- TApplication
69
- >;
70
- private readonly roleService: RoleService<I, D, TTokenRole>;
71
- private readonly keyWrappingService: KeyWrappingService;
72
- private readonly eciesService: ECIESService;
73
- private readonly backupCodeService: BackupCodeService<
74
- I,
75
- D,
76
- TTokenRole,
77
- TApplication
78
- >;
79
- /**
80
- * Constructor for the API router
81
- * @param connection The mongoose connection
82
- * @param getModel The function to get a mongoose model by name
83
- */
84
- constructor(application: TApplication) {
85
- super(application);
86
- this.jwtService = new JwtService(application);
87
- this.roleService = new RoleService<I, D, TTokenRole>(application);
88
- this.emailService = emailServiceRegistry.getService();
89
- this.keyWrappingService = new KeyWrappingService();
90
- const config: IECIESConfig = {
91
- curveName: application.constants.ECIES.CURVE_NAME,
92
- primaryKeyDerivationPath:
93
- application.constants.ECIES.PRIMARY_KEY_DERIVATION_PATH,
94
- mnemonicStrength: application.constants.ECIES.MNEMONIC_STRENGTH,
95
- symmetricAlgorithm:
96
- application.constants.ECIES.SYMMETRIC_ALGORITHM_CONFIGURATION,
97
- symmetricKeyBits: application.constants.ECIES.SYMMETRIC.KEY_BITS,
98
- symmetricKeyMode: application.constants.ECIES.SYMMETRIC.MODE,
99
- };
100
- this.eciesService = new ECIESService(config);
101
- this.backupCodeService = new BackupCodeService<
102
- I,
103
- D,
104
- TTokenRole,
105
- TApplication
106
- >(
107
- application,
108
- this.eciesService,
109
- this.keyWrappingService,
110
- this.roleService,
111
- );
112
-
113
- this.userService = new UserService<
114
- any,
115
- I,
116
- D,
117
- S,
118
- A,
119
- TEnvironment,
120
- TConstants,
121
- TBaseDocument,
122
- TUser,
123
- TTokenRole,
124
- TApplication
125
- >(
126
- application,
127
- this.roleService,
128
- this.emailService,
129
- this.keyWrappingService,
130
- this.backupCodeService,
131
- );
132
- this.userController = new UserController<
133
- I,
134
- D,
135
- S,
136
- A,
137
- TUser,
138
- TTokenRole,
139
- TTokenUser,
140
- TApplication
141
- >(
142
- application,
143
- this.jwtService,
144
- this.userService,
145
- this.backupCodeService,
146
- this.roleService,
147
- this.eciesService,
148
- );
149
- this.router.use('/user', this.userController.router);
150
- }
151
- }
@@ -1,258 +0,0 @@
1
- import {
2
- CoreI18nComponentId,
3
- PluginTranslatableGenericError,
4
- } from '@digitaldefiance/i18n-lib';
5
- import {
6
- getSuiteCoreTranslation,
7
- SuiteCoreStringKey,
8
- TranslatableSuiteError,
9
- } from '@digitaldefiance/suite-core-lib';
10
- import ejs from 'ejs';
11
- import {
12
- Application,
13
- static as expressStatic,
14
- Request,
15
- Response,
16
- } from 'express';
17
- import { existsSync, readdirSync } from 'fs';
18
- import { basename, join, resolve, sep } from 'path';
19
- import { IApplication } from '../interfaces/application';
20
- import { debugLog, handleError, sendApiMessageResponse } from '../utils';
21
- import { BaseRouter } from './base';
22
- import { Types } from 'mongoose';
23
- import { IBaseDocument } from '../documents';
24
- import { Environment } from '../environment';
25
- import { IConstants } from '../interfaces';
26
-
27
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
28
- function keepEJS() {
29
- ejs.compile(''); // Compile an empty string, doesn't generate anything meaningful
30
- }
31
-
32
- /**
33
- * Application router
34
- * Sets up the API and static file serving
35
- */
36
- export class AppRouter<TApplication extends IApplication<any, Types.ObjectId, IBaseDocument<any, Types.ObjectId>, Environment, IConstants> = IApplication<any, Types.ObjectId, IBaseDocument<any, Types.ObjectId>, Environment, IConstants>> {
37
- private readonly viewsPath: string;
38
- private readonly indexPath: string;
39
- private readonly assetsDir: string;
40
- private readonly reactDistDir: string;
41
-
42
- private readonly apiRouter: BaseRouter<TApplication>;
43
- private readonly application: TApplication;
44
-
45
- constructor(apiRouter: BaseRouter<TApplication>) {
46
- this.application = apiRouter.application;
47
- this.apiRouter = apiRouter;
48
-
49
- // Validate paths don't contain traversal sequences
50
- if (
51
- this.application.environment.apiDistDir.includes('..') ||
52
- this.application.environment.reactDistDir.includes('..')
53
- ) {
54
- throw new TranslatableSuiteError(SuiteCoreStringKey.Error_InvalidPathContainsParentDirectoryReference);
55
- }
56
-
57
- const normalizedApiDistDir = resolve(this.application.environment.apiDistDir);
58
- const viewsPath = resolve(normalizedApiDistDir, 'views');
59
- if (
60
- !viewsPath.startsWith(normalizedApiDistDir + sep) &&
61
- viewsPath !== normalizedApiDistDir
62
- ) {
63
- throw new TranslatableSuiteError(SuiteCoreStringKey.Error_InvalidViewsPathEscapesBaseDirectory);
64
- }
65
- this.viewsPath = viewsPath;
66
-
67
- const normalizedReactDistDir = resolve(
68
- this.application.environment.reactDistDir,
69
- );
70
- this.reactDistDir = normalizedReactDistDir;
71
-
72
- const indexPath = resolve(normalizedReactDistDir, 'index.html');
73
- if (
74
- !indexPath.startsWith(normalizedReactDistDir + sep) &&
75
- indexPath !== normalizedReactDistDir
76
- ) {
77
- throw new TranslatableSuiteError(SuiteCoreStringKey.Error_InvalidIndexPathEscapesBaseDirectory);
78
- }
79
- this.indexPath = indexPath;
80
-
81
- const assetsPath = resolve(normalizedReactDistDir, 'assets');
82
- if (
83
- !assetsPath.startsWith(normalizedReactDistDir + sep) &&
84
- assetsPath !== normalizedReactDistDir
85
- ) {
86
- throw new TranslatableSuiteError(SuiteCoreStringKey.Error_InvalidAssetsPathEscapesBaseDirectory);
87
- }
88
- this.assetsDir = assetsPath;
89
- }
90
-
91
- public getAssetFilename(
92
- assetDir: string,
93
- pattern: RegExp,
94
- ): string | undefined {
95
- try {
96
- // Prevent path traversal by validating assetDir is within expected directory
97
- // amazonq-ignore-next-line already addressed
98
- if (
99
- // amazonq-ignore-next-line
100
- assetDir.includes('..') ||
101
- !assetDir.startsWith(this.reactDistDir)
102
- ) {
103
- return undefined;
104
- }
105
- const files = readdirSync(assetDir, 'utf8');
106
- return files.find((f) => pattern.test(f));
107
- } catch {
108
- return undefined;
109
- }
110
- }
111
-
112
- /**
113
- * Initialize the application router
114
- * @param app Express application
115
- * @param debugRoutes Whether to log routes
116
- */
117
- public init(app: Application) {
118
- if (
119
- basename(this.apiRouter.application.environment.reactDistDir) !== 'dist')
120
- {
121
- throw new PluginTranslatableGenericError<SuiteCoreStringKey, string>(
122
- CoreI18nComponentId,
123
- SuiteCoreStringKey.Error_AppDoesNotAppearToBeRunningWithinDistTemplate,
124
- { dir: this.apiRouter.application.environment.reactDistDir },
125
- );
126
- }
127
- if (!existsSync(this.indexPath)) {
128
- throw new PluginTranslatableGenericError<SuiteCoreStringKey, string>(
129
- CoreI18nComponentId,
130
- SuiteCoreStringKey.Error_IndexFileNotFoundTemplate,
131
- { path: this.indexPath },
132
- );
133
- }
134
-
135
- if (this.apiRouter.application.environment.debug) {
136
- app.use((req, res, next) => {
137
- const port =
138
- (req.socket.localPort === 443 && req.protocol === 'https') ||
139
- (req.socket.localPort === 80 && req.protocol === 'http')
140
- ? ''
141
- : `:${req.socket.localPort}`;
142
- // amazonq-ignore-next-line
143
- console.log(
144
- getSuiteCoreTranslation(SuiteCoreStringKey.Admin_ServingRoute) +
145
- ': method=' +
146
- req.method +
147
- ' url=' +
148
- req.protocol +
149
- '://' +
150
- req.hostname +
151
- port +
152
- (req.url || '').replace(/[\r\n]/g, ' '),
153
- );
154
- next();
155
- });
156
- }
157
-
158
- app.use('/api', this.apiRouter.router);
159
-
160
- app.set('views', this.viewsPath);
161
- app.set('view engine', 'ejs');
162
-
163
- // Serve static files from the React app build directory (validated in constructor)
164
- app.use('/assets', expressStatic(this.assetsDir));
165
- const serveStaticWithLogging = expressStatic(this.reactDistDir);
166
- app.use('/static/js', expressStatic(this.reactDistDir));
167
- app.use((req, res, next) => {
168
- if (req.url === '/') {
169
- next();
170
- return;
171
- }
172
- debugLog(
173
- this.apiRouter.application.environment.debug,
174
- 'log',
175
- `Trying to serve static for ${(req.url || '')
176
- .replace(/[\r\n]/g, ' ')}`,
177
- );
178
- if (req.url.endsWith('.js')) {
179
- res.type('application/javascript');
180
- }
181
- serveStaticWithLogging(req, res, (err) => {
182
- if (err) {
183
- const sanitizedErr =
184
- err instanceof Error
185
- ? err.message.replace(/[\r\n]/g, ' ')
186
- : String(err)
187
- .replace(/[\r\n]/g, ' ');
188
- debugLog(
189
- this.apiRouter.application.environment.debug,
190
- 'error',
191
- 'Error serving static file:',
192
- sanitizedErr,
193
- );
194
- handleError(err, res, sendApiMessageResponse, next);
195
- return;
196
- }
197
- next();
198
- });
199
- });
200
-
201
- // The "catchall" handler: for any request that doesn't
202
- // match one above, send back React's index.html file.
203
- // app.get('*', (req, res) => {
204
- // res.sendFile(path.join(__dirname,'..', '..', '..', 'myapp-react', 'index.html'));
205
- // });
206
- app.use((req: Request, res: Response) => {
207
- const cspNonce = res.locals['cspNonce'];
208
- if (req.url.endsWith('.js')) {
209
- res.type('application/javascript');
210
- }
211
-
212
- const SiteName = this.application.constants.Site;
213
- const SiteTagline = this.application.constants.SiteTagline;
214
- const SiteDescription = this.application.constants.SiteDescription;
215
- const hostname = req.hostname;
216
- const jsFile = this.getAssetFilename(this.assetsDir, /^index-.*\.js$/);
217
- const cssFile = this.getAssetFilename(this.assetsDir, /^index-.*\.css$/);
218
- const server =
219
- (req.socket.localPort === 443 && req.protocol === 'https') ||
220
- (req.socket.localPort === 80 && req.protocol === 'http')
221
- ? `${req.protocol}://${hostname}`
222
- : `${req.protocol}://${hostname}:${req.socket.localPort}`;
223
-
224
- res.render(
225
- 'index',
226
- {
227
- cspNonce,
228
- title: SiteName,
229
- tagline: SiteTagline,
230
- description: SiteDescription,
231
- server: server,
232
- siteUrl: this.apiRouter.application.environment.serverUrl,
233
- baseHref: this.apiRouter.application.environment.basePath,
234
- hostname: hostname,
235
- siteTitle: SiteName,
236
- jsFile: jsFile ? `assets/${jsFile}` : undefined,
237
- cssFile: cssFile ? `assets/${cssFile}` : undefined,
238
- },
239
- (err, html) => {
240
- // Render 'index.ejs'
241
- if (err) {
242
- const errMsg =
243
- err && typeof err === 'object' && 'message' in err
244
- ? String(err.message)
245
- .replace(/[\r\n]/g, ' ')
246
- : 'Unknown error';
247
- console.error('Error rendering: ' + errMsg);
248
- if (!res.headersSent) {
249
- res.status(500).send('An error occurred'); // Send a generic error message or render a separate error view
250
- }
251
- return;
252
- }
253
- res.send(html);
254
- },
255
- );
256
- });
257
- }
258
- }
@@ -1,17 +0,0 @@
1
- import { Router } from 'express';
2
- import { IApplication } from '../interfaces/application';
3
- import { Types } from 'mongoose';
4
- import { IBaseDocument } from '../documents';
5
- import { Environment } from '../environment';
6
- import { IConstants } from '../interfaces';
7
-
8
- export abstract class BaseRouter<
9
- TApplication extends IApplication<any, Types.ObjectId, IBaseDocument<any, Types.ObjectId>, Environment, IConstants> = IApplication<any, Types.ObjectId, IBaseDocument<any, Types.ObjectId>, Environment, IConstants>,
10
- > {
11
- public readonly router: Router;
12
- public readonly application: TApplication;
13
- protected constructor(application: TApplication) {
14
- this.application = application;
15
- this.router = Router();
16
- }
17
- }
@@ -1,91 +0,0 @@
1
- import {
2
- EmailTokenType,
3
- getSuiteCoreTranslation,
4
- SuiteCoreStringKey,
5
- } from '@digitaldefiance/suite-core-lib';
6
- import { Schema } from 'mongoose';
7
- import validator from 'validator';
8
- import { IEmailTokenDocument } from '../documents/email-token';
9
- import { BaseModelName } from '../enumerations';
10
-
11
- /**
12
- * Configuration options for creating an email token schema
13
- */
14
- export interface EmailTokenSchemaOptions<
15
- TTokenType extends string = EmailTokenType,
16
- TModelName extends string = BaseModelName,
17
- > {
18
- /** Token type enum values to use */
19
- tokenTypeEnum?: TTokenType[];
20
- /** Model name for user reference */
21
- userModelName?: TModelName;
22
- /** Token expiration time (default: '1d') */
23
- expiresIn?: string;
24
- /** Custom email validator function */
25
- emailValidator?: (v: string) => boolean;
26
- /** Custom validation error message function */
27
- validationMessage?: (props: { value: string }) => string;
28
- }
29
-
30
- /**
31
- * Factory function to create an extensible email token schema
32
- */
33
- export function createEmailTokenSchema<
34
- TTokenType extends string = EmailTokenType,
35
- TModelName extends string = BaseModelName,
36
- >(
37
- options: EmailTokenSchemaOptions<TTokenType, TModelName> = {},
38
- ): Schema<IEmailTokenDocument> {
39
- const {
40
- tokenTypeEnum = Object.values(EmailTokenType) as TTokenType[],
41
- userModelName = BaseModelName.User as TModelName,
42
- expiresIn = '1d',
43
- validationMessage = (props: { value: string }) =>
44
- getSuiteCoreTranslation(SuiteCoreStringKey.Error_InvalidEmailTemplate, {
45
- email: props.value,
46
- }),
47
- } = options;
48
-
49
- const schema = new Schema<IEmailTokenDocument>(
50
- {
51
- userId: {
52
- type: Schema.Types.ObjectId,
53
- required: true,
54
- ref: userModelName,
55
- immutable: true,
56
- },
57
- type: {
58
- type: String,
59
- enum: tokenTypeEnum,
60
- required: true,
61
- immutable: true,
62
- },
63
- token: { type: String, required: true, immutable: true, unique: true },
64
- email: {
65
- type: String,
66
- required: true,
67
- immutable: true,
68
- validate: {
69
- validator: (v: string) => validator.isEmail(v),
70
- message: validationMessage,
71
- },
72
- },
73
- lastSent: { type: Date, required: false },
74
- expiresAt: {
75
- type: Date,
76
- default: Date.now,
77
- index: { expires: expiresIn },
78
- },
79
- },
80
- { timestamps: true },
81
- );
82
-
83
- schema.index({ userId: 1, email: 1, type: 1 }, { unique: true });
84
-
85
- return schema;
86
- }
87
-
88
- /**
89
- * Default email token schema with base configuration
90
- */
91
- export const EmailTokenSchema = createEmailTokenSchema();
@@ -1,37 +0,0 @@
1
- import {
2
- getSuiteCoreTranslation,
3
- SuiteCoreStringKey,
4
- } from '@digitaldefiance/suite-core-lib';
5
- import { Schema } from 'mongoose';
6
- import { Constants as AppConstants } from '../constants';
7
- import { IMnemonicDocument } from '../documents/mnemonic';
8
- import { IConstants } from '../interfaces/constants';
9
-
10
- /**
11
- * Create a mnemonic schema with custom or default constants
12
- */
13
- export function createMnemonicSchema<T extends IConstants = IConstants>(
14
- constants: T = AppConstants as T,
15
- validationMessage?: () => string,
16
- ): Schema<IMnemonicDocument> {
17
- return new Schema<IMnemonicDocument>({
18
- hmac: {
19
- type: String,
20
- required: true,
21
- unique: true,
22
- index: true,
23
- validate: {
24
- validator: (v: string) => constants.HmacRegex.test(v),
25
- message:
26
- validationMessage ||
27
- (() =>
28
- getSuiteCoreTranslation(SuiteCoreStringKey.Validation_HmacRegex)),
29
- },
30
- },
31
- });
32
- }
33
-
34
- /**
35
- * Default mnemonic schema using AppConstants
36
- */
37
- export const MnemonicSchema = createMnemonicSchema();
@@ -1,127 +0,0 @@
1
- import {
2
- Role,
3
- SuiteCoreStringKey,
4
- TranslatableSuiteError,
5
- } from '@digitaldefiance/suite-core-lib';
6
- import { CallbackWithoutResultAndOptionalError, Schema } from 'mongoose';
7
- import { IRoleDocument } from '../documents/role';
8
- import { BaseModelName } from '../enumerations';
9
-
10
- /**
11
- * Configuration options for creating a role schema
12
- */
13
- export interface RoleSchemaOptions<
14
- TRole extends string = Role,
15
- TModelName extends string = BaseModelName,
16
- > {
17
- /** Role enum values to use */
18
- roleEnum?: TRole[];
19
- /** Model name for user reference */
20
- userModelName?: TModelName;
21
- /** Custom pre-save validation function */
22
- customValidation?: (
23
- doc: IRoleDocument,
24
- next: CallbackWithoutResultAndOptionalError,
25
- ) => void;
26
- }
27
-
28
- /**
29
- * Factory function to create an extensible role schema
30
- */
31
- export function createRoleSchema<
32
- TRole extends string = Role,
33
- TModelName extends string = BaseModelName,
34
- >(options: RoleSchemaOptions<TRole, TModelName> = {}): Schema<IRoleDocument> {
35
- const {
36
- roleEnum = Object.values(Role) as TRole[],
37
- userModelName = BaseModelName.User as TModelName,
38
- customValidation,
39
- } = options;
40
-
41
- const schema = new Schema<IRoleDocument>(
42
- {
43
- name: {
44
- type: String,
45
- enum: roleEnum,
46
- required: true,
47
- immutable: true,
48
- },
49
- admin: {
50
- type: Boolean,
51
- default: false,
52
- immutable: true,
53
- },
54
- member: {
55
- type: Boolean,
56
- default: false,
57
- immutable: true,
58
- },
59
- child: {
60
- type: Boolean,
61
- default: false,
62
- immutable: true,
63
- },
64
- system: {
65
- type: Boolean,
66
- default: false,
67
- immutable: true,
68
- },
69
- createdBy: {
70
- type: Schema.Types.ObjectId,
71
- ref: userModelName,
72
- required: true,
73
- immutable: true,
74
- },
75
- updatedBy: {
76
- type: Schema.Types.ObjectId,
77
- ref: userModelName,
78
- required: true,
79
- },
80
- deletedAt: {
81
- type: Date,
82
- optional: true,
83
- get: (v: Date) => v,
84
- set: (v: Date) => new Date(v.toUTCString()),
85
- },
86
- deletedBy: {
87
- type: Schema.Types.ObjectId,
88
- ref: userModelName,
89
- required: false,
90
- optional: true,
91
- },
92
- },
93
- { timestamps: true },
94
- );
95
-
96
- schema.index({ name: 1 }, { unique: true });
97
-
98
- schema.pre('save', function (next: CallbackWithoutResultAndOptionalError) {
99
- if (customValidation) {
100
- customValidation(this, next);
101
- } else {
102
- // Default validation
103
- if (this.admin && this.child) {
104
- return next(
105
- new TranslatableSuiteError(
106
- SuiteCoreStringKey.Error_ChildRoleCannotBeAnAdminRole,
107
- ),
108
- );
109
- }
110
- if (this.system && this.child) {
111
- return next(
112
- new TranslatableSuiteError(
113
- SuiteCoreStringKey.Error_ChildRoleCannotBeASystemRole,
114
- ),
115
- );
116
- }
117
- next();
118
- }
119
- });
120
-
121
- return schema;
122
- }
123
-
124
- /**
125
- * Default role schema with base configuration
126
- */
127
- export const RoleSchema = createRoleSchema();