@futdevpro/nts-dynamo 1.15.140 → 1.15.141

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 (293) hide show
  1. package/README.md +27 -0
  2. package/__documentations/2026-08-18-standalone-account-security-and-privacy-bedrock.md +131 -0
  3. package/build/_modules/account-security/_enums/account-challenge-purpose.type-enum.d.ts +6 -0
  4. package/build/_modules/account-security/_enums/account-challenge-purpose.type-enum.d.ts.map +1 -0
  5. package/build/_modules/account-security/_enums/account-challenge-purpose.type-enum.js +10 -0
  6. package/build/_modules/account-security/_enums/account-challenge-purpose.type-enum.js.map +1 -0
  7. package/build/_modules/account-security/_enums/account-refresh-token-state.type-enum.d.ts +7 -0
  8. package/build/_modules/account-security/_enums/account-refresh-token-state.type-enum.d.ts.map +1 -0
  9. package/build/_modules/account-security/_enums/account-refresh-token-state.type-enum.js +11 -0
  10. package/build/_modules/account-security/_enums/account-refresh-token-state.type-enum.js.map +1 -0
  11. package/build/_modules/account-security/_enums/account-session-state.type-enum.d.ts +7 -0
  12. package/build/_modules/account-security/_enums/account-session-state.type-enum.d.ts.map +1 -0
  13. package/build/_modules/account-security/_enums/account-session-state.type-enum.js +11 -0
  14. package/build/_modules/account-security/_enums/account-session-state.type-enum.js.map +1 -0
  15. package/build/_modules/account-security/_models/account-challenge-adapter.interface.d.ts +9 -0
  16. package/build/_modules/account-security/_models/account-challenge-adapter.interface.d.ts.map +1 -0
  17. package/build/_modules/account-security/_models/account-challenge-adapter.interface.js +3 -0
  18. package/build/_modules/account-security/_models/account-challenge-adapter.interface.js.map +1 -0
  19. package/build/_modules/account-security/_models/account-challenge-issued.interface.d.ts +7 -0
  20. package/build/_modules/account-security/_models/account-challenge-issued.interface.d.ts.map +1 -0
  21. package/build/_modules/account-security/_models/account-challenge-issued.interface.js +3 -0
  22. package/build/_modules/account-security/_models/account-challenge-issued.interface.js.map +1 -0
  23. package/build/_modules/account-security/_models/account-challenge-record.interface.d.ts +13 -0
  24. package/build/_modules/account-security/_models/account-challenge-record.interface.d.ts.map +1 -0
  25. package/build/_modules/account-security/_models/account-challenge-record.interface.js +3 -0
  26. package/build/_modules/account-security/_models/account-challenge-record.interface.js.map +1 -0
  27. package/build/_modules/account-security/_models/account-challenge-result.interface.d.ts +8 -0
  28. package/build/_modules/account-security/_models/account-challenge-result.interface.d.ts.map +1 -0
  29. package/build/_modules/account-security/_models/account-challenge-result.interface.js +3 -0
  30. package/build/_modules/account-security/_models/account-challenge-result.interface.js.map +1 -0
  31. package/build/_modules/account-security/_models/account-challenge-settings.interface.d.ts +9 -0
  32. package/build/_modules/account-security/_models/account-challenge-settings.interface.d.ts.map +1 -0
  33. package/build/_modules/account-security/_models/account-challenge-settings.interface.js +3 -0
  34. package/build/_modules/account-security/_models/account-challenge-settings.interface.js.map +1 -0
  35. package/build/_modules/account-security/_models/account-password-policy.interface.d.ts +12 -0
  36. package/build/_modules/account-security/_models/account-password-policy.interface.d.ts.map +1 -0
  37. package/build/_modules/account-security/_models/account-password-policy.interface.js +3 -0
  38. package/build/_modules/account-security/_models/account-password-policy.interface.js.map +1 -0
  39. package/build/_modules/account-security/_models/account-password-verification.interface.d.ts +6 -0
  40. package/build/_modules/account-security/_models/account-password-verification.interface.d.ts.map +1 -0
  41. package/build/_modules/account-security/_models/account-password-verification.interface.js +3 -0
  42. package/build/_modules/account-security/_models/account-password-verification.interface.js.map +1 -0
  43. package/build/_modules/account-security/_models/account-refresh-token-record.interface.d.ts +13 -0
  44. package/build/_modules/account-security/_models/account-refresh-token-record.interface.d.ts.map +1 -0
  45. package/build/_modules/account-security/_models/account-refresh-token-record.interface.js +3 -0
  46. package/build/_modules/account-security/_models/account-refresh-token-record.interface.js.map +1 -0
  47. package/build/_modules/account-security/_models/account-session-adapter.interface.d.ts +19 -0
  48. package/build/_modules/account-security/_models/account-session-adapter.interface.d.ts.map +1 -0
  49. package/build/_modules/account-security/_models/account-session-adapter.interface.js +3 -0
  50. package/build/_modules/account-security/_models/account-session-adapter.interface.js.map +1 -0
  51. package/build/_modules/account-security/_models/account-session-claims.interface.d.ts +8 -0
  52. package/build/_modules/account-security/_models/account-session-claims.interface.d.ts.map +1 -0
  53. package/build/_modules/account-security/_models/account-session-claims.interface.js +3 -0
  54. package/build/_modules/account-security/_models/account-session-claims.interface.js.map +1 -0
  55. package/build/_modules/account-security/_models/account-session-context.interface.d.ts +7 -0
  56. package/build/_modules/account-security/_models/account-session-context.interface.d.ts.map +1 -0
  57. package/build/_modules/account-security/_models/account-session-context.interface.js +3 -0
  58. package/build/_modules/account-security/_models/account-session-context.interface.js.map +1 -0
  59. package/build/_modules/account-security/_models/account-session-create.interface.d.ts +8 -0
  60. package/build/_modules/account-security/_models/account-session-create.interface.d.ts.map +1 -0
  61. package/build/_modules/account-security/_models/account-session-create.interface.js +3 -0
  62. package/build/_modules/account-security/_models/account-session-create.interface.js.map +1 -0
  63. package/build/_modules/account-security/_models/account-session-record.interface.d.ts +21 -0
  64. package/build/_modules/account-security/_models/account-session-record.interface.d.ts.map +1 -0
  65. package/build/_modules/account-security/_models/account-session-record.interface.js +3 -0
  66. package/build/_modules/account-security/_models/account-session-record.interface.js.map +1 -0
  67. package/build/_modules/account-security/_models/account-session-rotate.interface.d.ts +11 -0
  68. package/build/_modules/account-security/_models/account-session-rotate.interface.d.ts.map +1 -0
  69. package/build/_modules/account-security/_models/account-session-rotate.interface.js +3 -0
  70. package/build/_modules/account-security/_models/account-session-rotate.interface.js.map +1 -0
  71. package/build/_modules/account-security/_models/account-session-settings.interface.d.ts +11 -0
  72. package/build/_modules/account-security/_models/account-session-settings.interface.d.ts.map +1 -0
  73. package/build/_modules/account-security/_models/account-session-settings.interface.js +3 -0
  74. package/build/_modules/account-security/_models/account-session-settings.interface.js.map +1 -0
  75. package/build/_modules/account-security/_models/account-session-token-pair.interface.d.ts +9 -0
  76. package/build/_modules/account-security/_models/account-session-token-pair.interface.d.ts.map +1 -0
  77. package/build/_modules/account-security/_models/account-session-token-pair.interface.js +3 -0
  78. package/build/_modules/account-security/_models/account-session-token-pair.interface.js.map +1 -0
  79. package/build/_modules/account-security/_models/account-session-view.interface.d.ts +13 -0
  80. package/build/_modules/account-security/_models/account-session-view.interface.d.ts.map +1 -0
  81. package/build/_modules/account-security/_models/account-session-view.interface.js +3 -0
  82. package/build/_modules/account-security/_models/account-session-view.interface.js.map +1 -0
  83. package/build/_modules/account-security/account-challenge.control-service.d.ts +24 -0
  84. package/build/_modules/account-security/account-challenge.control-service.d.ts.map +1 -0
  85. package/build/_modules/account-security/account-challenge.control-service.js +117 -0
  86. package/build/_modules/account-security/account-challenge.control-service.js.map +1 -0
  87. package/build/_modules/account-security/account-password.control-service.d.ts +24 -0
  88. package/build/_modules/account-security/account-password.control-service.d.ts.map +1 -0
  89. package/build/_modules/account-security/account-password.control-service.js +214 -0
  90. package/build/_modules/account-security/account-password.control-service.js.map +1 -0
  91. package/build/_modules/account-security/account-session.control-service.d.ts +39 -0
  92. package/build/_modules/account-security/account-session.control-service.d.ts.map +1 -0
  93. package/build/_modules/account-security/account-session.control-service.js +277 -0
  94. package/build/_modules/account-security/account-session.control-service.js.map +1 -0
  95. package/build/_modules/account-security/index.d.ts +24 -0
  96. package/build/_modules/account-security/index.d.ts.map +1 -0
  97. package/build/_modules/account-security/index.js +16 -0
  98. package/build/_modules/account-security/index.js.map +1 -0
  99. package/build/_modules/privacy-lifecycle/_enums/privacy-consent-decision.type-enum.d.ts +6 -0
  100. package/build/_modules/privacy-lifecycle/_enums/privacy-consent-decision.type-enum.d.ts.map +1 -0
  101. package/build/_modules/privacy-lifecycle/_enums/privacy-consent-decision.type-enum.js +10 -0
  102. package/build/_modules/privacy-lifecycle/_enums/privacy-consent-decision.type-enum.js.map +1 -0
  103. package/build/_modules/privacy-lifecycle/_enums/privacy-contributor-action.type-enum.d.ts +11 -0
  104. package/build/_modules/privacy-lifecycle/_enums/privacy-contributor-action.type-enum.d.ts.map +1 -0
  105. package/build/_modules/privacy-lifecycle/_enums/privacy-contributor-action.type-enum.js +15 -0
  106. package/build/_modules/privacy-lifecycle/_enums/privacy-contributor-action.type-enum.js.map +1 -0
  107. package/build/_modules/privacy-lifecycle/_enums/privacy-contributor-outcome.type-enum.d.ts +8 -0
  108. package/build/_modules/privacy-lifecycle/_enums/privacy-contributor-outcome.type-enum.d.ts.map +1 -0
  109. package/build/_modules/privacy-lifecycle/_enums/privacy-contributor-outcome.type-enum.js +12 -0
  110. package/build/_modules/privacy-lifecycle/_enums/privacy-contributor-outcome.type-enum.js.map +1 -0
  111. package/build/_modules/privacy-lifecycle/_enums/privacy-request-state.type-enum.d.ts +16 -0
  112. package/build/_modules/privacy-lifecycle/_enums/privacy-request-state.type-enum.d.ts.map +1 -0
  113. package/build/_modules/privacy-lifecycle/_enums/privacy-request-state.type-enum.js +20 -0
  114. package/build/_modules/privacy-lifecycle/_enums/privacy-request-state.type-enum.js.map +1 -0
  115. package/build/_modules/privacy-lifecycle/_enums/privacy-request.type-enum.d.ts +10 -0
  116. package/build/_modules/privacy-lifecycle/_enums/privacy-request.type-enum.d.ts.map +1 -0
  117. package/build/_modules/privacy-lifecycle/_enums/privacy-request.type-enum.js +14 -0
  118. package/build/_modules/privacy-lifecycle/_enums/privacy-request.type-enum.js.map +1 -0
  119. package/build/_modules/privacy-lifecycle/_models/privacy-consent-input.interface.d.ts +12 -0
  120. package/build/_modules/privacy-lifecycle/_models/privacy-consent-input.interface.d.ts.map +1 -0
  121. package/build/_modules/privacy-lifecycle/_models/privacy-consent-input.interface.js +3 -0
  122. package/build/_modules/privacy-lifecycle/_models/privacy-consent-input.interface.js.map +1 -0
  123. package/build/_modules/privacy-lifecycle/_models/privacy-consent-persistence-result.interface.d.ts +7 -0
  124. package/build/_modules/privacy-lifecycle/_models/privacy-consent-persistence-result.interface.d.ts.map +1 -0
  125. package/build/_modules/privacy-lifecycle/_models/privacy-consent-persistence-result.interface.js +3 -0
  126. package/build/_modules/privacy-lifecycle/_models/privacy-consent-persistence-result.interface.js.map +1 -0
  127. package/build/_modules/privacy-lifecycle/_models/privacy-consent-record.interface.d.ts +15 -0
  128. package/build/_modules/privacy-lifecycle/_models/privacy-consent-record.interface.d.ts.map +1 -0
  129. package/build/_modules/privacy-lifecycle/_models/privacy-consent-record.interface.js +3 -0
  130. package/build/_modules/privacy-lifecycle/_models/privacy-consent-record.interface.js.map +1 -0
  131. package/build/_modules/privacy-lifecycle/_models/privacy-consent-result.interface.d.ts +7 -0
  132. package/build/_modules/privacy-lifecycle/_models/privacy-consent-result.interface.d.ts.map +1 -0
  133. package/build/_modules/privacy-lifecycle/_models/privacy-consent-result.interface.js +3 -0
  134. package/build/_modules/privacy-lifecycle/_models/privacy-consent-result.interface.js.map +1 -0
  135. package/build/_modules/privacy-lifecycle/_models/privacy-consent-view.interface.d.ts +13 -0
  136. package/build/_modules/privacy-lifecycle/_models/privacy-consent-view.interface.d.ts.map +1 -0
  137. package/build/_modules/privacy-lifecycle/_models/privacy-consent-view.interface.js +3 -0
  138. package/build/_modules/privacy-lifecycle/_models/privacy-consent-view.interface.js.map +1 -0
  139. package/build/_modules/privacy-lifecycle/_models/privacy-contributor-context.interface.d.ts +9 -0
  140. package/build/_modules/privacy-lifecycle/_models/privacy-contributor-context.interface.d.ts.map +1 -0
  141. package/build/_modules/privacy-lifecycle/_models/privacy-contributor-context.interface.js +3 -0
  142. package/build/_modules/privacy-lifecycle/_models/privacy-contributor-context.interface.js.map +1 -0
  143. package/build/_modules/privacy-lifecycle/_models/privacy-contributor-outcome.interface.d.ts +14 -0
  144. package/build/_modules/privacy-lifecycle/_models/privacy-contributor-outcome.interface.d.ts.map +1 -0
  145. package/build/_modules/privacy-lifecycle/_models/privacy-contributor-outcome.interface.js +3 -0
  146. package/build/_modules/privacy-lifecycle/_models/privacy-contributor-outcome.interface.js.map +1 -0
  147. package/build/_modules/privacy-lifecycle/_models/privacy-contributor-plan.interface.d.ts +8 -0
  148. package/build/_modules/privacy-lifecycle/_models/privacy-contributor-plan.interface.d.ts.map +1 -0
  149. package/build/_modules/privacy-lifecycle/_models/privacy-contributor-plan.interface.js +3 -0
  150. package/build/_modules/privacy-lifecycle/_models/privacy-contributor-plan.interface.js.map +1 -0
  151. package/build/_modules/privacy-lifecycle/_models/privacy-contributor.interface.d.ts +11 -0
  152. package/build/_modules/privacy-lifecycle/_models/privacy-contributor.interface.d.ts.map +1 -0
  153. package/build/_modules/privacy-lifecycle/_models/privacy-contributor.interface.js +3 -0
  154. package/build/_modules/privacy-lifecycle/_models/privacy-contributor.interface.js.map +1 -0
  155. package/build/_modules/privacy-lifecycle/_models/privacy-ledger-adapter.interface.d.ts +13 -0
  156. package/build/_modules/privacy-lifecycle/_models/privacy-ledger-adapter.interface.d.ts.map +1 -0
  157. package/build/_modules/privacy-lifecycle/_models/privacy-ledger-adapter.interface.js +3 -0
  158. package/build/_modules/privacy-lifecycle/_models/privacy-ledger-adapter.interface.js.map +1 -0
  159. package/build/_modules/privacy-lifecycle/_models/privacy-ledger-result.interface.d.ts +9 -0
  160. package/build/_modules/privacy-lifecycle/_models/privacy-ledger-result.interface.d.ts.map +1 -0
  161. package/build/_modules/privacy-lifecycle/_models/privacy-ledger-result.interface.js +3 -0
  162. package/build/_modules/privacy-lifecycle/_models/privacy-ledger-result.interface.js.map +1 -0
  163. package/build/_modules/privacy-lifecycle/_models/privacy-ledger-settings.interface.d.ts +7 -0
  164. package/build/_modules/privacy-lifecycle/_models/privacy-ledger-settings.interface.d.ts.map +1 -0
  165. package/build/_modules/privacy-lifecycle/_models/privacy-ledger-settings.interface.js +3 -0
  166. package/build/_modules/privacy-lifecycle/_models/privacy-ledger-settings.interface.js.map +1 -0
  167. package/build/_modules/privacy-lifecycle/_models/privacy-legal-acceptance-input.interface.d.ts +11 -0
  168. package/build/_modules/privacy-lifecycle/_models/privacy-legal-acceptance-input.interface.d.ts.map +1 -0
  169. package/build/_modules/privacy-lifecycle/_models/privacy-legal-acceptance-input.interface.js +3 -0
  170. package/build/_modules/privacy-lifecycle/_models/privacy-legal-acceptance-input.interface.js.map +1 -0
  171. package/build/_modules/privacy-lifecycle/_models/privacy-legal-acceptance-persistence-result.interface.d.ts +7 -0
  172. package/build/_modules/privacy-lifecycle/_models/privacy-legal-acceptance-persistence-result.interface.d.ts.map +1 -0
  173. package/build/_modules/privacy-lifecycle/_models/privacy-legal-acceptance-persistence-result.interface.js +3 -0
  174. package/build/_modules/privacy-lifecycle/_models/privacy-legal-acceptance-persistence-result.interface.js.map +1 -0
  175. package/build/_modules/privacy-lifecycle/_models/privacy-legal-acceptance-result.interface.d.ts +7 -0
  176. package/build/_modules/privacy-lifecycle/_models/privacy-legal-acceptance-result.interface.d.ts.map +1 -0
  177. package/build/_modules/privacy-lifecycle/_models/privacy-legal-acceptance-result.interface.js +3 -0
  178. package/build/_modules/privacy-lifecycle/_models/privacy-legal-acceptance-result.interface.js.map +1 -0
  179. package/build/_modules/privacy-lifecycle/_models/privacy-legal-acceptance-view.interface.d.ts +12 -0
  180. package/build/_modules/privacy-lifecycle/_models/privacy-legal-acceptance-view.interface.d.ts.map +1 -0
  181. package/build/_modules/privacy-lifecycle/_models/privacy-legal-acceptance-view.interface.js +3 -0
  182. package/build/_modules/privacy-lifecycle/_models/privacy-legal-acceptance-view.interface.js.map +1 -0
  183. package/build/_modules/privacy-lifecycle/_models/privacy-legal-acceptance.interface.d.ts +14 -0
  184. package/build/_modules/privacy-lifecycle/_models/privacy-legal-acceptance.interface.d.ts.map +1 -0
  185. package/build/_modules/privacy-lifecycle/_models/privacy-legal-acceptance.interface.js +3 -0
  186. package/build/_modules/privacy-lifecycle/_models/privacy-legal-acceptance.interface.js.map +1 -0
  187. package/build/_modules/privacy-lifecycle/_models/privacy-lifecycle-adapter.interface.d.ts +15 -0
  188. package/build/_modules/privacy-lifecycle/_models/privacy-lifecycle-adapter.interface.d.ts.map +1 -0
  189. package/build/_modules/privacy-lifecycle/_models/privacy-lifecycle-adapter.interface.js +3 -0
  190. package/build/_modules/privacy-lifecycle/_models/privacy-lifecycle-adapter.interface.js.map +1 -0
  191. package/build/_modules/privacy-lifecycle/_models/privacy-lifecycle-settings.interface.d.ts +9 -0
  192. package/build/_modules/privacy-lifecycle/_models/privacy-lifecycle-settings.interface.d.ts.map +1 -0
  193. package/build/_modules/privacy-lifecycle/_models/privacy-lifecycle-settings.interface.js +3 -0
  194. package/build/_modules/privacy-lifecycle/_models/privacy-lifecycle-settings.interface.js.map +1 -0
  195. package/build/_modules/privacy-lifecycle/_models/privacy-request-create-result.interface.d.ts +7 -0
  196. package/build/_modules/privacy-lifecycle/_models/privacy-request-create-result.interface.d.ts.map +1 -0
  197. package/build/_modules/privacy-lifecycle/_models/privacy-request-create-result.interface.js +3 -0
  198. package/build/_modules/privacy-lifecycle/_models/privacy-request-create-result.interface.js.map +1 -0
  199. package/build/_modules/privacy-lifecycle/_models/privacy-request-open.interface.d.ts +10 -0
  200. package/build/_modules/privacy-lifecycle/_models/privacy-request-open.interface.d.ts.map +1 -0
  201. package/build/_modules/privacy-lifecycle/_models/privacy-request-open.interface.js +3 -0
  202. package/build/_modules/privacy-lifecycle/_models/privacy-request-open.interface.js.map +1 -0
  203. package/build/_modules/privacy-lifecycle/_models/privacy-request-persistence-create-result.interface.d.ts +7 -0
  204. package/build/_modules/privacy-lifecycle/_models/privacy-request-persistence-create-result.interface.d.ts.map +1 -0
  205. package/build/_modules/privacy-lifecycle/_models/privacy-request-persistence-create-result.interface.js +3 -0
  206. package/build/_modules/privacy-lifecycle/_models/privacy-request-persistence-create-result.interface.js.map +1 -0
  207. package/build/_modules/privacy-lifecycle/_models/privacy-request-record.interface.d.ts +21 -0
  208. package/build/_modules/privacy-lifecycle/_models/privacy-request-record.interface.d.ts.map +1 -0
  209. package/build/_modules/privacy-lifecycle/_models/privacy-request-record.interface.js +3 -0
  210. package/build/_modules/privacy-lifecycle/_models/privacy-request-record.interface.js.map +1 -0
  211. package/build/_modules/privacy-lifecycle/_models/privacy-request-result.interface.d.ts +8 -0
  212. package/build/_modules/privacy-lifecycle/_models/privacy-request-result.interface.d.ts.map +1 -0
  213. package/build/_modules/privacy-lifecycle/_models/privacy-request-result.interface.js +3 -0
  214. package/build/_modules/privacy-lifecycle/_models/privacy-request-result.interface.js.map +1 -0
  215. package/build/_modules/privacy-lifecycle/_models/privacy-request-view.interface.d.ts +20 -0
  216. package/build/_modules/privacy-lifecycle/_models/privacy-request-view.interface.d.ts.map +1 -0
  217. package/build/_modules/privacy-lifecycle/_models/privacy-request-view.interface.js +3 -0
  218. package/build/_modules/privacy-lifecycle/_models/privacy-request-view.interface.js.map +1 -0
  219. package/build/_modules/privacy-lifecycle/index.d.ts +33 -0
  220. package/build/_modules/privacy-lifecycle/index.d.ts.map +1 -0
  221. package/build/_modules/privacy-lifecycle/index.js +18 -0
  222. package/build/_modules/privacy-lifecycle/index.js.map +1 -0
  223. package/build/_modules/privacy-lifecycle/privacy-ledger.control-service.d.ts +28 -0
  224. package/build/_modules/privacy-lifecycle/privacy-ledger.control-service.d.ts.map +1 -0
  225. package/build/_modules/privacy-lifecycle/privacy-ledger.control-service.js +168 -0
  226. package/build/_modules/privacy-lifecycle/privacy-ledger.control-service.js.map +1 -0
  227. package/build/_modules/privacy-lifecycle/privacy-lifecycle.control-service.d.ts +42 -0
  228. package/build/_modules/privacy-lifecycle/privacy-lifecycle.control-service.d.ts.map +1 -0
  229. package/build/_modules/privacy-lifecycle/privacy-lifecycle.control-service.js +364 -0
  230. package/build/_modules/privacy-lifecycle/privacy-lifecycle.control-service.js.map +1 -0
  231. package/package.json +19 -1
  232. package/src/_modules/account-security/_enums/account-challenge-purpose.type-enum.ts +5 -0
  233. package/src/_modules/account-security/_enums/account-refresh-token-state.type-enum.ts +6 -0
  234. package/src/_modules/account-security/_enums/account-session-state.type-enum.ts +6 -0
  235. package/src/_modules/account-security/_models/account-challenge-adapter.interface.ts +17 -0
  236. package/src/_modules/account-security/_models/account-challenge-issued.interface.ts +6 -0
  237. package/src/_modules/account-security/_models/account-challenge-record.interface.ts +13 -0
  238. package/src/_modules/account-security/_models/account-challenge-result.interface.ts +8 -0
  239. package/src/_modules/account-security/_models/account-challenge-settings.interface.ts +9 -0
  240. package/src/_modules/account-security/_models/account-password-policy.interface.ts +11 -0
  241. package/src/_modules/account-security/_models/account-password-verification.interface.ts +5 -0
  242. package/src/_modules/account-security/_models/account-refresh-token-record.interface.ts +13 -0
  243. package/src/_modules/account-security/_models/account-session-adapter.interface.ts +19 -0
  244. package/src/_modules/account-security/_models/account-session-claims.interface.ts +7 -0
  245. package/src/_modules/account-security/_models/account-session-context.interface.ts +6 -0
  246. package/src/_modules/account-security/_models/account-session-create.interface.ts +8 -0
  247. package/src/_modules/account-security/_models/account-session-record.interface.ts +21 -0
  248. package/src/_modules/account-security/_models/account-session-rotate.interface.ts +11 -0
  249. package/src/_modules/account-security/_models/account-session-settings.interface.ts +11 -0
  250. package/src/_modules/account-security/_models/account-session-token-pair.interface.ts +8 -0
  251. package/src/_modules/account-security/_models/account-session-view.interface.ts +13 -0
  252. package/src/_modules/account-security/account-challenge.control-service.spec.ts +195 -0
  253. package/src/_modules/account-security/account-challenge.control-service.ts +164 -0
  254. package/src/_modules/account-security/account-password.control-service.spec.ts +96 -0
  255. package/src/_modules/account-security/account-password.control-service.ts +288 -0
  256. package/src/_modules/account-security/account-session.control-service.spec.ts +294 -0
  257. package/src/_modules/account-security/account-session.control-service.ts +376 -0
  258. package/src/_modules/account-security/index.ts +31 -0
  259. package/src/_modules/privacy-lifecycle/_enums/privacy-consent-decision.type-enum.ts +5 -0
  260. package/src/_modules/privacy-lifecycle/_enums/privacy-contributor-action.type-enum.ts +10 -0
  261. package/src/_modules/privacy-lifecycle/_enums/privacy-contributor-outcome.type-enum.ts +7 -0
  262. package/src/_modules/privacy-lifecycle/_enums/privacy-request-state.type-enum.ts +15 -0
  263. package/src/_modules/privacy-lifecycle/_enums/privacy-request.type-enum.ts +9 -0
  264. package/src/_modules/privacy-lifecycle/_models/privacy-consent-input.interface.ts +12 -0
  265. package/src/_modules/privacy-lifecycle/_models/privacy-consent-persistence-result.interface.ts +7 -0
  266. package/src/_modules/privacy-lifecycle/_models/privacy-consent-record.interface.ts +15 -0
  267. package/src/_modules/privacy-lifecycle/_models/privacy-consent-result.interface.ts +7 -0
  268. package/src/_modules/privacy-lifecycle/_models/privacy-consent-view.interface.ts +13 -0
  269. package/src/_modules/privacy-lifecycle/_models/privacy-contributor-context.interface.ts +9 -0
  270. package/src/_modules/privacy-lifecycle/_models/privacy-contributor-outcome.interface.ts +14 -0
  271. package/src/_modules/privacy-lifecycle/_models/privacy-contributor-plan.interface.ts +8 -0
  272. package/src/_modules/privacy-lifecycle/_models/privacy-contributor.interface.ts +17 -0
  273. package/src/_modules/privacy-lifecycle/_models/privacy-ledger-adapter.interface.ts +21 -0
  274. package/src/_modules/privacy-lifecycle/_models/privacy-ledger-result.interface.ts +9 -0
  275. package/src/_modules/privacy-lifecycle/_models/privacy-ledger-settings.interface.ts +7 -0
  276. package/src/_modules/privacy-lifecycle/_models/privacy-legal-acceptance-input.interface.ts +10 -0
  277. package/src/_modules/privacy-lifecycle/_models/privacy-legal-acceptance-persistence-result.interface.ts +7 -0
  278. package/src/_modules/privacy-lifecycle/_models/privacy-legal-acceptance-result.interface.ts +7 -0
  279. package/src/_modules/privacy-lifecycle/_models/privacy-legal-acceptance-view.interface.ts +11 -0
  280. package/src/_modules/privacy-lifecycle/_models/privacy-legal-acceptance.interface.ts +13 -0
  281. package/src/_modules/privacy-lifecycle/_models/privacy-lifecycle-adapter.interface.ts +19 -0
  282. package/src/_modules/privacy-lifecycle/_models/privacy-lifecycle-settings.interface.ts +9 -0
  283. package/src/_modules/privacy-lifecycle/_models/privacy-request-create-result.interface.ts +7 -0
  284. package/src/_modules/privacy-lifecycle/_models/privacy-request-open.interface.ts +10 -0
  285. package/src/_modules/privacy-lifecycle/_models/privacy-request-persistence-create-result.interface.ts +7 -0
  286. package/src/_modules/privacy-lifecycle/_models/privacy-request-record.interface.ts +21 -0
  287. package/src/_modules/privacy-lifecycle/_models/privacy-request-result.interface.ts +8 -0
  288. package/src/_modules/privacy-lifecycle/_models/privacy-request-view.interface.ts +20 -0
  289. package/src/_modules/privacy-lifecycle/index.ts +40 -0
  290. package/src/_modules/privacy-lifecycle/privacy-ledger.control-service.spec.ts +206 -0
  291. package/src/_modules/privacy-lifecycle/privacy-ledger.control-service.ts +253 -0
  292. package/src/_modules/privacy-lifecycle/privacy-lifecycle.control-service.spec.ts +353 -0
  293. package/src/_modules/privacy-lifecycle/privacy-lifecycle.control-service.ts +586 -0
