@digitaldefiance/node-express-suite-mongo 4.23.0

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 (390) hide show
  1. package/README.md +152 -0
  2. package/package.json +51 -0
  3. package/src/__tests__/fixtures/index.d.ts +2 -0
  4. package/src/__tests__/fixtures/index.d.ts.map +1 -0
  5. package/src/__tests__/fixtures/index.js +5 -0
  6. package/src/__tests__/fixtures/index.js.map +1 -0
  7. package/src/__tests__/fixtures/model-mocks.mock.d.ts +12 -0
  8. package/src/__tests__/fixtures/model-mocks.mock.d.ts.map +1 -0
  9. package/src/__tests__/fixtures/model-mocks.mock.js +102 -0
  10. package/src/__tests__/fixtures/model-mocks.mock.js.map +1 -0
  11. package/src/__tests__/helpers/application.mock.d.ts +4 -0
  12. package/src/__tests__/helpers/application.mock.d.ts.map +1 -0
  13. package/src/__tests__/helpers/application.mock.js +35 -0
  14. package/src/__tests__/helpers/application.mock.js.map +1 -0
  15. package/src/__tests__/helpers/index.d.ts +5 -0
  16. package/src/__tests__/helpers/index.d.ts.map +1 -0
  17. package/src/__tests__/helpers/index.js +8 -0
  18. package/src/__tests__/helpers/index.js.map +1 -0
  19. package/src/__tests__/helpers/mongoose-memory.d.ts +14 -0
  20. package/src/__tests__/helpers/mongoose-memory.d.ts.map +1 -0
  21. package/src/__tests__/helpers/mongoose-memory.js +49 -0
  22. package/src/__tests__/helpers/mongoose-memory.js.map +1 -0
  23. package/src/__tests__/helpers/setup-test-env.d.ts +13 -0
  24. package/src/__tests__/helpers/setup-test-env.d.ts.map +1 -0
  25. package/src/__tests__/helpers/setup-test-env.js +131 -0
  26. package/src/__tests__/helpers/setup-test-env.js.map +1 -0
  27. package/src/__tests__/index.d.ts +3 -0
  28. package/src/__tests__/index.d.ts.map +1 -0
  29. package/src/__tests__/index.js +6 -0
  30. package/src/__tests__/index.js.map +1 -0
  31. package/src/builders/application-builder.d.ts +38 -0
  32. package/src/builders/application-builder.d.ts.map +1 -0
  33. package/src/builders/application-builder.js +82 -0
  34. package/src/builders/application-builder.js.map +1 -0
  35. package/src/builders/index.d.ts +2 -0
  36. package/src/builders/index.d.ts.map +1 -0
  37. package/src/builders/index.js +5 -0
  38. package/src/builders/index.js.map +1 -0
  39. package/src/controllers/index.d.ts +3 -0
  40. package/src/controllers/index.d.ts.map +1 -0
  41. package/src/controllers/index.js +6 -0
  42. package/src/controllers/index.js.map +1 -0
  43. package/src/controllers/mongo-base.d.ts +55 -0
  44. package/src/controllers/mongo-base.d.ts.map +1 -0
  45. package/src/controllers/mongo-base.js +108 -0
  46. package/src/controllers/mongo-base.js.map +1 -0
  47. package/src/controllers/user.d.ts +61 -0
  48. package/src/controllers/user.d.ts.map +1 -0
  49. package/src/controllers/user.js +944 -0
  50. package/src/controllers/user.js.map +1 -0
  51. package/src/documents/base.d.ts +15 -0
  52. package/src/documents/base.d.ts.map +1 -0
  53. package/src/documents/base.js +8 -0
  54. package/src/documents/base.js.map +1 -0
  55. package/src/documents/email-token.d.ts +15 -0
  56. package/src/documents/email-token.d.ts.map +1 -0
  57. package/src/documents/email-token.js +8 -0
  58. package/src/documents/email-token.js.map +1 -0
  59. package/src/documents/index.d.ts +8 -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.d.ts +16 -0
  64. package/src/documents/mnemonic.d.ts.map +1 -0
  65. package/src/documents/mnemonic.js +8 -0
  66. package/src/documents/mnemonic.js.map +1 -0
  67. package/src/documents/role.d.ts +15 -0
  68. package/src/documents/role.d.ts.map +1 -0
  69. package/src/documents/role.js +8 -0
  70. package/src/documents/role.js.map +1 -0
  71. package/src/documents/used-direct-login-token.d.ts +16 -0
  72. package/src/documents/used-direct-login-token.d.ts.map +1 -0
  73. package/src/documents/used-direct-login-token.js +8 -0
  74. package/src/documents/used-direct-login-token.js.map +1 -0
  75. package/src/documents/user-role.d.ts +16 -0
  76. package/src/documents/user-role.d.ts.map +1 -0
  77. package/src/documents/user-role.js +8 -0
  78. package/src/documents/user-role.js.map +1 -0
  79. package/src/documents/user.d.ts +16 -0
  80. package/src/documents/user.d.ts.map +1 -0
  81. package/src/documents/user.js +8 -0
  82. package/src/documents/user.js.map +1 -0
  83. package/src/enumerations/base-model-name.d.ts +43 -0
  84. package/src/enumerations/base-model-name.d.ts.map +1 -0
  85. package/src/enumerations/base-model-name.js +39 -0
  86. package/src/enumerations/base-model-name.js.map +1 -0
  87. package/src/enumerations/index.d.ts +3 -0
  88. package/src/enumerations/index.d.ts.map +1 -0
  89. package/src/enumerations/index.js +6 -0
  90. package/src/enumerations/index.js.map +1 -0
  91. package/src/enumerations/schema-collection.d.ts +39 -0
  92. package/src/enumerations/schema-collection.d.ts.map +1 -0
  93. package/src/enumerations/schema-collection.js +43 -0
  94. package/src/enumerations/schema-collection.js.map +1 -0
  95. package/src/errors/index.d.ts +5 -0
  96. package/src/errors/index.d.ts.map +1 -0
  97. package/src/errors/index.js +8 -0
  98. package/src/errors/index.js.map +1 -0
  99. package/src/errors/invalid-backup-code-version.d.ts +5 -0
  100. package/src/errors/invalid-backup-code-version.d.ts.map +1 -0
  101. package/src/errors/invalid-backup-code-version.js +14 -0
  102. package/src/errors/invalid-backup-code-version.js.map +1 -0
  103. package/src/errors/invalid-model.d.ts +18 -0
  104. package/src/errors/invalid-model.d.ts.map +1 -0
  105. package/src/errors/invalid-model.js +26 -0
  106. package/src/errors/invalid-model.js.map +1 -0
  107. package/src/errors/model-not-registered.d.ts +18 -0
  108. package/src/errors/model-not-registered.d.ts.map +1 -0
  109. package/src/errors/model-not-registered.js +26 -0
  110. package/src/errors/model-not-registered.js.map +1 -0
  111. package/src/errors/mongoose-validation.d.ts +28 -0
  112. package/src/errors/mongoose-validation.d.ts.map +1 -0
  113. package/src/errors/mongoose-validation.js +33 -0
  114. package/src/errors/mongoose-validation.js.map +1 -0
  115. package/src/index.d.ts +19 -0
  116. package/src/index.d.ts.map +1 -0
  117. package/src/index.js +31 -0
  118. package/src/index.js.map +1 -0
  119. package/src/interfaces/api-mongo-validation-error-response.d.ts +16 -0
  120. package/src/interfaces/api-mongo-validation-error-response.d.ts.map +1 -0
  121. package/src/interfaces/api-mongo-validation-error-response.js +8 -0
  122. package/src/interfaces/api-mongo-validation-error-response.js.map +1 -0
  123. package/src/interfaces/database-init-result-tx.d.ts +27 -0
  124. package/src/interfaces/database-init-result-tx.d.ts.map +1 -0
  125. package/src/interfaces/database-init-result-tx.js +3 -0
  126. package/src/interfaces/database-init-result-tx.js.map +1 -0
  127. package/src/interfaces/db-init-result.d.ts +16 -0
  128. package/src/interfaces/db-init-result.d.ts.map +1 -0
  129. package/src/interfaces/db-init-result.js +8 -0
  130. package/src/interfaces/db-init-result.js.map +1 -0
  131. package/src/interfaces/discriminator-collections.d.ts +17 -0
  132. package/src/interfaces/discriminator-collections.d.ts.map +1 -0
  133. package/src/interfaces/discriminator-collections.js +8 -0
  134. package/src/interfaces/discriminator-collections.js.map +1 -0
  135. package/src/interfaces/environment-mongo.d.ts +88 -0
  136. package/src/interfaces/environment-mongo.d.ts.map +1 -0
  137. package/src/interfaces/environment-mongo.js +8 -0
  138. package/src/interfaces/environment-mongo.js.map +1 -0
  139. package/src/interfaces/index.d.ts +13 -0
  140. package/src/interfaces/index.d.ts.map +1 -0
  141. package/src/interfaces/index.js +16 -0
  142. package/src/interfaces/index.js.map +1 -0
  143. package/src/interfaces/models/email-token.d.ts +12 -0
  144. package/src/interfaces/models/email-token.d.ts.map +1 -0
  145. package/src/interfaces/models/email-token.js +8 -0
  146. package/src/interfaces/models/email-token.js.map +1 -0
  147. package/src/interfaces/models/index.d.ts +8 -0
  148. package/src/interfaces/models/index.d.ts.map +1 -0
  149. package/src/interfaces/models/index.js +11 -0
  150. package/src/interfaces/models/index.js.map +1 -0
  151. package/src/interfaces/models/mnemonic.d.ts +13 -0
  152. package/src/interfaces/models/mnemonic.d.ts.map +1 -0
  153. package/src/interfaces/models/mnemonic.js +8 -0
  154. package/src/interfaces/models/mnemonic.js.map +1 -0
  155. package/src/interfaces/models/role.d.ts +12 -0
  156. package/src/interfaces/models/role.d.ts.map +1 -0
  157. package/src/interfaces/models/role.js +8 -0
  158. package/src/interfaces/models/role.js.map +1 -0
  159. package/src/interfaces/models/token-role.d.ts +19 -0
  160. package/src/interfaces/models/token-role.d.ts.map +1 -0
  161. package/src/interfaces/models/token-role.js +8 -0
  162. package/src/interfaces/models/token-role.js.map +1 -0
  163. package/src/interfaces/models/used-direct-login-token.d.ts +19 -0
  164. package/src/interfaces/models/used-direct-login-token.d.ts.map +1 -0
  165. package/src/interfaces/models/used-direct-login-token.js +8 -0
  166. package/src/interfaces/models/used-direct-login-token.js.map +1 -0
  167. package/src/interfaces/models/user-role.d.ts +19 -0
  168. package/src/interfaces/models/user-role.d.ts.map +1 -0
  169. package/src/interfaces/models/user-role.js +8 -0
  170. package/src/interfaces/models/user-role.js.map +1 -0
  171. package/src/interfaces/models/user.d.ts +21 -0
  172. package/src/interfaces/models/user.d.ts.map +1 -0
  173. package/src/interfaces/models/user.js +8 -0
  174. package/src/interfaces/models/user.js.map +1 -0
  175. package/src/interfaces/mongo-application.d.ts +47 -0
  176. package/src/interfaces/mongo-application.d.ts.map +1 -0
  177. package/src/interfaces/mongo-application.js +10 -0
  178. package/src/interfaces/mongo-application.js.map +1 -0
  179. package/src/interfaces/mongo-errors.d.ts +13 -0
  180. package/src/interfaces/mongo-errors.d.ts.map +1 -0
  181. package/src/interfaces/mongo-errors.js +8 -0
  182. package/src/interfaces/mongo-errors.js.map +1 -0
  183. package/src/interfaces/mongoose-document-store.d.ts +42 -0
  184. package/src/interfaces/mongoose-document-store.d.ts.map +1 -0
  185. package/src/interfaces/mongoose-document-store.js +10 -0
  186. package/src/interfaces/mongoose-document-store.js.map +1 -0
  187. package/src/interfaces/schema.d.ts +37 -0
  188. package/src/interfaces/schema.d.ts.map +1 -0
  189. package/src/interfaces/schema.js +8 -0
  190. package/src/interfaces/schema.js.map +1 -0
  191. package/src/interfaces/server-init-result.d.ts +45 -0
  192. package/src/interfaces/server-init-result.d.ts.map +1 -0
  193. package/src/interfaces/server-init-result.js +8 -0
  194. package/src/interfaces/server-init-result.js.map +1 -0
  195. package/src/interfaces/test-environment.d.ts +22 -0
  196. package/src/interfaces/test-environment.d.ts.map +1 -0
  197. package/src/interfaces/test-environment.js +8 -0
  198. package/src/interfaces/test-environment.js.map +1 -0
  199. package/src/model-registry.d.ts +79 -0
  200. package/src/model-registry.d.ts.map +1 -0
  201. package/src/model-registry.js +97 -0
  202. package/src/model-registry.js.map +1 -0
  203. package/src/models/email-token.d.ts +24 -0
  204. package/src/models/email-token.d.ts.map +1 -0
  205. package/src/models/email-token.js +16 -0
  206. package/src/models/email-token.js.map +1 -0
  207. package/src/models/index.d.ts +7 -0
  208. package/src/models/index.d.ts.map +1 -0
  209. package/src/models/index.js +10 -0
  210. package/src/models/index.js.map +1 -0
  211. package/src/models/mnemonic.d.ts +24 -0
  212. package/src/models/mnemonic.d.ts.map +1 -0
  213. package/src/models/mnemonic.js +27 -0
  214. package/src/models/mnemonic.js.map +1 -0
  215. package/src/models/role.d.ts +24 -0
  216. package/src/models/role.d.ts.map +1 -0
  217. package/src/models/role.js +27 -0
  218. package/src/models/role.js.map +1 -0
  219. package/src/models/used-direct-login-token.d.ts +24 -0
  220. package/src/models/used-direct-login-token.d.ts.map +1 -0
  221. package/src/models/used-direct-login-token.js +16 -0
  222. package/src/models/used-direct-login-token.js.map +1 -0
  223. package/src/models/user-role.d.ts +23 -0
  224. package/src/models/user-role.d.ts.map +1 -0
  225. package/src/models/user-role.js +26 -0
  226. package/src/models/user-role.js.map +1 -0
  227. package/src/models/user.d.ts +24 -0
  228. package/src/models/user.d.ts.map +1 -0
  229. package/src/models/user.js +27 -0
  230. package/src/models/user.js.map +1 -0
  231. package/src/mongo-application-concrete.d.ts +30 -0
  232. package/src/mongo-application-concrete.d.ts.map +1 -0
  233. package/src/mongo-application-concrete.js +46 -0
  234. package/src/mongo-application-concrete.js.map +1 -0
  235. package/src/plugins/index.d.ts +2 -0
  236. package/src/plugins/index.d.ts.map +1 -0
  237. package/src/plugins/index.js +5 -0
  238. package/src/plugins/index.js.map +1 -0
  239. package/src/plugins/mongo-database-plugin.d.ts +116 -0
  240. package/src/plugins/mongo-database-plugin.d.ts.map +1 -0
  241. package/src/plugins/mongo-database-plugin.js +230 -0
  242. package/src/plugins/mongo-database-plugin.js.map +1 -0
  243. package/src/routers/api.d.ts +29 -0
  244. package/src/routers/api.d.ts.map +1 -0
  245. package/src/routers/api.js +84 -0
  246. package/src/routers/api.js.map +1 -0
  247. package/src/routers/index.d.ts +2 -0
  248. package/src/routers/index.d.ts.map +1 -0
  249. package/src/routers/index.js +5 -0
  250. package/src/routers/index.js.map +1 -0
  251. package/src/schemas/email-token.d.ts +65 -0
  252. package/src/schemas/email-token.d.ts.map +1 -0
  253. package/src/schemas/email-token.js +68 -0
  254. package/src/schemas/email-token.js.map +1 -0
  255. package/src/schemas/index.d.ts +8 -0
  256. package/src/schemas/index.d.ts.map +1 -0
  257. package/src/schemas/index.js +11 -0
  258. package/src/schemas/index.js.map +1 -0
  259. package/src/schemas/mnemonic.d.ts +37 -0
  260. package/src/schemas/mnemonic.d.ts.map +1 -0
  261. package/src/schemas/mnemonic.js +41 -0
  262. package/src/schemas/mnemonic.js.map +1 -0
  263. package/src/schemas/role.d.ts +57 -0
  264. package/src/schemas/role.d.ts.map +1 -0
  265. package/src/schemas/role.js +102 -0
  266. package/src/schemas/role.js.map +1 -0
  267. package/src/schemas/schema.d.ts +62 -0
  268. package/src/schemas/schema.d.ts.map +1 -0
  269. package/src/schemas/schema.js +81 -0
  270. package/src/schemas/schema.js.map +1 -0
  271. package/src/schemas/used-direct-login-token.d.ts +49 -0
  272. package/src/schemas/used-direct-login-token.d.ts.map +1 -0
  273. package/src/schemas/used-direct-login-token.js +35 -0
  274. package/src/schemas/used-direct-login-token.js.map +1 -0
  275. package/src/schemas/user-role.d.ts +52 -0
  276. package/src/schemas/user-role.d.ts.map +1 -0
  277. package/src/schemas/user-role.js +67 -0
  278. package/src/schemas/user-role.js.map +1 -0
  279. package/src/schemas/user.d.ts +43 -0
  280. package/src/schemas/user.d.ts.map +1 -0
  281. package/src/schemas/user.js +214 -0
  282. package/src/schemas/user.js.map +1 -0
  283. package/src/services/backup-code.d.ts +118 -0
  284. package/src/services/backup-code.d.ts.map +1 -0
  285. package/src/services/backup-code.js +320 -0
  286. package/src/services/backup-code.js.map +1 -0
  287. package/src/services/database-initialization.d.ts +137 -0
  288. package/src/services/database-initialization.d.ts.map +1 -0
  289. package/src/services/database-initialization.js +911 -0
  290. package/src/services/database-initialization.js.map +1 -0
  291. package/src/services/db-init-cache.d.ts +18 -0
  292. package/src/services/db-init-cache.d.ts.map +1 -0
  293. package/src/services/db-init-cache.js +7 -0
  294. package/src/services/db-init-cache.js.map +1 -0
  295. package/src/services/direct-login-token.d.ts +28 -0
  296. package/src/services/direct-login-token.d.ts.map +1 -0
  297. package/src/services/direct-login-token.js +62 -0
  298. package/src/services/direct-login-token.js.map +1 -0
  299. package/src/services/index.d.ts +17 -0
  300. package/src/services/index.d.ts.map +1 -0
  301. package/src/services/index.js +20 -0
  302. package/src/services/index.js.map +1 -0
  303. package/src/services/jwt.d.ts +20 -0
  304. package/src/services/jwt.d.ts.map +1 -0
  305. package/src/services/jwt.js +79 -0
  306. package/src/services/jwt.js.map +1 -0
  307. package/src/services/mnemonic.d.ts +30 -0
  308. package/src/services/mnemonic.d.ts.map +1 -0
  309. package/src/services/mnemonic.js +80 -0
  310. package/src/services/mnemonic.js.map +1 -0
  311. package/src/services/mongo-authentication-provider.d.ts +27 -0
  312. package/src/services/mongo-authentication-provider.d.ts.map +1 -0
  313. package/src/services/mongo-authentication-provider.js +97 -0
  314. package/src/services/mongo-authentication-provider.js.map +1 -0
  315. package/src/services/mongo-backup-code-store.d.ts +40 -0
  316. package/src/services/mongo-backup-code-store.d.ts.map +1 -0
  317. package/src/services/mongo-backup-code-store.js +104 -0
  318. package/src/services/mongo-backup-code-store.js.map +1 -0
  319. package/src/services/mongo-base.d.ts +24 -0
  320. package/src/services/mongo-base.d.ts.map +1 -0
  321. package/src/services/mongo-base.js +28 -0
  322. package/src/services/mongo-base.js.map +1 -0
  323. package/src/services/mongoose-collection.d.ts +52 -0
  324. package/src/services/mongoose-collection.d.ts.map +1 -0
  325. package/src/services/mongoose-collection.js +326 -0
  326. package/src/services/mongoose-collection.js.map +1 -0
  327. package/src/services/mongoose-database.d.ts +64 -0
  328. package/src/services/mongoose-database.d.ts.map +1 -0
  329. package/src/services/mongoose-database.js +121 -0
  330. package/src/services/mongoose-database.js.map +1 -0
  331. package/src/services/mongoose-document-store.d.ts +108 -0
  332. package/src/services/mongoose-document-store.d.ts.map +1 -0
  333. package/src/services/mongoose-document-store.js +265 -0
  334. package/src/services/mongoose-document-store.js.map +1 -0
  335. package/src/services/mongoose-session-adapter.d.ts +39 -0
  336. package/src/services/mongoose-session-adapter.d.ts.map +1 -0
  337. package/src/services/mongoose-session-adapter.js +63 -0
  338. package/src/services/mongoose-session-adapter.js.map +1 -0
  339. package/src/services/request-user.d.ts +22 -0
  340. package/src/services/request-user.d.ts.map +1 -0
  341. package/src/services/request-user.js +66 -0
  342. package/src/services/request-user.js.map +1 -0
  343. package/src/services/role.d.ts +97 -0
  344. package/src/services/role.d.ts.map +1 -0
  345. package/src/services/role.js +288 -0
  346. package/src/services/role.js.map +1 -0
  347. package/src/services/user.d.ts +362 -0
  348. package/src/services/user.d.ts.map +1 -0
  349. package/src/services/user.js +1504 -0
  350. package/src/services/user.js.map +1 -0
  351. package/src/testing.d.ts +9 -0
  352. package/src/testing.d.ts.map +1 -0
  353. package/src/testing.js +12 -0
  354. package/src/testing.js.map +1 -0
  355. package/src/transactions/index.d.ts +2 -0
  356. package/src/transactions/index.d.ts.map +1 -0
  357. package/src/transactions/index.js +5 -0
  358. package/src/transactions/index.js.map +1 -0
  359. package/src/transactions/transaction-manager.d.ts +37 -0
  360. package/src/transactions/transaction-manager.d.ts.map +1 -0
  361. package/src/transactions/transaction-manager.js +50 -0
  362. package/src/transactions/transaction-manager.js.map +1 -0
  363. package/src/types/index.d.ts +26 -0
  364. package/src/types/index.d.ts.map +1 -0
  365. package/src/types/index.js +9 -0
  366. package/src/types/index.js.map +1 -0
  367. package/src/types/mongoose-helpers.d.ts +16 -0
  368. package/src/types/mongoose-helpers.d.ts.map +1 -0
  369. package/src/types/mongoose-helpers.js +8 -0
  370. package/src/types/mongoose-helpers.js.map +1 -0
  371. package/src/utils/default-mongo-uri-validator.d.ts +15 -0
  372. package/src/utils/default-mongo-uri-validator.d.ts.map +1 -0
  373. package/src/utils/default-mongo-uri-validator.js +46 -0
  374. package/src/utils/default-mongo-uri-validator.js.map +1 -0
  375. package/src/utils/index.d.ts +5 -0
  376. package/src/utils/index.d.ts.map +1 -0
  377. package/src/utils/index.js +8 -0
  378. package/src/utils/index.js.map +1 -0
  379. package/src/utils/mongo-error-response.d.ts +17 -0
  380. package/src/utils/mongo-error-response.d.ts.map +1 -0
  381. package/src/utils/mongo-error-response.js +21 -0
  382. package/src/utils/mongo-error-response.js.map +1 -0
  383. package/src/utils/mongo-transaction.d.ts +39 -0
  384. package/src/utils/mongo-transaction.d.ts.map +1 -0
  385. package/src/utils/mongo-transaction.js +131 -0
  386. package/src/utils/mongo-transaction.js.map +1 -0
  387. package/src/utils/object-id.d.ts +11 -0
  388. package/src/utils/object-id.d.ts.map +1 -0
  389. package/src/utils/object-id.js +17 -0
  390. package/src/utils/object-id.js.map +1 -0
