@digitaldefiance/node-express-suite 3.7.4 → 3.7.5

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 (878) hide show
  1. package/LICENSE +21 -0
  2. package/package.json +4 -5
  3. package/src/__tests__/fixtures/{index.d.ts → index.ts} +0 -1
  4. package/src/__tests__/fixtures/model-mocks.mock.ts +164 -0
  5. package/src/__tests__/helpers/application.mock.ts +89 -0
  6. package/src/__tests__/helpers/{index.d.ts → index.ts} +0 -1
  7. package/src/__tests__/helpers/setup-test-env.ts +202 -0
  8. package/src/__tests__/{index.d.ts → index.ts} +0 -1
  9. package/src/application-base.ts +548 -0
  10. package/src/application-concrete.ts +62 -0
  11. package/src/application.ts +330 -0
  12. package/src/backup-code.ts +348 -0
  13. package/src/builders/application-builder.ts +147 -0
  14. package/src/builders/{index.d.ts → index.ts} +0 -1
  15. package/src/constants.ts +89 -0
  16. package/src/container/{index.d.ts → index.ts} +0 -1
  17. package/src/container/service-container.ts +85 -0
  18. package/src/container/service-definitions.ts +23 -0
  19. package/src/controllers/base.ts +512 -0
  20. package/src/controllers/{index.d.ts → index.ts} +0 -1
  21. package/src/controllers/user.ts +1734 -0
  22. package/src/database/database-initializer.ts +13 -0
  23. package/src/database/{index.d.ts → index.ts} +0 -1
  24. package/src/decorators/base-controller.ts +91 -0
  25. package/src/decorators/controller.ts +152 -0
  26. package/src/decorators/{index.d.ts → index.ts} +0 -1
  27. package/src/decorators/zod-validation.ts +64 -0
  28. package/src/defaults.ts +259 -0
  29. package/src/documents/base.ts +17 -0
  30. package/src/documents/email-token.ts +20 -0
  31. package/src/documents/{index.d.ts → index.ts} +0 -1
  32. package/src/documents/mnemonic.ts +20 -0
  33. package/src/documents/role.ts +19 -0
  34. package/src/documents/used-direct-login-token.ts +18 -0
  35. package/src/documents/user-role.ts +20 -0
  36. package/src/documents/user.ts +20 -0
  37. package/src/enumerations/base-model-name.ts +47 -0
  38. package/src/enumerations/{index.d.ts → index.ts} +0 -1
  39. package/src/enumerations/length-encoding-type.ts +16 -0
  40. package/src/enumerations/schema-collection.ts +39 -0
  41. package/src/enumerations/symmetric-error-type.ts +13 -0
  42. package/src/environment.ts +859 -0
  43. package/src/errors/express-validation.ts +38 -0
  44. package/src/errors/{index.d.ts → index.ts} +0 -1
  45. package/src/errors/invalid-backup-code-version.ts +30 -0
  46. package/src/errors/invalid-jwt-token.ts +24 -0
  47. package/src/errors/invalid-model.ts +24 -0
  48. package/src/errors/invalid-new-password.ts +33 -0
  49. package/src/errors/invalid-password.ts +28 -0
  50. package/src/errors/missing-validated-data.ts +55 -0
  51. package/src/errors/mnemonic-or-password-required.ts +26 -0
  52. package/src/errors/model-not-registered.ts +24 -0
  53. package/src/errors/mongoose-validation.ts +56 -0
  54. package/src/errors/symmetric.ts +53 -0
  55. package/src/errors/token-expired.ts +24 -0
  56. package/src/get-language.ts +64 -0
  57. package/src/get-timezone.ts +76 -0
  58. package/src/{index.d.ts → index.ts} +44 -2
  59. package/src/interfaces/api-error-response.ts +15 -0
  60. package/src/interfaces/api-express-validation-error-response.ts +17 -0
  61. package/src/interfaces/api-message-response.ts +12 -0
  62. package/src/interfaces/api-mongo-validation-error-response.ts +17 -0
  63. package/src/interfaces/api-responses/backup-codes-response.ts +15 -0
  64. package/src/interfaces/api-responses/challenge-response.ts +17 -0
  65. package/src/interfaces/api-responses/code-count-response.ts +12 -0
  66. package/src/interfaces/api-responses/{index.d.ts → index.ts} +0 -1
  67. package/src/interfaces/api-responses/login-response.ts +18 -0
  68. package/src/interfaces/api-responses/mnemonic-response.ts +15 -0
  69. package/src/interfaces/api-responses/registration-response.ts +17 -0
  70. package/src/interfaces/api-responses/request-user-response.ts +16 -0
  71. package/src/interfaces/api-responses/user-settings-response.ts +19 -0
  72. package/src/interfaces/application.ts +40 -0
  73. package/src/interfaces/backend-objects/email-token.ts +18 -0
  74. package/src/interfaces/backend-objects/{index.d.ts → index.ts} +0 -1
  75. package/src/interfaces/backend-objects/request-user.ts +19 -0
  76. package/src/interfaces/backend-objects/role.ts +18 -0
  77. package/src/interfaces/backend-objects/user.ts +18 -0
  78. package/src/interfaces/checksum-config.ts +15 -0
  79. package/src/interfaces/checksum-consts.ts +23 -0
  80. package/src/interfaces/constants.ts +114 -0
  81. package/src/interfaces/controller-config.ts +54 -0
  82. package/src/interfaces/create-user-basics.ts +24 -0
  83. package/src/interfaces/csp-config.ts +32 -0
  84. package/src/interfaces/csp-definition.ts +71 -0
  85. package/src/interfaces/db-init-result.ts +17 -0
  86. package/src/interfaces/deep-partial.ts +14 -0
  87. package/src/interfaces/discriminator-collections.ts +21 -0
  88. package/src/interfaces/email-service.ts +26 -0
  89. package/src/interfaces/environment-mongo.ts +86 -0
  90. package/src/interfaces/environment.ts +191 -0
  91. package/src/interfaces/failable-result.ts +20 -0
  92. package/src/interfaces/fec-consts.ts +14 -0
  93. package/src/interfaces/flexible-csp.ts +35 -0
  94. package/src/interfaces/handleable-error-options.ts +19 -0
  95. package/src/interfaces/{index.d.ts → index.ts} +0 -1
  96. package/src/interfaces/jwt-consts.ts +33 -0
  97. package/src/interfaces/jwt-sign-response.ts +31 -0
  98. package/src/interfaces/models/email-token.ts +13 -0
  99. package/src/interfaces/models/{index.d.ts → index.ts} +0 -1
  100. package/src/interfaces/models/mnemonic.ts +14 -0
  101. package/src/interfaces/models/role.ts +13 -0
  102. package/src/interfaces/models/token-role.ts +23 -0
  103. package/src/interfaces/models/used-direct-login-token.ts +21 -0
  104. package/src/interfaces/models/user-role.ts +23 -0
  105. package/src/interfaces/models/user.ts +30 -0
  106. package/src/interfaces/mongo-errors.ts +14 -0
  107. package/src/interfaces/request-user.ts +80 -0
  108. package/src/interfaces/required-string-keys.ts +33 -0
  109. package/src/interfaces/schema.ts +43 -0
  110. package/src/interfaces/server-init-result.ts +48 -0
  111. package/src/interfaces/status-code-response.ts +20 -0
  112. package/src/interfaces/symmetric-encryption-results.d.ts.map +1 -1
  113. package/src/interfaces/symmetric-encryption-results.js.map +1 -1
  114. package/src/interfaces/symmetric-encryption-results.ts +15 -0
  115. package/src/interfaces/test-environment.ts +23 -0
  116. package/src/interfaces/token-response.ts +16 -0
  117. package/src/middleware-utils.ts +138 -0
  118. package/src/middlewares/authenticate-crypto.ts +237 -0
  119. package/src/middlewares/authenticate-token.ts +165 -0
  120. package/src/middlewares/cleanup-crypto.ts +47 -0
  121. package/src/middlewares/{index.d.ts → index.ts} +0 -1
  122. package/src/middlewares/set-global-context-language.ts +38 -0
  123. package/src/model-registry.ts +142 -0
  124. package/src/models/email-token.ts +49 -0
  125. package/src/models/{index.d.ts → index.ts} +0 -1
  126. package/src/models/mnemonic.ts +42 -0
  127. package/src/models/role.ts +38 -0
  128. package/src/models/used-direct-login-token.ts +49 -0
  129. package/src/models/user-role.ts +40 -0
  130. package/src/models/user.ts +42 -0
  131. package/src/pipeline/{index.d.ts → index.ts} +0 -1
  132. package/src/pipeline/pipeline-builder.ts +27 -0
  133. package/src/plugins/{index.d.ts → index.ts} +0 -1
  134. package/src/plugins/plugin-interface.ts +19 -0
  135. package/src/plugins/plugin-manager.ts +53 -0
  136. package/src/registry/email-service-registry.ts +76 -0
  137. package/src/registry/{index.d.ts → index.ts} +0 -1
  138. package/src/responses/{index.d.ts → index.ts} +0 -1
  139. package/src/responses/response-builder.ts +166 -0
  140. package/src/routers/api.ts +233 -0
  141. package/src/routers/app.ts +395 -0
  142. package/src/routers/base.ts +34 -0
  143. package/src/routers/{index.d.ts → index.ts} +0 -1
  144. package/src/routers/router-config.ts +34 -0
  145. package/src/routing/index.ts +1 -0
  146. package/src/routing/route-builder.ts +214 -0
  147. package/src/schemas/email-token.ts +112 -0
  148. package/src/schemas/{index.d.ts → index.ts} +0 -1
  149. package/src/schemas/mnemonic.ts +48 -0
  150. package/src/schemas/role.ts +153 -0
  151. package/src/schemas/schema.ts +185 -0
  152. package/src/schemas/used-direct-login-token.ts +58 -0
  153. package/src/schemas/user-role.ts +93 -0
  154. package/src/schemas/user.ts +244 -0
  155. package/src/services/backup-code.ts +327 -0
  156. package/src/services/base.ts +46 -0
  157. package/src/services/checksum.ts +189 -0
  158. package/src/services/database-initialization.ts +1653 -0
  159. package/src/services/db-init-cache.ts +28 -0
  160. package/src/services/direct-login-token.ts +83 -0
  161. package/src/services/dummy-email-service.ts +43 -0
  162. package/src/services/fec-usage-example.ts +123 -0
  163. package/src/services/fec.ts +399 -0
  164. package/src/services/{index.d.ts → index.ts} +0 -1
  165. package/src/services/jwt.ts +146 -0
  166. package/src/services/key-wrapping.ts +528 -0
  167. package/src/services/mnemonic.ts +174 -0
  168. package/src/services/request-user.ts +127 -0
  169. package/src/services/role.ts +417 -0
  170. package/src/services/symmetric.ts +164 -0
  171. package/src/services/system-user.ts +87 -0
  172. package/src/services/user.ts +2324 -0
  173. package/src/services/xor.ts +39 -0
  174. package/src/testing.ts +9 -0
  175. package/src/transactions/{index.d.ts → index.ts} +0 -1
  176. package/src/transactions/transaction-manager.ts +63 -0
  177. package/src/types/app-config.ts +36 -0
  178. package/src/types/controller-config.ts +28 -0
  179. package/src/types/{environment-variables.d.ts → environment-variables.ts} +32 -5
  180. package/src/types/{index.d.ts → index.ts} +0 -1
  181. package/src/types/{mongoose-helpers.d.ts → mongoose-helpers.ts} +8 -2
  182. package/src/types/mongoose-override.d.ts +1 -0
  183. package/src/types/mongoose.d.ts +1 -0
  184. package/src/types.ts +189 -0
  185. package/src/utils.ts +1116 -0
  186. package/src/validation/{index.d.ts → index.ts} +0 -1
  187. package/src/validation/validation-builder.ts +155 -0
  188. package/src/__tests__/fixtures/index.d.ts.map +0 -1
  189. package/src/__tests__/fixtures/index.js +0 -5
  190. package/src/__tests__/fixtures/index.js.map +0 -1
  191. package/src/__tests__/fixtures/model-mocks.mock.d.ts +0 -12
  192. package/src/__tests__/fixtures/model-mocks.mock.d.ts.map +0 -1
  193. package/src/__tests__/fixtures/model-mocks.mock.js +0 -102
  194. package/src/__tests__/fixtures/model-mocks.mock.js.map +0 -1
  195. package/src/__tests__/helpers/application.mock.d.ts +0 -8
  196. package/src/__tests__/helpers/application.mock.d.ts.map +0 -1
  197. package/src/__tests__/helpers/application.mock.js +0 -77
  198. package/src/__tests__/helpers/application.mock.js.map +0 -1
  199. package/src/__tests__/helpers/index.d.ts.map +0 -1
  200. package/src/__tests__/helpers/index.js +0 -7
  201. package/src/__tests__/helpers/index.js.map +0 -1
  202. package/src/__tests__/helpers/setup-test-env.d.ts +0 -12
  203. package/src/__tests__/helpers/setup-test-env.d.ts.map +0 -1
  204. package/src/__tests__/helpers/setup-test-env.js +0 -121
  205. package/src/__tests__/helpers/setup-test-env.js.map +0 -1
  206. package/src/__tests__/index.d.ts.map +0 -1
  207. package/src/__tests__/index.js +0 -6
  208. package/src/__tests__/index.js.map +0 -1
  209. package/src/application-base.d.ts +0 -123
  210. package/src/application-base.d.ts.map +0 -1
  211. package/src/application-base.js +0 -359
  212. package/src/application-base.js.map +0 -1
  213. package/src/application-concrete.d.ts +0 -13
  214. package/src/application-concrete.d.ts.map +0 -1
  215. package/src/application-concrete.js +0 -21
  216. package/src/application-concrete.js.map +0 -1
  217. package/src/application.d.ts +0 -29
  218. package/src/application.d.ts.map +0 -1
  219. package/src/application.js +0 -167
  220. package/src/application.js.map +0 -1
  221. package/src/backup-code.d.ts +0 -67
  222. package/src/backup-code.d.ts.map +0 -1
  223. package/src/backup-code.js +0 -238
  224. package/src/backup-code.js.map +0 -1
  225. package/src/builders/application-builder.d.ts +0 -35
  226. package/src/builders/application-builder.d.ts.map +0 -1
  227. package/src/builders/application-builder.js +0 -64
  228. package/src/builders/application-builder.js.map +0 -1
  229. package/src/builders/index.d.ts.map +0 -1
  230. package/src/builders/index.js +0 -5
  231. package/src/builders/index.js.map +0 -1
  232. package/src/constants.d.ts +0 -16
  233. package/src/constants.d.ts.map +0 -1
  234. package/src/constants.js +0 -58
  235. package/src/constants.js.map +0 -1
  236. package/src/container/index.d.ts.map +0 -1
  237. package/src/container/index.js +0 -6
  238. package/src/container/index.js.map +0 -1
  239. package/src/container/service-container.d.ts +0 -11
  240. package/src/container/service-container.d.ts.map +0 -1
  241. package/src/container/service-container.js +0 -38
  242. package/src/container/service-container.js.map +0 -1
  243. package/src/container/service-definitions.d.ts +0 -11
  244. package/src/container/service-definitions.d.ts.map +0 -1
  245. package/src/container/service-definitions.js +0 -13
  246. package/src/container/service-definitions.js.map +0 -1
  247. package/src/controllers/base.d.ts +0 -67
  248. package/src/controllers/base.d.ts.map +0 -1
  249. package/src/controllers/base.js +0 -305
  250. package/src/controllers/base.js.map +0 -1
  251. package/src/controllers/index.d.ts.map +0 -1
  252. package/src/controllers/index.js +0 -6
  253. package/src/controllers/index.js.map +0 -1
  254. package/src/controllers/user.d.ts +0 -49
  255. package/src/controllers/user.d.ts.map +0 -1
  256. package/src/controllers/user.js +0 -919
  257. package/src/controllers/user.js.map +0 -1
  258. package/src/database/database-initializer.d.ts +0 -7
  259. package/src/database/database-initializer.d.ts.map +0 -1
  260. package/src/database/database-initializer.js +0 -3
  261. package/src/database/database-initializer.js.map +0 -1
  262. package/src/database/index.d.ts.map +0 -1
  263. package/src/database/index.js +0 -5
  264. package/src/database/index.js.map +0 -1
  265. package/src/decorators/base-controller.d.ts +0 -11
  266. package/src/decorators/base-controller.d.ts.map +0 -1
  267. package/src/decorators/base-controller.js +0 -60
  268. package/src/decorators/base-controller.js.map +0 -1
  269. package/src/decorators/controller.d.ts +0 -38
  270. package/src/decorators/controller.d.ts.map +0 -1
  271. package/src/decorators/controller.js +0 -68
  272. package/src/decorators/controller.js.map +0 -1
  273. package/src/decorators/index.d.ts.map +0 -1
  274. package/src/decorators/index.js +0 -7
  275. package/src/decorators/index.js.map +0 -1
  276. package/src/decorators/zod-validation.d.ts +0 -5
  277. package/src/decorators/zod-validation.d.ts.map +0 -1
  278. package/src/decorators/zod-validation.js +0 -48
  279. package/src/decorators/zod-validation.js.map +0 -1
  280. package/src/defaults.d.ts +0 -7
  281. package/src/defaults.d.ts.map +0 -1
  282. package/src/defaults.js +0 -205
  283. package/src/defaults.js.map +0 -1
  284. package/src/documents/base.d.ts +0 -4
  285. package/src/documents/base.d.ts.map +0 -1
  286. package/src/documents/base.js +0 -3
  287. package/src/documents/base.js.map +0 -1
  288. package/src/documents/email-token.d.ts +0 -8
  289. package/src/documents/email-token.d.ts.map +0 -1
  290. package/src/documents/email-token.js +0 -3
  291. package/src/documents/email-token.js.map +0 -1
  292. package/src/documents/index.d.ts.map +0 -1
  293. package/src/documents/index.js +0 -3
  294. package/src/documents/index.js.map +0 -1
  295. package/src/documents/mnemonic.d.ts +0 -8
  296. package/src/documents/mnemonic.d.ts.map +0 -1
  297. package/src/documents/mnemonic.js +0 -3
  298. package/src/documents/mnemonic.js.map +0 -1
  299. package/src/documents/role.d.ts +0 -8
  300. package/src/documents/role.d.ts.map +0 -1
  301. package/src/documents/role.js +0 -3
  302. package/src/documents/role.js.map +0 -1
  303. package/src/documents/used-direct-login-token.d.ts +0 -5
  304. package/src/documents/used-direct-login-token.d.ts.map +0 -1
  305. package/src/documents/used-direct-login-token.js +0 -3
  306. package/src/documents/used-direct-login-token.js.map +0 -1
  307. package/src/documents/user-role.d.ts +0 -8
  308. package/src/documents/user-role.d.ts.map +0 -1
  309. package/src/documents/user-role.js +0 -3
  310. package/src/documents/user-role.js.map +0 -1
  311. package/src/documents/user.d.ts +0 -8
  312. package/src/documents/user.d.ts.map +0 -1
  313. package/src/documents/user.js +0 -3
  314. package/src/documents/user.js.map +0 -1
  315. package/src/enumerations/base-model-name.d.ts +0 -38
  316. package/src/enumerations/base-model-name.d.ts.map +0 -1
  317. package/src/enumerations/base-model-name.js +0 -34
  318. package/src/enumerations/base-model-name.js.map +0 -1
  319. package/src/enumerations/index.d.ts.map +0 -1
  320. package/src/enumerations/index.js +0 -8
  321. package/src/enumerations/index.js.map +0 -1
  322. package/src/enumerations/length-encoding-type.d.ts +0 -7
  323. package/src/enumerations/length-encoding-type.d.ts.map +0 -1
  324. package/src/enumerations/length-encoding-type.js +0 -11
  325. package/src/enumerations/length-encoding-type.js.map +0 -1
  326. package/src/enumerations/schema-collection.d.ts +0 -34
  327. package/src/enumerations/schema-collection.d.ts.map +0 -1
  328. package/src/enumerations/schema-collection.js +0 -38
  329. package/src/enumerations/schema-collection.js.map +0 -1
  330. package/src/enumerations/symmetric-error-type.d.ts +0 -5
  331. package/src/enumerations/symmetric-error-type.d.ts.map +0 -1
  332. package/src/enumerations/symmetric-error-type.js +0 -9
  333. package/src/enumerations/symmetric-error-type.js.map +0 -1
  334. package/src/environment.d.ts +0 -189
  335. package/src/environment.d.ts.map +0 -1
  336. package/src/environment.js +0 -641
  337. package/src/environment.js.map +0 -1
  338. package/src/errors/express-validation.d.ts +0 -9
  339. package/src/errors/express-validation.d.ts.map +0 -1
  340. package/src/errors/express-validation.js +0 -18
  341. package/src/errors/express-validation.js.map +0 -1
  342. package/src/errors/index.d.ts.map +0 -1
  343. package/src/errors/index.js +0 -16
  344. package/src/errors/index.js.map +0 -1
  345. package/src/errors/invalid-backup-code-version.d.ts +0 -6
  346. package/src/errors/invalid-backup-code-version.d.ts.map +0 -1
  347. package/src/errors/invalid-backup-code-version.js +0 -16
  348. package/src/errors/invalid-backup-code-version.js.map +0 -1
  349. package/src/errors/invalid-jwt-token.d.ts +0 -5
  350. package/src/errors/invalid-jwt-token.d.ts.map +0 -1
  351. package/src/errors/invalid-jwt-token.js +0 -12
  352. package/src/errors/invalid-jwt-token.js.map +0 -1
  353. package/src/errors/invalid-model.d.ts +0 -6
  354. package/src/errors/invalid-model.d.ts.map +0 -1
  355. package/src/errors/invalid-model.js +0 -14
  356. package/src/errors/invalid-model.js.map +0 -1
  357. package/src/errors/invalid-new-password.d.ts +0 -5
  358. package/src/errors/invalid-new-password.d.ts.map +0 -1
  359. package/src/errors/invalid-new-password.js +0 -14
  360. package/src/errors/invalid-new-password.js.map +0 -1
  361. package/src/errors/invalid-password.d.ts +0 -5
  362. package/src/errors/invalid-password.d.ts.map +0 -1
  363. package/src/errors/invalid-password.js +0 -14
  364. package/src/errors/invalid-password.js.map +0 -1
  365. package/src/errors/missing-validated-data.d.ts +0 -7
  366. package/src/errors/missing-validated-data.d.ts.map +0 -1
  367. package/src/errors/missing-validated-data.js +0 -36
  368. package/src/errors/missing-validated-data.js.map +0 -1
  369. package/src/errors/mnemonic-or-password-required.d.ts +0 -5
  370. package/src/errors/mnemonic-or-password-required.d.ts.map +0 -1
  371. package/src/errors/mnemonic-or-password-required.js +0 -14
  372. package/src/errors/mnemonic-or-password-required.js.map +0 -1
  373. package/src/errors/model-not-registered.d.ts +0 -6
  374. package/src/errors/model-not-registered.d.ts.map +0 -1
  375. package/src/errors/model-not-registered.js +0 -14
  376. package/src/errors/model-not-registered.js.map +0 -1
  377. package/src/errors/mongoose-validation.d.ts +0 -12
  378. package/src/errors/mongoose-validation.d.ts.map +0 -1
  379. package/src/errors/mongoose-validation.js +0 -17
  380. package/src/errors/mongoose-validation.js.map +0 -1
  381. package/src/errors/symmetric.d.ts +0 -8
  382. package/src/errors/symmetric.d.ts.map +0 -1
  383. package/src/errors/symmetric.js +0 -22
  384. package/src/errors/symmetric.js.map +0 -1
  385. package/src/errors/token-expired.d.ts +0 -5
  386. package/src/errors/token-expired.d.ts.map +0 -1
  387. package/src/errors/token-expired.js +0 -12
  388. package/src/errors/token-expired.js.map +0 -1
  389. package/src/get-language.d.ts +0 -2
  390. package/src/get-language.d.ts.map +0 -1
  391. package/src/get-language.js +0 -30
  392. package/src/get-language.js.map +0 -1
  393. package/src/get-timezone.d.ts +0 -2
  394. package/src/get-timezone.d.ts.map +0 -1
  395. package/src/get-timezone.js +0 -39
  396. package/src/get-timezone.js.map +0 -1
  397. package/src/index.d.ts.map +0 -1
  398. package/src/index.js +0 -80
  399. package/src/index.js.map +0 -1
  400. package/src/interfaces/api-error-response.d.ts +0 -5
  401. package/src/interfaces/api-error-response.d.ts.map +0 -1
  402. package/src/interfaces/api-error-response.js +0 -3
  403. package/src/interfaces/api-error-response.js.map +0 -1
  404. package/src/interfaces/api-express-validation-error-response.d.ts +0 -7
  405. package/src/interfaces/api-express-validation-error-response.d.ts.map +0 -1
  406. package/src/interfaces/api-express-validation-error-response.js +0 -3
  407. package/src/interfaces/api-express-validation-error-response.js.map +0 -1
  408. package/src/interfaces/api-message-response.d.ts +0 -4
  409. package/src/interfaces/api-message-response.d.ts.map +0 -1
  410. package/src/interfaces/api-message-response.js +0 -3
  411. package/src/interfaces/api-message-response.js.map +0 -1
  412. package/src/interfaces/api-mongo-validation-error-response.d.ts +0 -6
  413. package/src/interfaces/api-mongo-validation-error-response.d.ts.map +0 -1
  414. package/src/interfaces/api-mongo-validation-error-response.js +0 -3
  415. package/src/interfaces/api-mongo-validation-error-response.js.map +0 -1
  416. package/src/interfaces/api-responses/backup-codes-response.d.ts +0 -5
  417. package/src/interfaces/api-responses/backup-codes-response.d.ts.map +0 -1
  418. package/src/interfaces/api-responses/backup-codes-response.js +0 -3
  419. package/src/interfaces/api-responses/backup-codes-response.js.map +0 -1
  420. package/src/interfaces/api-responses/challenge-response.d.ts +0 -6
  421. package/src/interfaces/api-responses/challenge-response.d.ts.map +0 -1
  422. package/src/interfaces/api-responses/challenge-response.js +0 -3
  423. package/src/interfaces/api-responses/challenge-response.js.map +0 -1
  424. package/src/interfaces/api-responses/code-count-response.d.ts +0 -5
  425. package/src/interfaces/api-responses/code-count-response.d.ts.map +0 -1
  426. package/src/interfaces/api-responses/code-count-response.js +0 -3
  427. package/src/interfaces/api-responses/code-count-response.js.map +0 -1
  428. package/src/interfaces/api-responses/index.d.ts.map +0 -1
  429. package/src/interfaces/api-responses/index.js +0 -12
  430. package/src/interfaces/api-responses/index.js.map +0 -1
  431. package/src/interfaces/api-responses/login-response.d.ts +0 -8
  432. package/src/interfaces/api-responses/login-response.d.ts.map +0 -1
  433. package/src/interfaces/api-responses/login-response.js +0 -3
  434. package/src/interfaces/api-responses/login-response.js.map +0 -1
  435. package/src/interfaces/api-responses/mnemonic-response.d.ts +0 -5
  436. package/src/interfaces/api-responses/mnemonic-response.d.ts.map +0 -1
  437. package/src/interfaces/api-responses/mnemonic-response.js +0 -3
  438. package/src/interfaces/api-responses/mnemonic-response.js.map +0 -1
  439. package/src/interfaces/api-responses/registration-response.d.ts +0 -6
  440. package/src/interfaces/api-responses/registration-response.d.ts.map +0 -1
  441. package/src/interfaces/api-responses/registration-response.js +0 -3
  442. package/src/interfaces/api-responses/registration-response.js.map +0 -1
  443. package/src/interfaces/api-responses/request-user-response.d.ts +0 -6
  444. package/src/interfaces/api-responses/request-user-response.d.ts.map +0 -1
  445. package/src/interfaces/api-responses/request-user-response.js +0 -3
  446. package/src/interfaces/api-responses/request-user-response.js.map +0 -1
  447. package/src/interfaces/api-responses/user-settings-response.d.ts +0 -12
  448. package/src/interfaces/api-responses/user-settings-response.d.ts.map +0 -1
  449. package/src/interfaces/api-responses/user-settings-response.js +0 -3
  450. package/src/interfaces/api-responses/user-settings-response.js.map +0 -1
  451. package/src/interfaces/application.d.ts +0 -17
  452. package/src/interfaces/application.d.ts.map +0 -1
  453. package/src/interfaces/application.js +0 -3
  454. package/src/interfaces/application.js.map +0 -1
  455. package/src/interfaces/backend-objects/email-token.d.ts +0 -4
  456. package/src/interfaces/backend-objects/email-token.d.ts.map +0 -1
  457. package/src/interfaces/backend-objects/email-token.js +0 -3
  458. package/src/interfaces/backend-objects/email-token.js.map +0 -1
  459. package/src/interfaces/backend-objects/index.d.ts.map +0 -1
  460. package/src/interfaces/backend-objects/index.js +0 -8
  461. package/src/interfaces/backend-objects/index.js.map +0 -1
  462. package/src/interfaces/backend-objects/request-user.d.ts +0 -5
  463. package/src/interfaces/backend-objects/request-user.d.ts.map +0 -1
  464. package/src/interfaces/backend-objects/request-user.js +0 -3
  465. package/src/interfaces/backend-objects/request-user.js.map +0 -1
  466. package/src/interfaces/backend-objects/role.d.ts +0 -4
  467. package/src/interfaces/backend-objects/role.d.ts.map +0 -1
  468. package/src/interfaces/backend-objects/role.js +0 -3
  469. package/src/interfaces/backend-objects/role.js.map +0 -1
  470. package/src/interfaces/backend-objects/user.d.ts +0 -4
  471. package/src/interfaces/backend-objects/user.d.ts.map +0 -1
  472. package/src/interfaces/backend-objects/user.js +0 -3
  473. package/src/interfaces/backend-objects/user.js.map +0 -1
  474. package/src/interfaces/checksum-config.d.ts +0 -5
  475. package/src/interfaces/checksum-config.d.ts.map +0 -1
  476. package/src/interfaces/checksum-config.js +0 -3
  477. package/src/interfaces/checksum-config.js.map +0 -1
  478. package/src/interfaces/checksum-consts.d.ts +0 -11
  479. package/src/interfaces/checksum-consts.d.ts.map +0 -1
  480. package/src/interfaces/checksum-consts.js +0 -3
  481. package/src/interfaces/checksum-consts.js.map +0 -1
  482. package/src/interfaces/constants.d.ts +0 -102
  483. package/src/interfaces/constants.d.ts.map +0 -1
  484. package/src/interfaces/constants.js +0 -3
  485. package/src/interfaces/constants.js.map +0 -1
  486. package/src/interfaces/controller-config.d.ts +0 -21
  487. package/src/interfaces/controller-config.d.ts.map +0 -1
  488. package/src/interfaces/controller-config.js +0 -3
  489. package/src/interfaces/controller-config.js.map +0 -1
  490. package/src/interfaces/create-user-basics.d.ts +0 -18
  491. package/src/interfaces/create-user-basics.d.ts.map +0 -1
  492. package/src/interfaces/create-user-basics.js +0 -3
  493. package/src/interfaces/create-user-basics.js.map +0 -1
  494. package/src/interfaces/csp-config.d.ts +0 -7
  495. package/src/interfaces/csp-config.d.ts.map +0 -1
  496. package/src/interfaces/csp-config.js +0 -13
  497. package/src/interfaces/csp-config.js.map +0 -1
  498. package/src/interfaces/csp-definition.d.ts +0 -13
  499. package/src/interfaces/csp-definition.d.ts.map +0 -1
  500. package/src/interfaces/csp-definition.js +0 -22
  501. package/src/interfaces/csp-definition.js.map +0 -1
  502. package/src/interfaces/db-init-result.d.ts +0 -5
  503. package/src/interfaces/db-init-result.d.ts.map +0 -1
  504. package/src/interfaces/db-init-result.js +0 -3
  505. package/src/interfaces/db-init-result.js.map +0 -1
  506. package/src/interfaces/deep-partial.d.ts +0 -4
  507. package/src/interfaces/deep-partial.d.ts.map +0 -1
  508. package/src/interfaces/deep-partial.js +0 -3
  509. package/src/interfaces/deep-partial.js.map +0 -1
  510. package/src/interfaces/discriminator-collections.d.ts +0 -7
  511. package/src/interfaces/discriminator-collections.d.ts.map +0 -1
  512. package/src/interfaces/discriminator-collections.js +0 -3
  513. package/src/interfaces/discriminator-collections.js.map +0 -1
  514. package/src/interfaces/email-service.d.ts +0 -4
  515. package/src/interfaces/email-service.d.ts.map +0 -1
  516. package/src/interfaces/email-service.js +0 -3
  517. package/src/interfaces/email-service.js.map +0 -1
  518. package/src/interfaces/environment-mongo.d.ts +0 -76
  519. package/src/interfaces/environment-mongo.d.ts.map +0 -1
  520. package/src/interfaces/environment-mongo.js +0 -3
  521. package/src/interfaces/environment-mongo.js.map +0 -1
  522. package/src/interfaces/environment.d.ts +0 -180
  523. package/src/interfaces/environment.d.ts.map +0 -1
  524. package/src/interfaces/environment.js +0 -3
  525. package/src/interfaces/environment.js.map +0 -1
  526. package/src/interfaces/failable-result.d.ts +0 -7
  527. package/src/interfaces/failable-result.d.ts.map +0 -1
  528. package/src/interfaces/failable-result.js +0 -3
  529. package/src/interfaces/failable-result.js.map +0 -1
  530. package/src/interfaces/fec-consts.d.ts +0 -5
  531. package/src/interfaces/fec-consts.d.ts.map +0 -1
  532. package/src/interfaces/fec-consts.js +0 -3
  533. package/src/interfaces/fec-consts.js.map +0 -1
  534. package/src/interfaces/flexible-csp.d.ts +0 -8
  535. package/src/interfaces/flexible-csp.d.ts.map +0 -1
  536. package/src/interfaces/flexible-csp.js +0 -14
  537. package/src/interfaces/flexible-csp.js.map +0 -1
  538. package/src/interfaces/handleable-error-options.d.ts +0 -7
  539. package/src/interfaces/handleable-error-options.d.ts.map +0 -1
  540. package/src/interfaces/handleable-error-options.js +0 -3
  541. package/src/interfaces/handleable-error-options.js.map +0 -1
  542. package/src/interfaces/index.d.ts.map +0 -1
  543. package/src/interfaces/index.js +0 -38
  544. package/src/interfaces/index.js.map +0 -1
  545. package/src/interfaces/jwt-consts.d.ts +0 -11
  546. package/src/interfaces/jwt-consts.d.ts.map +0 -1
  547. package/src/interfaces/jwt-consts.js +0 -3
  548. package/src/interfaces/jwt-consts.js.map +0 -1
  549. package/src/interfaces/jwt-sign-response.d.ts +0 -11
  550. package/src/interfaces/jwt-sign-response.d.ts.map +0 -1
  551. package/src/interfaces/jwt-sign-response.js +0 -3
  552. package/src/interfaces/jwt-sign-response.js.map +0 -1
  553. package/src/interfaces/models/email-token.d.ts +0 -6
  554. package/src/interfaces/models/email-token.d.ts.map +0 -1
  555. package/src/interfaces/models/email-token.js +0 -3
  556. package/src/interfaces/models/email-token.js.map +0 -1
  557. package/src/interfaces/models/index.d.ts.map +0 -1
  558. package/src/interfaces/models/index.js +0 -11
  559. package/src/interfaces/models/index.js.map +0 -1
  560. package/src/interfaces/models/mnemonic.d.ts +0 -6
  561. package/src/interfaces/models/mnemonic.d.ts.map +0 -1
  562. package/src/interfaces/models/mnemonic.js +0 -3
  563. package/src/interfaces/models/mnemonic.js.map +0 -1
  564. package/src/interfaces/models/role.d.ts +0 -6
  565. package/src/interfaces/models/role.d.ts.map +0 -1
  566. package/src/interfaces/models/role.js +0 -3
  567. package/src/interfaces/models/role.js.map +0 -1
  568. package/src/interfaces/models/token-role.d.ts +0 -11
  569. package/src/interfaces/models/token-role.d.ts.map +0 -1
  570. package/src/interfaces/models/token-role.js +0 -3
  571. package/src/interfaces/models/token-role.js.map +0 -1
  572. package/src/interfaces/models/used-direct-login-token.d.ts +0 -11
  573. package/src/interfaces/models/used-direct-login-token.d.ts.map +0 -1
  574. package/src/interfaces/models/used-direct-login-token.js +0 -3
  575. package/src/interfaces/models/used-direct-login-token.js.map +0 -1
  576. package/src/interfaces/models/user-role.d.ts +0 -11
  577. package/src/interfaces/models/user-role.d.ts.map +0 -1
  578. package/src/interfaces/models/user-role.js +0 -3
  579. package/src/interfaces/models/user-role.js.map +0 -1
  580. package/src/interfaces/models/user.d.ts +0 -11
  581. package/src/interfaces/models/user.d.ts.map +0 -1
  582. package/src/interfaces/models/user.js +0 -3
  583. package/src/interfaces/models/user.js.map +0 -1
  584. package/src/interfaces/mongo-errors.d.ts +0 -5
  585. package/src/interfaces/mongo-errors.d.ts.map +0 -1
  586. package/src/interfaces/mongo-errors.js +0 -3
  587. package/src/interfaces/mongo-errors.js.map +0 -1
  588. package/src/interfaces/request-user.d.ts +0 -58
  589. package/src/interfaces/request-user.d.ts.map +0 -1
  590. package/src/interfaces/request-user.js +0 -3
  591. package/src/interfaces/request-user.js.map +0 -1
  592. package/src/interfaces/required-string-keys.d.ts +0 -22
  593. package/src/interfaces/required-string-keys.d.ts.map +0 -1
  594. package/src/interfaces/required-string-keys.js +0 -3
  595. package/src/interfaces/required-string-keys.js.map +0 -1
  596. package/src/interfaces/schema.d.ts +0 -29
  597. package/src/interfaces/schema.d.ts.map +0 -1
  598. package/src/interfaces/schema.js +0 -3
  599. package/src/interfaces/schema.js.map +0 -1
  600. package/src/interfaces/server-init-result.d.ts +0 -35
  601. package/src/interfaces/server-init-result.d.ts.map +0 -1
  602. package/src/interfaces/server-init-result.js +0 -3
  603. package/src/interfaces/server-init-result.js.map +0 -1
  604. package/src/interfaces/status-code-response.d.ts +0 -7
  605. package/src/interfaces/status-code-response.d.ts.map +0 -1
  606. package/src/interfaces/status-code-response.js +0 -3
  607. package/src/interfaces/status-code-response.js.map +0 -1
  608. package/src/interfaces/symmetric-encryption-results.d.ts +0 -5
  609. package/src/interfaces/test-environment.d.ts +0 -12
  610. package/src/interfaces/test-environment.d.ts.map +0 -1
  611. package/src/interfaces/test-environment.js +0 -3
  612. package/src/interfaces/test-environment.js.map +0 -1
  613. package/src/interfaces/token-response.d.ts +0 -5
  614. package/src/interfaces/token-response.d.ts.map +0 -1
  615. package/src/interfaces/token-response.js +0 -3
  616. package/src/interfaces/token-response.js.map +0 -1
  617. package/src/middleware-utils.d.ts +0 -8
  618. package/src/middleware-utils.d.ts.map +0 -1
  619. package/src/middleware-utils.js +0 -94
  620. package/src/middleware-utils.js.map +0 -1
  621. package/src/middlewares/authenticate-crypto.d.ts +0 -10
  622. package/src/middlewares/authenticate-crypto.d.ts.map +0 -1
  623. package/src/middlewares/authenticate-crypto.js +0 -126
  624. package/src/middlewares/authenticate-crypto.js.map +0 -1
  625. package/src/middlewares/authenticate-token.d.ts +0 -21
  626. package/src/middlewares/authenticate-token.d.ts.map +0 -1
  627. package/src/middlewares/authenticate-token.js +0 -104
  628. package/src/middlewares/authenticate-token.js.map +0 -1
  629. package/src/middlewares/cleanup-crypto.d.ts +0 -7
  630. package/src/middlewares/cleanup-crypto.d.ts.map +0 -1
  631. package/src/middlewares/cleanup-crypto.js +0 -32
  632. package/src/middlewares/cleanup-crypto.js.map +0 -1
  633. package/src/middlewares/index.d.ts.map +0 -1
  634. package/src/middlewares/index.js +0 -8
  635. package/src/middlewares/index.js.map +0 -1
  636. package/src/middlewares/set-global-context-language.d.ts +0 -3
  637. package/src/middlewares/set-global-context-language.d.ts.map +0 -1
  638. package/src/middlewares/set-global-context-language.js +0 -14
  639. package/src/middlewares/set-global-context-language.js.map +0 -1
  640. package/src/model-registry.d.ts +0 -23
  641. package/src/model-registry.d.ts.map +0 -1
  642. package/src/model-registry.js +0 -47
  643. package/src/model-registry.js.map +0 -1
  644. package/src/models/email-token.d.ts +0 -8
  645. package/src/models/email-token.d.ts.map +0 -1
  646. package/src/models/email-token.js +0 -11
  647. package/src/models/email-token.js.map +0 -1
  648. package/src/models/index.d.ts.map +0 -1
  649. package/src/models/index.js +0 -10
  650. package/src/models/index.js.map +0 -1
  651. package/src/models/mnemonic.d.ts +0 -8
  652. package/src/models/mnemonic.d.ts.map +0 -1
  653. package/src/models/mnemonic.js +0 -11
  654. package/src/models/mnemonic.js.map +0 -1
  655. package/src/models/role.d.ts +0 -8
  656. package/src/models/role.d.ts.map +0 -1
  657. package/src/models/role.js +0 -11
  658. package/src/models/role.js.map +0 -1
  659. package/src/models/used-direct-login-token.d.ts +0 -8
  660. package/src/models/used-direct-login-token.d.ts.map +0 -1
  661. package/src/models/used-direct-login-token.js +0 -11
  662. package/src/models/used-direct-login-token.js.map +0 -1
  663. package/src/models/user-role.d.ts +0 -7
  664. package/src/models/user-role.d.ts.map +0 -1
  665. package/src/models/user-role.js +0 -10
  666. package/src/models/user-role.js.map +0 -1
  667. package/src/models/user.d.ts +0 -8
  668. package/src/models/user.d.ts.map +0 -1
  669. package/src/models/user.js +0 -11
  670. package/src/models/user.js.map +0 -1
  671. package/src/pipeline/index.d.ts.map +0 -1
  672. package/src/pipeline/index.js +0 -5
  673. package/src/pipeline/index.js.map +0 -1
  674. package/src/pipeline/pipeline-builder.d.ts +0 -8
  675. package/src/pipeline/pipeline-builder.d.ts.map +0 -1
  676. package/src/pipeline/pipeline-builder.js +0 -18
  677. package/src/pipeline/pipeline-builder.js.map +0 -1
  678. package/src/plugins/index.d.ts.map +0 -1
  679. package/src/plugins/index.js +0 -6
  680. package/src/plugins/index.js.map +0 -1
  681. package/src/plugins/plugin-interface.d.ts +0 -9
  682. package/src/plugins/plugin-interface.d.ts.map +0 -1
  683. package/src/plugins/plugin-interface.js +0 -3
  684. package/src/plugins/plugin-interface.js.map +0 -1
  685. package/src/plugins/plugin-manager.d.ts +0 -13
  686. package/src/plugins/plugin-manager.d.ts.map +0 -1
  687. package/src/plugins/plugin-manager.js +0 -37
  688. package/src/plugins/plugin-manager.js.map +0 -1
  689. package/src/registry/email-service-registry.d.ts +0 -27
  690. package/src/registry/email-service-registry.d.ts.map +0 -1
  691. package/src/registry/email-service-registry.js +0 -42
  692. package/src/registry/email-service-registry.js.map +0 -1
  693. package/src/registry/index.d.ts.map +0 -1
  694. package/src/registry/index.js +0 -6
  695. package/src/registry/index.js.map +0 -1
  696. package/src/responses/index.d.ts.map +0 -1
  697. package/src/responses/index.js +0 -5
  698. package/src/responses/index.js.map +0 -1
  699. package/src/responses/response-builder.d.ts +0 -24
  700. package/src/responses/response-builder.d.ts.map +0 -1
  701. package/src/responses/response-builder.js +0 -63
  702. package/src/responses/response-builder.js.map +0 -1
  703. package/src/routers/api.d.ts +0 -28
  704. package/src/routers/api.d.ts.map +0 -1
  705. package/src/routers/api.js +0 -80
  706. package/src/routers/api.js.map +0 -1
  707. package/src/routers/app.d.ts +0 -33
  708. package/src/routers/app.d.ts.map +0 -1
  709. package/src/routers/app.js +0 -228
  710. package/src/routers/app.js.map +0 -1
  711. package/src/routers/base.d.ts +0 -9
  712. package/src/routers/base.d.ts.map +0 -1
  713. package/src/routers/base.js +0 -14
  714. package/src/routers/base.js.map +0 -1
  715. package/src/routers/index.d.ts.map +0 -1
  716. package/src/routers/index.js +0 -7
  717. package/src/routers/index.js.map +0 -1
  718. package/src/routers/router-config.d.ts +0 -18
  719. package/src/routers/router-config.d.ts.map +0 -1
  720. package/src/routers/router-config.js +0 -8
  721. package/src/routers/router-config.js.map +0 -1
  722. package/src/routing/index.d.ts +0 -2
  723. package/src/routing/index.d.ts.map +0 -1
  724. package/src/routing/index.js +0 -5
  725. package/src/routing/index.js.map +0 -1
  726. package/src/routing/route-builder.d.ts +0 -36
  727. package/src/routing/route-builder.d.ts.map +0 -1
  728. package/src/routing/route-builder.js +0 -86
  729. package/src/routing/route-builder.js.map +0 -1
  730. package/src/schemas/email-token.d.ts +0 -49
  731. package/src/schemas/email-token.d.ts.map +0 -1
  732. package/src/schemas/email-token.js +0 -55
  733. package/src/schemas/email-token.js.map +0 -1
  734. package/src/schemas/index.d.ts.map +0 -1
  735. package/src/schemas/index.js +0 -11
  736. package/src/schemas/index.js.map +0 -1
  737. package/src/schemas/mnemonic.d.ts +0 -27
  738. package/src/schemas/mnemonic.d.ts.map +0 -1
  739. package/src/schemas/mnemonic.js +0 -31
  740. package/src/schemas/mnemonic.js.map +0 -1
  741. package/src/schemas/role.d.ts +0 -42
  742. package/src/schemas/role.d.ts.map +0 -1
  743. package/src/schemas/role.js +0 -89
  744. package/src/schemas/role.js.map +0 -1
  745. package/src/schemas/schema.d.ts +0 -42
  746. package/src/schemas/schema.d.ts.map +0 -1
  747. package/src/schemas/schema.js +0 -70
  748. package/src/schemas/schema.js.map +0 -1
  749. package/src/schemas/used-direct-login-token.d.ts +0 -37
  750. package/src/schemas/used-direct-login-token.d.ts.map +0 -1
  751. package/src/schemas/used-direct-login-token.js +0 -24
  752. package/src/schemas/used-direct-login-token.js.map +0 -1
  753. package/src/schemas/user-role.d.ts +0 -39
  754. package/src/schemas/user-role.d.ts.map +0 -1
  755. package/src/schemas/user-role.js +0 -55
  756. package/src/schemas/user-role.js.map +0 -1
  757. package/src/schemas/user.d.ts +0 -24
  758. package/src/schemas/user.d.ts.map +0 -1
  759. package/src/schemas/user.js +0 -195
  760. package/src/schemas/user.js.map +0 -1
  761. package/src/services/backup-code.d.ts +0 -76
  762. package/src/services/backup-code.d.ts.map +0 -1
  763. package/src/services/backup-code.js +0 -185
  764. package/src/services/backup-code.js.map +0 -1
  765. package/src/services/base.d.ts +0 -11
  766. package/src/services/base.d.ts.map +0 -1
  767. package/src/services/base.js +0 -15
  768. package/src/services/base.js.map +0 -1
  769. package/src/services/checksum.d.ts +0 -69
  770. package/src/services/checksum.d.ts.map +0 -1
  771. package/src/services/checksum.js +0 -145
  772. package/src/services/checksum.js.map +0 -1
  773. package/src/services/database-initialization.d.ts +0 -111
  774. package/src/services/database-initialization.d.ts.map +0 -1
  775. package/src/services/database-initialization.js +0 -878
  776. package/src/services/database-initialization.js.map +0 -1
  777. package/src/services/db-init-cache.d.ts +0 -10
  778. package/src/services/db-init-cache.d.ts.map +0 -1
  779. package/src/services/db-init-cache.js +0 -3
  780. package/src/services/db-init-cache.js.map +0 -1
  781. package/src/services/direct-login-token.d.ts +0 -7
  782. package/src/services/direct-login-token.d.ts.map +0 -1
  783. package/src/services/direct-login-token.js +0 -41
  784. package/src/services/direct-login-token.js.map +0 -1
  785. package/src/services/dummy-email-service.d.ts +0 -11
  786. package/src/services/dummy-email-service.d.ts.map +0 -1
  787. package/src/services/dummy-email-service.js +0 -16
  788. package/src/services/dummy-email-service.js.map +0 -1
  789. package/src/services/fec-usage-example.d.ts +0 -38
  790. package/src/services/fec-usage-example.d.ts.map +0 -1
  791. package/src/services/fec-usage-example.js +0 -75
  792. package/src/services/fec-usage-example.js.map +0 -1
  793. package/src/services/fec.d.ts +0 -46
  794. package/src/services/fec.d.ts.map +0 -1
  795. package/src/services/fec.js +0 -214
  796. package/src/services/fec.js.map +0 -1
  797. package/src/services/index.d.ts.map +0 -1
  798. package/src/services/index.js +0 -22
  799. package/src/services/index.js.map +0 -1
  800. package/src/services/jwt.d.ts +0 -30
  801. package/src/services/jwt.d.ts.map +0 -1
  802. package/src/services/jwt.js +0 -90
  803. package/src/services/jwt.js.map +0 -1
  804. package/src/services/key-wrapping.d.ts +0 -61
  805. package/src/services/key-wrapping.d.ts.map +0 -1
  806. package/src/services/key-wrapping.js +0 -307
  807. package/src/services/key-wrapping.js.map +0 -1
  808. package/src/services/mnemonic.d.ts +0 -62
  809. package/src/services/mnemonic.d.ts.map +0 -1
  810. package/src/services/mnemonic.js +0 -114
  811. package/src/services/mnemonic.js.map +0 -1
  812. package/src/services/request-user.d.ts +0 -23
  813. package/src/services/request-user.d.ts.map +0 -1
  814. package/src/services/request-user.js +0 -68
  815. package/src/services/request-user.js.map +0 -1
  816. package/src/services/role.d.ts +0 -87
  817. package/src/services/role.d.ts.map +0 -1
  818. package/src/services/role.js +0 -279
  819. package/src/services/role.js.map +0 -1
  820. package/src/services/symmetric.d.ts +0 -42
  821. package/src/services/symmetric.d.ts.map +0 -1
  822. package/src/services/symmetric.js +0 -101
  823. package/src/services/symmetric.js.map +0 -1
  824. package/src/services/system-user.d.ts +0 -16
  825. package/src/services/system-user.d.ts.map +0 -1
  826. package/src/services/system-user.js +0 -46
  827. package/src/services/system-user.js.map +0 -1
  828. package/src/services/user.d.ts +0 -345
  829. package/src/services/user.d.ts.map +0 -1
  830. package/src/services/user.js +0 -1447
  831. package/src/services/user.js.map +0 -1
  832. package/src/services/xor.d.ts +0 -24
  833. package/src/services/xor.d.ts.map +0 -1
  834. package/src/services/xor.js +0 -37
  835. package/src/services/xor.js.map +0 -1
  836. package/src/testing.d.ts +0 -3
  837. package/src/testing.d.ts.map +0 -1
  838. package/src/testing.js +0 -7
  839. package/src/testing.js.map +0 -1
  840. package/src/transactions/index.d.ts.map +0 -1
  841. package/src/transactions/index.js +0 -5
  842. package/src/transactions/index.js.map +0 -1
  843. package/src/transactions/transaction-manager.d.ts +0 -12
  844. package/src/transactions/transaction-manager.d.ts.map +0 -1
  845. package/src/transactions/transaction-manager.js +0 -30
  846. package/src/transactions/transaction-manager.js.map +0 -1
  847. package/src/types/app-config.d.ts +0 -16
  848. package/src/types/app-config.d.ts.map +0 -1
  849. package/src/types/app-config.js +0 -3
  850. package/src/types/app-config.js.map +0 -1
  851. package/src/types/controller-config.d.ts +0 -14
  852. package/src/types/controller-config.d.ts.map +0 -1
  853. package/src/types/controller-config.js +0 -3
  854. package/src/types/controller-config.js.map +0 -1
  855. package/src/types/environment-variables.d.ts.map +0 -1
  856. package/src/types/environment-variables.js +0 -39
  857. package/src/types/environment-variables.js.map +0 -1
  858. package/src/types/index.d.ts.map +0 -1
  859. package/src/types/index.js +0 -6
  860. package/src/types/index.js.map +0 -1
  861. package/src/types/mongoose-helpers.d.ts.map +0 -1
  862. package/src/types/mongoose-helpers.js +0 -6
  863. package/src/types/mongoose-helpers.js.map +0 -1
  864. package/src/types.d.ts +0 -104
  865. package/src/types.d.ts.map +0 -1
  866. package/src/types.js +0 -14
  867. package/src/types.js.map +0 -1
  868. package/src/utils.d.ts +0 -211
  869. package/src/utils.d.ts.map +0 -1
  870. package/src/utils.js +0 -818
  871. package/src/utils.js.map +0 -1
  872. package/src/validation/index.d.ts.map +0 -1
  873. package/src/validation/index.js +0 -5
  874. package/src/validation/index.js.map +0 -1
  875. package/src/validation/validation-builder.d.ts +0 -32
  876. package/src/validation/validation-builder.d.ts.map +0 -1
  877. package/src/validation/validation-builder.js +0 -81
  878. package/src/validation/validation-builder.js.map +0 -1