@@ -0,0 +1,376 @@
1
+ import {
2
+ createHash,
3
+ randomBytes,
4
+ randomUUID
5
+ } from 'crypto';
6
+
7
+ import { DyFM_Error } from '@futdevpro/fsm-dynamo';
8
+
9
+ import { DyNTS_global_settings } from '../../_collections/global-settings.const';
10
+ import { DyNTS_AccountRefreshTokenState_Type } from './_enums/account-refresh-token-state.type-enum';
11
+ import { DyNTS_AccountSessionState_Type } from './_enums/account-session-state.type-enum';
12
+ import {
13
+ DyNTS_AccountRefreshTokenRecord_Interface
14
+ } from './_models/account-refresh-token-record.interface';
15
+ import {
16
+ DyNTS_AccountSessionAdapter_Interface
17
+ } from './_models/account-session-adapter.interface';
18
+ import { DyNTS_AccountSessionRotate_Interface } from './_models/account-session-rotate.interface';
19
+ import { DyNTS_AccountSessionClaims_Interface } from './_models/account-session-claims.interface';
20
+ import { DyNTS_AccountSessionContext_Interface } from './_models/account-session-context.interface';
21
+ import { DyNTS_AccountSessionRecord_Interface } from './_models/account-session-record.interface';
22
+ import { DyNTS_AccountSessionSettings_Interface } from './_models/account-session-settings.interface';
23
+ import { DyNTS_AccountSessionTokenPair_Interface } from './_models/account-session-token-pair.interface';
24
+ import { DyNTS_AccountSessionView_Interface } from './_models/account-session-view.interface';
25
+
26
+ const DEFAULT_ACCESS_TTL_MS: number = 15 * 60 * 1000;
27
+ const DEFAULT_REFRESH_TTL_MS: number = 30 * 24 * 60 * 60 * 1000;
28
+ const DEFAULT_TOKEN_BYTES: number = 32;
29
+ const DEFAULT_MAX_REFRESH_ROTATIONS: number = 100;
30
+
31
+ interface DyNTS_NewSessionMaterial {
32
+ rawAccessToken: string;
33
+ rawRefreshToken: string;
34
+ session: DyNTS_AccountSessionRecord_Interface;
35
+ refreshToken: DyNTS_AccountRefreshTokenRecord_Interface;
36
+ }
37
+
38
+ /**
39
+ * Opaque, server-revocable account session families with one-time refresh rotation and replay detection.
40
+ */
41
+ export class DyNTS_AccountSession_ControlService {
42
+ private readonly adapter: DyNTS_AccountSessionAdapter_Interface;
43
+ private readonly accessTtlMs: number;
44
+ private readonly refreshTtlMs: number;
45
+ private readonly tokenBytes: number;
46
+ private readonly maxRefreshRotations: number;
47
+ private readonly clock: () => Date;
48
+
49
+ /** Creates a validated session service over an atomic persistence adapter. */
50
+ constructor(set: DyNTS_AccountSessionSettings_Interface) {
51
+ this.adapter = set.adapter;
52
+ this.accessTtlMs = set.accessTtlMs ?? DEFAULT_ACCESS_TTL_MS;
53
+ this.refreshTtlMs = set.refreshTtlMs ?? DEFAULT_REFRESH_TTL_MS;
54
+ this.tokenBytes = set.tokenBytes ?? DEFAULT_TOKEN_BYTES;
55
+ this.maxRefreshRotations = set.maxRefreshRotations ?? DEFAULT_MAX_REFRESH_ROTATIONS;
56
+ this.clock = set.clock ?? ((): Date => new Date());
57
+ this.validateSettings();
58
+ }
59
+
60
+ /** Atomically persists a new session family before returning its raw credentials. */
61
+ public async issueSession(
62
+ subjectId: string,
63
+ authorizationVersion: number,
64
+ context: DyNTS_AccountSessionContext_Interface
65
+ ): Promise<DyNTS_AccountSessionTokenPair_Interface> {
66
+ if (
67
+ !subjectId
68
+ || subjectId.length > 256
69
+ || !Number.isSafeInteger(authorizationVersion)
70
+ || authorizationVersion < 0
71
+ ) {
72
+ throw this.buildUnauthorized('SESSION_SUBJECT_MISSING');
73
+ }
74
+
75
+ this.validateContext(context);
76
+
77
+ const now: Date = this.clock();
78
+ const material: DyNTS_NewSessionMaterial = this.createMaterial({
79
+ subjectId: subjectId,
80
+ sessionId: randomUUID(),
81
+ familyId: randomUUID(),
82
+ generation: 0,
83
+ revision: 0,
84
+ authorizationVersion: authorizationVersion,
85
+ createdAt: now.toISOString(),
86
+ refreshExpiresAt: new Date(now.getTime() + this.refreshTtlMs).toISOString(),
87
+ materialCreatedAt: now.toISOString(),
88
+ context: context,
89
+ });
90
+
91
+ await this.adapter.createSession({
92
+ session: material.session,
93
+ refreshToken: material.refreshToken,
94
+ });
95
+
96
+ return this.toTokenPair(material);
97
+ }
98
+
99
+ /** Resolves an opaque access token through the server-side active-session record. */
100
+ public async authenticateAccessToken(
101
+ accessToken: string
102
+ ): Promise<DyNTS_AccountSessionClaims_Interface> {
103
+ if (!accessToken || accessToken.length > 512) {
104
+ throw this.buildUnauthorized('ACCESS_TOKEN_INVALID');
105
+ }
106
+
107
+ const now: Date = this.clock();
108
+ const session: DyNTS_AccountSessionRecord_Interface | null =
109
+ await this.adapter.findSessionByAccessTokenHash(this.hashToken(accessToken));
110
+
111
+ if (
112
+ session?.state !== DyNTS_AccountSessionState_Type.active
113
+ || session.accessTokenHash !== this.hashToken(accessToken)
114
+ || !this.isFutureDate(session.accessExpiresAt, now)
115
+ || !session.subjectId
116
+ || !session.sessionId
117
+ || !session.familyId
118
+ || !Number.isSafeInteger(session.authorizationVersion)
119
+ || session.authorizationVersion < 0
120
+ ) {
121
+ throw this.buildUnauthorized('ACCESS_TOKEN_INVALID');
122
+ }
123
+
124
+ return {
125
+ subjectId: session.subjectId,
126
+ sessionId: session.sessionId,
127
+ familyId: session.familyId,
128
+ authorizationVersion: session.authorizationVersion,
129
+ };
130
+ }
131
+
132
+ /** Rotates a one-time refresh token; replay revokes the complete token family. */
133
+ public async rotateRefreshToken(
134
+ refreshToken: string,
135
+ context: DyNTS_AccountSessionContext_Interface
136
+ ): Promise<DyNTS_AccountSessionTokenPair_Interface> {
137
+ if (!refreshToken || refreshToken.length > 512) {
138
+ throw this.buildUnauthorized('REFRESH_TOKEN_INVALID');
139
+ }
140
+
141
+ this.validateContext(context);
142
+ const now: Date = this.clock();
143
+ const tokenHash: string = this.hashToken(refreshToken);
144
+ const token: DyNTS_AccountRefreshTokenRecord_Interface | null =
145
+ await this.adapter.findRefreshTokenByHash(tokenHash);
146
+
147
+ if (!token) {
148
+ throw this.buildUnauthorized('REFRESH_TOKEN_INVALID');
149
+ }
150
+
151
+ if (token.state !== DyNTS_AccountRefreshTokenState_Type.active) {
152
+ await this.adapter.revokeFamily(token.familyId, now.toISOString(), 'refresh-token-reuse');
153
+
154
+ throw this.buildUnauthorized('REFRESH_TOKEN_REUSE');
155
+ }
156
+
157
+ const session: DyNTS_AccountSessionRecord_Interface | null =
158
+ await this.adapter.findSessionById(token.sessionId);
159
+
160
+ if (
161
+ session?.state !== DyNTS_AccountSessionState_Type.active
162
+ || session.familyId !== token.familyId
163
+ || session.subjectId !== token.subjectId
164
+ || session.generation !== token.generation
165
+ || token.tokenHash !== tokenHash
166
+ || !this.isFutureDate(token.expiresAt, now)
167
+ || !this.isFutureDate(session.refreshExpiresAt, now)
168
+ ) {
169
+ await this.adapter.revokeFamily(token.familyId, now.toISOString(), 'refresh-token-invalid-state');
170
+
171
+ throw this.buildUnauthorized('REFRESH_TOKEN_INVALID');
172
+ }
173
+
174
+ if (session.generation >= this.maxRefreshRotations) {
175
+ await this.adapter.revokeFamily(token.familyId, now.toISOString(), 'refresh-rotation-limit');
176
+
177
+ throw this.buildUnauthorized('REFRESH_ROTATION_LIMIT');
178
+ }
179
+
180
+ const material: DyNTS_NewSessionMaterial = this.createMaterial({
181
+ subjectId: session.subjectId,
182
+ sessionId: session.sessionId,
183
+ familyId: session.familyId,
184
+ generation: session.generation + 1,
185
+ revision: session.revision + 1,
186
+ authorizationVersion: session.authorizationVersion,
187
+ createdAt: session.createdAt,
188
+ refreshExpiresAt: session.refreshExpiresAt,
189
+ materialCreatedAt: now.toISOString(),
190
+ context: context,
191
+ });
192
+ const rotation: DyNTS_AccountSessionRotate_Interface = {
193
+ expectedSessionRevision: session.revision,
194
+ currentRefreshTokenHash: tokenHash,
195
+ usedAt: now.toISOString(),
196
+ replacementSession: material.session,
197
+ replacementRefreshToken: material.refreshToken,
198
+ };
199
+ const didRotate: boolean = await this.adapter.rotateSession(rotation);
200
+
201
+ if (!didRotate) {
202
+ const winner: DyNTS_AccountRefreshTokenRecord_Interface | null =
203
+ await this.adapter.findRefreshTokenByHash(tokenHash);
204
+
205
+ if (winner?.state === DyNTS_AccountRefreshTokenState_Type.used) {
206
+ await this.adapter.revokeFamily(token.familyId, now.toISOString(), 'refresh-token-reuse-race');
207
+
208
+ throw this.buildUnauthorized('REFRESH_TOKEN_REUSE');
209
+ }
210
+
211
+ throw this.buildUnauthorized('REFRESH_TOKEN_CONFLICT');
212
+ }
213
+
214
+ return this.toTokenPair(material);
215
+ }
216
+
217
+ /** Revokes one server-side session. */
218
+ public async revokeSession(sessionId: string, reasonCode: string): Promise<void> {
219
+ this.validateRevocation(sessionId, reasonCode);
220
+ await this.adapter.revokeSession(sessionId, this.clock().toISOString(), reasonCode);
221
+ }
222
+
223
+ /** Revokes every session belonging to one subject. */
224
+ public async revokeAllSubjectSessions(subjectId: string, reasonCode: string): Promise<void> {
225
+ this.validateRevocation(subjectId, reasonCode);
226
+ await this.adapter.revokeSubject(subjectId, this.clock().toISOString(), reasonCode);
227
+ }
228
+
229
+ /** Returns a user-safe session projection without token hashes. */
230
+ public async listSubjectSessions(subjectId: string): Promise<DyNTS_AccountSessionView_Interface[]> {
231
+ if (!subjectId || subjectId.length > 256) {
232
+ throw this.buildUnauthorized('SESSION_SUBJECT_MISSING');
233
+ }
234
+
235
+ const sessions: DyNTS_AccountSessionRecord_Interface[] =
236
+ await this.adapter.listSubjectSessions(subjectId);
237
+
238
+ return sessions.map((session: DyNTS_AccountSessionRecord_Interface): DyNTS_AccountSessionView_Interface => ({
239
+ sessionId: session.sessionId,
240
+ state: session.state,
241
+ createdAt: session.createdAt,
242
+ lastRotatedAt: session.lastRotatedAt,
243
+ accessExpiresAt: session.accessExpiresAt,
244
+ refreshExpiresAt: session.refreshExpiresAt,
245
+ context: { ...session.context },
246
+ }));
247
+ }
248
+
249
+ private createMaterial(set: {
250
+ subjectId: string;
251
+ sessionId: string;
252
+ familyId: string;
253
+ generation: number;
254
+ revision: number;
255
+ authorizationVersion: number;
256
+ createdAt: string;
257
+ refreshExpiresAt: string;
258
+ materialCreatedAt: string;
259
+ context: DyNTS_AccountSessionContext_Interface;
260
+ }): DyNTS_NewSessionMaterial {
261
+ const rawAccessToken: string = randomBytes(this.tokenBytes).toString('base64url');
262
+ const rawRefreshToken: string = randomBytes(this.tokenBytes).toString('base64url');
263
+ const materialCreatedAt: Date = new Date(set.materialCreatedAt);
264
+ const accessExpiresAt: string = new Date(materialCreatedAt.getTime() + this.accessTtlMs).toISOString();
265
+ const session: DyNTS_AccountSessionRecord_Interface = {
266
+ sessionId: set.sessionId,
267
+ familyId: set.familyId,
268
+ subjectId: set.subjectId,
269
+ accessTokenHash: this.hashToken(rawAccessToken),
270
+ accessExpiresAt: accessExpiresAt,
271
+ refreshExpiresAt: set.refreshExpiresAt,
272
+ state: DyNTS_AccountSessionState_Type.active,
273
+ generation: set.generation,
274
+ revision: set.revision,
275
+ authorizationVersion: set.authorizationVersion,
276
+ createdAt: set.createdAt,
277
+ lastRotatedAt: set.materialCreatedAt,
278
+ revokedAt: '',
279
+ revocationReason: '',
280
+ context: { ...set.context },
281
+ };
282
+ const refreshTokenRecord: DyNTS_AccountRefreshTokenRecord_Interface = {
283
+ tokenHash: this.hashToken(rawRefreshToken),
284
+ sessionId: set.sessionId,
285
+ familyId: set.familyId,
286
+ subjectId: set.subjectId,
287
+ generation: set.generation,
288
+ state: DyNTS_AccountRefreshTokenState_Type.active,
289
+ expiresAt: set.refreshExpiresAt,
290
+ usedAt: '',
291
+ };
292
+
293
+ return {
294
+ rawAccessToken: rawAccessToken,
295
+ rawRefreshToken: rawRefreshToken,
296
+ session: session,
297
+ refreshToken: refreshTokenRecord,
298
+ };
299
+ }
300
+
301
+ private toTokenPair(material: DyNTS_NewSessionMaterial): DyNTS_AccountSessionTokenPair_Interface {
302
+ return {
303
+ sessionId: material.session.sessionId,
304
+ accessToken: material.rawAccessToken,
305
+ refreshToken: material.rawRefreshToken,
306
+ accessExpiresAt: material.session.accessExpiresAt,
307
+ refreshExpiresAt: material.session.refreshExpiresAt,
308
+ };
309
+ }
310
+
311
+ private hashToken(token: string): string {
312
+ return createHash('sha256').update(token).digest('hex');
313
+ }
314
+
315
+ private validateSettings(): void {
316
+ if (
317
+ !this.adapter
318
+ || !Number.isSafeInteger(this.accessTtlMs)
319
+ || this.accessTtlMs < 1_000
320
+ || this.accessTtlMs > 24 * 60 * 60 * 1000
321
+ || !Number.isSafeInteger(this.refreshTtlMs)
322
+ || this.refreshTtlMs <= this.accessTtlMs
323
+ || this.refreshTtlMs > 366 * 24 * 60 * 60 * 1000
324
+ || !Number.isSafeInteger(this.tokenBytes)
325
+ || this.tokenBytes < 32
326
+ || this.tokenBytes > 128
327
+ || !Number.isSafeInteger(this.maxRefreshRotations)
328
+ || this.maxRefreshRotations < 1
329
+ || this.maxRefreshRotations > 10_000
330
+ ) {
331
+ throw new DyFM_Error({
332
+ status: 500,
333
+ errorCode: `${DyNTS_global_settings.systemShortCodeName}|ACCOUNT_SECURITY|SESSION_SETTINGS_INVALID`,
334
+ message: 'The account session settings are outside supported safe bounds.',
335
+ userMessage: 'The account security service is unavailable.',
336
+ issuerService: this.constructor.name,
337
+ });
338
+ }
339
+ }
340
+
341
+ private validateContext(context: DyNTS_AccountSessionContext_Interface): void {
342
+ if (
343
+ !context
344
+ || typeof context.deviceName !== 'string'
345
+ || typeof context.ipAddressHash !== 'string'
346
+ || typeof context.userAgentHash !== 'string'
347
+ || context.deviceName.length > 160
348
+ || context.ipAddressHash.length > 128
349
+ || context.userAgentHash.length > 128
350
+ ) {
351
+ throw this.buildUnauthorized('SESSION_CONTEXT_INVALID');
352
+ }
353
+ }
354
+
355
+ private validateRevocation(targetId: string, reasonCode: string): void {
356
+ if (!targetId || !reasonCode || reasonCode.length > 128) {
357
+ throw this.buildUnauthorized('SESSION_REVOCATION_INVALID');
358
+ }
359
+ }
360
+
361
+ private isFutureDate(value: string, now: Date): boolean {
362
+ const timestamp: number = new Date(value).getTime();
363
+
364
+ return Number.isFinite(timestamp) && timestamp > now.getTime();
365
+ }
366
+
367
+ private buildUnauthorized(errorCode: string): DyFM_Error {
368
+ return new DyFM_Error({
369
+ status: 401,
370
+ errorCode: `${DyNTS_global_settings.systemShortCodeName}|ACCOUNT_SECURITY|${errorCode}`,
371
+ message: 'Opaque account credential validation failed.',
372
+ userMessage: 'The session is invalid or has expired. Please sign in again.',
373
+ issuerService: this.constructor.name,
374
+ });
375
+ }
376
+ }
@@ -0,0 +1,31 @@
1
+ export { DyNTS_AccountPassword_ControlService } from './account-password.control-service';
2
+ export { DyNTS_AccountChallenge_ControlService } from './account-challenge.control-service';
3
+ export { DyNTS_AccountSession_ControlService } from './account-session.control-service';
4
+ export { DyNTS_AccountChallengePurpose_Type } from './_enums/account-challenge-purpose.type-enum';
5
+ export { DyNTS_AccountRefreshTokenState_Type } from './_enums/account-refresh-token-state.type-enum';
6
+ export { DyNTS_AccountSessionState_Type } from './_enums/account-session-state.type-enum';
7
+ export {
8
+ DyNTS_AccountRefreshTokenRecord_Interface
9
+ } from './_models/account-refresh-token-record.interface';
10
+ export { DyNTS_AccountChallengeAdapter_Interface } from './_models/account-challenge-adapter.interface';
11
+ export { DyNTS_AccountChallengeIssued_Interface } from './_models/account-challenge-issued.interface';
12
+ export { DyNTS_AccountChallengeRecord_Interface } from './_models/account-challenge-record.interface';
13
+ export { DyNTS_AccountChallengeResult_Interface } from './_models/account-challenge-result.interface';
14
+ export { DyNTS_AccountChallengeSettings_Interface } from './_models/account-challenge-settings.interface';
15
+ export {
16
+ DyNTS_AccountSessionAdapter_Interface
17
+ } from './_models/account-session-adapter.interface';
18
+ export { DyNTS_AccountSessionCreate_Interface } from './_models/account-session-create.interface';
19
+ export { DyNTS_AccountSessionRotate_Interface } from './_models/account-session-rotate.interface';
20
+ export { DyNTS_AccountSessionClaims_Interface } from './_models/account-session-claims.interface';
21
+ export { DyNTS_AccountSessionContext_Interface } from './_models/account-session-context.interface';
22
+ export { DyNTS_AccountSessionRecord_Interface } from './_models/account-session-record.interface';
23
+ export { DyNTS_AccountSessionSettings_Interface } from './_models/account-session-settings.interface';
24
+ export { DyNTS_AccountSessionTokenPair_Interface } from './_models/account-session-token-pair.interface';
25
+ export { DyNTS_AccountSessionView_Interface } from './_models/account-session-view.interface';
26
+ export {
27
+ DyNTS_AccountPasswordPolicy_Interface
28
+ } from './_models/account-password-policy.interface';
29
+ export {
30
+ DyNTS_AccountPasswordVerification_Interface
31
+ } from './_models/account-password-verification.interface';
@@ -0,0 +1,5 @@
1
+ /** Append-only consent decisions. Withdrawal is a new event, never mutation of history. */
2
+ export enum DyNTS_PrivacyConsentDecision_Type {
3
+ granted = 'granted',
4
+ withdrawn = 'withdrawn',
5
+ }
@@ -0,0 +1,10 @@
1
+ /** Contributor action selected during privacy-request planning. */
2
+ export enum DyNTS_PrivacyContributorAction_Type {
3
+ export = 'export',
4
+ delete = 'delete',
5
+ anonymize = 'anonymize',
6
+ rectify = 'rectify',
7
+ restrict = 'restrict',
8
+ retainWithBasis = 'retain-with-basis',
9
+ noData = 'no-data',
10
+ }
@@ -0,0 +1,7 @@
1
+ /** Durable result state for one contributor execution. */
2
+ export enum DyNTS_PrivacyContributorOutcome_Type {
3
+ succeeded = 'succeeded',
4
+ retainedWithBasis = 'retained-with-basis',
5
+ noData = 'no-data',
6
+ failed = 'failed',
7
+ }
@@ -0,0 +1,15 @@
1
+ /** Persisted lifecycle states for a GDPR data-subject request. */
2
+ export enum DyNTS_PrivacyRequestState_Type {
3
+ received = 'received',
4
+ identityVerified = 'identity-verified',
5
+ scoped = 'scoped',
6
+ planned = 'planned',
7
+ executing = 'executing',
8
+ verifying = 'verifying',
9
+ completed = 'completed',
10
+ partiallyCompleted = 'partially-completed',
11
+ rejectedWithReason = 'rejected-with-reason',
12
+ cancelled = 'cancelled',
13
+ failedRetryable = 'failed-retryable',
14
+ failedTerminal = 'failed-terminal',
15
+ }
@@ -0,0 +1,9 @@
1
+ /** GDPR data-subject request categories supported by the shared lifecycle. */
2
+ export enum DyNTS_PrivacyRequest_Type {
3
+ access = 'access',
4
+ export = 'export',
5
+ erasure = 'erasure',
6
+ rectification = 'rectification',
7
+ restriction = 'restriction',
8
+ objection = 'objection',
9
+ }
@@ -0,0 +1,12 @@
1
+ import { DyNTS_PrivacyConsentDecision_Type } from '../_enums/privacy-consent-decision.type-enum';
2
+
3
+ /** Input for one purpose-specific consent grant or withdrawal event. */
4
+ export interface DyNTS_PrivacyConsentInput_Interface {
5
+ subjectId: string;
6
+ organizationId: string;
7
+ purposeCode: string;
8
+ policyVersion: string;
9
+ decision: DyNTS_PrivacyConsentDecision_Type;
10
+ sourceCode: string;
11
+ idempotencyKey: string;
12
+ }
@@ -0,0 +1,7 @@
1
+ import { DyNTS_PrivacyConsentRecord_Interface } from './privacy-consent-record.interface';
2
+
3
+ /** Adapter-only append result retaining consent-event persistence metadata. */
4
+ export interface DyNTS_PrivacyConsentPersistenceResult_Interface {
5
+ consent: DyNTS_PrivacyConsentRecord_Interface;
6
+ created: boolean;
7
+ }
@@ -0,0 +1,15 @@
1
+ import { DyNTS_PrivacyConsentDecision_Type } from '../_enums/privacy-consent-decision.type-enum';
2
+
3
+ /** Immutable purpose- and policy-version-specific consent event. */
4
+ export interface DyNTS_PrivacyConsentRecord_Interface {
5
+ consentId: string;
6
+ subjectId: string;
7
+ organizationId: string;
8
+ purposeCode: string;
9
+ policyVersion: string;
10
+ decision: DyNTS_PrivacyConsentDecision_Type;
11
+ sourceCode: string;
12
+ idempotencyHash: string;
13
+ requestFingerprint: string;
14
+ occurredAt: string;
15
+ }
@@ -0,0 +1,7 @@
1
+ import { DyNTS_PrivacyConsentView_Interface } from './privacy-consent-view.interface';
2
+
3
+ /** Atomic append-or-replay result for one consent event. */
4
+ export interface DyNTS_PrivacyConsentResult_Interface {
5
+ consent: DyNTS_PrivacyConsentView_Interface;
6
+ created: boolean;
7
+ }
@@ -0,0 +1,13 @@
1
+ import { DyNTS_PrivacyConsentDecision_Type } from '../_enums/privacy-consent-decision.type-enum';
2
+
3
+ /** User-safe consent event without persistence idempotency metadata. */
4
+ export interface DyNTS_PrivacyConsentView_Interface {
5
+ consentId: string;
6
+ subjectId: string;
7
+ organizationId: string;
8
+ purposeCode: string;
9
+ policyVersion: string;
10
+ decision: DyNTS_PrivacyConsentDecision_Type;
11
+ sourceCode: string;
12
+ occurredAt: string;
13
+ }
@@ -0,0 +1,9 @@
1
+ import { DyNTS_PrivacyRequest_Type } from '../_enums/privacy-request.type-enum';
2
+
3
+ /** Minimal execution context passed to a product-owned privacy contributor. */
4
+ export interface DyNTS_PrivacyContributorContext_Interface {
5
+ requestId: string;
6
+ subjectId: string;
7
+ organizationId: string;
8
+ type: DyNTS_PrivacyRequest_Type;
9
+ }
@@ -0,0 +1,14 @@
1
+ import { DyNTS_PrivacyContributorAction_Type } from '../_enums/privacy-contributor-action.type-enum';
2
+ import { DyNTS_PrivacyContributorOutcome_Type } from '../_enums/privacy-contributor-outcome.type-enum';
3
+
4
+ /** Durable content-free result of one idempotent contributor execution. */
5
+ export interface DyNTS_PrivacyContributorOutcome_Interface {
6
+ contributorId: string;
7
+ action: DyNTS_PrivacyContributorAction_Type;
8
+ outcome: DyNTS_PrivacyContributorOutcome_Type;
9
+ retentionBasisCode: string;
10
+ artifactChecksum: string;
11
+ processedRecordCount: number;
12
+ errorCode: string;
13
+ completedAt: string;
14
+ }
@@ -0,0 +1,8 @@
1
+ import { DyNTS_PrivacyContributorAction_Type } from '../_enums/privacy-contributor-action.type-enum';
2
+
3
+ /** Non-sensitive, auditable action plan returned by a data-domain contributor. */
4
+ export interface DyNTS_PrivacyContributorPlan_Interface {
5
+ contributorId: string;
6
+ action: DyNTS_PrivacyContributorAction_Type;
7
+ retentionBasisCode: string;
8
+ }
@@ -0,0 +1,17 @@
1
+ import { DyNTS_PrivacyContributorContext_Interface } from './privacy-contributor-context.interface';
2
+ import { DyNTS_PrivacyContributorOutcome_Interface } from './privacy-contributor-outcome.interface';
3
+ import { DyNTS_PrivacyContributorPlan_Interface } from './privacy-contributor-plan.interface';
4
+
5
+ /** Product-domain adapter whose execute operation must be idempotent for a request and contributor pair. */
6
+ export interface DyNTS_PrivacyContributor_Interface {
7
+ readonly contributorId: string;
8
+ plan(context: DyNTS_PrivacyContributorContext_Interface): Promise<DyNTS_PrivacyContributorPlan_Interface>;
9
+ execute(
10
+ context: DyNTS_PrivacyContributorContext_Interface,
11
+ plan: DyNTS_PrivacyContributorPlan_Interface
12
+ ): Promise<DyNTS_PrivacyContributorOutcome_Interface>;
13
+ verify(
14
+ context: DyNTS_PrivacyContributorContext_Interface,
15
+ outcome: DyNTS_PrivacyContributorOutcome_Interface
16
+ ): Promise<boolean>;
17
+ }
@@ -0,0 +1,21 @@
1
+ import { DyNTS_PrivacyConsentRecord_Interface } from './privacy-consent-record.interface';
2
+ import {
3
+ DyNTS_PrivacyConsentPersistenceResult_Interface
4
+ } from './privacy-consent-persistence-result.interface';
5
+ import { DyNTS_PrivacyLegalAcceptance_Interface } from './privacy-legal-acceptance.interface';
6
+ import {
7
+ DyNTS_PrivacyLegalAcceptancePersistenceResult_Interface
8
+ } from './privacy-legal-acceptance-persistence-result.interface';
9
+
10
+ /** Append-only persistence contract for legal acceptance and consent history. */
11
+ export interface DyNTS_PrivacyLedgerAdapter_Interface {
12
+ appendLegalAcceptance(
13
+ acceptance: DyNTS_PrivacyLegalAcceptance_Interface
14
+ ): Promise<DyNTS_PrivacyLegalAcceptancePersistenceResult_Interface>;
15
+ appendConsent(
16
+ record: DyNTS_PrivacyConsentRecord_Interface
17
+ ): Promise<DyNTS_PrivacyConsentPersistenceResult_Interface>;
18
+ listLegalAcceptances(subjectId: string, organizationId: string): Promise<DyNTS_PrivacyLegalAcceptance_Interface[]>;
19
+ /** Returns consent events in durable append order, oldest first. */
20
+ listConsentHistory(subjectId: string, organizationId: string): Promise<DyNTS_PrivacyConsentRecord_Interface[]>;
21
+ }
@@ -0,0 +1,9 @@
1
+ import { DyNTS_PrivacyConsentView_Interface } from './privacy-consent-view.interface';
2
+ import { DyNTS_PrivacyLegalAcceptanceView_Interface } from './privacy-legal-acceptance-view.interface';
3
+
4
+ /** Subject-owned privacy-center ledger with immutable legal and consent history. */
5
+ export interface DyNTS_PrivacyLedgerResult_Interface {
6
+ legalAcceptances: DyNTS_PrivacyLegalAcceptanceView_Interface[];
7
+ consentHistory: DyNTS_PrivacyConsentView_Interface[];
8
+ currentConsents: DyNTS_PrivacyConsentView_Interface[];
9
+ }
@@ -0,0 +1,7 @@
1
+ import { DyNTS_PrivacyLedgerAdapter_Interface } from './privacy-ledger-adapter.interface';
2
+
3
+ /** Dependencies and deterministic time source for the privacy ledger. */
4
+ export interface DyNTS_PrivacyLedgerSettings_Interface {
5
+ adapter: DyNTS_PrivacyLedgerAdapter_Interface;
6
+ clock?: () => Date;
7
+ }
@@ -0,0 +1,10 @@
1
+ /** Input for accepting an exact legal document without carrying document content. */
2
+ export interface DyNTS_PrivacyLegalAcceptanceInput_Interface {
3
+ subjectId: string;
4
+ organizationId: string;
5
+ documentType: string;
6
+ documentVersion: string;
7
+ documentChecksum: string;
8
+ sourceCode: string;
9
+ idempotencyKey: string;
10
+ }
@@ -0,0 +1,7 @@
1
+ import { DyNTS_PrivacyLegalAcceptance_Interface } from './privacy-legal-acceptance.interface';
2
+
3
+ /** Adapter-only append result retaining legal-event persistence metadata. */
4
+ export interface DyNTS_PrivacyLegalAcceptancePersistenceResult_Interface {
5
+ acceptance: DyNTS_PrivacyLegalAcceptance_Interface;
6
+ created: boolean;
7
+ }
@@ -0,0 +1,7 @@
1
+ import { DyNTS_PrivacyLegalAcceptanceView_Interface } from './privacy-legal-acceptance-view.interface';
2
+
3
+ /** Atomic append-or-replay result for one legal acceptance. */
4
+ export interface DyNTS_PrivacyLegalAcceptanceResult_Interface {
5
+ acceptance: DyNTS_PrivacyLegalAcceptanceView_Interface;
6
+ created: boolean;
7
+ }
@@ -0,0 +1,11 @@
1
+ /** User-safe immutable legal acceptance without persistence idempotency metadata. */
2
+ export interface DyNTS_PrivacyLegalAcceptanceView_Interface {
3
+ acceptanceId: string;
4
+ subjectId: string;
5
+ organizationId: string;
6
+ documentType: string;
7
+ documentVersion: string;
8
+ documentChecksum: string;
9
+ sourceCode: string;
10
+ acceptedAt: string;
11
+ }