@@ -0,0 +1,265 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Mongoose implementation of the IDocumentStore interface.
4
+ * Wraps existing mongoose logic previously embedded in BaseApplication.
5
+ * @module services/mongoose-document-store
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.MongooseDocumentStore = void 0;
9
+ const tslib_1 = require("tslib");
10
+ const mongoose_types_1 = tslib_1.__importDefault(require("@digitaldefiance/mongoose-types"));
11
+ const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
12
+ const mongodb_memory_server_1 = require("mongodb-memory-server");
13
+ const node_express_suite_1 = require("@digitaldefiance/node-express-suite");
14
+ const model_registry_1 = require("../model-registry");
15
+ const default_mongo_uri_validator_1 = require("../utils/default-mongo-uri-validator");
16
+ /**
17
+ * Mongoose implementation of IDocumentStore.
18
+ * Extracts and preserves the existing mongoose logic from BaseApplication.
19
+ * @template TID - Platform-specific ID type extending PlatformID
20
+ * @template TModelDocs - Record mapping model names to their document types
21
+ * @template TInitResults - Type of database initialization results
22
+ * @template TConstants - Application constants type
23
+ */
24
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
25
+ class MongooseDocumentStore {
26
+ /**
27
+ * Mongoose database instance
28
+ */
29
+ _db;
30
+ /**
31
+ * Schema map for all models
32
+ */
33
+ _schemaMap;
34
+ /**
35
+ * In-memory MongoDB instance for development
36
+ */
37
+ _devDatabase;
38
+ /**
39
+ * Function to create the schema map given a Mongoose connection
40
+ */
41
+ _schemaMapFactory;
42
+ /**
43
+ * Function to initialize the database with default data
44
+ */
45
+ _databaseInitFunction;
46
+ /**
47
+ * Function to create a hash from the database initialization results (for logging purposes)
48
+ */
49
+ _initResultHashFunction;
50
+ /**
51
+ * Application environment
52
+ */
53
+ _environment;
54
+ /**
55
+ * Application constants
56
+ */
57
+ _constants;
58
+ constructor(schemaMapFactory, databaseInitFunction, initResultHashFunction, environment, constants = suite_core_lib_1.Constants) {
59
+ this._schemaMapFactory = schemaMapFactory;
60
+ this._databaseInitFunction = databaseInitFunction;
61
+ this._initResultHashFunction = initResultHashFunction;
62
+ this._environment = environment;
63
+ this._constants = constants;
64
+ }
65
+ /**
66
+ * Get the underlying mongoose instance (for backward compatibility).
67
+ */
68
+ get db() {
69
+ if (!this._db) {
70
+ throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Admin_Error_DatabaseNotConnectedYet);
71
+ }
72
+ return this._db;
73
+ }
74
+ /** @inheritdoc */
75
+ get schemaMap() {
76
+ return this._schemaMap;
77
+ }
78
+ /** @inheritdoc */
79
+ get devDatabase() {
80
+ return this._devDatabase;
81
+ }
82
+ /**
83
+ * Validate MongoDB URI to prevent SSRF attacks.
84
+ * Delegates to the standalone defaultMongoUriValidator for reuse
85
+ * across both IDatabase and IDocumentStore paths.
86
+ */
87
+ validateMongoUri(uri) {
88
+ (0, default_mongo_uri_validator_1.defaultMongoUriValidator)(uri, this._environment.production);
89
+ }
90
+ /**
91
+ * Connect to MongoDB and initialize schemas.
92
+ * Extracted from BaseApplication.connectDatabase.
93
+ * @inheritdoc
94
+ */
95
+ async connect(uri) {
96
+ const mongoUri = uri ?? this._environment.requireMongo.uri;
97
+ const debug = this._environment.debug;
98
+ this.validateMongoUri(mongoUri);
99
+ (0, node_express_suite_1.debugLog)(debug, 'log', `[ ${(0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_Connecting, undefined, undefined, { constants: this._constants })} ] ${(0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Common_MongoDB, undefined, undefined, { constants: this._constants })}: ${mongoUri}`);
100
+ // Always disconnect first to ensure clean state
101
+ if (mongoose_types_1.default.connection.readyState !== 0) {
102
+ await mongoose_types_1.default.disconnect();
103
+ }
104
+ // amazonq-ignore-next-line solved above with validateMongoUri call
105
+ const mongoConfig = this._environment.mongo;
106
+ await mongoose_types_1.default.connect(mongoUri, {
107
+ maxPoolSize: mongoConfig.maxPoolSize,
108
+ minPoolSize: mongoConfig.minPoolSize,
109
+ maxIdleTimeMS: mongoConfig.maxIdleTimeMS,
110
+ serverSelectionTimeoutMS: mongoConfig.serverSelectionTimeoutMS,
111
+ socketTimeoutMS: mongoConfig.socketTimeoutMS,
112
+ retryWrites: mongoConfig.retryWrites,
113
+ retryReads: mongoConfig.retryReads,
114
+ readConcern: mongoConfig.readConcern,
115
+ writeConcern: mongoConfig.writeConcern,
116
+ });
117
+ this._db = mongoose_types_1.default;
118
+ await new Promise((resolve) => {
119
+ if (mongoose_types_1.default.connection.readyState === 1) {
120
+ resolve();
121
+ }
122
+ else {
123
+ mongoose_types_1.default.connection.once('connected', resolve);
124
+ }
125
+ });
126
+ const engine = (0, suite_core_lib_1.getSuiteCoreI18nEngine)({ constants: this._constants });
127
+ (0, node_express_suite_1.debugLog)(debug, 'log', engine.t('[ {{SuiteCoreStringKey.Common_Connected}} ] {{SuiteCoreStringKey.Common_MongoDB}}'));
128
+ (0, node_express_suite_1.debugLog)(debug, 'log', engine.t('[ {{SuiteCoreStringKey.Common_Loading}} ] {{SuiteCoreStringKey.Common_Schemas}}'));
129
+ this._schemaMap = this._schemaMapFactory(this.db.connection);
130
+ // Register all base models in ModelRegistry for extensibility
131
+ if (this._schemaMap) {
132
+ Object.values(this._schemaMap).forEach((schema) => {
133
+ model_registry_1.ModelRegistry.instance.register({
134
+ modelName: schema.modelName,
135
+ schema: schema.schema,
136
+ model: schema.model,
137
+ collection: schema.collection,
138
+ discriminators: schema.discriminators,
139
+ });
140
+ });
141
+ }
142
+ if (debug) {
143
+ Object.values(this._schemaMap).forEach((schema) => {
144
+ console.log(engine.t(`[ {{SuiteCoreStringKey.Common_Loaded}} ] {{SuiteCoreStringKey.Common_Schema}} '${schema.modelName.replace(/[\r\n]/g, '')}'`));
145
+ });
146
+ }
147
+ if (!this._db.connection.db) {
148
+ console.error(engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Admin_Error_FailedToSetTransactionTimeout));
149
+ }
150
+ else {
151
+ const command = {
152
+ ...(this._environment.mongo.setParameterSupported
153
+ ? { setParameter: 1 }
154
+ : {}),
155
+ ...(this._environment.mongo.useTransactions &&
156
+ this._environment.mongo.transactionLifetimeLimitSecondsSupported
157
+ ? {
158
+ transactionLifetimeLimitSeconds: this._environment.mongo.transactionTimeout,
159
+ }
160
+ : {}),
161
+ ...(this._environment.mongo.useTransactions &&
162
+ this._environment.mongo.maxTransactionLockRequestTimeoutMillisSupported
163
+ ? {
164
+ maxTransactionLockRequestTimeoutMillis: this._environment.mongo.transactionLockRequestTimeout,
165
+ }
166
+ : {}),
167
+ };
168
+ if (Object.keys(command).length > 0) {
169
+ await this._db.connection.db
170
+ .admin()
171
+ .command(command)
172
+ .catch(() => undefined);
173
+ }
174
+ (0, node_express_suite_1.debugLog)(debug, 'log', engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Admin_SetTransactionTimeoutSuccessfully));
175
+ }
176
+ }
177
+ /**
178
+ * Disconnect from database.
179
+ * Extracted from BaseApplication.disconnectDatabase.
180
+ * @inheritdoc
181
+ */
182
+ async disconnect() {
183
+ const debug = this._environment.debug;
184
+ if (this._db && mongoose_types_1.default.connection.readyState !== 0) {
185
+ await this._db.disconnect();
186
+ }
187
+ const engine = (0, suite_core_lib_1.getSuiteCoreI18nEngine)({ constants: this._constants });
188
+ this._db = undefined;
189
+ (0, node_express_suite_1.debugLog)(debug, 'log', `[ ${engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Common_Disconnected)} ] ${engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Common_MongoDB)}`);
190
+ }
191
+ /**
192
+ * Whether the store is currently connected and ready for operations.
193
+ * @inheritdoc
194
+ */
195
+ isConnected() {
196
+ return mongoose_types_1.default.connection.readyState === 1;
197
+ }
198
+ /**
199
+ * Retrieve a model/collection handle by name.
200
+ * Delegates to ModelRegistry.
201
+ * @inheritdoc
202
+ */
203
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
204
+ getModel(modelName) {
205
+ return model_registry_1.ModelRegistry.instance.get(modelName).model;
206
+ }
207
+ /**
208
+ * Set up an in-memory MongoDB instance for development.
209
+ * Extracted from BaseApplication.setupDevDatabase.
210
+ * @inheritdoc
211
+ */
212
+ async setupDevStore() {
213
+ this._devDatabase = await mongodb_memory_server_1.MongoMemoryReplSet.create({
214
+ replSet: { count: 1, storageEngine: 'wiredTiger' },
215
+ });
216
+ await this._devDatabase.waitUntilRunning();
217
+ const mongoUri = this._devDatabase.getUri(this._environment.devDatabase) +
218
+ '&maxPoolSize=20&minPoolSize=4';
219
+ this._environment.setEnvironment('mongo.uri', mongoUri);
220
+ (0, node_express_suite_1.debugLog)(this._environment.debug, 'log', `MongoDB Memory Server with transactions: ${mongoUri}`);
221
+ return mongoUri;
222
+ }
223
+ /**
224
+ * Initialize the development database with default data.
225
+ * Extracted from BaseApplication.initializeDevDatabase.
226
+ * @inheritdoc
227
+ */
228
+ async initializeDevStore(app) {
229
+ const engine = (0, suite_core_lib_1.getSuiteCoreI18nEngine)({ constants: this._constants });
230
+ (0, node_express_suite_1.debugLog)(this._environment.debug, 'log', `${engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Admin_StartingDatabaseInitialization)}: ${engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Admin_TransactionsEnabledDisabledTemplate, {
231
+ STATE: this._environment.mongo.useTransactions
232
+ ? engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Common_Enabled)
233
+ : engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Common_Disabled),
234
+ })}`);
235
+ let initTimeout;
236
+ const initTimeoutMs = 300000;
237
+ const accountDataResult = await Promise.race([
238
+ this._databaseInitFunction(app),
239
+ new Promise((_, reject) => {
240
+ initTimeout = setTimeout(() => {
241
+ const logMsg = engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Admin_Error_FailedToInitializeUserDatabaseTimeoutTemplate, { timeMs: initTimeoutMs.toString() });
242
+ console.error(logMsg);
243
+ reject(new Error(logMsg));
244
+ }, initTimeoutMs);
245
+ }),
246
+ ]);
247
+ if (initTimeout)
248
+ clearTimeout(initTimeout);
249
+ if (accountDataResult.success && accountDataResult.data) {
250
+ if (this._environment.detailedDebug) {
251
+ const initHash = this._initResultHashFunction(accountDataResult.data);
252
+ (0, node_express_suite_1.debugLog)(true, 'log', engine.translateStringKey(suite_core_lib_1.SuiteCoreStringKey.Admin_DatabaseInitializedWithOptionsHashTemplate, { hash: initHash }));
253
+ }
254
+ return accountDataResult.data;
255
+ }
256
+ else {
257
+ if (this._environment.detailedDebug && accountDataResult.error) {
258
+ (0, node_express_suite_1.debugLog)(true, 'log', accountDataResult.error);
259
+ }
260
+ throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Admin_Error_FailedToInitializeUserDatabase);
261
+ }
262
+ }
263
+ }
264
+ exports.MongooseDocumentStore = MongooseDocumentStore;
265
+ //# sourceMappingURL=mongoose-document-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongoose-document-store.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/services/mongoose-document-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @fileoverview Mongoose session adapter implementing IClientSession.
3
+ * Wraps a mongodb ClientSession to conform to the shared IClientSession interface
4
+ * from brightchain-lib.
5
+ * @module services/mongoose-session-adapter
6
+ */
7
+ import type { IClientSession } from '@digitaldefiance/suite-core-lib';
8
+ import type { ClientSession } from 'mongodb';
9
+ /**
10
+ * Adapts a mongodb ClientSession to the IClientSession interface.
11
+ * This allows mongoose-based transaction code to work through the
12
+ * shared interface contract.
13
+ */
14
+ export declare class MongooseSessionAdapter implements IClientSession {
15
+ private readonly _session;
16
+ constructor(session: ClientSession);
17
+ /**
18
+ * Unique session ID as a string.
19
+ * Falls back to 'unknown' if the session has no server session yet.
20
+ */
21
+ get id(): string;
22
+ /**
23
+ * Whether a transaction is currently active on this session.
24
+ */
25
+ get inTransaction(): boolean;
26
+ /**
27
+ * Get the underlying mongodb ClientSession for passing to mongoose operations.
28
+ */
29
+ get nativeSession(): ClientSession;
30
+ /** Start a new transaction on this session. */
31
+ startTransaction(): void;
32
+ /** Commit the current transaction. */
33
+ commitTransaction(): Promise<void>;
34
+ /** Abort the current transaction. */
35
+ abortTransaction(): Promise<void>;
36
+ /** End this session, releasing server resources. */
37
+ endSession(): void;
38
+ }
39
+ //# sourceMappingURL=mongoose-session-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongoose-session-adapter.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/services/mongoose-session-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C;;;;GAIG;AACH,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;gBAE7B,OAAO,EAAE,aAAa;IAIlC;;;OAGG;IACH,IAAI,EAAE,IAAI,MAAM,CAMf;IAED;;OAEG;IACH,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED;;OAEG;IACH,IAAI,aAAa,IAAI,aAAa,CAEjC;IAED,+CAA+C;IAC/C,gBAAgB,IAAI,IAAI;IAIxB,sCAAsC;IAChC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxC,qCAAqC;IAC/B,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvC,oDAAoD;IACpD,UAAU,IAAI,IAAI;CAKnB"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Mongoose session adapter implementing IClientSession.
4
+ * Wraps a mongodb ClientSession to conform to the shared IClientSession interface
5
+ * from brightchain-lib.
6
+ * @module services/mongoose-session-adapter
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.MongooseSessionAdapter = void 0;
10
+ /**
11
+ * Adapts a mongodb ClientSession to the IClientSession interface.
12
+ * This allows mongoose-based transaction code to work through the
13
+ * shared interface contract.
14
+ */
15
+ class MongooseSessionAdapter {
16
+ _session;
17
+ constructor(session) {
18
+ this._session = session;
19
+ }
20
+ /**
21
+ * Unique session ID as a string.
22
+ * Falls back to 'unknown' if the session has no server session yet.
23
+ */
24
+ get id() {
25
+ const sessionId = this._session.id;
26
+ if (sessionId?.id) {
27
+ return sessionId.id.toString('hex');
28
+ }
29
+ return 'unknown';
30
+ }
31
+ /**
32
+ * Whether a transaction is currently active on this session.
33
+ */
34
+ get inTransaction() {
35
+ return this._session.inTransaction();
36
+ }
37
+ /**
38
+ * Get the underlying mongodb ClientSession for passing to mongoose operations.
39
+ */
40
+ get nativeSession() {
41
+ return this._session;
42
+ }
43
+ /** Start a new transaction on this session. */
44
+ startTransaction() {
45
+ this._session.startTransaction();
46
+ }
47
+ /** Commit the current transaction. */
48
+ async commitTransaction() {
49
+ await this._session.commitTransaction();
50
+ }
51
+ /** Abort the current transaction. */
52
+ async abortTransaction() {
53
+ await this._session.abortTransaction();
54
+ }
55
+ /** End this session, releasing server resources. */
56
+ endSession() {
57
+ // mongodb's endSession returns Promise<void>, but IClientSession declares void.
58
+ // Fire and forget — the session cleanup is best-effort.
59
+ void this._session.endSession();
60
+ }
61
+ }
62
+ exports.MongooseSessionAdapter = MongooseSessionAdapter;
63
+ //# sourceMappingURL=mongoose-session-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongoose-session-adapter.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/services/mongoose-session-adapter.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAKH;;;;GAIG;AACH,MAAa,sBAAsB;IAChB,QAAQ,CAAgB;IAEzC,YAAY,OAAsB;QAChC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,IAAI,EAAE;QACJ,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,IAAI,SAAS,EAAE,EAAE,EAAE,CAAC;YAClB,OAAO,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,+CAA+C;IAC/C,gBAAgB;QACd,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;IACnC,CAAC;IAED,sCAAsC;IACtC,KAAK,CAAC,iBAAiB;QACrB,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;IAC1C,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,gBAAgB;QACpB,MAAM,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;IACzC,CAAC;IAED,oDAAoD;IACpD,UAAU;QACR,gFAAgF;QAChF,wDAAwD;QACxD,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC;CACF;AAtDD,wDAsDC"}
@@ -0,0 +1,22 @@
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
+ import { IRequestUserDTO, ITokenRole } from '@digitaldefiance/suite-core-lib';
7
+ import { UserDocument } from '../documents';
8
+ import type { IRequestUserBackendObject } from '@digitaldefiance/node-express-suite';
9
+ import { PlatformID } from '@digitaldefiance/node-ecies-lib';
10
+ /**
11
+ * Service for converting between user documents, DTOs, and backend objects.
12
+ * Provides transformation methods for user data in different contexts (API, JWT, database).
13
+ */
14
+ export declare class RequestUserService<TID extends PlatformID, _TTokenRole extends ITokenRole<TID>> {
15
+ static makeRequestUserDTO<TID extends PlatformID, TLanguage extends string, TTokenRole extends ITokenRole<TID>, TRequestUserDTO extends IRequestUserDTO>(userDoc: UserDocument<TLanguage, TID> | (Pick<UserDocument<TLanguage, TID>, keyof UserDocument<TLanguage, TID>> & {
16
+ _id: PlatformID;
17
+ }), roles: TTokenRole[]): TRequestUserDTO;
18
+ static hydrateRequestUser<TID extends PlatformID, TLanguage extends string, TRequestUserDTO extends IRequestUserDTO & {
19
+ siteLanguage: TLanguage;
20
+ }>(requestUser: TRequestUserDTO): IRequestUserBackendObject<TLanguage, TID>;
21
+ }
22
+ //# sourceMappingURL=request-user.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-user.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/services/request-user.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,eAAe,EAEf,UAAU,EACX,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAErF,OAAO,EAEL,UAAU,EACX,MAAM,iCAAiC,CAAC;AAEzC;;;GAGG;AACH,qBAAa,kBAAkB,CAC7B,GAAG,SAAS,UAAU,EACtB,WAAW,SAAS,UAAU,CAAC,GAAG,CAAC;WAErB,kBAAkB,CAC9B,GAAG,SAAS,UAAU,EACtB,SAAS,SAAS,MAAM,EACxB,UAAU,SAAS,UAAU,CAAC,GAAG,CAAC,EAClC,eAAe,SAAS,eAAe,EAEvC,OAAO,EACH,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,GAC5B,CAAC,IAAI,CACH,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,EAC5B,MAAM,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,CACnC,GAAG;QACF,GAAG,EAAE,UAAU,CAAC;KACjB,CAAC,EACN,KAAK,EAAE,UAAU,EAAE,GAClB,eAAe;WA6BJ,kBAAkB,CAC9B,GAAG,SAAS,UAAU,EACtB,SAAS,SAAS,MAAM,EACxB,eAAe,SAAS,eAAe,GAAG;QAAE,YAAY,EAAE,SAAS,CAAA;KAAE,EACrE,WAAW,EAAE,eAAe,GAAG,yBAAyB,CAAC,SAAS,EAAE,GAAG,CAAC;CA2B3E"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Service for transforming user documents into request user DTOs and backend objects.
4
+ * Handles serialization and deserialization of user data for API requests and JWT tokens.
5
+ * @module services/request-user
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.RequestUserService = void 0;
9
+ const role_1 = require("./role");
10
+ const node_ecies_lib_1 = require("@digitaldefiance/node-ecies-lib");
11
+ /**
12
+ * Service for converting between user documents, DTOs, and backend objects.
13
+ * Provides transformation methods for user data in different contexts (API, JWT, database).
14
+ */
15
+ class RequestUserService {
16
+ static makeRequestUserDTO(userDoc, roles) {
17
+ if (!userDoc._id) {
18
+ throw new Error('User document is missing _id');
19
+ }
20
+ const rolePrivileges = {
21
+ admin: roles.some((r) => r.admin),
22
+ member: roles.some((r) => r.member),
23
+ child: roles.some((r) => r.child),
24
+ system: roles.some((r) => r.system),
25
+ };
26
+ const provider = (0, node_ecies_lib_1.getEnhancedNodeIdProvider)();
27
+ return {
28
+ id: provider.idToString(userDoc._id),
29
+ email: userDoc.email,
30
+ roles: roles.map((r) => role_1.RoleService.roleToRoleDTO(r)),
31
+ rolePrivileges,
32
+ username: userDoc.username,
33
+ timezone: userDoc.timezone,
34
+ currency: userDoc.currency,
35
+ directChallenge: userDoc.directChallenge,
36
+ emailVerified: userDoc.emailVerified,
37
+ darkMode: userDoc.darkMode,
38
+ siteLanguage: userDoc.siteLanguage,
39
+ ...(userDoc.lastLogin && { lastLogin: userDoc.lastLogin.toString() }),
40
+ };
41
+ }
42
+ static hydrateRequestUser(requestUser) {
43
+ const provider = (0, node_ecies_lib_1.getEnhancedNodeIdProvider)();
44
+ const convert = (id) => provider.idFromString(id);
45
+ const hydratedRoles = requestUser.roles.map((role) => role_1.RoleService.hydrateRoleDTOToBackend(role));
46
+ const hydratedUser = {
47
+ id: convert(requestUser.id),
48
+ email: requestUser.email,
49
+ roles: hydratedRoles,
50
+ rolePrivileges: requestUser.rolePrivileges,
51
+ username: requestUser.username,
52
+ timezone: requestUser.timezone,
53
+ currency: requestUser.currency,
54
+ directChallenge: requestUser.directChallenge,
55
+ emailVerified: requestUser.emailVerified,
56
+ darkMode: requestUser.darkMode,
57
+ siteLanguage: requestUser.siteLanguage,
58
+ };
59
+ if (requestUser.lastLogin) {
60
+ hydratedUser.lastLogin = new Date(requestUser.lastLogin);
61
+ }
62
+ return hydratedUser;
63
+ }
64
+ }
65
+ exports.RequestUserService = RequestUserService;
66
+ //# sourceMappingURL=request-user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-user.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/services/request-user.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AASH,iCAAqC;AACrC,oEAGyC;AAEzC;;;GAGG;AACH,MAAa,kBAAkB;IAItB,MAAM,CAAC,kBAAkB,CAM9B,OAOM,EACN,KAAmB;QAEnB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,cAAc,GAAG;YACrB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;YACjC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;YACnC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;YACjC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;SACpC,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAA,0CAAyB,GAAO,CAAC;QAClD,OAAO;YACL,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;YACpC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YACrD,cAAc;YACd,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,YAAY,EAAE,OAAO,CAAC,YAAsB;YAC5C,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;SACnD,CAAC;IACvB,CAAC;IAEM,MAAM,CAAC,kBAAkB,CAI9B,WAA4B;QAC5B,MAAM,QAAQ,GAAG,IAAA,0CAAyB,GAAO,CAAC;QAClD,MAAM,OAAO,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC1D,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAc,EAAE,EAAE,CAC7D,kBAAW,CAAC,uBAAuB,CAAM,IAAI,CAAC,CAC/C,CAAC;QAEF,MAAM,YAAY,GAA8C;YAC9D,EAAE,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3B,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,KAAK,EAAE,aAAa;YACpB,cAAc,EAAE,WAAW,CAAC,cAAc;YAC1C,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,eAAe,EAAE,WAAW,CAAC,eAAe;YAC5C,aAAa,EAAE,WAAW,CAAC,aAAa;YACxC,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,YAAY,EAAE,WAAW,CAAC,YAAY;SACvC,CAAC;QAEF,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;YAC1B,YAAY,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AA/ED,gDA+EC"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * @fileoverview Role-based access control (RBAC) service.
3
+ * Manages roles, user-role relationships, and permission checks.
4
+ * @module services/role
5
+ */
6
+ import { MemberType } from '@digitaldefiance/ecies-lib';
7
+ import { ClientSession } from '@digitaldefiance/mongoose-types';
8
+ import { IRoleBase, ITokenRole, ITokenRoleDTO, Role } from '@digitaldefiance/suite-core-lib';
9
+ import { UserDocument } from '../documents';
10
+ import { RoleDocument } from '../documents/role';
11
+ import { UserRoleDocument } from '../documents/user-role';
12
+ import type { IApplication } from '@digitaldefiance/node-express-suite';
13
+ import type { IRoleBackendObject } from '@digitaldefiance/node-express-suite';
14
+ import { BaseService } from '@digitaldefiance/node-express-suite';
15
+ import { type PlatformID } from '@digitaldefiance/node-ecies-lib';
16
+ /**
17
+ * Service for managing roles and role-based access control.
18
+ * Handles role creation, user-role assignments, and permission queries.
19
+ * @template TID - Platform ID type (defaults to Buffer)
20
+ * @template TDate - Date type (defaults to Date)
21
+ * @template TTokenRole - Token role interface type
22
+ * @extends {BaseService<TID>}
23
+ */
24
+ export declare class RoleService<TID extends PlatformID = Buffer, TDate extends Date = Date, TTokenRole extends ITokenRole<TID, TDate> = ITokenRole<TID, TDate>> extends BaseService<TID> {
25
+ /**
26
+ * Constructor for the role service
27
+ * @param application The application object
28
+ */
29
+ constructor(application: IApplication<TID>);
30
+ static roleToRoleDTO<TID extends PlatformID = Buffer, TDate extends Date = Date>(role: ITokenRole<TID, TDate> | RoleDocument<TID> | Partial<IRoleBase<TID>>): ITokenRoleDTO;
31
+ /**
32
+ * Given a Role DTO, reconstitute ids and dates
33
+ * @param role The Role DTO
34
+ * @returns An IRoleBackendObject
35
+ */
36
+ static hydrateRoleDTOToBackend<TID extends PlatformID = Buffer>(role: ITokenRoleDTO): IRoleBackendObject<TID>;
37
+ /**
38
+ * Gets the role ID by name
39
+ * @param roleName The name of the role
40
+ * @returns The role ID or null if not found
41
+ */
42
+ getRoleIdByName(roleName: Role, session?: ClientSession): Promise<TID | null>;
43
+ /**
44
+ * Creates a new role
45
+ * @param roleData The role data
46
+ * @param session Optional mongoose session
47
+ * @returns The created role document
48
+ */
49
+ createRole(roleData: IRoleBase<TID, TDate, Role>, session?: ClientSession | null): Promise<RoleDocument<TID>>;
50
+ /**
51
+ * Adds a user to a role
52
+ * @param roleId - The role id
53
+ * @param userId - The user id
54
+ * @param createdBy - The user creating the relationship
55
+ * @param session Optional mongoose session
56
+ */
57
+ addUserToRole(roleId: TID, userId: TID, createdBy: TID, session?: ClientSession, overrideId?: TID): Promise<UserRoleDocument<TID>>;
58
+ /**
59
+ * Removes a user from a role
60
+ * @param roleId - The role id
61
+ * @param userId - The user id
62
+ * @param deletedBy - The user removing the relationship
63
+ * @param session Optional mongoose session
64
+ * @throws LastAdminError if attempting to remove the last admin
65
+ */
66
+ removeUserFromRole(roleId: TID, userId: TID, deletedBy: TID, session?: ClientSession): Promise<void>;
67
+ /**
68
+ * Deletes a role by ID
69
+ * @param roleId The role ID
70
+ * @param deleter The ID of the user deleting the role
71
+ * @param hardDelete Whether to hard delete the role
72
+ * @param session Optional mongoose session
73
+ */
74
+ deleteRole(roleId: TID, deleter: TID, hardDelete: boolean, session?: ClientSession): Promise<void>;
75
+ /**
76
+ * Gets all roles for a user
77
+ * @param userId The user ID
78
+ * @param session Optional mongoose session
79
+ * @returns The roles the user is a member of
80
+ */
81
+ getUserRoles(userId: TID, session?: ClientSession): Promise<RoleDocument<TID>[]>;
82
+ /**
83
+ * Gets all users for a role
84
+ * @param roleId The role ID
85
+ * @param session Optional mongoose session
86
+ * @returns The user IDs that are members of the role
87
+ */
88
+ getRoleUsers(roleId: TID, session?: ClientSession): Promise<TID[]>;
89
+ /** Convert roles to translated TokenRoles */
90
+ rolesToTokenRoles(roles: Array<IRoleBackendObject<TID>>, overrideLanguage?: string): Array<TTokenRole>;
91
+ isUserAdmin(userDoc: UserDocument<string, TID>, session?: ClientSession, providedRoles?: Array<RoleDocument<TID>>): Promise<boolean>;
92
+ isUserMember(userDoc: UserDocument<string, TID>, session?: ClientSession, providedRoles?: Array<RoleDocument<TID>>): Promise<boolean>;
93
+ isUserChild(userDoc: UserDocument<string, TID>, session?: ClientSession, providedRoles?: Array<RoleDocument<TID>>): Promise<boolean>;
94
+ isSystemUser(userDoc: UserDocument<string, TID>, session?: ClientSession, providedRoles?: Array<RoleDocument<TID>>): Promise<boolean>;
95
+ getMemberType(userDoc: UserDocument<string, TID>, session?: ClientSession, providedRoles?: Array<RoleDocument<TID>>): Promise<MemberType>;
96
+ }
97
+ //# sourceMappingURL=role.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/services/role.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAMxD,OAAO,EAAE,aAAa,EAAY,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EACL,SAAS,EAET,UAAU,EACV,aAAa,EAEb,IAAI,EACL,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAE9E,OAAO,EAAQ,WAAW,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAEL,KAAK,UAAU,EAChB,MAAM,iCAAiC,CAAC;AAEzC;;;;;;;GAOG;AACH,qBAAa,WAAW,CACtB,GAAG,SAAS,UAAU,GAAG,MAAM,EAC/B,KAAK,SAAS,IAAI,GAAG,IAAI,EACzB,UAAU,SAAS,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAClE,SAAQ,WAAW,CAAC,GAAG,CAAC;IACxB;;;OAGG;gBACS,WAAW,EAAE,YAAY,CAAC,GAAG,CAAC;WAI5B,aAAa,CACzB,GAAG,SAAS,UAAU,GAAG,MAAM,EAC/B,KAAK,SAAS,IAAI,GAAG,IAAI,EAEzB,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GACzE,aAAa;IAmChB;;;;OAIG;WACW,uBAAuB,CAAC,GAAG,SAAS,UAAU,GAAG,MAAM,EACnE,IAAI,EAAE,aAAa,GAClB,kBAAkB,CAAC,GAAG,CAAC;IAsB1B;;;;OAIG;IACU,eAAe,CAC1B,QAAQ,EAAE,IAAI,EACd,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAatB;;;;;OAKG;IACU,UAAU,CACrB,QAAQ,EAAE,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,EACrC,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,GAC7B,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAS7B;;;;;;OAMG;IACU,aAAa,CACxB,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,SAAS,EAAE,GAAG,EACd,OAAO,CAAC,EAAE,aAAa,EACvB,UAAU,CAAC,EAAE,GAAG,GACf,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IA4BjC;;;;;;;OAOG;IACU,kBAAkB,CAC7B,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,SAAS,EAAE,GAAG,EACd,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,IAAI,CAAC;IA0BhB;;;;;;OAMG;IACU,UAAU,CACrB,MAAM,EAAE,GAAG,EACX,OAAO,EAAE,GAAG,EACZ,UAAU,EAAE,OAAO,EACnB,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,IAAI,CAAC;IAchB;;;;;OAKG;IACU,YAAY,CACvB,MAAM,EAAE,GAAG,EACX,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;IAwB/B;;;;;OAKG;IACU,YAAY,CACvB,MAAM,EAAE,GAAG,EACX,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,GAAG,EAAE,CAAC;IAgBjB,6CAA6C;IACtC,iBAAiB,CACtB,KAAK,EAAE,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,EACrC,gBAAgB,CAAC,EAAE,MAAM,GACxB,KAAK,CAAC,UAAU,CAAC;IAkBP,WAAW,CACtB,OAAO,EAAE,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,EAClC,OAAO,CAAC,EAAE,aAAa,EACvB,aAAa,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GACvC,OAAO,CAAC,OAAO,CAAC;IASN,YAAY,CACvB,OAAO,EAAE,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,EAClC,OAAO,CAAC,EAAE,aAAa,EACvB,aAAa,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GACvC,OAAO,CAAC,OAAO,CAAC;IASN,WAAW,CACtB,OAAO,EAAE,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,EAClC,OAAO,CAAC,EAAE,aAAa,EACvB,aAAa,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GACvC,OAAO,CAAC,OAAO,CAAC;IASN,YAAY,CACvB,OAAO,EAAE,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,EAClC,OAAO,CAAC,EAAE,aAAa,EACvB,aAAa,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GACvC,OAAO,CAAC,OAAO,CAAC;IAMN,aAAa,CACxB,OAAO,EAAE,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,EAClC,OAAO,CAAC,EAAE,aAAa,EACvB,aAAa,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GACvC,OAAO,CAAC,UAAU,CAAC;CAavB"}