@digitaldefiance/suite-core-lib 3.6.6 → 3.6.8

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 (563) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +82 -44
  3. package/package.json +10 -6
  4. package/src/backup-code-string.ts +96 -0
  5. package/src/builders/{index.d.ts → index.ts} +1 -1
  6. package/src/builders/role-builder.ts +63 -0
  7. package/src/builders/user-builder.ts +72 -0
  8. package/src/constants.ts +220 -0
  9. package/src/core/{errors.d.ts → errors.ts} +4 -1
  10. package/src/core/{index.d.ts → index.ts} +1 -1
  11. package/src/core/result.ts +36 -0
  12. package/src/core/{types.d.ts → types.ts} +6 -1
  13. package/src/defaults.ts +110 -0
  14. package/src/enumerations/account-status.ts +17 -0
  15. package/src/enumerations/email-token-type.ts +24 -0
  16. package/src/enumerations/fec-error-type.ts +13 -0
  17. package/src/enumerations/{index.d.ts → index.ts} +1 -2
  18. package/src/enumerations/pbkdf2-error-type.ts +4 -0
  19. package/src/enumerations/role.ts +5 -0
  20. package/src/enumerations/suite-core-string-key.ts +495 -0
  21. package/src/errors/account-locked.ts +9 -0
  22. package/src/errors/account-status.ts +33 -0
  23. package/src/errors/admin-role-not-found.ts +10 -0
  24. package/src/errors/core-typed-handleable.ts +69 -0
  25. package/src/errors/direct-challenge-not-enabled.ts +12 -0
  26. package/src/errors/direct-token-used.ts +9 -0
  27. package/src/errors/email-in-use.ts +11 -0
  28. package/src/errors/email-token-expired.ts +12 -0
  29. package/src/errors/email-token-failed-to-send.ts +20 -0
  30. package/src/errors/email-token-sent-too-recently.ts +29 -0
  31. package/src/errors/email-token-used-or-invalid.ts +12 -0
  32. package/src/errors/email-verified.ts +11 -0
  33. package/src/errors/failed-to-use-direct-token.ts +9 -0
  34. package/src/errors/fec-error.ts +33 -0
  35. package/src/errors/generic-validation.ts +11 -0
  36. package/src/errors/{index.d.ts → index.ts} +0 -1
  37. package/src/errors/invalid-backup-code.ts +6 -0
  38. package/src/errors/invalid-challenge-response.ts +12 -0
  39. package/src/errors/invalid-challenge.ts +9 -0
  40. package/src/errors/invalid-credentials.ts +14 -0
  41. package/src/errors/invalid-email.ts +22 -0
  42. package/src/errors/invalid-expired-token.ts +11 -0
  43. package/src/errors/invalid-token.ts +13 -0
  44. package/src/errors/invalid-userid.ts +21 -0
  45. package/src/errors/invalid-username.ts +14 -0
  46. package/src/errors/last-admin-error.ts +12 -0
  47. package/src/errors/login-challenge-expired.ts +12 -0
  48. package/src/errors/member-role-not-found.ts +10 -0
  49. package/src/errors/password-login-not-enabled.ts +12 -0
  50. package/src/errors/password-login-not-setup.ts +12 -0
  51. package/src/errors/pbkdf2-error.ts +19 -0
  52. package/src/errors/pending-email-verification.ts +9 -0
  53. package/src/errors/private-key-required.ts +13 -0
  54. package/src/errors/system-role-not-found.ts +10 -0
  55. package/src/errors/token-not-found.ts +26 -0
  56. package/src/errors/translatable-suite-handleable.ts +27 -0
  57. package/src/errors/translatable-suite.ts +34 -0
  58. package/src/errors/user-not-found.ts +14 -0
  59. package/src/errors/username-email-required.ts +20 -0
  60. package/src/errors/username-in-use.ts +14 -0
  61. package/src/i18n-setup.ts +141 -0
  62. package/src/{index.d.ts → index.ts} +0 -1
  63. package/src/interfaces/backup-code-consts.ts +15 -0
  64. package/src/interfaces/backup-code.ts +6 -0
  65. package/src/interfaces/bases/email-token.ts +38 -0
  66. package/src/interfaces/bases/{index.d.ts → index.ts} +0 -1
  67. package/src/interfaces/bases/{mnemonic.d.ts → mnemonic.ts} +5 -5
  68. package/src/interfaces/bases/role.ts +40 -0
  69. package/src/interfaces/bases/token-role.ts +9 -0
  70. package/src/interfaces/bases/{used-direct-login-token.d.ts → used-direct-login-token.ts} +3 -3
  71. package/src/interfaces/bases/user-role.ts +21 -0
  72. package/src/interfaces/bases/user.ts +88 -0
  73. package/src/interfaces/combined-role-privileges.ts +6 -0
  74. package/src/interfaces/constants.ts +56 -0
  75. package/src/interfaces/core-consts.ts +130 -0
  76. package/src/interfaces/deep-partial.ts +3 -0
  77. package/src/interfaces/dto/{email-token.d.ts → email-token.ts} +1 -1
  78. package/src/interfaces/dto/{index.d.ts → index.ts} +1 -2
  79. package/src/interfaces/dto/{mnemonic.d.ts → mnemonic.ts} +1 -1
  80. package/src/interfaces/dto/request-user.ts +19 -0
  81. package/src/interfaces/dto/{role.d.ts → role.ts} +1 -1
  82. package/src/interfaces/dto/{token-role.d.ts → token-role.ts} +9 -3
  83. package/src/interfaces/dto/{user-role.d.ts → user-role.ts} +1 -1
  84. package/src/interfaces/dto/{user-settings.d.ts → user-settings.ts} +1 -2
  85. package/src/interfaces/dto/{user.d.ts → user.ts} +1 -1
  86. package/src/interfaces/failable-result.ts +6 -0
  87. package/src/interfaces/frontend-objects/email-token.ts +8 -0
  88. package/src/interfaces/frontend-objects/{index.d.ts → index.ts} +1 -2
  89. package/src/interfaces/frontend-objects/request-user.ts +17 -0
  90. package/src/interfaces/frontend-objects/{role.d.ts → role.ts} +1 -1
  91. package/src/interfaces/frontend-objects/{user-role.d.ts → user-role.ts} +1 -1
  92. package/src/interfaces/frontend-objects/user.ts +9 -0
  93. package/src/interfaces/has-creation.ts +6 -0
  94. package/src/interfaces/has-creator.ts +6 -0
  95. package/src/interfaces/has-id.ts +3 -0
  96. package/src/interfaces/has-soft-delete.ts +6 -0
  97. package/src/interfaces/has-soft-deleter.ts +6 -0
  98. package/src/interfaces/has-timestamp-owners.ts +6 -0
  99. package/src/interfaces/has-timestamps.ts +7 -0
  100. package/src/interfaces/has-updater.ts +6 -0
  101. package/src/interfaces/has-updates.ts +3 -0
  102. package/src/interfaces/{index.d.ts → index.ts} +0 -1
  103. package/src/interfaces/success-message.ts +4 -0
  104. package/src/interfaces/{token-user.d.ts → token-user.ts} +3 -3
  105. package/src/interfaces/{user-settings.d.ts → user-settings.ts} +2 -2
  106. package/src/lib/flags.ts +286 -0
  107. package/src/lib/formatters.ts +28 -0
  108. package/src/lib/hydrate-dehydrate.ts +27 -0
  109. package/src/lib/{index.d.ts → index.ts} +2 -2
  110. package/src/lib/validators-with-constants.ts +72 -0
  111. package/src/lib/validators.ts +72 -0
  112. package/src/local-storage-manager.ts +69 -0
  113. package/src/strings/de.ts +689 -0
  114. package/src/strings/en-GB.ts +626 -0
  115. package/src/strings/en-US.ts +628 -0
  116. package/src/strings/es.ts +688 -0
  117. package/src/strings/fr.ts +685 -0
  118. package/src/strings/ja.ts +654 -0
  119. package/src/strings/uk.ts +667 -0
  120. package/src/strings/zh-CN.ts +566 -0
  121. package/src/backup-code-string.d.ts +0 -29
  122. package/src/backup-code-string.d.ts.map +0 -1
  123. package/src/backup-code-string.js +0 -81
  124. package/src/backup-code-string.js.map +0 -1
  125. package/src/builders/index.d.ts.map +0 -1
  126. package/src/builders/index.js +0 -9
  127. package/src/builders/index.js.map +0 -1
  128. package/src/builders/role-builder.d.ts +0 -19
  129. package/src/builders/role-builder.d.ts.map +0 -1
  130. package/src/builders/role-builder.js +0 -57
  131. package/src/builders/role-builder.js.map +0 -1
  132. package/src/builders/user-builder.d.ts +0 -23
  133. package/src/builders/user-builder.d.ts.map +0 -1
  134. package/src/builders/user-builder.js +0 -63
  135. package/src/builders/user-builder.js.map +0 -1
  136. package/src/constants.d.ts +0 -7
  137. package/src/constants.d.ts.map +0 -1
  138. package/src/constants.js +0 -209
  139. package/src/constants.js.map +0 -1
  140. package/src/core/errors.d.ts.map +0 -1
  141. package/src/core/errors.js +0 -29
  142. package/src/core/errors.js.map +0 -1
  143. package/src/core/index.d.ts.map +0 -1
  144. package/src/core/index.js +0 -10
  145. package/src/core/index.js.map +0 -1
  146. package/src/core/result.d.ts +0 -34
  147. package/src/core/result.d.ts.map +0 -1
  148. package/src/core/result.js +0 -35
  149. package/src/core/result.js.map +0 -1
  150. package/src/core/types.d.ts.map +0 -1
  151. package/src/core/types.js +0 -6
  152. package/src/core/types.js.map +0 -1
  153. package/src/defaults.d.ts +0 -7
  154. package/src/defaults.d.ts.map +0 -1
  155. package/src/defaults.js +0 -66
  156. package/src/defaults.js.map +0 -1
  157. package/src/enumerations/account-status.d.ts +0 -18
  158. package/src/enumerations/account-status.d.ts.map +0 -1
  159. package/src/enumerations/account-status.js +0 -22
  160. package/src/enumerations/account-status.js.map +0 -1
  161. package/src/enumerations/email-token-type.d.ts +0 -25
  162. package/src/enumerations/email-token-type.d.ts.map +0 -1
  163. package/src/enumerations/email-token-type.js +0 -29
  164. package/src/enumerations/email-token-type.js.map +0 -1
  165. package/src/enumerations/fec-error-type.d.ts +0 -14
  166. package/src/enumerations/fec-error-type.d.ts.map +0 -1
  167. package/src/enumerations/fec-error-type.js +0 -18
  168. package/src/enumerations/fec-error-type.js.map +0 -1
  169. package/src/enumerations/index.d.ts.map +0 -1
  170. package/src/enumerations/index.js +0 -10
  171. package/src/enumerations/index.js.map +0 -1
  172. package/src/enumerations/pbkdf2-error-type.d.ts +0 -5
  173. package/src/enumerations/pbkdf2-error-type.d.ts.map +0 -1
  174. package/src/enumerations/pbkdf2-error-type.js +0 -9
  175. package/src/enumerations/pbkdf2-error-type.js.map +0 -1
  176. package/src/enumerations/role.d.ts +0 -6
  177. package/src/enumerations/role.d.ts.map +0 -1
  178. package/src/enumerations/role.js +0 -10
  179. package/src/enumerations/role.js.map +0 -1
  180. package/src/enumerations/suite-core-string-key.d.ts +0 -482
  181. package/src/enumerations/suite-core-string-key.d.ts.map +0 -1
  182. package/src/enumerations/suite-core-string-key.js +0 -493
  183. package/src/enumerations/suite-core-string-key.js.map +0 -1
  184. package/src/errors/account-locked.d.ts +0 -5
  185. package/src/errors/account-locked.d.ts.map +0 -1
  186. package/src/errors/account-locked.js +0 -13
  187. package/src/errors/account-locked.js.map +0 -1
  188. package/src/errors/account-status.d.ts +0 -7
  189. package/src/errors/account-status.d.ts.map +0 -1
  190. package/src/errors/account-status.js +0 -31
  191. package/src/errors/account-status.js.map +0 -1
  192. package/src/errors/admin-role-not-found.d.ts +0 -6
  193. package/src/errors/admin-role-not-found.d.ts.map +0 -1
  194. package/src/errors/admin-role-not-found.js +0 -13
  195. package/src/errors/admin-role-not-found.js.map +0 -1
  196. package/src/errors/core-typed-handleable.d.ts +0 -12
  197. package/src/errors/core-typed-handleable.d.ts.map +0 -1
  198. package/src/errors/core-typed-handleable.js +0 -51
  199. package/src/errors/core-typed-handleable.js.map +0 -1
  200. package/src/errors/direct-challenge-not-enabled.d.ts +0 -5
  201. package/src/errors/direct-challenge-not-enabled.d.ts.map +0 -1
  202. package/src/errors/direct-challenge-not-enabled.js +0 -16
  203. package/src/errors/direct-challenge-not-enabled.js.map +0 -1
  204. package/src/errors/direct-token-used.d.ts +0 -5
  205. package/src/errors/direct-token-used.d.ts.map +0 -1
  206. package/src/errors/direct-token-used.js +0 -13
  207. package/src/errors/direct-token-used.js.map +0 -1
  208. package/src/errors/email-in-use.d.ts +0 -5
  209. package/src/errors/email-in-use.d.ts.map +0 -1
  210. package/src/errors/email-in-use.js +0 -15
  211. package/src/errors/email-in-use.js.map +0 -1
  212. package/src/errors/email-token-expired.d.ts +0 -5
  213. package/src/errors/email-token-expired.d.ts.map +0 -1
  214. package/src/errors/email-token-expired.js +0 -15
  215. package/src/errors/email-token-expired.js.map +0 -1
  216. package/src/errors/email-token-failed-to-send.d.ts +0 -6
  217. package/src/errors/email-token-failed-to-send.d.ts.map +0 -1
  218. package/src/errors/email-token-failed-to-send.js +0 -22
  219. package/src/errors/email-token-failed-to-send.js.map +0 -1
  220. package/src/errors/email-token-sent-too-recently.d.ts +0 -7
  221. package/src/errors/email-token-sent-too-recently.d.ts.map +0 -1
  222. package/src/errors/email-token-sent-too-recently.js +0 -21
  223. package/src/errors/email-token-sent-too-recently.js.map +0 -1
  224. package/src/errors/email-token-used-or-invalid.d.ts +0 -5
  225. package/src/errors/email-token-used-or-invalid.d.ts.map +0 -1
  226. package/src/errors/email-token-used-or-invalid.js +0 -15
  227. package/src/errors/email-token-used-or-invalid.js.map +0 -1
  228. package/src/errors/email-verified.d.ts +0 -5
  229. package/src/errors/email-verified.d.ts.map +0 -1
  230. package/src/errors/email-verified.js +0 -15
  231. package/src/errors/email-verified.js.map +0 -1
  232. package/src/errors/failed-to-use-direct-token.d.ts +0 -5
  233. package/src/errors/failed-to-use-direct-token.d.ts.map +0 -1
  234. package/src/errors/failed-to-use-direct-token.js +0 -13
  235. package/src/errors/failed-to-use-direct-token.js.map +0 -1
  236. package/src/errors/fec-error.d.ts +0 -6
  237. package/src/errors/fec-error.d.ts.map +0 -1
  238. package/src/errors/fec-error.js +0 -26
  239. package/src/errors/fec-error.js.map +0 -1
  240. package/src/errors/generic-validation.d.ts +0 -5
  241. package/src/errors/generic-validation.d.ts.map +0 -1
  242. package/src/errors/generic-validation.js +0 -12
  243. package/src/errors/generic-validation.js.map +0 -1
  244. package/src/errors/index.d.ts.map +0 -1
  245. package/src/errors/index.js +0 -43
  246. package/src/errors/index.js.map +0 -1
  247. package/src/errors/invalid-backup-code.d.ts +0 -4
  248. package/src/errors/invalid-backup-code.d.ts.map +0 -1
  249. package/src/errors/invalid-backup-code.js +0 -11
  250. package/src/errors/invalid-backup-code.js.map +0 -1
  251. package/src/errors/invalid-challenge-response.d.ts +0 -5
  252. package/src/errors/invalid-challenge-response.d.ts.map +0 -1
  253. package/src/errors/invalid-challenge-response.js +0 -16
  254. package/src/errors/invalid-challenge-response.js.map +0 -1
  255. package/src/errors/invalid-challenge.d.ts +0 -5
  256. package/src/errors/invalid-challenge.d.ts.map +0 -1
  257. package/src/errors/invalid-challenge.js +0 -13
  258. package/src/errors/invalid-challenge.js.map +0 -1
  259. package/src/errors/invalid-credentials.d.ts +0 -5
  260. package/src/errors/invalid-credentials.d.ts.map +0 -1
  261. package/src/errors/invalid-credentials.js +0 -15
  262. package/src/errors/invalid-credentials.js.map +0 -1
  263. package/src/errors/invalid-email.d.ts +0 -8
  264. package/src/errors/invalid-email.d.ts.map +0 -1
  265. package/src/errors/invalid-email.js +0 -25
  266. package/src/errors/invalid-email.js.map +0 -1
  267. package/src/errors/invalid-expired-token.d.ts +0 -7
  268. package/src/errors/invalid-expired-token.d.ts.map +0 -1
  269. package/src/errors/invalid-expired-token.js +0 -13
  270. package/src/errors/invalid-expired-token.js.map +0 -1
  271. package/src/errors/invalid-token.d.ts +0 -5
  272. package/src/errors/invalid-token.d.ts.map +0 -1
  273. package/src/errors/invalid-token.js +0 -16
  274. package/src/errors/invalid-token.js.map +0 -1
  275. package/src/errors/invalid-userid.d.ts +0 -6
  276. package/src/errors/invalid-userid.d.ts.map +0 -1
  277. package/src/errors/invalid-userid.js +0 -18
  278. package/src/errors/invalid-userid.js.map +0 -1
  279. package/src/errors/invalid-username.d.ts +0 -5
  280. package/src/errors/invalid-username.d.ts.map +0 -1
  281. package/src/errors/invalid-username.js +0 -13
  282. package/src/errors/invalid-username.js.map +0 -1
  283. package/src/errors/last-admin-error.d.ts +0 -6
  284. package/src/errors/last-admin-error.d.ts.map +0 -1
  285. package/src/errors/last-admin-error.js +0 -15
  286. package/src/errors/last-admin-error.js.map +0 -1
  287. package/src/errors/login-challenge-expired.d.ts +0 -5
  288. package/src/errors/login-challenge-expired.d.ts.map +0 -1
  289. package/src/errors/login-challenge-expired.js +0 -16
  290. package/src/errors/login-challenge-expired.js.map +0 -1
  291. package/src/errors/member-role-not-found.d.ts +0 -6
  292. package/src/errors/member-role-not-found.d.ts.map +0 -1
  293. package/src/errors/member-role-not-found.js +0 -13
  294. package/src/errors/member-role-not-found.js.map +0 -1
  295. package/src/errors/password-login-not-enabled.d.ts +0 -5
  296. package/src/errors/password-login-not-enabled.d.ts.map +0 -1
  297. package/src/errors/password-login-not-enabled.js +0 -16
  298. package/src/errors/password-login-not-enabled.js.map +0 -1
  299. package/src/errors/password-login-not-setup.d.ts +0 -5
  300. package/src/errors/password-login-not-setup.d.ts.map +0 -1
  301. package/src/errors/password-login-not-setup.js +0 -16
  302. package/src/errors/password-login-not-setup.js.map +0 -1
  303. package/src/errors/pbkdf2-error.d.ts +0 -7
  304. package/src/errors/pbkdf2-error.d.ts.map +0 -1
  305. package/src/errors/pbkdf2-error.js +0 -20
  306. package/src/errors/pbkdf2-error.js.map +0 -1
  307. package/src/errors/pending-email-verification.d.ts +0 -5
  308. package/src/errors/pending-email-verification.d.ts.map +0 -1
  309. package/src/errors/pending-email-verification.js +0 -13
  310. package/src/errors/pending-email-verification.js.map +0 -1
  311. package/src/errors/private-key-required.d.ts +0 -5
  312. package/src/errors/private-key-required.d.ts.map +0 -1
  313. package/src/errors/private-key-required.js +0 -13
  314. package/src/errors/private-key-required.js.map +0 -1
  315. package/src/errors/system-role-not-found.d.ts +0 -6
  316. package/src/errors/system-role-not-found.d.ts.map +0 -1
  317. package/src/errors/system-role-not-found.js +0 -13
  318. package/src/errors/system-role-not-found.js.map +0 -1
  319. package/src/errors/token-not-found.d.ts +0 -7
  320. package/src/errors/token-not-found.d.ts.map +0 -1
  321. package/src/errors/token-not-found.js +0 -19
  322. package/src/errors/token-not-found.js.map +0 -1
  323. package/src/errors/translatable-suite-handleable.d.ts +0 -10
  324. package/src/errors/translatable-suite-handleable.d.ts.map +0 -1
  325. package/src/errors/translatable-suite-handleable.js +0 -15
  326. package/src/errors/translatable-suite-handleable.js.map +0 -1
  327. package/src/errors/translatable-suite.d.ts +0 -13
  328. package/src/errors/translatable-suite.d.ts.map +0 -1
  329. package/src/errors/translatable-suite.js +0 -29
  330. package/src/errors/translatable-suite.js.map +0 -1
  331. package/src/errors/user-not-found.d.ts +0 -5
  332. package/src/errors/user-not-found.d.ts.map +0 -1
  333. package/src/errors/user-not-found.js +0 -13
  334. package/src/errors/user-not-found.js.map +0 -1
  335. package/src/errors/username-email-required.d.ts +0 -6
  336. package/src/errors/username-email-required.d.ts.map +0 -1
  337. package/src/errors/username-email-required.js +0 -16
  338. package/src/errors/username-email-required.js.map +0 -1
  339. package/src/errors/username-in-use.d.ts +0 -5
  340. package/src/errors/username-in-use.d.ts.map +0 -1
  341. package/src/errors/username-in-use.js +0 -13
  342. package/src/errors/username-in-use.js.map +0 -1
  343. package/src/i18n-setup.d.ts +0 -13
  344. package/src/i18n-setup.d.ts.map +0 -1
  345. package/src/i18n-setup.js +0 -116
  346. package/src/i18n-setup.js.map +0 -1
  347. package/src/index.d.ts.map +0 -1
  348. package/src/index.js +0 -15
  349. package/src/index.js.map +0 -1
  350. package/src/interfaces/backup-code-consts.d.ts +0 -16
  351. package/src/interfaces/backup-code-consts.d.ts.map +0 -1
  352. package/src/interfaces/backup-code-consts.js +0 -3
  353. package/src/interfaces/backup-code-consts.js.map +0 -1
  354. package/src/interfaces/backup-code.d.ts +0 -7
  355. package/src/interfaces/backup-code.d.ts.map +0 -1
  356. package/src/interfaces/backup-code.js +0 -3
  357. package/src/interfaces/backup-code.js.map +0 -1
  358. package/src/interfaces/bases/email-token.d.ts +0 -33
  359. package/src/interfaces/bases/email-token.d.ts.map +0 -1
  360. package/src/interfaces/bases/email-token.js +0 -3
  361. package/src/interfaces/bases/email-token.js.map +0 -1
  362. package/src/interfaces/bases/index.d.ts.map +0 -1
  363. package/src/interfaces/bases/index.js +0 -11
  364. package/src/interfaces/bases/index.js.map +0 -1
  365. package/src/interfaces/bases/mnemonic.d.ts.map +0 -1
  366. package/src/interfaces/bases/mnemonic.js +0 -3
  367. package/src/interfaces/bases/mnemonic.js.map +0 -1
  368. package/src/interfaces/bases/role.d.ts +0 -32
  369. package/src/interfaces/bases/role.d.ts.map +0 -1
  370. package/src/interfaces/bases/role.js +0 -3
  371. package/src/interfaces/bases/role.js.map +0 -1
  372. package/src/interfaces/bases/token-role.d.ts +0 -8
  373. package/src/interfaces/bases/token-role.d.ts.map +0 -1
  374. package/src/interfaces/bases/token-role.js +0 -3
  375. package/src/interfaces/bases/token-role.js.map +0 -1
  376. package/src/interfaces/bases/used-direct-login-token.d.ts.map +0 -1
  377. package/src/interfaces/bases/used-direct-login-token.js +0 -3
  378. package/src/interfaces/bases/used-direct-login-token.js.map +0 -1
  379. package/src/interfaces/bases/user-role.d.ts +0 -16
  380. package/src/interfaces/bases/user-role.d.ts.map +0 -1
  381. package/src/interfaces/bases/user-role.js +0 -3
  382. package/src/interfaces/bases/user-role.js.map +0 -1
  383. package/src/interfaces/bases/user.d.ts +0 -79
  384. package/src/interfaces/bases/user.d.ts.map +0 -1
  385. package/src/interfaces/bases/user.js +0 -3
  386. package/src/interfaces/bases/user.js.map +0 -1
  387. package/src/interfaces/combined-role-privileges.d.ts +0 -7
  388. package/src/interfaces/combined-role-privileges.d.ts.map +0 -1
  389. package/src/interfaces/combined-role-privileges.js +0 -3
  390. package/src/interfaces/combined-role-privileges.js.map +0 -1
  391. package/src/interfaces/constants.d.ts +0 -56
  392. package/src/interfaces/constants.d.ts.map +0 -1
  393. package/src/interfaces/constants.js +0 -3
  394. package/src/interfaces/constants.js.map +0 -1
  395. package/src/interfaces/core-consts.d.ts +0 -130
  396. package/src/interfaces/core-consts.d.ts.map +0 -1
  397. package/src/interfaces/core-consts.js +0 -3
  398. package/src/interfaces/core-consts.js.map +0 -1
  399. package/src/interfaces/deep-partial.d.ts +0 -4
  400. package/src/interfaces/deep-partial.d.ts.map +0 -1
  401. package/src/interfaces/deep-partial.js +0 -3
  402. package/src/interfaces/deep-partial.js.map +0 -1
  403. package/src/interfaces/dto/email-token.d.ts.map +0 -1
  404. package/src/interfaces/dto/email-token.js +0 -3
  405. package/src/interfaces/dto/email-token.js.map +0 -1
  406. package/src/interfaces/dto/index.d.ts.map +0 -1
  407. package/src/interfaces/dto/index.js +0 -12
  408. package/src/interfaces/dto/index.js.map +0 -1
  409. package/src/interfaces/dto/mnemonic.d.ts.map +0 -1
  410. package/src/interfaces/dto/mnemonic.js +0 -3
  411. package/src/interfaces/dto/mnemonic.js.map +0 -1
  412. package/src/interfaces/dto/request-user.d.ts +0 -17
  413. package/src/interfaces/dto/request-user.d.ts.map +0 -1
  414. package/src/interfaces/dto/request-user.js +0 -3
  415. package/src/interfaces/dto/request-user.js.map +0 -1
  416. package/src/interfaces/dto/role.d.ts.map +0 -1
  417. package/src/interfaces/dto/role.js +0 -3
  418. package/src/interfaces/dto/role.js.map +0 -1
  419. package/src/interfaces/dto/token-role.d.ts.map +0 -1
  420. package/src/interfaces/dto/token-role.js +0 -3
  421. package/src/interfaces/dto/token-role.js.map +0 -1
  422. package/src/interfaces/dto/user-role.d.ts.map +0 -1
  423. package/src/interfaces/dto/user-role.js +0 -3
  424. package/src/interfaces/dto/user-role.js.map +0 -1
  425. package/src/interfaces/dto/user-settings.d.ts.map +0 -1
  426. package/src/interfaces/dto/user-settings.js +0 -3
  427. package/src/interfaces/dto/user-settings.js.map +0 -1
  428. package/src/interfaces/dto/user.d.ts.map +0 -1
  429. package/src/interfaces/dto/user.js +0 -3
  430. package/src/interfaces/dto/user.js.map +0 -1
  431. package/src/interfaces/failable-result.d.ts +0 -7
  432. package/src/interfaces/failable-result.d.ts.map +0 -1
  433. package/src/interfaces/failable-result.js +0 -3
  434. package/src/interfaces/failable-result.js.map +0 -1
  435. package/src/interfaces/frontend-objects/email-token.d.ts +0 -4
  436. package/src/interfaces/frontend-objects/email-token.d.ts.map +0 -1
  437. package/src/interfaces/frontend-objects/email-token.js +0 -3
  438. package/src/interfaces/frontend-objects/email-token.js.map +0 -1
  439. package/src/interfaces/frontend-objects/index.d.ts.map +0 -1
  440. package/src/interfaces/frontend-objects/index.js +0 -9
  441. package/src/interfaces/frontend-objects/index.js.map +0 -1
  442. package/src/interfaces/frontend-objects/request-user.d.ts +0 -17
  443. package/src/interfaces/frontend-objects/request-user.d.ts.map +0 -1
  444. package/src/interfaces/frontend-objects/request-user.js +0 -3
  445. package/src/interfaces/frontend-objects/request-user.js.map +0 -1
  446. package/src/interfaces/frontend-objects/role.d.ts.map +0 -1
  447. package/src/interfaces/frontend-objects/role.js +0 -3
  448. package/src/interfaces/frontend-objects/role.js.map +0 -1
  449. package/src/interfaces/frontend-objects/user-role.d.ts.map +0 -1
  450. package/src/interfaces/frontend-objects/user-role.js +0 -3
  451. package/src/interfaces/frontend-objects/user-role.js.map +0 -1
  452. package/src/interfaces/frontend-objects/user.d.ts +0 -4
  453. package/src/interfaces/frontend-objects/user.d.ts.map +0 -1
  454. package/src/interfaces/frontend-objects/user.js +0 -3
  455. package/src/interfaces/frontend-objects/user.js.map +0 -1
  456. package/src/interfaces/has-creation.d.ts +0 -7
  457. package/src/interfaces/has-creation.d.ts.map +0 -1
  458. package/src/interfaces/has-creation.js +0 -3
  459. package/src/interfaces/has-creation.js.map +0 -1
  460. package/src/interfaces/has-creator.d.ts +0 -7
  461. package/src/interfaces/has-creator.d.ts.map +0 -1
  462. package/src/interfaces/has-creator.js +0 -3
  463. package/src/interfaces/has-creator.js.map +0 -1
  464. package/src/interfaces/has-id.d.ts +0 -4
  465. package/src/interfaces/has-id.d.ts.map +0 -1
  466. package/src/interfaces/has-id.js +0 -3
  467. package/src/interfaces/has-id.js.map +0 -1
  468. package/src/interfaces/has-soft-delete.d.ts +0 -7
  469. package/src/interfaces/has-soft-delete.d.ts.map +0 -1
  470. package/src/interfaces/has-soft-delete.js +0 -3
  471. package/src/interfaces/has-soft-delete.js.map +0 -1
  472. package/src/interfaces/has-soft-deleter.d.ts +0 -7
  473. package/src/interfaces/has-soft-deleter.d.ts.map +0 -1
  474. package/src/interfaces/has-soft-deleter.js +0 -3
  475. package/src/interfaces/has-soft-deleter.js.map +0 -1
  476. package/src/interfaces/has-timestamp-owners.d.ts +0 -5
  477. package/src/interfaces/has-timestamp-owners.d.ts.map +0 -1
  478. package/src/interfaces/has-timestamp-owners.js +0 -3
  479. package/src/interfaces/has-timestamp-owners.js.map +0 -1
  480. package/src/interfaces/has-timestamps.d.ts +0 -6
  481. package/src/interfaces/has-timestamps.d.ts.map +0 -1
  482. package/src/interfaces/has-timestamps.js +0 -3
  483. package/src/interfaces/has-timestamps.js.map +0 -1
  484. package/src/interfaces/has-updater.d.ts +0 -7
  485. package/src/interfaces/has-updater.d.ts.map +0 -1
  486. package/src/interfaces/has-updater.js +0 -3
  487. package/src/interfaces/has-updater.js.map +0 -1
  488. package/src/interfaces/has-updates.d.ts +0 -4
  489. package/src/interfaces/has-updates.d.ts.map +0 -1
  490. package/src/interfaces/has-updates.js +0 -3
  491. package/src/interfaces/has-updates.js.map +0 -1
  492. package/src/interfaces/index.d.ts.map +0 -1
  493. package/src/interfaces/index.js +0 -26
  494. package/src/interfaces/index.js.map +0 -1
  495. package/src/interfaces/success-message.d.ts +0 -5
  496. package/src/interfaces/success-message.d.ts.map +0 -1
  497. package/src/interfaces/success-message.js +0 -3
  498. package/src/interfaces/success-message.js.map +0 -1
  499. package/src/interfaces/token-user.d.ts.map +0 -1
  500. package/src/interfaces/token-user.js +0 -3
  501. package/src/interfaces/token-user.js.map +0 -1
  502. package/src/interfaces/user-settings.d.ts.map +0 -1
  503. package/src/interfaces/user-settings.js +0 -3
  504. package/src/interfaces/user-settings.js.map +0 -1
  505. package/src/lib/flags.d.ts +0 -10
  506. package/src/lib/flags.d.ts.map +0 -1
  507. package/src/lib/flags.js +0 -288
  508. package/src/lib/flags.js.map +0 -1
  509. package/src/lib/formatters.d.ts +0 -16
  510. package/src/lib/formatters.d.ts.map +0 -1
  511. package/src/lib/formatters.js +0 -29
  512. package/src/lib/formatters.js.map +0 -1
  513. package/src/lib/hydrate-dehydrate.d.ts +0 -4
  514. package/src/lib/hydrate-dehydrate.d.ts.map +0 -1
  515. package/src/lib/hydrate-dehydrate.js +0 -27
  516. package/src/lib/hydrate-dehydrate.js.map +0 -1
  517. package/src/lib/index.d.ts.map +0 -1
  518. package/src/lib/index.js +0 -12
  519. package/src/lib/index.js.map +0 -1
  520. package/src/lib/validators-with-constants.d.ts +0 -73
  521. package/src/lib/validators-with-constants.d.ts.map +0 -1
  522. package/src/lib/validators-with-constants.js +0 -64
  523. package/src/lib/validators-with-constants.js.map +0 -1
  524. package/src/lib/validators.d.ts +0 -37
  525. package/src/lib/validators.d.ts.map +0 -1
  526. package/src/lib/validators.js +0 -74
  527. package/src/lib/validators.js.map +0 -1
  528. package/src/local-storage-manager.d.ts +0 -22
  529. package/src/local-storage-manager.d.ts.map +0 -1
  530. package/src/local-storage-manager.js +0 -74
  531. package/src/local-storage-manager.js.map +0 -1
  532. package/src/strings/de.d.ts +0 -3
  533. package/src/strings/de.d.ts.map +0 -1
  534. package/src/strings/de.js +0 -486
  535. package/src/strings/de.js.map +0 -1
  536. package/src/strings/en-GB.d.ts +0 -3
  537. package/src/strings/en-GB.d.ts.map +0 -1
  538. package/src/strings/en-GB.js +0 -486
  539. package/src/strings/en-GB.js.map +0 -1
  540. package/src/strings/en-US.d.ts +0 -3
  541. package/src/strings/en-US.d.ts.map +0 -1
  542. package/src/strings/en-US.js +0 -486
  543. package/src/strings/en-US.js.map +0 -1
  544. package/src/strings/es.d.ts +0 -3
  545. package/src/strings/es.d.ts.map +0 -1
  546. package/src/strings/es.js +0 -486
  547. package/src/strings/es.js.map +0 -1
  548. package/src/strings/fr.d.ts +0 -3
  549. package/src/strings/fr.d.ts.map +0 -1
  550. package/src/strings/fr.js +0 -486
  551. package/src/strings/fr.js.map +0 -1
  552. package/src/strings/ja.d.ts +0 -3
  553. package/src/strings/ja.d.ts.map +0 -1
  554. package/src/strings/ja.js +0 -486
  555. package/src/strings/ja.js.map +0 -1
  556. package/src/strings/uk.d.ts +0 -3
  557. package/src/strings/uk.d.ts.map +0 -1
  558. package/src/strings/uk.js +0 -486
  559. package/src/strings/uk.js.map +0 -1
  560. package/src/strings/zh-CN.d.ts +0 -3
  561. package/src/strings/zh-CN.d.ts.map +0 -1
  562. package/src/strings/zh-CN.js +0 -486
  563. package/src/strings/zh-CN.js.map +0 -1
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Digital Defiance
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -40,36 +40,37 @@ All error messages, validation texts, and user-facing strings are fully localize
40
40
 
