@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,116 @@
1
+ /**
2
+ * @fileoverview Mongoose/MongoDB database plugin.
3
+ * Extracts all Mongo-specific database lifecycle
4
+ * into a plugin that can be registered on any Application instance.
5
+ * @module plugins/mongo-database-plugin
6
+ */
7
+ import { Model } from '@digitaldefiance/mongoose-types';
8
+ import mongoose from '@digitaldefiance/mongoose-types';
9
+ import { IFailableResult } from '@digitaldefiance/suite-core-lib';
10
+ import { MongoMemoryReplSet } from 'mongodb-memory-server';
11
+ import type { PlatformID } from '@digitaldefiance/node-ecies-lib';
12
+ import type { IDatabase } from '@digitaldefiance/suite-core-lib';
13
+ import type { IAuthenticationProvider } from '@digitaldefiance/node-express-suite';
14
+ import type { IApplication } from '@digitaldefiance/node-express-suite';
15
+ import type { IConstants } from '@digitaldefiance/node-express-suite';
16
+ import type { IDatabasePlugin } from '@digitaldefiance/node-express-suite';
17
+ import { Environment } from '@digitaldefiance/node-express-suite';
18
+ import type { BaseDocument } from '../documents/base';
19
+ import type { IDocumentStore } from '../interfaces/mongoose-document-store';
20
+ import type { IMongoApplication } from '../interfaces/mongo-application';
21
+ import type { SchemaMap } from '../types';
22
+ /**
23
+ * Options for constructing a MongoDatabasePlugin.
24
+ */
25
+ export interface MongoDatabasePluginOptions<TID extends PlatformID, TModelDocs extends Record<string, BaseDocument<any, TID>>, TInitResults, TConstants extends IConstants = IConstants> {
26
+ schemaMapFactory: (connection: mongoose.Connection) => SchemaMap<TID, TModelDocs>;
27
+ databaseInitFunction: (application: IMongoApplication<TID>) => Promise<IFailableResult<TInitResults>>;
28
+ initResultHashFunction: (initResults: TInitResults) => string;
29
+ environment: Environment<TID>;
30
+ constants?: TConstants;
31
+ }
32
+ /**
33
+ * Mongoose/MongoDB database plugin.
34
+ *
35
+ * Wraps a MongooseDocumentStore and exposes Mongoose-specific accessors
36
+ * (db, getModel, schemaMap, devDatabase) while conforming to the
37
+ * IDatabasePlugin contract for pluggable database backends.
38
+ *
39
+ * @template TID - Platform ID type
40
+ * @template TModelDocs - Record mapping model names to document types
41
+ * @template TInitResults - Database initialization result type
42
+ * @template TConstants - Application constants type
43
+ */
44
+ export declare class MongoDatabasePlugin<TID extends PlatformID, TModelDocs extends Record<string, BaseDocument<any, TID>>, TInitResults, TConstants extends IConstants = IConstants> implements IDatabasePlugin<TID> {
45
+ readonly name = "mongo-database";
46
+ readonly version = "1.0.0";
47
+ private readonly _documentStore;
48
+ private readonly _environment;
49
+ private _authProvider;
50
+ private _application;
51
+ private _lastInitResult;
52
+ constructor(options: MongoDatabasePluginOptions<TID, TModelDocs, TInitResults, TConstants>);
53
+ /**
54
+ * Construct from an existing IDocumentStore instance.
55
+ */
56
+ static fromDocumentStore<TID extends PlatformID, TModelDocs extends Record<string, BaseDocument<any, TID>>, TInitResults, TConstants extends IConstants = IConstants>(documentStore: IDocumentStore<TID, TModelDocs>, environment: Environment<TID>): MongoDatabasePlugin<TID, TModelDocs, TInitResults, TConstants>;
57
+ /**
58
+ * The IDatabase instance. For Mongo, this is a no-op adapter since
59
+ * the document store manages its own connection lifecycle.
60
+ */
61
+ get database(): IDatabase;
62
+ get authenticationProvider(): IAuthenticationProvider<TID> | undefined;
63
+ connect(uri?: string): Promise<void>;
64
+ disconnect(): Promise<void>;
65
+ isConnected(): boolean;
66
+ setupDevStore(): Promise<string>;
67
+ teardownDevStore(): Promise<void>;
68
+ initializeDevStore(): Promise<TInitResults | undefined>;
69
+ /**
70
+ * Get the result of the last initializeDevStore call.
71
+ * Available after start() completes in dev mode.
72
+ */
73
+ get lastInitResult(): TInitResults | undefined;
74
+ /**
75
+ * Get the IMongoApplication adapter created during init().
76
+ * This adapter delegates Mongo-specific accessors (db, getModel) to the plugin
77
+ * and everything else to the real application. Use this when constructing
78
+ * services that need IMongoApplication (e.g. UserService, RoleService).
79
+ * Available after init() has been called.
80
+ */
81
+ get mongoApplication(): IMongoApplication<TID> | undefined;
82
+ /**
83
+ * Called by PluginManager during Application.start().
84
+ * Wires up the Mongoose-backed authentication provider.
85
+ */
86
+ init(app: IApplication<TID>): Promise<void>;
87
+ stop(): Promise<void>;
88
+ /**
89
+ * Get the Mongoose database instance.
90
+ */
91
+ get db(): typeof mongoose;
92
+ /**
93
+ * Get the schema map for all models.
94
+ */
95
+ get schemaMap(): SchemaMap<TID, TModelDocs>;
96
+ /**
97
+ * Get the in-memory MongoDB instance (if any).
98
+ */
99
+ get devDatabase(): MongoMemoryReplSet | undefined;
100
+ /**
101
+ * Get the underlying document store.
102
+ */
103
+ get documentStore(): IDocumentStore<TID, TModelDocs>;
104
+ /**
105
+ * Get a Mongoose model by name.
106
+ */
107
+ getModel<T extends BaseDocument<any, TID>>(modelName: string): Model<T>;
108
+ getModel<U>(modelName: string): U | undefined;
109
+ /**
110
+ * Creates a lightweight adapter that satisfies IMongoApplication
111
+ * by delegating to the plugin for Mongo-specific accessors and
112
+ * to the real app for everything else.
113
+ */
114
+ private createMongoAppAdapter;
115
+ }
116
+ //# sourceMappingURL=mongo-database-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongo-database-plugin.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/plugins/mongo-database-plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,230 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Mongoose/MongoDB database plugin.
4
+ * Extracts all Mongo-specific database lifecycle
5
+ * into a plugin that can be registered on any Application instance.
6
+ * @module plugins/mongo-database-plugin
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.MongoDatabasePlugin = void 0;
10
+ const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
11
+ const node_express_suite_1 = require("@digitaldefiance/node-express-suite");
12
+ const mongoose_document_store_1 = require("../services/mongoose-document-store");
13
+ const mongo_authentication_provider_1 = require("../services/mongo-authentication-provider");
14
+ const database_initialization_1 = require("../services/database-initialization");
15
+ /**
16
+ * Mongoose/MongoDB database plugin.
17
+ *
18
+ * Wraps a MongooseDocumentStore and exposes Mongoose-specific accessors
19
+ * (db, getModel, schemaMap, devDatabase) while conforming to the
20
+ * IDatabasePlugin contract for pluggable database backends.
21
+ *
22
+ * @template TID - Platform ID type
23
+ * @template TModelDocs - Record mapping model names to document types
24
+ * @template TInitResults - Database initialization result type
25
+ * @template TConstants - Application constants type
26
+ */
27
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
+ class MongoDatabasePlugin {
29
+ name = 'mongo-database';
30
+ version = '1.0.0';
31
+ _documentStore;
32
+ _environment;
33
+ _authProvider;
34
+ _application;
35
+ _lastInitResult;
36
+ constructor(options) {
37
+ const constants = options.constants ?? suite_core_lib_1.Constants;
38
+ this._documentStore = new mongoose_document_store_1.MongooseDocumentStore(options.schemaMapFactory, options.databaseInitFunction, options.initResultHashFunction, options.environment, constants);
39
+ this._environment = options.environment;
40
+ }
41
+ /**
42
+ * Construct from an existing IDocumentStore instance.
43
+ */
44
+ static fromDocumentStore(documentStore, environment) {
45
+ const plugin = Object.create(MongoDatabasePlugin.prototype);
46
+ Object.defineProperty(plugin, '_documentStore', {
47
+ value: documentStore,
48
+ writable: false,
49
+ });
50
+ Object.defineProperty(plugin, '_environment', {
51
+ value: environment,
52
+ writable: false,
53
+ });
54
+ Object.defineProperty(plugin, 'name', {
55
+ value: 'mongo-database',
56
+ writable: false,
57
+ });
58
+ Object.defineProperty(plugin, 'version', {
59
+ value: '1.0.0',
60
+ writable: false,
61
+ });
62
+ return plugin;
63
+ }
64
+ // ── IDatabasePlugin contract ──
65
+ /**
66
+ * The IDatabase instance. For Mongo, this is a no-op adapter since
67
+ * the document store manages its own connection lifecycle.
68
+ */
69
+ get database() {
70
+ return (0, node_express_suite_1.createNoOpDatabase)();
71
+ }
72
+ get authenticationProvider() {
73
+ return this._authProvider;
74
+ }
75
+ async connect(uri) {
76
+ // Handle dev database setup
77
+ if (this._environment.devDatabase && !this._documentStore.devDatabase) {
78
+ if (this._documentStore.setupDevStore) {
79
+ const devUri = await this._documentStore.setupDevStore();
80
+ if (devUri) {
81
+ uri = devUri;
82
+ }
83
+ }
84
+ }
85
+ const resolvedUri = uri ?? this._environment.mongo?.['uri'];
86
+ await this._documentStore.connect(resolvedUri);
87
+ }
88
+ async disconnect() {
89
+ await this._documentStore.disconnect();
90
+ if (this._documentStore.devDatabase) {
91
+ await this._documentStore.devDatabase.stop();
92
+ }
93
+ }
94
+ isConnected() {
95
+ return this._documentStore.isConnected();
96
+ }
97
+ async setupDevStore() {
98
+ if (this._documentStore.setupDevStore) {
99
+ const uri = await this._documentStore.setupDevStore();
100
+ return uri ?? '';
101
+ }
102
+ return '';
103
+ }
104
+ async teardownDevStore() {
105
+ if (this._documentStore.devDatabase) {
106
+ await this._documentStore.devDatabase.stop();
107
+ }
108
+ }
109
+ async initializeDevStore() {
110
+ if (this._documentStore.initializeDevStore && this._application) {
111
+ const result = await this._documentStore.initializeDevStore(this._application);
112
+ database_initialization_1.DatabaseInitializationService.printServerInitResults(result, false);
113
+ this._lastInitResult = result;
114
+ return result;
115
+ }
116
+ return undefined;
117
+ }
118
+ /**
119
+ * Get the result of the last initializeDevStore call.
120
+ * Available after start() completes in dev mode.
121
+ */
122
+ get lastInitResult() {
123
+ return this._lastInitResult;
124
+ }
125
+ /**
126
+ * Get the IMongoApplication adapter created during init().
127
+ * This adapter delegates Mongo-specific accessors (db, getModel) to the plugin
128
+ * and everything else to the real application. Use this when constructing
129
+ * services that need IMongoApplication (e.g. UserService, RoleService).
130
+ * Available after init() has been called.
131
+ */
132
+ get mongoApplication() {
133
+ return this._application;
134
+ }
135
+ /**
136
+ * Called by PluginManager during Application.start().
137
+ * Wires up the Mongoose-backed authentication provider.
138
+ */
139
+ async init(app) {
140
+ // Wire up auth provider if the app exposes IMongoApplication-compatible interface
141
+ // We create a lightweight adapter that satisfies IMongoApplication
142
+ const mongoAppAdapter = this.createMongoAppAdapter(app);
143
+ // Store the adapter (not the raw app) so that initializeDevStore
144
+ // passes an IMongoApplication with getModel/db to the init function.
145
+ this._application = mongoAppAdapter;
146
+ this._authProvider = new mongo_authentication_provider_1.MongoAuthenticationProvider(mongoAppAdapter);
147
+ // Set the auth provider on the application
148
+ if ('authProvider' in app && app.authProvider === undefined) {
149
+ app.authProvider = this._authProvider;
150
+ }
151
+ }
152
+ async stop() {
153
+ await this.disconnect();
154
+ }
155
+ // ── Mongo-specific accessors ──
156
+ /**
157
+ * Get the Mongoose database instance.
158
+ */
159
+ get db() {
160
+ if (this._documentStore instanceof mongoose_document_store_1.MongooseDocumentStore) {
161
+ return this._documentStore.db;
162
+ }
163
+ throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Admin_Error_DatabaseNotConnectedYet);
164
+ }
165
+ /**
166
+ * Get the schema map for all models.
167
+ */
168
+ get schemaMap() {
169
+ const map = this._documentStore.schemaMap;
170
+ if (!map) {
171
+ throw new suite_core_lib_1.TranslatableSuiteError(suite_core_lib_1.SuiteCoreStringKey.Admin_Error_SchemaMapIsNotLoadedYet);
172
+ }
173
+ return map;
174
+ }
175
+ /**
176
+ * Get the in-memory MongoDB instance (if any).
177
+ */
178
+ get devDatabase() {
179
+ return this._documentStore.devDatabase;
180
+ }
181
+ /**
182
+ * Get the underlying document store.
183
+ */
184
+ get documentStore() {
185
+ return this._documentStore;
186
+ }
187
+ getModel(modelName) {
188
+ return this._documentStore.getModel(modelName);
189
+ }
190
+ /**
191
+ * Creates a lightweight adapter that satisfies IMongoApplication
192
+ * by delegating to the plugin for Mongo-specific accessors and
193
+ * to the real app for everything else.
194
+ */
195
+ createMongoAppAdapter(app) {
196
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
197
+ const plugin = this;
198
+ return {
199
+ get environment() {
200
+ return app.environment;
201
+ },
202
+ get constants() {
203
+ return app.constants;
204
+ },
205
+ get ready() {
206
+ return app.ready;
207
+ },
208
+ get services() {
209
+ return app.services;
210
+ },
211
+ get plugins() {
212
+ return app.plugins;
213
+ },
214
+ get database() {
215
+ return app.database;
216
+ },
217
+ get authProvider() {
218
+ return app.authProvider;
219
+ },
220
+ start: () => app.start(),
221
+ get db() {
222
+ return plugin.db;
223
+ },
224
+ /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
225
+ getModel: (modelName) => plugin.getModel(modelName),
226
+ };
227
+ }
228
+ }
229
+ exports.MongoDatabasePlugin = MongoDatabasePlugin;
230
+ //# sourceMappingURL=mongo-database-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongo-database-plugin.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/plugins/mongo-database-plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @fileoverview API router configuration with dependency injection and service registration.
3
+ * Manages user controller and all required services for API endpoints.
4
+ * @module routers/api
5
+ */
6
+ import { PlatformID } from '@digitaldefiance/node-ecies-lib';
7
+ import { ITokenRole, ITokenUser, IUserBase } from '@digitaldefiance/suite-core-lib';
8
+ import { Environment, IConstants, BaseRouter } from '@digitaldefiance/node-express-suite';
9
+ import { CoreLanguageCode } from '@digitaldefiance/i18n-lib';
10
+ import { BaseDocument } from '../documents';
11
+ import { IMongoApplication } from '../interfaces/mongo-application';
12
+ /**
13
+ * Router for the API endpoints.
14
+ * Manages user controller and registers all required services via dependency injection.
15
+ */
16
+ export declare class ApiRouter<TID extends PlatformID, TDate extends Date, TLanguage extends CoreLanguageCode, TAccountStatus extends string, TUser extends IUserBase<TID, TDate, TLanguage, TAccountStatus> = IUserBase<TID, TDate, TLanguage, TAccountStatus>, TTokenRole extends ITokenRole<TID, TDate> = ITokenRole<TID, TDate>, TBaseDocument extends BaseDocument<any, TID> = BaseDocument<any, TID>, TTokenUser extends ITokenUser = ITokenUser, TConstants extends IConstants = IConstants, TEnvironment extends Environment<TID> = Environment<TID>, TApplication extends IMongoApplication<TID> = IMongoApplication<TID>> extends BaseRouter<TID, TApplication> {
17
+ private readonly openApiController;
18
+ private readonly userController;
19
+ private readonly jwtService;
20
+ private readonly emailService;
21
+ private readonly userService;
22
+ private readonly roleService;
23
+ private readonly keyWrappingService;
24
+ private readonly eciesService;
25
+ private readonly backupCodeService;
26
+ constructor(application: TApplication, docsRoute?: string | undefined);
27
+ private registerServices;
28
+ }
29
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/routers/api.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAgB,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EACL,UAAU,EACV,UAAU,EACV,SAAS,EACV,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAEL,WAAW,EACX,UAAU,EACV,UAAU,EAGX,MAAM,qCAAqC,CAAC;AAG7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAMpE;;;GAGG;AACH,qBAAa,SAAS,CACpB,GAAG,SAAS,UAAU,EACtB,KAAK,SAAS,IAAI,EAClB,SAAS,SAAS,gBAAgB,EAClC,cAAc,SAAS,MAAM,EAC7B,KAAK,SAAS,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,CAAC,GAAG,SAAS,CACxE,GAAG,EACH,KAAK,EACL,SAAS,EACT,cAAc,CACf,EACD,UAAU,SAAS,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,EAClE,aAAa,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,EACrE,UAAU,SAAS,UAAU,GAAG,UAAU,EAC1C,UAAU,SAAS,UAAU,GAAG,UAAU,EAC1C,YAAY,SAAS,WAAW,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,EACxD,YAAY,SAAS,iBAAiB,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,CACpE,SAAQ,UAAU,CAAC,GAAG,EAAE,YAAY,CAAC;IACrC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAyB;IAC3D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAS7B;IACF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAMzB;IACF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;IAC7C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAY1B;IACF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IACxD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IACjD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAKhC;gBAGA,WAAW,EAAE,YAAY,EACzB,SAAS,GAAE,MAAM,GAAG,SAAsB;IAuC5C,OAAO,CAAC,gBAAgB;CAmFzB"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview API router configuration with dependency injection and service registration.
4
+ * Manages user controller and all required services for API endpoints.
5
+ * @module routers/api
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.ApiRouter = void 0;
9
+ const node_ecies_lib_1 = require("@digitaldefiance/node-ecies-lib");
10
+ const node_express_suite_1 = require("@digitaldefiance/node-express-suite");
11
+ const node_express_suite_2 = require("@digitaldefiance/node-express-suite");
12
+ const user_1 = require("../controllers/user");
13
+ const backup_code_1 = require("../services/backup-code");
14
+ const jwt_1 = require("../services/jwt");
15
+ const role_1 = require("../services/role");
16
+ const user_2 = require("../services/user");
17
+ /**
18
+ * Router for the API endpoints.
19
+ * Manages user controller and registers all required services via dependency injection.
20
+ */
21
+ class ApiRouter extends node_express_suite_1.BaseRouter {
22
+ openApiController;
23
+ userController;
24
+ jwtService;
25
+ emailService;
26
+ userService;
27
+ roleService;
28
+ keyWrappingService;
29
+ eciesService;
30
+ backupCodeService;
31
+ constructor(application, docsRoute = '/openapi') {
32
+ super(application);
33
+ this.registerServices();
34
+ this.jwtService = application.services.get(node_express_suite_1.ServiceKeys.JWT);
35
+ this.roleService = application.services.get(node_express_suite_1.ServiceKeys.ROLE);
36
+ this.emailService = application.services.get(node_express_suite_1.ServiceKeys.EMAIL);
37
+ this.keyWrappingService = application.services.get(node_express_suite_1.ServiceKeys.KEY_WRAPPING);
38
+ this.eciesService = application.services.get(node_express_suite_1.ServiceKeys.ECIES);
39
+ this.backupCodeService = application.services.get(node_express_suite_1.ServiceKeys.BACKUP_CODE);
40
+ this.userService = application.services.get(node_express_suite_1.ServiceKeys.USER);
41
+ this.userController = new user_1.UserController(application, this.jwtService, this.userService, this.backupCodeService, this.roleService, this.eciesService);
42
+ this.openApiController = new node_express_suite_1.OpenApiController(application);
43
+ this.router.use('/user', this.userController.router);
44
+ if (docsRoute !== undefined && docsRoute !== '') {
45
+ this.router.use(docsRoute, this.openApiController.router);
46
+ }
47
+ }
48
+ registerServices() {
49
+ const app = this.application;
50
+ if (!app.services.has(node_express_suite_1.ServiceKeys.JWT)) {
51
+ app.services.register(node_express_suite_1.ServiceKeys.JWT, () => new jwt_1.JwtService(app));
52
+ }
53
+ if (!app.services.has(node_express_suite_1.ServiceKeys.ROLE)) {
54
+ app.services.register(node_express_suite_1.ServiceKeys.ROLE, () => new role_1.RoleService(app));
55
+ }
56
+ if (!app.services.has(node_express_suite_1.ServiceKeys.EMAIL)) {
57
+ app.services.register(node_express_suite_1.ServiceKeys.EMAIL, () => node_express_suite_2.emailServiceRegistry.getService());
58
+ }
59
+ if (!app.services.has(node_express_suite_1.ServiceKeys.KEY_WRAPPING)) {
60
+ app.services.register(node_express_suite_1.ServiceKeys.KEY_WRAPPING, () => new node_express_suite_1.KeyWrappingService());
61
+ }
62
+ if (!app.services.has(node_express_suite_1.ServiceKeys.ECIES)) {
63
+ app.services.register(node_express_suite_1.ServiceKeys.ECIES, () => {
64
+ const config = {
65
+ curveName: app.constants.ECIES.CURVE_NAME,
66
+ primaryKeyDerivationPath: app.constants.ECIES.PRIMARY_KEY_DERIVATION_PATH,
67
+ mnemonicStrength: app.constants.ECIES.MNEMONIC_STRENGTH,
68
+ symmetricAlgorithm: app.constants.ECIES.SYMMETRIC_ALGORITHM_CONFIGURATION,
69
+ symmetricKeyBits: app.constants.ECIES.SYMMETRIC.KEY_BITS,
70
+ symmetricKeyMode: app.constants.ECIES.SYMMETRIC.MODE,
71
+ };
72
+ return new node_ecies_lib_1.ECIESService(config);
73
+ });
74
+ }
75
+ if (!app.services.has(node_express_suite_1.ServiceKeys.BACKUP_CODE)) {
76
+ app.services.register(node_express_suite_1.ServiceKeys.BACKUP_CODE, () => new backup_code_1.BackupCodeService(app, app.services.get(node_express_suite_1.ServiceKeys.ECIES), app.services.get(node_express_suite_1.ServiceKeys.KEY_WRAPPING), app.services.get(node_express_suite_1.ServiceKeys.ROLE)));
77
+ }
78
+ if (!app.services.has(node_express_suite_1.ServiceKeys.USER)) {
79
+ app.services.register(node_express_suite_1.ServiceKeys.USER, () => new user_2.UserService(app, app.services.get(node_express_suite_1.ServiceKeys.ROLE), app.services.get(node_express_suite_1.ServiceKeys.EMAIL), app.services.get(node_express_suite_1.ServiceKeys.KEY_WRAPPING), app.services.get(node_express_suite_1.ServiceKeys.BACKUP_CODE)));
80
+ }
81
+ }
82
+ }
83
+ exports.ApiRouter = ApiRouter;
84
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/routers/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './api';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/routers/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./api"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/routers/index.ts"],"names":[],"mappings":";;;AAAA,gDAAsB"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * @fileoverview Email token schema factory for MongoDB.
3
+ * Creates schema for email verification and password reset tokens.
4
+ * @module schemas/email-token
5
+ */
6
+ import { Schema } from '@digitaldefiance/mongoose-types';
7
+ import { EmailTokenType } from '@digitaldefiance/suite-core-lib';
8
+ import { BaseModelName } from '../enumerations';
9
+ import { IConstants } from '@digitaldefiance/node-express-suite';
10
+ /**
11
+ * Configuration options for creating an email token schema.
12
+ * @template TTokenType - Token type enum (defaults to EmailTokenType)
13
+ * @template TModelName - Model name type (defaults to BaseModelName)
14
+ * @template TConstants - Constants type (defaults to IConstants)
15
+ */
16
+ export interface EmailTokenSchemaOptions<TTokenType extends string = EmailTokenType, TModelName extends string = BaseModelName, TConstants extends IConstants = IConstants> {
17
+ /** Token type enum values to use */
18
+ tokenTypeEnum?: TTokenType[];
19
+ /** Model name for user reference */
20
+ userModelName?: TModelName;
21
+ /** Token expiration time (default: '1d') */
22
+ expiresIn?: string;
23
+ /** Custom email validator function */
24
+ emailValidator?: (v: string) => boolean;
25
+ /** Custom validation error message function */
26
+ validationMessage?: (props: {
27
+ value: string;
28
+ }) => string;
29
+ constants?: TConstants;
30
+ /** ID type for references */
31
+ idType?: any;
32
+ }
33
+ /**
34
+ * Factory function to create an extensible email token schema.
35
+ * Includes TTL index for automatic token expiration.
36
+ * @template TTokenType - Token type enum (defaults to EmailTokenType)
37
+ * @template TModelName - Model name type (defaults to BaseModelName)
38
+ * @template TConstants - Constants type (defaults to IConstants)
39
+ * @param {EmailTokenSchemaOptions<TTokenType, TModelName>} options - Schema configuration options
40
+ * @param {TConstants} [_constants] - Optional constants (reserved for future use)
41
+ * @returns {Schema} Configured email token schema with TTL and unique indexes
42
+ */
43
+ export declare function createEmailTokenSchema<TTokenType extends string = EmailTokenType, TModelName extends string = BaseModelName, TConstants extends IConstants = IConstants>(options?: EmailTokenSchemaOptions<TTokenType, TModelName>, _constants?: TConstants): Schema;
44
+ /**
45
+ * Default email token schema with base configuration.
46
+ * Pre-configured schema with 1-day TTL and compound unique index.
47
+ */
48
+ export declare const EmailTokenSchema: Schema<any, import("mongoose").Model<any, any, any, any, any, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, {
49
+ [x: number]: unknown;
50
+ [x: symbol]: unknown;
51
+ [x: string]: unknown;
52
+ }, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<{
53
+ [x: number]: unknown;
54
+ [x: symbol]: unknown;
55
+ [x: string]: unknown;
56
+ }>, {}, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>> & import("mongoose").FlatRecord<{
57
+ [x: number]: unknown;
58
+ [x: symbol]: unknown;
59
+ [x: string]: unknown;
60
+ }> & Required<{
61
+ _id: unknown;
62
+ }> & {
63
+ __v: number;
64
+ }>;
65
+ //# sourceMappingURL=email-token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-token.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite-mongo/src/schemas/email-token.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AACzD,OAAO,EACL,cAAc,EAGf,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB,CACtC,UAAU,SAAS,MAAM,GAAG,cAAc,EAC1C,UAAU,SAAS,MAAM,GAAG,aAAa,EACzC,UAAU,SAAS,UAAU,GAAG,UAAU;IAE1C,oCAAoC;IACpC,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;IAC7B,oCAAoC;IACpC,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IACxC,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC;IACzD,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,GAAG,CAAC;CACd;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,SAAS,MAAM,GAAG,cAAc,EAC1C,UAAU,SAAS,MAAM,GAAG,aAAa,EACzC,UAAU,SAAS,UAAU,GAAG,UAAU,EAE1C,OAAO,GAAE,uBAAuB,CAAC,UAAU,EAAE,UAAU,CAAM,EAC7D,UAAU,CAAC,EAAE,UAAU,GACtB,MAAM,CA8CR;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;EAA2B,CAAC"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Email token schema factory for MongoDB.
4
+ * Creates schema for email verification and password reset tokens.
5
+ * @module schemas/email-token
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.EmailTokenSchema = void 0;
9
+ exports.createEmailTokenSchema = createEmailTokenSchema;
10
+ const tslib_1 = require("tslib");
11
+ const mongoose_types_1 = require("@digitaldefiance/mongoose-types");
12
+ const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
13
+ const validator_1 = tslib_1.__importDefault(require("validator"));
14
+ const enumerations_1 = require("../enumerations");
15
+ /**
16
+ * Factory function to create an extensible email token schema.
17
+ * Includes TTL index for automatic token expiration.
18
+ * @template TTokenType - Token type enum (defaults to EmailTokenType)
19
+ * @template TModelName - Model name type (defaults to BaseModelName)
20
+ * @template TConstants - Constants type (defaults to IConstants)
21
+ * @param {EmailTokenSchemaOptions<TTokenType, TModelName>} options - Schema configuration options
22
+ * @param {TConstants} [_constants] - Optional constants (reserved for future use)
23
+ * @returns {Schema} Configured email token schema with TTL and unique indexes
24
+ */
25
+ function createEmailTokenSchema(options = {}, _constants) {
26
+ const { tokenTypeEnum = Object.values(suite_core_lib_1.EmailTokenType), userModelName = enumerations_1.BaseModelName.User, expiresIn = '1d', validationMessage = (props) => (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Error_InvalidEmailTemplate, {
27
+ email: props.value,
28
+ }), idType = mongoose_types_1.Schema.Types.ObjectId, } = options;
29
+ const definition = {
30
+ userId: {
31
+ type: idType,
32
+ required: true,
33
+ ref: userModelName,
34
+ immutable: true,
35
+ },
36
+ type: {
37
+ type: String,
38
+ enum: tokenTypeEnum,
39
+ required: true,
40
+ immutable: true,
41
+ },
42
+ token: { type: String, required: true, immutable: true, unique: true },
43
+ email: {
44
+ type: String,
45
+ required: true,
46
+ immutable: true,
47
+ validate: {
48
+ validator: (v) => validator_1.default.isEmail(v),
49
+ message: validationMessage,
50
+ },
51
+ },
52
+ lastSent: { type: Date, required: false },
53
+ expiresAt: {
54
+ type: Date,
55
+ default: Date.now,
56
+ index: { expires: expiresIn },
57
+ },
58
+ };
59
+ const schema = new mongoose_types_1.Schema(definition, { timestamps: true });
60
+ schema.index({ userId: 1, email: 1, type: 1 }, { unique: true });
61
+ return schema;
62
+ }
63
+ /**
64
+ * Default email token schema with base configuration.
65
+ * Pre-configured schema with 1-day TTL and compound unique index.
66
+ */
67
+ exports.EmailTokenSchema = createEmailTokenSchema();
68
+ //# sourceMappingURL=email-token.js.map