@@ -0,0 +1,174 @@
1
+ /**
2
+ * @fileoverview Mnemonic phrase management service.
3
+ * Securely stores mnemonic HMACs for uniqueness checking without exposing phrases.
4
+ * @module services/mnemonic
5
+ */
6
+
7
+ import { SecureBuffer, SecureString } from '@digitaldefiance/ecies-lib';
8
+ import { ClientSession, Model } from '@digitaldefiance/mongoose-types';
9
+ import {
10
+ SuiteCoreStringKey,
11
+ TranslatableSuiteError,
12
+ } from '@digitaldefiance/suite-core-lib';
13
+ import { createHmac } from 'crypto';
14
+ import { IMnemonicDocument } from '../documents/mnemonic';
15
+ import { IConstants } from '../interfaces';
16
+ import type { PlatformID } from '@digitaldefiance/node-ecies-lib';
17
+
18
+ /**
19
+ * Service for secure mnemonic phrase storage and validation.
20
+ * Uses HMAC for uniqueness checking without storing actual mnemonics.
21
+ * @template TID - Platform ID type (defaults to Buffer)
22
+ */
23
+ export class MnemonicService<TID extends PlatformID = Buffer> {
24
+ private readonly hmacSecret: SecureBuffer;
25
+ private readonly MnemonicModel: Model<IMnemonicDocument<TID>>;
26
+ private readonly constants: IConstants;
27
+
28
+ constructor(
29
+ mnemonicModel: Model<IMnemonicDocument<TID>>,
30
+ hmacSecret: SecureBuffer,
31
+ constants: IConstants,
32
+ ) {
33
+ this.MnemonicModel = mnemonicModel;
34
+ // Immediately wrap secrets in secure containers
35
+ this.hmacSecret = hmacSecret;
36
+ this.constants = constants;
37
+ }
38
+
39
+ /**
40
+ * Disposes of the secure secrets held by this service.
41
+ */
42
+ public dispose(): void {
43
+ this.hmacSecret.dispose();
44
+ }
45
+
46
+ /**
47
+ * Creates a non-reversible HMAC of the mnemonic for fast, indexed lookups.
48
+ * @param mnemonic The mnemonic to hash, wrapped in a SecureString.
49
+ */
50
+ public getMnemonicHmac(mnemonic: SecureString): string {
51
+ // Use the raw secret buffer for the HMAC
52
+ return createHmac('sha256', this.hmacSecret.value)
53
+ .update(mnemonic.valueAsUint8Array) // Use the raw buffer for consistency
54
+ .digest('hex');
55
+ }
56
+
57
+ /**
58
+ * Checks if a mnemonic already exists in the database using its HMAC.
59
+ * @param mnemonic The mnemonic to check, wrapped in a SecureString.
60
+ * @param session Optional Mongoose session for transaction support.
61
+ */
62
+ public async mnemonicExists(
63
+ mnemonic: SecureString,
64
+ session?: ClientSession,
65
+ ): Promise<boolean> {
66
+ const hmac = this.getMnemonicHmac(mnemonic);
67
+ const count = await this.MnemonicModel.countDocuments({ hmac }).session(
68
+ session ?? null,
69
+ );
70
+ return count > 0;
71
+ }
72
+
73
+ /**
74
+ * Adds a new, unique mnemonic to the database with password-based key wrapping.
75
+ * @param mnemonic The mnemonic to add, wrapped in a SecureString.
76
+ * @param password User's password for key wrapping.
77
+ * @param session Optional Mongoose session for transaction support.
78
+ */
79
+ public async addMnemonicWithPassword(
80
+ mnemonic: SecureString,
81
+ _password: SecureString,
82
+ session?: ClientSession,
83
+ ): Promise<{
84
+ document: IMnemonicDocument<TID> | null;
85
+ }> {
86
+ if (!mnemonic.value || !this.constants.MnemonicRegex.test(mnemonic.value)) {
87
+ throw new TranslatableSuiteError(
88
+ SuiteCoreStringKey.Validation_MnemonicRegex,
89
+ );
90
+ }
91
+
92
+ if (await this.mnemonicExists(mnemonic, session)) {
93
+ return { document: null };
94
+ }
95
+
96
+ try {
97
+ const hmac = this.getMnemonicHmac(mnemonic);
98
+ const [newDoc] = await this.MnemonicModel.create(
99
+ [
100
+ {
101
+ hmac: hmac,
102
+ },
103
+ ],
104
+ { session },
105
+ );
106
+ return { document: newDoc };
107
+ } finally {
108
+ // nothing to dispose
109
+ }
110
+ }
111
+
112
+ /**
113
+ * Adds a new, unique mnemonic to the database.
114
+ * @param mnemonic The mnemonic to add, wrapped in a SecureString.
115
+ * @param session Optional Mongoose session for transaction support.
116
+ */
117
+ public async addMnemonic(
118
+ mnemonic: SecureString,
119
+ session?: ClientSession,
120
+ ): Promise<IMnemonicDocument<TID> | null> {
121
+ if (!mnemonic.value || !this.constants.MnemonicRegex.test(mnemonic.value)) {
122
+ throw new TranslatableSuiteError(
123
+ SuiteCoreStringKey.Validation_MnemonicRegex,
124
+ );
125
+ }
126
+
127
+ if (await this.mnemonicExists(mnemonic, session)) {
128
+ return null;
129
+ }
130
+ const hmac = this.getMnemonicHmac(mnemonic);
131
+ const [newDoc] = await this.MnemonicModel.create(
132
+ [
133
+ {
134
+ hmac: hmac,
135
+ },
136
+ ],
137
+ { session },
138
+ );
139
+ return newDoc;
140
+ }
141
+
142
+ /**
143
+ * Retrieves a mnemonic document by ID.
144
+ * @param mnemonicId The ID of the mnemonic document.
145
+ * @param session Optional Mongoose session for transaction support.
146
+ */
147
+ public async getMnemonicDocument(
148
+ mnemonicId: TID,
149
+ session?: ClientSession,
150
+ ): Promise<IMnemonicDocument<TID> | null> {
151
+ return await this.MnemonicModel.findById(mnemonicId).session(
152
+ session ?? null,
153
+ );
154
+ }
155
+
156
+ /**
157
+ * Decrypts a mnemonic from a document using the service's master encryption key.
158
+ * @param doc The mnemonic document.
159
+ */
160
+
161
+ /**
162
+ * Deletes a mnemonic document by ID.
163
+ * @param mnemonicId The ID of the mnemonic document.
164
+ * @param session Optional Mongoose session for transaction support.
165
+ */
166
+ public async deleteMnemonicDocument(
167
+ mnemonicId: TID,
168
+ session?: ClientSession,
169
+ ): Promise<void> {
170
+ await this.MnemonicModel.findByIdAndDelete(mnemonicId).session(
171
+ session ?? null,
172
+ );
173
+ }
174
+ }
@@ -0,0 +1,127 @@
1
+ /**
2
+ * @fileoverview Service for transforming user documents into request user DTOs and backend objects.
3
+ * Handles serialization and deserialization of user data for API requests and JWT tokens.
4
+ * @module services/request-user
5
+ */
6
+
7
+ import {
8
+ IRequestUserDTO,
9
+ IRoleDTO,
10
+ ITokenRole,
11
+ } from '@digitaldefiance/suite-core-lib';
12
+ import { IUserDocument } from '../documents';
13
+ import { IRequestUserBackendObject } from '../interfaces/backend-objects/request-user';
14
+ import { RoleService } from './role';
15
+ import {
16
+ getEnhancedNodeIdProvider,
17
+ PlatformID,
18
+ } from '@digitaldefiance/node-ecies-lib';
19
+
20
+ /**
21
+ * Service for converting between user documents, DTOs, and backend objects.
22
+ * Provides transformation methods for user data in different contexts (API, JWT, database).
23
+ * @template TID Platform-specific ID type (Buffer, ObjectId, etc.)
24
+ * @template _TTokenRole Token role type implementing ITokenRole
25
+ */
26
+ export class RequestUserService<
27
+ TID extends PlatformID,
28
+ _TTokenRole extends ITokenRole<TID>,
29
+ > {
30
+ /**
31
+ * Converts a user document and roles into a request user DTO for API responses.
32
+ * Calculates combined role privileges and serializes IDs to strings.
33
+ * @template TID Platform-specific ID type
34
+ * @template TLanguage Site language string literal type
35
+ * @template TTokenRole Token role type
36
+ * @template TRequestUserDTO Request user DTO type
37
+ * @param userDoc User document from database
38
+ * @param roles Array of token roles for the user
39
+ * @returns Request user DTO suitable for API responses
40
+ * @throws {Error} If user document is missing _id
41
+ */
42
+ public static makeRequestUserDTO<
43
+ TID extends PlatformID,
44
+ TLanguage extends string,
45
+ TTokenRole extends ITokenRole<TID>,
46
+ TRequestUserDTO extends IRequestUserDTO,
47
+ >(
48
+ userDoc:
49
+ | IUserDocument<TLanguage, TID>
50
+ | (Pick<
51
+ IUserDocument<TLanguage, TID>,
52
+ keyof IUserDocument<TLanguage, TID>
53
+ > & {
54
+ _id: PlatformID;
55
+ }),
56
+ roles: TTokenRole[],
57
+ ): TRequestUserDTO {
58
+ if (!userDoc._id) {
59
+ throw new Error('User document is missing _id');
60
+ }
61
+
62
+ // Calculate combined role privileges across all roles
63
+ const rolePrivileges = {
64
+ admin: roles.some((r) => r.admin),
65
+ member: roles.some((r) => r.member),
66
+ child: roles.some((r) => r.child),
67
+ system: roles.some((r) => r.system),
68
+ };
69
+
70
+ const provider = getEnhancedNodeIdProvider<TID>();
71
+ return {
72
+ id: provider.idToString(userDoc._id),
73
+ email: userDoc.email,
74
+ roles: roles.map((r) => RoleService.roleToRoleDTO(r)),
75
+ rolePrivileges,
76
+ username: userDoc.username,
77
+ timezone: userDoc.timezone,
78
+ currency: userDoc.currency,
79
+ directChallenge: userDoc.directChallenge,
80
+ emailVerified: userDoc.emailVerified,
81
+ darkMode: userDoc.darkMode,
82
+ siteLanguage: userDoc.siteLanguage as string,
83
+ ...(userDoc.lastLogin && { lastLogin: userDoc.lastLogin.toString() }),
84
+ } as TRequestUserDTO;
85
+ }
86
+
87
+ /**
88
+ * Hydrates a request user DTO back into a backend object with typed IDs and dates.
89
+ * Converts string IDs to platform-specific types and reconstitutes Date objects.
90
+ * @template TID Platform-specific ID type
91
+ * @template TLanguage Site language string literal type
92
+ * @template TRequestUserDTO Request user DTO type with site language
93
+ * @param requestUser Request user DTO from API or JWT
94
+ * @returns Backend object with typed IDs and dates
95
+ */
96
+ public static hydrateRequestUser<
97
+ TID extends PlatformID,
98
+ TLanguage extends string,
99
+ TRequestUserDTO extends IRequestUserDTO & { siteLanguage: TLanguage },
100
+ >(requestUser: TRequestUserDTO): IRequestUserBackendObject<TLanguage, TID> {
101
+ const provider = getEnhancedNodeIdProvider<TID>();
102
+ const convert = (id: string) => provider.idFromString(id);
103
+ const hydratedRoles = requestUser.roles.map((role: IRoleDTO) =>
104
+ RoleService.hydrateRoleDTOToBackend<TID>(role),
105
+ );
106
+
107
+ const hydratedUser: IRequestUserBackendObject<TLanguage, TID> = {
108
+ id: convert(requestUser.id),
109
+ email: requestUser.email,
110
+ roles: hydratedRoles,
111
+ rolePrivileges: requestUser.rolePrivileges,
112
+ username: requestUser.username,
113
+ timezone: requestUser.timezone,
114
+ currency: requestUser.currency,
115
+ directChallenge: requestUser.directChallenge,
116
+ emailVerified: requestUser.emailVerified,
117
+ darkMode: requestUser.darkMode,
118
+ siteLanguage: requestUser.siteLanguage,
119
+ };
120
+
121
+ if (requestUser.lastLogin) {
122
+ hydratedUser.lastLogin = new Date(requestUser.lastLogin);
123
+ }
124
+
125
+ return hydratedUser;
126
+ }
127
+ }
@@ -0,0 +1,417 @@
1
+ /**
2
+ * @fileoverview Role-based access control (RBAC) service.
3
+ * Manages roles, user-role relationships, and permission checks.
4
+ * @module services/role
5
+ */
6
+
7
+ import { MemberType } from '@digitaldefiance/ecies-lib';
8
+ import {
9
+ GlobalActiveContext,
10
+ I18nEngine,
11
+ IActiveContext,
12
+ } from '@digitaldefiance/i18n-lib';
13
+ import { ClientSession, Document } from '@digitaldefiance/mongoose-types';
14
+ import {
15
+ IRoleBase,
16
+ IRoleDTO,
17
+ ITokenRole,
18
+ ITokenRoleDTO,
19
+ LastAdminError,
20
+ Role,
21
+ } from '@digitaldefiance/suite-core-lib';
22
+ import { IUserDocument } from '../documents';
23
+ import { IRoleDocument } from '../documents/role';
24
+ import { IUserRoleDocument } from '../documents/user-role';
25
+ import { BaseModelName } from '../enumerations/base-model-name';
26
+ import { IApplication } from '../interfaces/application';
27
+ import { IRoleBackendObject } from '../interfaces/backend-objects/role';
28
+ import { ModelRegistry } from '../model-registry';
29
+ import { omit } from '../utils';
30
+ import { BaseService } from './base';
31
+ import {
32
+ getEnhancedNodeIdProvider,
33
+ type PlatformID,
34
+ } from '@digitaldefiance/node-ecies-lib';
35
+
36
+ /**
37
+ * Service for managing roles and role-based access control.
38
+ * Handles role creation, user-role assignments, and permission queries.
39
+ * @template TID - Platform ID type (defaults to Buffer)
40
+ * @template TDate - Date type (defaults to Date)
41
+ * @template TTokenRole - Token role interface type
42
+ * @extends {BaseService<TID>}
43
+ */
44
+ export class RoleService<
45
+ TID extends PlatformID = Buffer,
46
+ TDate extends Date = Date,
47
+ TTokenRole extends ITokenRole<TID, TDate> = ITokenRole<TID, TDate>,
48
+ > extends BaseService<TID> {
49
+ /**
50
+ * Constructor for the role service
51
+ * @param application The application object
52
+ */
53
+ constructor(application: IApplication<TID>) {
54
+ super(application);
55
+ }
56
+
57
+ public static roleToRoleDTO<
58
+ TID extends PlatformID = Buffer,
59
+ TDate extends Date = Date,
60
+ >(
61
+ role: ITokenRole<TID, TDate> | IRoleDocument<TID> | Partial<IRoleBase<TID>>,
62
+ ): ITokenRoleDTO {
63
+ const provider = getEnhancedNodeIdProvider<TID>();
64
+ const roleObj = role instanceof Document ? role.toObject() : role;
65
+ return {
66
+ _id: provider.idToString(roleObj._id),
67
+ name: roleObj.name as string,
68
+ admin: roleObj.admin ?? false,
69
+ member: roleObj.member ?? false,
70
+ child: roleObj.child ?? false,
71
+ system: roleObj.system ?? false,
72
+ translatedName:
73
+ 'translatedName' in role ? role.translatedName : role.name,
74
+ createdAt: (roleObj.createdAt instanceof Date
75
+ ? roleObj.createdAt.toISOString()
76
+ : roleObj.createdAt) as string,
77
+ createdBy: provider.idToString(roleObj.createdBy),
78
+ updatedAt: (roleObj.updatedAt instanceof Date
79
+ ? roleObj.updatedAt.toISOString()
80
+ : roleObj.updatedAt) as string,
81
+ updatedBy: provider.idToString(roleObj.updatedBy),
82
+ ...(roleObj.deletedAt
83
+ ? {
84
+ deletedAt: (roleObj.deletedAt instanceof Date
85
+ ? roleObj.deletedAt.toISOString()
86
+ : roleObj.deletedAt) as string,
87
+ }
88
+ : {}),
89
+ ...(role.deletedBy
90
+ ? {
91
+ deletedBy: provider.idToString(roleObj.deletedBy),
92
+ }
93
+ : {}),
94
+ } as ITokenRoleDTO;
95
+ }
96
+
97
+ /**
98
+ * Given a Role DTO, reconstitute ids and dates
99
+ * @param role The Role DTO
100
+ * @returns An IRoleBackendObject
101
+ */
102
+ public static hydrateRoleDTOToBackend<TID extends PlatformID = Buffer>(
103
+ role: ITokenRoleDTO,
104
+ ): IRoleBackendObject<TID> {
105
+ const idProvider = getEnhancedNodeIdProvider<TID>();
106
+ const convert = (id: string) => idProvider.idFromString(id);
107
+ return {
108
+ ...(omit<ITokenRoleDTO, 'translatedName'>(role, [
109
+ 'translatedName',
110
+ ]) as IRoleDTO),
111
+ _id: convert(role._id),
112
+ name: role.name as Role,
113
+ createdAt: new Date(role.createdAt),
114
+ createdBy: convert(role.createdBy),
115
+ updatedAt: new Date(role.updatedAt),
116
+ updatedBy: convert(role.updatedBy),
117
+ ...(role.deletedAt ? { deletedAt: new Date(role.deletedAt) } : {}),
118
+ ...(role.deletedBy
119
+ ? {
120
+ deletedBy: convert(role.deletedBy),
121
+ }
122
+ : {}),
123
+ } as IRoleBackendObject<TID>;
124
+ }
125
+
126
+ /**
127
+ * Gets the role ID by name
128
+ * @param roleName The name of the role
129
+ * @returns The role ID or null if not found
130
+ */
131
+ public async getRoleIdByName(
132
+ roleName: Role,
133
+ session?: ClientSession,
134
+ ): Promise<TID | null> {
135
+ const RoleModel = ModelRegistry.instance.get<any, any>(
136
+ BaseModelName.Role,
137
+ ).model;
138
+ const role = await RoleModel.findOne({ name: roleName }, undefined, {
139
+ session,
140
+ }).select('_id');
141
+ if (!role) {
142
+ return null;
143
+ }
144
+ return role._id as TID;
145
+ }
146
+
147
+ /**
148
+ * Creates a new role
149
+ * @param roleData The role data
150
+ * @param session Optional mongoose session
151
+ * @returns The created role document
152
+ */
153
+ public async createRole(
154
+ roleData: IRoleBase<TID, TDate, Role>,
155
+ session?: ClientSession | null,
156
+ ): Promise<IRoleDocument<TID>> {
157
+ const RoleModel = ModelRegistry.instance.get<any, any>(
158
+ BaseModelName.Role,
159
+ ).model;
160
+ const role = new RoleModel(roleData);
161
+ const savedRole = await role.save(session ? { session } : {});
162
+ return savedRole as IRoleDocument<TID>;
163
+ }
164
+
165
+ /**
166
+ * Adds a user to a role
167
+ * @param roleId - The role id
168
+ * @param userId - The user id
169
+ * @param createdBy - The user creating the relationship
170
+ * @param session Optional mongoose session
171
+ */
172
+ public async addUserToRole(
173
+ roleId: TID,
174
+ userId: TID,
175
+ createdBy: TID,
176
+ session?: ClientSession,
177
+ overrideId?: TID,
178
+ ): Promise<IUserRoleDocument<TID>> {
179
+ const UserRoleModel = ModelRegistry.instance.get<any, any>(
180
+ BaseModelName.UserRole,
181
+ ).model;
182
+
183
+ // Check if the user-role relationship already exists (and is not deleted)
184
+ const existingUserRole = await UserRoleModel.findOne({
185
+ userId,
186
+ roleId,
187
+ deletedAt: { $exists: false },
188
+ }).session(session ?? null);
189
+
190
+ if (existingUserRole) {
191
+ // Relationship already exists, no need to create it again
192
+ return existingUserRole;
193
+ }
194
+
195
+ const userRole = new UserRoleModel({
196
+ ...(overrideId ? { _id: overrideId } : {}),
197
+ userId,
198
+ roleId,
199
+ createdBy,
200
+ updatedBy: createdBy,
201
+ });
202
+ const result = await userRole.save({ session });
203
+ return result;
204
+ }
205
+
206
+ /**
207
+ * Removes a user from a role
208
+ * @param roleId - The role id
209
+ * @param userId - The user id
210
+ * @param deletedBy - The user removing the relationship
211
+ * @param session Optional mongoose session
212
+ * @throws LastAdminError if attempting to remove the last admin
213
+ */
214
+ public async removeUserFromRole(
215
+ roleId: TID,
216
+ userId: TID,
217
+ deletedBy: TID,
218
+ session?: ClientSession,
219
+ ): Promise<void> {
220
+ const RoleModel = ModelRegistry.instance.get<any, any>(
221
+ BaseModelName.Role,
222
+ ).model;
223
+ const UserRoleModel = ModelRegistry.instance.get<any, any>(
224
+ BaseModelName.UserRole,
225
+ ).model;
226
+
227
+ const role = await RoleModel.findById(roleId).session(session ?? null);
228
+ if (role?.admin) {
229
+ const adminCount = await UserRoleModel.countDocuments({
230
+ roleId,
231
+ deletedAt: { $exists: false },
232
+ }).session(session ?? null);
233
+ if (adminCount <= 1) {
234
+ throw new LastAdminError();
235
+ }
236
+ }
237
+
238
+ await UserRoleModel.findOneAndUpdate(
239
+ { userId, roleId, deletedAt: { $exists: false } },
240
+ { deletedAt: new Date(), deletedBy },
241
+ { session },
242
+ );
243
+ }
244
+
245
+ /**
246
+ * Deletes a role by ID
247
+ * @param roleId The role ID
248
+ * @param deleter The ID of the user deleting the role
249
+ * @param hardDelete Whether to hard delete the role
250
+ * @param session Optional mongoose session
251
+ */
252
+ public async deleteRole(
253
+ roleId: TID,
254
+ deleter: TID,
255
+ hardDelete: boolean,
256
+ session?: ClientSession,
257
+ ): Promise<void> {
258
+ const RoleModel = ModelRegistry.instance.get<any, any>(
259
+ BaseModelName.Role,
260
+ ).model;
261
+ if (hardDelete) {
262
+ await RoleModel.findByIdAndDelete(roleId).session(session ?? null);
263
+ } else {
264
+ await RoleModel.findByIdAndUpdate(roleId, {
265
+ deletedAt: new Date(),
266
+ deletedBy: deleter,
267
+ }).session(session ?? null);
268
+ }
269
+ }
270
+
271
+ /**
272
+ * Gets all roles for a user
273
+ * @param userId The user ID
274
+ * @param session Optional mongoose session
275
+ * @returns The roles the user is a member of
276
+ */
277
+ public async getUserRoles(
278
+ userId: TID,
279
+ session?: ClientSession,
280
+ ): Promise<IRoleDocument<TID>[]> {
281
+ const UserRoleModel = ModelRegistry.instance.get<any, any>(
282
+ BaseModelName.UserRole,
283
+ ).model;
284
+ const RoleModel = ModelRegistry.instance.get<any, any>(
285
+ BaseModelName.Role,
286
+ ).model;
287
+ if (!UserRoleModel || !RoleModel) throw new Error('Model not registered');
288
+
289
+ // Return full documents
290
+ const userRoles = await UserRoleModel.find({
291
+ userId,
292
+ deletedAt: { $exists: false },
293
+ })
294
+ .select('roleId')
295
+ .session(session ?? null);
296
+
297
+ const roleIds = userRoles.map((ur) => ur.roleId);
298
+ return (await RoleModel.find({
299
+ _id: { $in: roleIds },
300
+ deletedAt: { $exists: false },
301
+ }).session(session ?? null)) as IRoleDocument<TID>[];
302
+ }
303
+
304
+ /**
305
+ * Gets all users for a role
306
+ * @param roleId The role ID
307
+ * @param session Optional mongoose session
308
+ * @returns The user IDs that are members of the role
309
+ */
310
+ public async getRoleUsers(
311
+ roleId: TID,
312
+ session?: ClientSession,
313
+ ): Promise<TID[]> {
314
+ const UserRoleModel = ModelRegistry.instance.get<any, any>(
315
+ BaseModelName.UserRole,
316
+ ).model;
317
+
318
+ // Return full documents
319
+ const userRoles = await UserRoleModel.find({
320
+ roleId,
321
+ deletedAt: { $exists: false },
322
+ })
323
+ .select('userId')
324
+ .session(session ?? null);
325
+
326
+ return userRoles.map((ur) => ur.userId);
327
+ }
328
+
329
+ /** Convert roles to translated TokenRoles */
330
+ public rolesToTokenRoles(
331
+ roles: Array<IRoleBackendObject<TID>>,
332
+ overrideLanguage?: string,
333
+ ): Array<TTokenRole> {
334
+ return roles.map((role) => {
335
+ const engine = I18nEngine.getInstance('default');
336
+ const userLang = GlobalActiveContext.getInstance<
337
+ string,
338
+ IActiveContext<string>
339
+ >().userLanguage;
340
+ const lang = (overrideLanguage || userLang || 'en-US') as string;
341
+ const roleTranslation = engine.translateEnum(Role, role.name, lang);
342
+ // Convert Mongoose document to plain object if needed
343
+ const roleObj = role instanceof Document ? role.toObject() : role;
344
+ return {
345
+ ...roleObj,
346
+ translatedName: roleTranslation,
347
+ } as TTokenRole;
348
+ });
349
+ }
350
+
351
+ public async isUserAdmin(
352
+ userDoc: IUserDocument<string, TID>,
353
+ session?: ClientSession,
354
+ providedRoles?: Array<IRoleDocument<TID>>,
355
+ ): Promise<boolean> {
356
+ const roles =
357
+ providedRoles ?? (await this.getUserRoles(userDoc._id, session));
358
+ if (roles.filter((r) => r.admin).length > 0) {
359
+ return true;
360
+ }
361
+ return false;
362
+ }
363
+
364
+ public async isUserMember(
365
+ userDoc: IUserDocument<string, TID>,
366
+ session?: ClientSession,
367
+ providedRoles?: Array<IRoleDocument<TID>>,
368
+ ): Promise<boolean> {
369
+ const roles =
370
+ providedRoles ?? (await this.getUserRoles(userDoc._id, session));
371
+ if (roles.filter((r) => r.member).length > 0) {
372
+ return true;
373
+ }
374
+ return false;
375
+ }
376
+
377
+ public async isUserChild(
378
+ userDoc: IUserDocument<string, TID>,
379
+ session?: ClientSession,
380
+ providedRoles?: Array<IRoleDocument<TID>>,
381
+ ): Promise<boolean> {
382
+ const roles =
383
+ providedRoles ?? (await this.getUserRoles(userDoc._id, session));
384
+ if (roles.filter((r) => r.child).length > 0) {
385
+ return true;
386
+ }
387
+ return false;
388
+ }
389
+
390
+ public async isSystemUser(
391
+ userDoc: IUserDocument<string, TID>,
392
+ session?: ClientSession,
393
+ providedRoles?: Array<IRoleDocument<TID>>,
394
+ ): Promise<boolean> {
395
+ const roles =
396
+ providedRoles ?? (await this.getUserRoles(userDoc._id, session));
397
+ return roles.some((r) => r.system);
398
+ }
399
+
400
+ public async getMemberType(
401
+ userDoc: IUserDocument<string, TID>,
402
+ session?: ClientSession,
403
+ providedRoles?: Array<IRoleDocument<TID>>,
404
+ ): Promise<MemberType> {
405
+ const roles =
406
+ providedRoles ?? (await this.getUserRoles(userDoc._id, session));
407
+ if (await this.isSystemUser(userDoc, session, roles)) {
408
+ return MemberType.System;
409
+ } else if (await this.isUserAdmin(userDoc, session, roles)) {
410
+ return MemberType.Admin;
411
+ } else if (await this.isUserMember(userDoc, session, roles)) {
412
+ return MemberType.User;
413
+ } else {
414
+ return MemberType.Anonymous;
415
+ }
416
+ }
417
+ }