41
41
  ## 🏗️ Architecture Overview
42
42
 
43
- ### Type-Safe Interfaces
43
+ ### Type-Safe Base Interfaces
44
44
 
45
45
  ```typescript
46
46
  import {
47
- IFrontendUser,
48
- IBackendUser,
47
+ IUserBase,
48
+ IRoleBase,
49
+ IUserRoleBase,
49
50
  AccountStatus,
50
51
  Role,
51
52
  CoreLanguage
52
53
  } from '@digitaldefiance/suite-core-lib';
53
54
 
54
- // Frontend-optimized user interface with string-based IDs
55
- interface AppUser extends IFrontendUser<'en'> {
56
- _id: string;
57
- siteLanguage: 'en';
58
- accountStatus: AccountStatus;
55
+ // Create a user interface with string IDs for frontend applications
56
+ interface FrontendUser extends IUserBase<string, Date, 'en', AccountStatus> {
57
+ // Additional app-specific fields
59
58
  }
60
59
 
61
- // Backend database interface supporting ObjectId types (Default)
62
- interface DatabaseUser extends IBackendUser<'en'> {
63
- _id: Types.ObjectId;
64
- createdBy: Types.ObjectId;
65
- updatedBy: Types.ObjectId;
60
+ // Create a user interface with ObjectId for MongoDB backend
61
+ import { Types } from 'mongoose';
62
+ interface BackendUser extends IUserBase<Types.ObjectId, Date, 'en', AccountStatus> {
63
+ // Additional app-specific fields
64
+ }
65
+
66
+ // Create a user interface with UUID strings for SQL databases
67
+ interface SqlUser extends IUserBase<string, Date, 'en', AccountStatus> {
68
+ // Additional app-specific fields
66
69
  }
67
70
 
68
- // Example: Backend interface using UUIDs (Strings)
69
- interface SqlUser extends IBackendUser<'en', string> {
70
- _id: string;
71
- createdBy: string;
72
- updatedBy: string;
71
+ // Create custom role interfaces
72
+ interface AppRole extends IRoleBase<string, Date, Role> {
73
+ // Additional app-specific fields
73
74
  }
74
75
  ```
75
76
 
@@ -120,17 +121,23 @@ The **@digitaldefiance/node-express-suite** package builds upon these primitives
120
121
  ### Express.js Framework Usage
121
122
 
122
123
  ```typescript
123
- // Internal usage of suite-core-lib primitives in node-express-suite
124
+ // Usage of suite-core-lib primitives in Express applications
124
125
  import {
125
- IFrontendUser,
126
+ IUserBase,
126
127
  AccountStatus,
127
128
  BackupCodeString,
128
129
  UserNotFoundError,
130
+ InvalidBackupCodeError,
129
131
  CoreLanguage
130
132
  } from '@digitaldefiance/suite-core-lib';
131
133
 
134
+ interface BackupCode {
135
+ encrypted: string;
136
+ used: boolean;
137
+ }
138
+
132
139
  // Middleware example: validate backup code input
133
- function validateBackupCode(userInput: string, storedCodes: IBackupCode[]) {
140
+ function validateBackupCode(userInput: string, storedCodes: BackupCode[]): boolean {
134
141
  try {
135
142
  const inputCode = new BackupCodeString(userInput);
136
143
  return storedCodes.some(stored =>
@@ -149,21 +156,24 @@ function validateBackupCode(userInput: string, storedCodes: IBackupCode[]) {
149
156
  ### Frontend Framework Integration
150
157
 
151
158
  ```typescript
152
- // Frontend frameworks consume type-safe interfaces
153
- import { IFrontendUser, AccountStatus } from '@digitaldefiance/suite-core-lib';
159
+ // Frontend frameworks consume type-safe base interfaces
160
+ import { IUserBase, AccountStatus } from '@digitaldefiance/suite-core-lib';
161
+
162
+ // Define a frontend user type with string IDs and Date objects
163
+ type FrontendUser = IUserBase<string, Date, 'en' | 'fr' | 'es', AccountStatus>;
154
164
 
155
165
  // React/Vue/Angular component props example
156
166
  interface UserProfileProps {
157
- user: IFrontendUser<'en' | 'fr' | 'es'>;
167
+ user: FrontendUser;
158
168
  onStatusChange: (status: AccountStatus) => void;
159
169
  }
160
170
 
161
171
  // Function to update user status with type safety
162
- function updateUserStatus(user: IFrontendUser<string>, status: AccountStatus) {
172
+ function updateUserStatus(user: FrontendUser, status: AccountStatus): FrontendUser {
163
173
  return {
164
174
  ...user,
165
175
  accountStatus: status,
166
- updatedAt: new Date().toISOString()
176
+ updatedAt: new Date()
167
177
  };
168
178
  }
169
179
  ```
@@ -171,11 +181,14 @@ function updateUserStatus(user: IFrontendUser<string>, status: AccountStatus) {
171
181
  ### Database Layer Integration
172
182
 
173
183
  ```typescript
174
- // Database schemas implementing suite-core-lib interfaces
175
- import { IBackendUser, IUserRoleBase } from '@digitaldefiance/suite-core-lib';
184
+ // Database schemas implementing suite-core-lib base interfaces
185
+ import { IUserBase, IUserRoleBase, AccountStatus } from '@digitaldefiance/suite-core-lib';
176
186
  import { Types } from 'mongoose';
177
187
 
178
- const userSchema = new mongoose.Schema<IBackendUser<'en'>>({
188
+ // Define a MongoDB user type using ObjectId
189
+ type MongoUser = IUserBase<Types.ObjectId, Date, 'en', AccountStatus>;
190
+
191
+ const userSchema = new mongoose.Schema<MongoUser>({
179
192
  _id: { type: Types.ObjectId, required: true },
180
193
  username: { type: String, required: true, unique: true },
181
194
  email: { type: String, required: true, unique: true },
@@ -186,6 +199,11 @@ const userSchema = new mongoose.Schema<IBackendUser<'en'>>({
186
199
  },
187
200
  // Additional schema fields matching the interface
188
201
  });
202
+
203
+ // SQL database example with UUID strings
204
+ type SqlUser = IUserBase<string, Date, 'en', AccountStatus> & {
205
+ customField: string;
206
+ };
189
207
  ```
190
208
 
191
209
  ## 🔧 Advanced Configuration
@@ -259,14 +277,23 @@ The **@digitaldefiance/node-ecies** and **@digitaldefiance/node-express-suite**
259
277
  ## 🆕 What's New in v3.0
260
278
 
261
279
  ### Generic ID Support
262
- Core interfaces (`IBackendUser`, `IBackendRole`, etc.) now support generic ID types. This enables seamless integration with the new **Pluggable ID Providers** (ObjectId, UUID, GUID) introduced in `@digitaldefiance/ecies-lib` v4.1.0.
280
+ Core base interfaces (`IUserBase`, `IRoleBase`, `IUserRoleBase`, etc.) now support generic ID types. This enables seamless integration with any database system using the **Pluggable ID Providers** (ObjectId, UUID, GUID) introduced in `@digitaldefiance/ecies-lib` v4.1.0.
263
281
 
264
282
  ```typescript
265
- // Default behavior (MongoDB ObjectId)
266
- interface MongoUser extends IBackendUser<'en'> {}
283
+ import { IUserBase, AccountStatus } from '@digitaldefiance/suite-core-lib';
284
+ import { Types } from 'mongoose';
285
+
286
+ // MongoDB with ObjectId
287
+ type MongoUser = IUserBase<Types.ObjectId, Date, 'en', AccountStatus>;
288
+
289
+ // SQL database with UUID strings
290
+ type SqlUser = IUserBase<string, Date, 'en', AccountStatus>;
291
+
292
+ // PostgreSQL with numeric IDs
293
+ type PostgresUser = IUserBase<number, Date, 'en', AccountStatus>;
267
294
 
268
- // Custom ID type (e.g. UUID string)
269
- interface SqlUser extends IBackendUser<'en', string> {}
295
+ // Frontend with string IDs and ISO date strings
296
+ type FrontendUser = IUserBase<string, string, 'en', AccountStatus>;
270
297
  ```
271
298
 
272
299
  ## ✨ Key Features (v2.1+)
@@ -501,23 +528,31 @@ describe('Error Handling', () => {
501
528
 
502
529
  ### Cross-Package Testing
503
530
 
504
- Testing with node-express-suite:
531
+ Testing with base interfaces:
505
532
 
506
533
  ```typescript
507
- import { IBackendUser, AccountStatus } from '@digitaldefiance/suite-core-lib';
508
- import { UserService } from '@digitaldefiance/node-express-suite';
534
+ import { IUserBase, AccountStatus } from '@digitaldefiance/suite-core-lib';
535
+ import { Types } from 'mongoose';
536
+
537
+ // Define your user type
538
+ type TestUser = IUserBase<Types.ObjectId, Date, 'en', AccountStatus>;
509
539
 
510
- describe('Integration with node-express-suite', () => {
511
- it('should work with UserService', async () => {
512
- const user: IBackendUser = {
540
+ describe('User Management', () => {
541
+ it('should create user with correct status', () => {
542
+ const user: TestUser = {
543
+ _id: new Types.ObjectId(),
513
544
  username: 'alice',
514
545
  email: 'alice@example.com',
515
546
  accountStatus: AccountStatus.Active,
516
- // ... other fields
547
+ emailVerified: true,
548
+ siteLanguage: 'en',
549
+ createdAt: new Date(),
550
+ updatedAt: new Date(),
551
+ // ... other required fields
517
552
  };
518
553
 
519
- // Use with UserService
520
554
  expect(user.accountStatus).toBe(AccountStatus.Active);
555
+ expect(user.emailVerified).toBe(true);
521
556
  });
522
557
  });
523
558
  ```
@@ -526,7 +561,10 @@ describe('Integration with node-express-suite', () => {
526
561
 
527
562
  ## v3.6.6
528
563
 
529
- - Move models to node-express-suite
564
+ - **Breaking Change**: Move `IFrontend*` and `IBackend*` type aliases to `@digitaldefiance/node-express-suite`
565
+ - Base interfaces (`IUserBase`, `IRoleBase`, `IUserRoleBase`, etc.) remain in `suite-core-lib` as the core primitives
566
+ - Framework-specific type aliases moved to `node-express-suite` for better separation of concerns
567
+ - Migration: Use base interfaces directly (e.g., `IUserBase<string, Date, 'en', AccountStatus>`) or import pre-configured types from `@digitaldefiance/node-express-suite`
530
568
  - Update testing
531
569
  - Update ecies
532
570
 
@@ -593,7 +631,7 @@ None. This is a backward-compatible release focused on internal type safety impr
593
631
  ## v3.0.0
594
632
 
595
633
  - Upgrade ECIES to 4.1.0
596
- - Update backend interfaces (`IBackendUser`, `IBackendUserRole`, `IBackendTokenRole`, `IBackendUsedDirectLoginToken`) to support generic ID types (defaulting to `Types.ObjectId` for backward compatibility). This enables support for pluggable ID providers (e.g. GUIDs, strings, numbers) introduced in `@digitaldefiance/ecies-lib` v4.1.0.
634
+ - Update base interfaces (`IUserBase`, `IUserRoleBase`, `ITokenRole`, etc.) to support generic ID types. This enables support for pluggable ID providers (e.g. ObjectId, UUID, GUID, numbers) introduced in `@digitaldefiance/ecies-lib` v4.1.0.
597
635
 
598
636
  ## v2.2.26
599
637
 
package/package.json CHANGED
@@ -1,6 +1,11 @@
1
1
  {
2
2
  "name": "@digitaldefiance/suite-core-lib",
3
- "version": "3.6.6",
3
+ "version": "3.6.8",
4
+ "homepage": "https://github.com/Digital-Defiance/suite-core-lib",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/Digital-Defiance/suite-core-lib.git"
8
+ },
4
9
  "description": "Generic user system and document system common core for applications",
5
10
  "main": "src/index.js",
6
11
  "types": "src/index.d.ts",
@@ -22,8 +27,8 @@
22
27
  "publish:public": "npm publish --access public"
23
28
  },
24
29
  "dependencies": {
25
- "@digitaldefiance/ecies-lib": "4.4.2",
26
- "@digitaldefiance/i18n-lib": "3.8.0"
30
+ "@digitaldefiance/ecies-lib": "4.4.7",
31
+ "@digitaldefiance/i18n-lib": "3.8.2"
27
32
  },
28
33
  "files": [
29
34
  "src",
@@ -41,6 +46,5 @@
41
46
  "@typescript-eslint/parser": "^8.48.0",
42
47
  "eslint-plugin-import": "^2.32.0",
43
48
  "eslint-plugin-prettier": "^5.5.4"
44
- },
45
- "type": "commonjs"
46
- }
49
+ }
50
+ }
@@ -0,0 +1,96 @@
1
+ import { Constants } from './constants';
2
+ import { InvalidBackupCodeError } from './errors/invalid-backup-code';
3
+ import { IConstants } from './interfaces';
4
+
5
+ export class BackupCodeString {
6
+ private readonly _normalizedCode: string;
7
+
8
+ constructor(code: string) {
9
+ const normalizedCode = BackupCodeString.normalizeCode(code);
10
+ if (!Constants.BACKUP_CODES.NormalizedHexRegex.test(normalizedCode)) {
11
+ throw new InvalidBackupCodeError();
12
+ }
13
+ this._normalizedCode = normalizedCode;
14
+ }
15
+
16
+ public get value(): string {
17
+ return BackupCodeString.formatBackupCode(this._normalizedCode);
18
+ }
19
+
20
+ public get notNullValue(): string {
21
+ return BackupCodeString.formatBackupCode(this._normalizedCode);
22
+ }
23
+
24
+ public get valueAsHexString(): string {
25
+ const formattedValue = BackupCodeString.formatBackupCode(
26
+ this._normalizedCode,
27
+ );
28
+ return new TextEncoder().encode(formattedValue).reduce((str, byte) => {
29
+ return str + byte.toString(16).padStart(2, '0');
30
+ }, '');
31
+ }
32
+
33
+ public get valueAsBase64String(): string {
34
+ const formattedValue = BackupCodeString.formatBackupCode(
35
+ this._normalizedCode,
36
+ );
37
+ return btoa(formattedValue);
38
+ }
39
+
40
+ public get valueAsUint8Array(): Uint8Array {
41
+ const formattedValue = BackupCodeString.formatBackupCode(
42
+ this._normalizedCode,
43
+ );
44
+ return new TextEncoder().encode(formattedValue);
45
+ }
46
+
47
+ public get hasValue(): boolean {
48
+ return this._normalizedCode.length > 0;
49
+ }
50
+
51
+ public get length(): number {
52
+ return this._normalizedCode.length;
53
+ }
54
+
55
+ public dispose(): void {
56
+ // Backup codes are not sensitive enough to require secure disposal
57
+ // They're already encrypted when stored in the database
58
+ }
59
+
60
+ /**
61
+ * Format a 32-char normalized code into display form (8 groups of 4).
62
+ * Does not restrict characters beyond grouping.
63
+ */
64
+ public static formatBackupCode(code: string): string {
65
+ const groups = code.match(/.{1,4}/g) ?? [code];
66
+ return groups.join('-');
67
+ }
68
+ /**
69
+ * Normalize user-entered code: remove spaces and hyphens, lowercase, and trim.
70
+ */
71
+ public static normalizeCode(input: string): string {
72
+ return input.replace(/[\s-]/g, '').toLowerCase().trim();
73
+ }
74
+
75
+ public static generateBackupCode(): string {
76
+ const alphabet = 'abcdefghijklmnopqrstuvwxyz0123456789';
77
+ const rnd = crypto.getRandomValues(new Uint8Array(32));
78
+ let raw = '';
79
+ for (let j = 0; j < 32; j++) {
80
+ raw += alphabet[rnd[j] % alphabet.length];
81
+ }
82
+ return raw;
83
+ }
84
+
85
+ /**
86
+ * Generate the configured number of backup codes.
87
+ * Note: If generation alphabet/length is controlled elsewhere, prefer that path.
88
+ */
89
+ public static generateBackupCodes(constants: IConstants = Constants): Array<BackupCodeString> {
90
+ const codes: Array<BackupCodeString> = [];
91
+ for (let i = 0; i < constants.BACKUP_CODES.Count; i++) {
92
+ codes.push(new BackupCodeString(BackupCodeString.generateBackupCode()));
93
+ }
94
+ return codes;
95
+ }
96
+ }
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Builders module - fluent builders for common objects
3
3
  */
4
+
4
5
  export * from './user-builder';
5
6
  export * from './role-builder';
6
- //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Fluent builder for creating role objects
3
+ */
4
+
5
+ import { Role } from '../enumerations/role';
6
+ import { IRoleBase } from '../interfaces/bases/role';
7
+
8
+ /**
9
+ * Builder for creating role objects with fluent API
10
+ */
11
+ export class RoleBuilder<I = string, D extends Date | string = Date> {
12
+ private data: Partial<IRoleBase<I, D, Role>> = {
13
+ admin: false,
14
+ member: false,
15
+ child: false,
16
+ system: false,
17
+ };
18
+
19
+ static create<I = string, D extends Date | string = Date>(): RoleBuilder<I, D> {
20
+ return new RoleBuilder<I, D>();
21
+ }
22
+
23
+ withName(name: Role): this {
24
+ this.data.name = name;
25
+ return this;
26
+ }
27
+
28
+ asAdmin(): this {
29
+ this.data.admin = true;
30
+ this.data.member = false;
31
+ this.data.child = false;
32
+ this.data.system = false;
33
+ return this;
34
+ }
35
+
36
+ asMember(): this {
37
+ this.data.admin = false;
38
+ this.data.member = true;
39
+ this.data.child = false;
40
+ this.data.system = false;
41
+ return this;
42
+ }
43
+
44
+ asChild(): this {
45
+ this.data.admin = false;
46
+ this.data.member = false;
47
+ this.data.child = true;
48
+ this.data.system = false;
49
+ return this;
50
+ }
51
+
52
+ asSystem(): this {
53
+ this.data.admin = false;
54
+ this.data.member = false;
55
+ this.data.child = false;
56
+ this.data.system = true;
57
+ return this;
58
+ }
59
+
60
+ build(): Partial<IRoleBase<I, D, Role>> {
61
+ return { ...this.data };
62
+ }
63
+ }
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Fluent builder for creating user objects
3
+ */
4
+
5
+ import { AccountStatus } from '../enumerations/account-status';
6
+ import { IUserBase } from '../interfaces/bases/user';
7
+
8
+ /**
9
+ * Builder for creating user objects with fluent API
10
+ */
11
+ export class UserBuilder<I = string, D extends Date | string = Date, S extends string = string> {
12
+ private data: Partial<IUserBase<I, D, S, AccountStatus>> = {
13
+ emailVerified: false,
14
+ accountStatus: AccountStatus.Active,
15
+ directChallenge: false,
16
+ backupCodes: [],
17
+ timezone: 'UTC',
18
+ };
19
+
20
+ static create<I = string, D extends Date | string = Date, S extends string = string>(): UserBuilder<I, D, S> {
21
+ return new UserBuilder<I, D, S>();
22
+ }
23
+
24
+ withUsername(username: string): this {
25
+ this.data.username = username;
26
+ return this;
27
+ }
28
+
29
+ withEmail(email: string): this {
30
+ this.data.email = email;
31
+ return this;
32
+ }
33
+
34
+ withPublicKey(publicKey: string): this {
35
+ this.data.publicKey = publicKey;
36
+ return this;
37
+ }
38
+
39
+ withTimezone(timezone: string): this {
40
+ this.data.timezone = timezone;
41
+ return this;
42
+ }
43
+
44
+ withSiteLanguage(siteLanguage: S): this {
45
+ this.data.siteLanguage = siteLanguage;
46
+ return this;
47
+ }
48
+
49
+ withEmailVerified(verified: boolean): this {
50
+ this.data.emailVerified = verified;
51
+ return this;
52
+ }
53
+
54
+ withAccountStatus(status: AccountStatus): this {
55
+ this.data.accountStatus = status;
56
+ return this;
57
+ }
58
+
59
+ withDirectChallenge(enabled: boolean): this {
60
+ this.data.directChallenge = enabled;
61
+ return this;
62
+ }
63
+
64
+ withMnemonicRecovery(recovery: string): this {
65
+ this.data.mnemonicRecovery = recovery;
66
+ return this;
67
+ }
68
+
69
+ build(): Partial<IUserBase<I, D, S, AccountStatus>> {
70
+ return { ...this.data };
71
+ }
72
+ }