@bifold/core 2.10.1 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (312) hide show
  1. package/lib/commonjs/animated-components.js +2 -0
  2. package/lib/commonjs/animated-components.js.map +1 -1
  3. package/lib/commonjs/components/animated/ButtonLoading.js +6 -32
  4. package/lib/commonjs/components/animated/ButtonLoading.js.map +1 -1
  5. package/lib/commonjs/components/animated/LoadingSpinner.js +44 -0
  6. package/lib/commonjs/components/animated/LoadingSpinner.js.map +1 -0
  7. package/lib/commonjs/components/inputs/PINInput.js +15 -8
  8. package/lib/commonjs/components/inputs/PINInput.js.map +1 -1
  9. package/lib/commonjs/components/listItems/NotificationListItem.js +19 -11
  10. package/lib/commonjs/components/listItems/NotificationListItem.js.map +1 -1
  11. package/lib/commonjs/components/misc/CredentialCard.js +3 -1
  12. package/lib/commonjs/components/misc/CredentialCard.js.map +1 -1
  13. package/lib/commonjs/components/misc/CredentialCard10.js +13 -5
  14. package/lib/commonjs/components/misc/CredentialCard10.js.map +1 -1
  15. package/lib/commonjs/components/misc/CredentialCard11.js +25 -22
  16. package/lib/commonjs/components/misc/CredentialCard11.js.map +1 -1
  17. package/lib/commonjs/components/modals/ConfirmPINModal.js +4 -3
  18. package/lib/commonjs/components/modals/ConfirmPINModal.js.map +1 -1
  19. package/lib/commonjs/components/views/CredentialDetailPrimaryHeader.js +8 -7
  20. package/lib/commonjs/components/views/CredentialDetailPrimaryHeader.js.map +1 -1
  21. package/lib/commonjs/constants.js +1 -0
  22. package/lib/commonjs/constants.js.map +1 -1
  23. package/lib/commonjs/container-api.js +3 -1
  24. package/lib/commonjs/container-api.js.map +1 -1
  25. package/lib/commonjs/container-impl.js +16 -0
  26. package/lib/commonjs/container-impl.js.map +1 -1
  27. package/lib/commonjs/hooks/notifications.js +4 -2
  28. package/lib/commonjs/hooks/notifications.js.map +1 -1
  29. package/lib/commonjs/hooks/useBifoldAgentSetup.js +5 -3
  30. package/lib/commonjs/hooks/useBifoldAgentSetup.js.map +1 -1
  31. package/lib/commonjs/index.js +16 -0
  32. package/lib/commonjs/index.js.map +1 -1
  33. package/lib/commonjs/localization/en/en.json +18 -1
  34. package/lib/commonjs/localization/fr/fr.json +17 -1
  35. package/lib/commonjs/localization/pt-br/pt-br.json +17 -1
  36. package/lib/commonjs/modules/openid/components/OpenIDCredentialCard.js +41 -1
  37. package/lib/commonjs/modules/openid/components/OpenIDCredentialCard.js.map +1 -1
  38. package/lib/commonjs/modules/openid/components/OpenIDUnsatisfiedProofRequest.js +71 -0
  39. package/lib/commonjs/modules/openid/components/OpenIDUnsatisfiedProofRequest.js.map +1 -0
  40. package/lib/commonjs/modules/openid/context/OpenIDCredentialRecordProvider.js +34 -111
  41. package/lib/commonjs/modules/openid/context/OpenIDCredentialRecordProvider.js.map +1 -1
  42. package/lib/commonjs/modules/openid/hooks/openid.js +38 -6
  43. package/lib/commonjs/modules/openid/hooks/openid.js.map +1 -1
  44. package/lib/commonjs/modules/openid/hooks/useAcceptReplacement.js +82 -0
  45. package/lib/commonjs/modules/openid/hooks/useAcceptReplacement.js.map +1 -0
  46. package/lib/commonjs/modules/openid/hooks/useCredentialErrorsFromRegistry.js +60 -0
  47. package/lib/commonjs/modules/openid/hooks/useCredentialErrorsFromRegistry.js.map +1 -0
  48. package/lib/commonjs/modules/openid/hooks/useDeclineReplacement.js +84 -0
  49. package/lib/commonjs/modules/openid/hooks/useDeclineReplacement.js.map +1 -0
  50. package/lib/commonjs/modules/openid/hooks/useOpenIdReplacementNavigation.js +55 -0
  51. package/lib/commonjs/modules/openid/hooks/useOpenIdReplacementNavigation.js.map +1 -0
  52. package/lib/commonjs/modules/openid/hooks/useReplacementNotifications.js +82 -0
  53. package/lib/commonjs/modules/openid/hooks/useReplacementNotifications.js.map +1 -0
  54. package/lib/commonjs/modules/openid/metadata.js +60 -1
  55. package/lib/commonjs/modules/openid/metadata.js.map +1 -1
  56. package/lib/commonjs/modules/openid/notification.js +42 -0
  57. package/lib/commonjs/modules/openid/notification.js.map +1 -0
  58. package/lib/commonjs/modules/openid/offerResolve.js +6 -0
  59. package/lib/commonjs/modules/openid/offerResolve.js.map +1 -1
  60. package/lib/commonjs/modules/openid/refresh/reIssuance.js +95 -0
  61. package/lib/commonjs/modules/openid/refresh/reIssuance.js.map +1 -0
  62. package/lib/commonjs/modules/openid/refresh/refreshOrchestrator.js +265 -0
  63. package/lib/commonjs/modules/openid/refresh/refreshOrchestrator.js.map +1 -0
  64. package/lib/commonjs/modules/openid/refresh/refreshToken.js +78 -0
  65. package/lib/commonjs/modules/openid/refresh/refreshToken.js.map +1 -0
  66. package/lib/commonjs/modules/openid/refresh/registery.js +143 -0
  67. package/lib/commonjs/modules/openid/refresh/registery.js.map +1 -0
  68. package/lib/commonjs/modules/openid/refresh/types.js +17 -0
  69. package/lib/commonjs/modules/openid/refresh/types.js.map +1 -0
  70. package/lib/commonjs/modules/openid/refresh/verifyCredentialStatus.js +34 -0
  71. package/lib/commonjs/modules/openid/refresh/verifyCredentialStatus.js.map +1 -0
  72. package/lib/commonjs/modules/openid/screens/OpenIDCredentialOffer.js +39 -2
  73. package/lib/commonjs/modules/openid/screens/OpenIDCredentialOffer.js.map +1 -1
  74. package/lib/commonjs/modules/openid/screens/OpenIDProofPresentation.js +25 -7
  75. package/lib/commonjs/modules/openid/screens/OpenIDProofPresentation.js.map +1 -1
  76. package/lib/commonjs/modules/openid/utils/utils.js +66 -0
  77. package/lib/commonjs/modules/openid/utils/utils.js.map +1 -1
  78. package/lib/commonjs/screens/CredentialDetails.js +28 -6
  79. package/lib/commonjs/screens/CredentialDetails.js.map +1 -1
  80. package/lib/commonjs/screens/CredentialOffer.js +6 -9
  81. package/lib/commonjs/screens/CredentialOffer.js.map +1 -1
  82. package/lib/commonjs/screens/CredentialOfferAccept.js +18 -2
  83. package/lib/commonjs/screens/CredentialOfferAccept.js.map +1 -1
  84. package/lib/commonjs/screens/Developer.js +26 -0
  85. package/lib/commonjs/screens/Developer.js.map +1 -1
  86. package/lib/commonjs/screens/Home.js +39 -1
  87. package/lib/commonjs/screens/Home.js.map +1 -1
  88. package/lib/commonjs/screens/ListCredentials.js +2 -2
  89. package/lib/commonjs/screens/ListCredentials.js.map +1 -1
  90. package/lib/commonjs/screens/PINCreate.js +5 -1
  91. package/lib/commonjs/screens/PINCreate.js.map +1 -1
  92. package/lib/commonjs/screens/PINEnter.js +5 -3
  93. package/lib/commonjs/screens/PINEnter.js.map +1 -1
  94. package/lib/commonjs/screens/PINVerify.js +12 -1
  95. package/lib/commonjs/screens/PINVerify.js.map +1 -1
  96. package/lib/commonjs/screens/ProofChangeCredential.js +3 -3
  97. package/lib/commonjs/screens/ProofChangeCredential.js.map +1 -1
  98. package/lib/commonjs/screens/ProofRequest.js +4 -4
  99. package/lib/commonjs/screens/ProofRequest.js.map +1 -1
  100. package/lib/commonjs/services/AgentBridge.js +90 -0
  101. package/lib/commonjs/services/AgentBridge.js.map +1 -0
  102. package/lib/commonjs/types/credentials.js +9 -0
  103. package/lib/commonjs/types/credentials.js.map +1 -1
  104. package/lib/commonjs/utils/agent.js +1 -1
  105. package/lib/commonjs/utils/agent.js.map +1 -1
  106. package/lib/commonjs/utils/cred-def.js +50 -43
  107. package/lib/commonjs/utils/cred-def.js.map +1 -1
  108. package/lib/commonjs/utils/credential.js +217 -1
  109. package/lib/commonjs/utils/credential.js.map +1 -1
  110. package/lib/commonjs/utils/helpers.js +83 -22
  111. package/lib/commonjs/utils/helpers.js.map +1 -1
  112. package/lib/module/animated-components.js +2 -0
  113. package/lib/module/animated-components.js.map +1 -1
  114. package/lib/module/components/animated/ButtonLoading.js +6 -31
  115. package/lib/module/components/animated/ButtonLoading.js.map +1 -1
  116. package/lib/module/components/animated/LoadingSpinner.js +36 -0
  117. package/lib/module/components/animated/LoadingSpinner.js.map +1 -0
  118. package/lib/module/components/inputs/PINInput.js +16 -9
  119. package/lib/module/components/inputs/PINInput.js.map +1 -1
  120. package/lib/module/components/listItems/NotificationListItem.js +19 -11
  121. package/lib/module/components/listItems/NotificationListItem.js.map +1 -1
  122. package/lib/module/components/misc/CredentialCard.js +3 -1
  123. package/lib/module/components/misc/CredentialCard.js.map +1 -1
  124. package/lib/module/components/misc/CredentialCard10.js +14 -6
  125. package/lib/module/components/misc/CredentialCard10.js.map +1 -1
  126. package/lib/module/components/misc/CredentialCard11.js +17 -14
  127. package/lib/module/components/misc/CredentialCard11.js.map +1 -1
  128. package/lib/module/components/modals/ConfirmPINModal.js +4 -3
  129. package/lib/module/components/modals/ConfirmPINModal.js.map +1 -1
  130. package/lib/module/components/views/CredentialDetailPrimaryHeader.js +9 -8
  131. package/lib/module/components/views/CredentialDetailPrimaryHeader.js.map +1 -1
  132. package/lib/module/constants.js +1 -0
  133. package/lib/module/constants.js.map +1 -1
  134. package/lib/module/container-api.js +3 -1
  135. package/lib/module/container-api.js.map +1 -1
  136. package/lib/module/container-impl.js +16 -0
  137. package/lib/module/container-impl.js.map +1 -1
  138. package/lib/module/hooks/notifications.js +4 -2
  139. package/lib/module/hooks/notifications.js.map +1 -1
  140. package/lib/module/hooks/useBifoldAgentSetup.js +5 -3
  141. package/lib/module/hooks/useBifoldAgentSetup.js.map +1 -1
  142. package/lib/module/index.js +3 -1
  143. package/lib/module/index.js.map +1 -1
  144. package/lib/module/localization/en/en.json +18 -1
  145. package/lib/module/localization/fr/fr.json +17 -1
  146. package/lib/module/localization/pt-br/pt-br.json +17 -1
  147. package/lib/module/modules/openid/components/OpenIDCredentialCard.js +41 -1
  148. package/lib/module/modules/openid/components/OpenIDCredentialCard.js.map +1 -1
  149. package/lib/module/modules/openid/components/OpenIDUnsatisfiedProofRequest.js +63 -0
  150. package/lib/module/modules/openid/components/OpenIDUnsatisfiedProofRequest.js.map +1 -0
  151. package/lib/module/modules/openid/context/OpenIDCredentialRecordProvider.js +34 -111
  152. package/lib/module/modules/openid/context/OpenIDCredentialRecordProvider.js.map +1 -1
  153. package/lib/module/modules/openid/hooks/openid.js +38 -5
  154. package/lib/module/modules/openid/hooks/openid.js.map +1 -1
  155. package/lib/module/modules/openid/hooks/useAcceptReplacement.js +76 -0
  156. package/lib/module/modules/openid/hooks/useAcceptReplacement.js.map +1 -0
  157. package/lib/module/modules/openid/hooks/useCredentialErrorsFromRegistry.js +54 -0
  158. package/lib/module/modules/openid/hooks/useCredentialErrorsFromRegistry.js.map +1 -0
  159. package/lib/module/modules/openid/hooks/useDeclineReplacement.js +77 -0
  160. package/lib/module/modules/openid/hooks/useDeclineReplacement.js.map +1 -0
  161. package/lib/module/modules/openid/hooks/useOpenIdReplacementNavigation.js +47 -0
  162. package/lib/module/modules/openid/hooks/useOpenIdReplacementNavigation.js.map +1 -0
  163. package/lib/module/modules/openid/hooks/useReplacementNotifications.js +75 -0
  164. package/lib/module/modules/openid/hooks/useReplacementNotifications.js.map +1 -0
  165. package/lib/module/modules/openid/metadata.js +52 -1
  166. package/lib/module/modules/openid/metadata.js.map +1 -1
  167. package/lib/module/modules/openid/notification.js +38 -0
  168. package/lib/module/modules/openid/notification.js.map +1 -0
  169. package/lib/module/modules/openid/offerResolve.js +7 -1
  170. package/lib/module/modules/openid/offerResolve.js.map +1 -1
  171. package/lib/module/modules/openid/refresh/reIssuance.js +89 -0
  172. package/lib/module/modules/openid/refresh/reIssuance.js.map +1 -0
  173. package/lib/module/modules/openid/refresh/refreshOrchestrator.js +257 -0
  174. package/lib/module/modules/openid/refresh/refreshOrchestrator.js.map +1 -0
  175. package/lib/module/modules/openid/refresh/refreshToken.js +72 -0
  176. package/lib/module/modules/openid/refresh/refreshToken.js.map +1 -0
  177. package/lib/module/modules/openid/refresh/registery.js +135 -0
  178. package/lib/module/modules/openid/refresh/registery.js.map +1 -0
  179. package/lib/module/modules/openid/refresh/types.js +11 -0
  180. package/lib/module/modules/openid/refresh/types.js.map +1 -0
  181. package/lib/module/modules/openid/refresh/verifyCredentialStatus.js +28 -0
  182. package/lib/module/modules/openid/refresh/verifyCredentialStatus.js.map +1 -0
  183. package/lib/module/modules/openid/screens/OpenIDCredentialOffer.js +39 -2
  184. package/lib/module/modules/openid/screens/OpenIDCredentialOffer.js.map +1 -1
  185. package/lib/module/modules/openid/screens/OpenIDProofPresentation.js +25 -7
  186. package/lib/module/modules/openid/screens/OpenIDProofPresentation.js.map +1 -1
  187. package/lib/module/modules/openid/utils/utils.js +64 -1
  188. package/lib/module/modules/openid/utils/utils.js.map +1 -1
  189. package/lib/module/screens/CredentialDetails.js +29 -7
  190. package/lib/module/screens/CredentialDetails.js.map +1 -1
  191. package/lib/module/screens/CredentialOffer.js +7 -10
  192. package/lib/module/screens/CredentialOffer.js.map +1 -1
  193. package/lib/module/screens/CredentialOfferAccept.js +19 -3
  194. package/lib/module/screens/CredentialOfferAccept.js.map +1 -1
  195. package/lib/module/screens/Developer.js +27 -1
  196. package/lib/module/screens/Developer.js.map +1 -1
  197. package/lib/module/screens/Home.js +41 -3
  198. package/lib/module/screens/Home.js.map +1 -1
  199. package/lib/module/screens/ListCredentials.js +1 -1
  200. package/lib/module/screens/ListCredentials.js.map +1 -1
  201. package/lib/module/screens/PINCreate.js +5 -1
  202. package/lib/module/screens/PINCreate.js.map +1 -1
  203. package/lib/module/screens/PINEnter.js +5 -3
  204. package/lib/module/screens/PINEnter.js.map +1 -1
  205. package/lib/module/screens/PINVerify.js +12 -1
  206. package/lib/module/screens/PINVerify.js.map +1 -1
  207. package/lib/module/screens/ProofChangeCredential.js +1 -1
  208. package/lib/module/screens/ProofChangeCredential.js.map +1 -1
  209. package/lib/module/screens/ProofRequest.js +1 -1
  210. package/lib/module/screens/ProofRequest.js.map +1 -1
  211. package/lib/module/services/AgentBridge.js +83 -0
  212. package/lib/module/services/AgentBridge.js.map +1 -0
  213. package/lib/module/types/credentials.js +8 -1
  214. package/lib/module/types/credentials.js.map +1 -1
  215. package/lib/module/utils/agent.js +2 -2
  216. package/lib/module/utils/agent.js.map +1 -1
  217. package/lib/module/utils/cred-def.js +46 -43
  218. package/lib/module/utils/cred-def.js.map +1 -1
  219. package/lib/module/utils/credential.js +210 -0
  220. package/lib/module/utils/credential.js.map +1 -1
  221. package/lib/module/utils/helpers.js +80 -22
  222. package/lib/module/utils/helpers.js.map +1 -1
  223. package/lib/typescript/src/animated-components.d.ts +3 -2
  224. package/lib/typescript/src/animated-components.d.ts.map +1 -1
  225. package/lib/typescript/src/components/animated/ButtonLoading.d.ts +1 -4
  226. package/lib/typescript/src/components/animated/ButtonLoading.d.ts.map +1 -1
  227. package/lib/typescript/src/components/animated/LoadingSpinner.d.ts +8 -0
  228. package/lib/typescript/src/components/animated/LoadingSpinner.d.ts.map +1 -0
  229. package/lib/typescript/src/components/inputs/PINInput.d.ts.map +1 -1
  230. package/lib/typescript/src/components/listItems/NotificationListItem.d.ts.map +1 -1
  231. package/lib/typescript/src/components/misc/CredentialCard.d.ts +1 -2
  232. package/lib/typescript/src/components/misc/CredentialCard.d.ts.map +1 -1
  233. package/lib/typescript/src/components/misc/CredentialCard10.d.ts.map +1 -1
  234. package/lib/typescript/src/components/misc/CredentialCard11.d.ts +1 -5
  235. package/lib/typescript/src/components/misc/CredentialCard11.d.ts.map +1 -1
  236. package/lib/typescript/src/components/views/CredentialDetailPrimaryHeader.d.ts.map +1 -1
  237. package/lib/typescript/src/constants.d.ts +2 -1
  238. package/lib/typescript/src/constants.d.ts.map +1 -1
  239. package/lib/typescript/src/container-api.d.ts +8 -0
  240. package/lib/typescript/src/container-api.d.ts.map +1 -1
  241. package/lib/typescript/src/container-impl.d.ts +2 -0
  242. package/lib/typescript/src/container-impl.d.ts.map +1 -1
  243. package/lib/typescript/src/hooks/notifications.d.ts +2 -1
  244. package/lib/typescript/src/hooks/notifications.d.ts.map +1 -1
  245. package/lib/typescript/src/hooks/useBifoldAgentSetup.d.ts.map +1 -1
  246. package/lib/typescript/src/index.d.ts +4 -1
  247. package/lib/typescript/src/index.d.ts.map +1 -1
  248. package/lib/typescript/src/modules/openid/components/OpenIDCredentialCard.d.ts.map +1 -1
  249. package/lib/typescript/src/modules/openid/components/OpenIDUnsatisfiedProofRequest.d.ts +9 -0
  250. package/lib/typescript/src/modules/openid/components/OpenIDUnsatisfiedProofRequest.d.ts.map +1 -0
  251. package/lib/typescript/src/modules/openid/context/OpenIDCredentialRecordProvider.d.ts +1 -2
  252. package/lib/typescript/src/modules/openid/context/OpenIDCredentialRecordProvider.d.ts.map +1 -1
  253. package/lib/typescript/src/modules/openid/hooks/openid.d.ts.map +1 -1
  254. package/lib/typescript/src/modules/openid/hooks/useAcceptReplacement.d.ts +11 -0
  255. package/lib/typescript/src/modules/openid/hooks/useAcceptReplacement.d.ts.map +1 -0
  256. package/lib/typescript/src/modules/openid/hooks/useCredentialErrorsFromRegistry.d.ts +9 -0
  257. package/lib/typescript/src/modules/openid/hooks/useCredentialErrorsFromRegistry.d.ts.map +1 -0
  258. package/lib/typescript/src/modules/openid/hooks/useDeclineReplacement.d.ts +16 -0
  259. package/lib/typescript/src/modules/openid/hooks/useDeclineReplacement.d.ts.map +1 -0
  260. package/lib/typescript/src/modules/openid/hooks/useOpenIdReplacementNavigation.d.ts +8 -0
  261. package/lib/typescript/src/modules/openid/hooks/useOpenIdReplacementNavigation.d.ts.map +1 -0
  262. package/lib/typescript/src/modules/openid/hooks/useReplacementNotifications.d.ts +6 -0
  263. package/lib/typescript/src/modules/openid/hooks/useReplacementNotifications.d.ts.map +1 -0
  264. package/lib/typescript/src/modules/openid/metadata.d.ts +27 -2
  265. package/lib/typescript/src/modules/openid/metadata.d.ts.map +1 -1
  266. package/lib/typescript/src/modules/openid/notification.d.ts +16 -0
  267. package/lib/typescript/src/modules/openid/notification.d.ts.map +1 -0
  268. package/lib/typescript/src/modules/openid/offerResolve.d.ts.map +1 -1
  269. package/lib/typescript/src/modules/openid/refresh/reIssuance.d.ts +19 -0
  270. package/lib/typescript/src/modules/openid/refresh/reIssuance.d.ts.map +1 -0
  271. package/lib/typescript/src/modules/openid/refresh/refreshOrchestrator.d.ts +25 -0
  272. package/lib/typescript/src/modules/openid/refresh/refreshOrchestrator.d.ts.map +1 -0
  273. package/lib/typescript/src/modules/openid/refresh/refreshToken.d.ts +9 -0
  274. package/lib/typescript/src/modules/openid/refresh/refreshToken.d.ts.map +1 -0
  275. package/lib/typescript/src/modules/openid/refresh/registery.d.ts +55 -0
  276. package/lib/typescript/src/modules/openid/refresh/registery.d.ts.map +1 -0
  277. package/lib/typescript/src/modules/openid/refresh/types.d.ts +59 -0
  278. package/lib/typescript/src/modules/openid/refresh/types.d.ts.map +1 -0
  279. package/lib/typescript/src/modules/openid/refresh/verifyCredentialStatus.d.ts +11 -0
  280. package/lib/typescript/src/modules/openid/refresh/verifyCredentialStatus.d.ts.map +1 -0
  281. package/lib/typescript/src/modules/openid/screens/OpenIDCredentialOffer.d.ts.map +1 -1
  282. package/lib/typescript/src/modules/openid/screens/OpenIDProofPresentation.d.ts.map +1 -1
  283. package/lib/typescript/src/modules/openid/utils/utils.d.ts +4 -0
  284. package/lib/typescript/src/modules/openid/utils/utils.d.ts.map +1 -1
  285. package/lib/typescript/src/screens/CredentialDetails.d.ts.map +1 -1
  286. package/lib/typescript/src/screens/CredentialOffer.d.ts.map +1 -1
  287. package/lib/typescript/src/screens/CredentialOfferAccept.d.ts.map +1 -1
  288. package/lib/typescript/src/screens/Developer.d.ts.map +1 -1
  289. package/lib/typescript/src/screens/Home.d.ts.map +1 -1
  290. package/lib/typescript/src/screens/ListCredentials.d.ts.map +1 -1
  291. package/lib/typescript/src/screens/PINCreate.d.ts.map +1 -1
  292. package/lib/typescript/src/screens/PINVerify.d.ts.map +1 -1
  293. package/lib/typescript/src/services/AgentBridge.d.ts +31 -0
  294. package/lib/typescript/src/services/AgentBridge.d.ts.map +1 -0
  295. package/lib/typescript/src/types/credentials.d.ts +5 -0
  296. package/lib/typescript/src/types/credentials.d.ts.map +1 -1
  297. package/lib/typescript/src/types/notification.d.ts +4 -0
  298. package/lib/typescript/src/types/notification.d.ts.map +1 -1
  299. package/lib/typescript/src/utils/agent.d.ts.map +1 -1
  300. package/lib/typescript/src/utils/cred-def.d.ts +8 -3
  301. package/lib/typescript/src/utils/cred-def.d.ts.map +1 -1
  302. package/lib/typescript/src/utils/credential.d.ts +36 -0
  303. package/lib/typescript/src/utils/credential.d.ts.map +1 -1
  304. package/lib/typescript/src/utils/helpers.d.ts +5 -1
  305. package/lib/typescript/src/utils/helpers.d.ts.map +1 -1
  306. package/package.json +10 -4
  307. package/lib/commonjs/modules/openid/refresh/refreshMetadata.js +0 -25
  308. package/lib/commonjs/modules/openid/refresh/refreshMetadata.js.map +0 -1
  309. package/lib/module/modules/openid/refresh/refreshMetadata.js +0 -18
  310. package/lib/module/modules/openid/refresh/refreshMetadata.js.map +0 -1
  311. package/lib/typescript/src/modules/openid/refresh/refreshMetadata.d.ts +0 -20
  312. package/lib/typescript/src/modules/openid/refresh/refreshMetadata.d.ts.map +0 -1
@@ -0,0 +1,257 @@
1
+ // modules/openid/refresh/RefreshOrchestrator.ts
2
+ import { ClaimFormat, SdJwtVcRecord, W3cCredentialRecord } from '@credo-ts/core';
3
+ import { refreshAccessToken } from './refreshToken';
4
+ import { reissueCredentialWithAccessToken } from './reIssuance';
5
+ import { RefreshStatus } from './types';
6
+ import { credentialRegistry } from './registery';
7
+ import { verifyCredentialStatus } from './verifyCredentialStatus';
8
+ import { markOpenIDCredentialStatus } from '../metadata';
9
+ const defaultToLite = rec => {
10
+ var _rec$createdAt;
11
+ return {
12
+ id: rec.id,
13
+ // best-effort: SdJwt/W3C both expose claimFormat via tags in many setups.
14
+ // Fallback to JwtVc if unknown so UI has *some* value.
15
+ format: rec instanceof W3cCredentialRecord && ClaimFormat.JwtVc || rec instanceof SdJwtVcRecord && ClaimFormat.SdJwtVc || ClaimFormat.JwtVc,
16
+ createdAt: (_rec$createdAt = rec.createdAt) === null || _rec$createdAt === void 0 ? void 0 : _rec$createdAt.toISOString(),
17
+ issuer: undefined
18
+ };
19
+ };
20
+ export class RefreshOrchestrator {
21
+ intervalOn = false; // interval enabled?
22
+ runningOnce = false; // a run is in progress?
23
+
24
+ recentlyIssued = new Map();
25
+ constructor(logger, bridge, opts) {
26
+ this.logger = logger;
27
+ this.opts = {
28
+ intervalMs: 15 * 60 * 1000,
29
+ autoStart: true,
30
+ onError: e => this.logger.error(String(e)),
31
+ listRecords: async () => [],
32
+ toLite: defaultToLite,
33
+ ...(opts ?? {})
34
+ };
35
+ logger.info(`🔧 [RefreshOrchestrator] initialized -> ${JSON.stringify({
36
+ intervalMs: this.opts.intervalMs,
37
+ autoStart: this.opts.autoStart
38
+ })}`);
39
+ bridge.onReady(agent => {
40
+ this.agent = agent;
41
+ this.logger.info('🪝 [RefreshOrchestrator] Agent ready');
42
+ if (this.opts.autoStart && this.opts.intervalMs) this.start();
43
+ }, true);
44
+ }
45
+ configure(next) {
46
+ const prev = {
47
+ intervalOn: this.intervalOn,
48
+ intervalMs: this.opts.intervalMs ?? null,
49
+ autoStart: this.opts.autoStart ?? true,
50
+ agentReady: !!this.agent
51
+ };
52
+
53
+ // merge
54
+ this.opts = {
55
+ ...this.opts,
56
+ ...next
57
+ };
58
+ this.logger.info(`🔧 [RefreshOrchestrator] configure -> ${JSON.stringify({
59
+ intervalMs: this.opts.intervalMs,
60
+ autoStart: this.opts.autoStart
61
+ })}`);
62
+ const nowIntervalMs = this.opts.intervalMs ?? null;
63
+ const nowAutoStart = this.opts.autoStart ?? true;
64
+
65
+ // Case A: timer is running and intervalMs changed → restart
66
+ if (prev.intervalOn && prev.intervalMs !== nowIntervalMs) {
67
+ this.stop();
68
+ if (nowIntervalMs) this.start();
69
+ return;
70
+ }
71
+
72
+ // Case B: timer is running but user disabled intervals
73
+ if (prev.intervalOn && nowIntervalMs === null) {
74
+ this.stop();
75
+ return;
76
+ }
77
+
78
+ // Case C: timer is NOT running, but user enabled intervals
79
+ // Start iff: we have a positive interval, and either autoStart is true
80
+ // or the caller intends to enable interval operation via configure.
81
+ if (!prev.intervalOn && nowIntervalMs && nowAutoStart) {
82
+ // If agent isn't ready yet, defer; onReady() will auto-start.
83
+ if (this.agent) this.start();
84
+ // else do nothing — the constructor's bridge.onReady() will call start()
85
+ return;
86
+ }
87
+
88
+ // Case D: autoStart toggled from false→true with an interval set, and timer isn't running
89
+ if (!prev.intervalOn && !prev.autoStart && nowAutoStart && nowIntervalMs) {
90
+ if (this.agent) this.start();
91
+ // else defer to onReady()
92
+ return;
93
+ }
94
+
95
+ // Otherwise: no timer state change needed.
96
+ }
97
+ isRunning() {
98
+ return this.runningOnce;
99
+ }
100
+ start() {
101
+ if (this.intervalOn || !this.opts.intervalMs) return;
102
+ this.logger.info('⏱️ [RefreshOrchestrator] start interval');
103
+ this.intervalOn = true;
104
+ this.timer = setInterval(() => {
105
+ // fire-and-forget; guard against overlap
106
+ void this.runOnce('interval');
107
+ }, this.opts.intervalMs);
108
+ }
109
+ stop() {
110
+ if (!this.intervalOn) return;
111
+ this.logger.info('⏹️ [RefreshOrchestrator] stop interval');
112
+ clearInterval(this.timer);
113
+ this.timer = undefined;
114
+ this.intervalOn = false;
115
+ }
116
+ async runOnce(reason = 'manual') {
117
+ var _this$agent;
118
+ if (this.runningOnce) {
119
+ this.logger.warn('⚠️ [RefreshOrchestrator] runOnce skipped: already running');
120
+ return;
121
+ }
122
+ if (!this.agent || !((_this$agent = this.agent) !== null && _this$agent !== void 0 && _this$agent.isInitialized)) {
123
+ this.logger.warn('⚠️ [RefreshOrchestrator] runOnce skipped: agent not ready');
124
+ return;
125
+ }
126
+ this.runningOnce = true;
127
+ this.logger.info(`🔁 [RefreshOrchestrator] runOnce (${reason})`);
128
+ try {
129
+ const records = await this.opts.listRecords();
130
+ this.logger.info(`📦 [Refresh] found ${records.length} credential records`);
131
+ for (const rec of records) {
132
+ // don’t block whole batch if one fails
133
+ try {
134
+ await this.refreshRecord(rec);
135
+ } catch (e) {
136
+ var _this$opts$onError, _this$opts;
137
+ this.logger.error(`💥 [Refresh] record ${rec.id} failed: ${String(e)}`);
138
+ (_this$opts$onError = (_this$opts = this.opts).onError) === null || _this$opts$onError === void 0 || _this$opts$onError.call(_this$opts, e);
139
+ }
140
+ }
141
+ this.logger.info('✅ [Refresh] run completed');
142
+ } catch (e) {
143
+ var _this$opts$onError2, _this$opts2;
144
+ this.logger.error(`💥 [Refresh] global error: ${String(e)}`);
145
+ (_this$opts$onError2 = (_this$opts2 = this.opts).onError) === null || _this$opts$onError2 === void 0 || _this$opts$onError2.call(_this$opts2, e);
146
+ } finally {
147
+ this.runningOnce = false;
148
+ }
149
+ }
150
+ setIntervalMs(intervalMs) {
151
+ this.configure({
152
+ intervalMs
153
+ });
154
+ }
155
+ resolveFull(id) {
156
+ return this.recentlyIssued.get(id);
157
+ }
158
+
159
+ // ---- internals ----
160
+
161
+ async refreshRecord(rec) {
162
+ const {
163
+ shouldSkip,
164
+ markRefreshing,
165
+ clearRefreshing,
166
+ clearExpired,
167
+ markExpiredWithReplacement,
168
+ blockAsFailed,
169
+ blockAsSucceeded,
170
+ upsert
171
+ } = credentialRegistry.getState();
172
+ const id = rec.id;
173
+ if (!this.agent) {
174
+ this.logger.error(`💥 [Refresh] Agent not initialized, cannot refresh credential ${id}`);
175
+ return;
176
+ }
177
+
178
+ // 0) fast exit if this cred is already handled or in-flight
179
+ if (shouldSkip(id)) {
180
+ this.logger.info(`⏭️ [Refresh] skip credential ${id} (blocked/expired/in-flight)`);
181
+ return;
182
+ }
183
+
184
+ // 1) ensure a lite copy exists in registry (handy for UI/debug)
185
+ upsert(this.opts.toLite(rec));
186
+
187
+ // 2) mark in-flight
188
+ markRefreshing(id);
189
+ this.logger.info(`🧭 [Refresh] check credential ${id}`);
190
+ try {
191
+ // 3) verification
192
+ const isValid = await verifyCredentialStatus(rec, this.logger);
193
+ if (isValid) {
194
+ this.logger.info(`✅ [Refresh] valid → ${id}`);
195
+ // If it was previously expired for any reason, clear that and block as succeeded
196
+ clearExpired(id);
197
+ //We can block if isValid but for now we will keep checking it again every time
198
+ // blockAsSucceeded(id)
199
+ return;
200
+ }
201
+
202
+ // Invalid case:
203
+
204
+ await markOpenIDCredentialStatus({
205
+ credential: rec,
206
+ status: RefreshStatus.Invalid,
207
+ agentContext: this.agent.context
208
+ });
209
+
210
+ // 4) needs refresh → get access token
211
+ this.logger.info(`♻️ [Refresh] invalid, attempting re-issue → ${id}`);
212
+ const token = await refreshAccessToken({
213
+ logger: this.logger,
214
+ cred: rec,
215
+ agentContext: this.agent.context
216
+ });
217
+ if (!token) {
218
+ const msg = `no refresh token available`;
219
+ this.logger.warn(`⚠️ [Refresh] ${msg} for ${id}`);
220
+ blockAsFailed(id, msg);
221
+ return;
222
+ }
223
+
224
+ // 5) re-issue
225
+ const newRecord = await reissueCredentialWithAccessToken({
226
+ agent: this.agent,
227
+ logger: this.logger,
228
+ record: rec,
229
+ tokenResponse: token
230
+ });
231
+ if (newRecord) {
232
+ this.logger.info(`💾 [Refresh] new credential → ${newRecord.id}`);
233
+ // Queue a replacement for UI/notifications and block the old one as succeeded
234
+ markExpiredWithReplacement(id, this.opts.toLite(newRecord));
235
+ blockAsSucceeded(id);
236
+ this.recentlyIssued.set(newRecord.id, newRecord);
237
+ } else {
238
+ const msg = `re-issue returned no record`;
239
+ this.logger.warn(`⚠️ [Refresh] ${msg} for ${id}`);
240
+ blockAsFailed(id, msg);
241
+ await markOpenIDCredentialStatus({
242
+ credential: rec,
243
+ status: RefreshStatus.Invalid,
244
+ agentContext: this.agent.context
245
+ });
246
+ }
247
+ } catch (e) {
248
+ const err = String(e);
249
+ this.logger.error(`💥 [Refresh] error on ${id}: ${err}`);
250
+ blockAsFailed(id, err);
251
+ } finally {
252
+ // 6) clear in-flight marker
253
+ clearRefreshing(id);
254
+ }
255
+ }
256
+ }
257
+ //# sourceMappingURL=refreshOrchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ClaimFormat","SdJwtVcRecord","W3cCredentialRecord","refreshAccessToken","reissueCredentialWithAccessToken","RefreshStatus","credentialRegistry","verifyCredentialStatus","markOpenIDCredentialStatus","defaultToLite","rec","_rec$createdAt","id","format","JwtVc","SdJwtVc","createdAt","toISOString","issuer","undefined","RefreshOrchestrator","intervalOn","runningOnce","recentlyIssued","Map","constructor","logger","bridge","opts","intervalMs","autoStart","onError","e","error","String","listRecords","toLite","info","JSON","stringify","onReady","agent","start","configure","next","prev","agentReady","nowIntervalMs","nowAutoStart","stop","isRunning","timer","setInterval","runOnce","clearInterval","reason","_this$agent","warn","isInitialized","records","length","refreshRecord","_this$opts$onError","_this$opts","call","_this$opts$onError2","_this$opts2","setIntervalMs","resolveFull","get","shouldSkip","markRefreshing","clearRefreshing","clearExpired","markExpiredWithReplacement","blockAsFailed","blockAsSucceeded","upsert","getState","isValid","credential","status","Invalid","agentContext","context","token","cred","msg","newRecord","record","tokenResponse","set","err"],"sourceRoot":"../../../../../src","sources":["modules/openid/refresh/refreshOrchestrator.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,72 @@
1
+ import { getRefreshCredentialMetadata, persistCredentialRecord, setRefreshCredentialMetadata } from '../metadata';
2
+ export async function refreshAccessToken({
3
+ logger,
4
+ cred,
5
+ agentContext
6
+ }) {
7
+ logger.info(`[refreshAccessToken] Checking new credential for record: ${cred.id}`);
8
+ // return _mockTokenRefreshResponse
9
+ const refreshMetaData = getRefreshCredentialMetadata(cred);
10
+ if (!refreshMetaData) {
11
+ logger.error(`[refreshAccessToken] No refresh metadata found for credential: ${cred.id}`);
12
+ return;
13
+ }
14
+ logger.info(`[refreshAccessToken] Found refresh metadata for credential: ${cred.id}`);
15
+ const {
16
+ refreshToken,
17
+ authServer
18
+ } = refreshMetaData;
19
+ try {
20
+ if (!authServer) {
21
+ throw new Error('No authorization server found in the credential offer metadata');
22
+ }
23
+ logger.info(`[refreshAccessToken] Found auth server for credential: ${cred.id}: ${authServer}`);
24
+
25
+ // Build token endpoint: <AS>/token?force=false
26
+ // React-Native-safe URL build
27
+ const tokenUrl = (authServer.endsWith('/') ? authServer.slice(0, -1) : authServer) + '/token?force=false';
28
+ // const tokenUrl = new URL('token', authServer)
29
+ // tokenUrl.searchParams.set('force', 'false')
30
+
31
+ logger.info(`[refreshAccessToken] Refreshing access token at URL: ${tokenUrl} for credential: ${cred.id}`);
32
+ const body = new URLSearchParams({
33
+ grant_type: 'refresh_token',
34
+ refresh_token: refreshToken,
35
+ // these are accepted by some ASs that share the same endpoint with pre-auth:
36
+ pre_authorized_code: '',
37
+ pre_authorized_code_alt: '',
38
+ user_pin: ''
39
+ });
40
+ const res = await fetch(tokenUrl.toString(), {
41
+ method: 'POST',
42
+ headers: {
43
+ accept: 'application/json',
44
+ 'Content-Type': 'application/x-www-form-urlencoded'
45
+ },
46
+ body: body.toString()
47
+ });
48
+ logger.info(`[refreshAccessToken] Response status: ${JSON.stringify(res)}`);
49
+ if (!res.ok) {
50
+ const errText = await res.text();
51
+ throw new Error(`Refresh failed ${res.status}: ${errText}`);
52
+ }
53
+ const data = await res.json();
54
+ logger.info(`[refreshAccessToken] New access token acquired: ${JSON.stringify(data)}`);
55
+
56
+ // If refresh token rotated, persist it
57
+ if (data.refresh_token && data.refresh_token !== refreshToken) {
58
+ logger.info(`[refreshAccessToken] Refresh token rotated; saving new one`);
59
+ setRefreshCredentialMetadata(cred, {
60
+ ...refreshMetaData,
61
+ authServer: authServer,
62
+ refreshToken: data.refresh_token
63
+ });
64
+ await persistCredentialRecord(agentContext, cred);
65
+ }
66
+ return data;
67
+ } catch (error) {
68
+ logger.error(`[refreshAccessToken] Error getting new token: ${error}`);
69
+ throw error;
70
+ }
71
+ }
72
+ //# sourceMappingURL=refreshToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getRefreshCredentialMetadata","persistCredentialRecord","setRefreshCredentialMetadata","refreshAccessToken","logger","cred","agentContext","info","id","refreshMetaData","error","refreshToken","authServer","Error","tokenUrl","endsWith","slice","body","URLSearchParams","grant_type","refresh_token","pre_authorized_code","pre_authorized_code_alt","user_pin","res","fetch","toString","method","headers","accept","JSON","stringify","ok","errText","text","status","data","json"],"sourceRoot":"../../../../../src","sources":["modules/openid/refresh/refreshToken.ts"],"mappings":"AAGA,SAASA,4BAA4B,EAAEC,uBAAuB,EAAEC,4BAA4B,QAAQ,aAAa;AAEjH,OAAO,eAAeC,kBAAkBA,CAAC;EACvCC,MAAM;EACNC,IAAI;EACJC;AAKF,CAAC,EAAwC;EACvCF,MAAM,CAACG,IAAI,CAAC,4DAA4DF,IAAI,CAACG,EAAE,EAAE,CAAC;EAClF;EACA,MAAMC,eAAe,GAAGT,4BAA4B,CAACK,IAAI,CAAC;EAC1D,IAAI,CAACI,eAAe,EAAE;IACpBL,MAAM,CAACM,KAAK,CAAC,kEAAkEL,IAAI,CAACG,EAAE,EAAE,CAAC;IACzF;EACF;EAEAJ,MAAM,CAACG,IAAI,CAAC,+DAA+DF,IAAI,CAACG,EAAE,EAAE,CAAC;EACrF,MAAM;IAAEG,YAAY;IAAEC;EAAW,CAAC,GAAGH,eAAe;EAEpD,IAAI;IACF,IAAI,CAACG,UAAU,EAAE;MACf,MAAM,IAAIC,KAAK,CAAC,gEAAgE,CAAC;IACnF;IAEAT,MAAM,CAACG,IAAI,CAAC,0DAA0DF,IAAI,CAACG,EAAE,KAAKI,UAAU,EAAE,CAAC;;IAE/F;IACA;IACA,MAAME,QAAQ,GAAG,CAACF,UAAU,CAACG,QAAQ,CAAC,GAAG,CAAC,GAAGH,UAAU,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAGJ,UAAU,IAAI,oBAAoB;IACzG;IACA;;IAEAR,MAAM,CAACG,IAAI,CAAC,wDAAwDO,QAAQ,oBAAoBT,IAAI,CAACG,EAAE,EAAE,CAAC;IAE1G,MAAMS,IAAI,GAAG,IAAIC,eAAe,CAAC;MAC/BC,UAAU,EAAE,eAAe;MAC3BC,aAAa,EAAET,YAAY;MAC3B;MACAU,mBAAmB,EAAE,EAAE;MACvBC,uBAAuB,EAAE,EAAE;MAC3BC,QAAQ,EAAE;IACZ,CAAC,CAAC;IAEF,MAAMC,GAAG,GAAG,MAAMC,KAAK,CAACX,QAAQ,CAACY,QAAQ,CAAC,CAAC,EAAE;MAC3CC,MAAM,EAAE,MAAM;MACdC,OAAO,EAAE;QACPC,MAAM,EAAE,kBAAkB;QAC1B,cAAc,EAAE;MAClB,CAAC;MACDZ,IAAI,EAAEA,IAAI,CAACS,QAAQ,CAAC;IACtB,CAAC,CAAC;IAEFtB,MAAM,CAACG,IAAI,CAAC,yCAAyCuB,IAAI,CAACC,SAAS,CAACP,GAAG,CAAC,EAAE,CAAC;IAE3E,IAAI,CAACA,GAAG,CAACQ,EAAE,EAAE;MACX,MAAMC,OAAO,GAAG,MAAMT,GAAG,CAACU,IAAI,CAAC,CAAC;MAChC,MAAM,IAAIrB,KAAK,CAAC,kBAAkBW,GAAG,CAACW,MAAM,KAAKF,OAAO,EAAE,CAAC;IAC7D;IAEA,MAAMG,IAAqB,GAAG,MAAMZ,GAAG,CAACa,IAAI,CAAC,CAAC;IAC9CjC,MAAM,CAACG,IAAI,CAAC,mDAAmDuB,IAAI,CAACC,SAAS,CAACK,IAAI,CAAC,EAAE,CAAC;;IAEtF;IACA,IAAIA,IAAI,CAAChB,aAAa,IAAIgB,IAAI,CAAChB,aAAa,KAAKT,YAAY,EAAE;MAC7DP,MAAM,CAACG,IAAI,CAAC,4DAA4D,CAAC;MACzEL,4BAA4B,CAACG,IAAI,EAAE;QACjC,GAAGI,eAAe;QAClBG,UAAU,EAAEA,UAAU;QACtBD,YAAY,EAAEyB,IAAI,CAAChB;MACrB,CAAC,CAAC;MAEF,MAAMnB,uBAAuB,CAACK,YAAY,EAAED,IAAI,CAAC;IACnD;IAEA,OAAO+B,IAAI;EACb,CAAC,CAAC,OAAO1B,KAAK,EAAE;IACdN,MAAM,CAACM,KAAK,CAAC,iDAAiDA,KAAK,EAAE,CAAC;IACtE,MAAMA,KAAK;EACb;AACF","ignoreList":[]}
@@ -0,0 +1,135 @@
1
+ import { createStore } from 'zustand/vanilla';
2
+
3
+ /** Permanent (until unblocked) blocks so the orchestrator won’t retry this cred again this session */
4
+
5
+ export const credentialRegistry = createStore((set, get) => ({
6
+ byId: {},
7
+ expired: [],
8
+ replacements: {},
9
+ refreshing: {},
10
+ blocked: {},
11
+ lastSweepAt: undefined,
12
+ upsert: cred => set(s => ({
13
+ byId: {
14
+ ...s.byId,
15
+ [cred.id]: cred
16
+ }
17
+ })),
18
+ markRefreshing: id => set(s => ({
19
+ refreshing: {
20
+ ...s.refreshing,
21
+ [id]: true
22
+ }
23
+ })),
24
+ clearRefreshing: id => set(s => {
25
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
26
+ const {
27
+ [id]: _drop,
28
+ ...rest
29
+ } = s.refreshing;
30
+ return {
31
+ refreshing: rest
32
+ };
33
+ }),
34
+ markExpiredWithReplacement: (oldId, replacement) => set(s => ({
35
+ expired: s.expired.includes(oldId) ? s.expired : [...s.expired, oldId],
36
+ replacements: {
37
+ ...s.replacements,
38
+ [oldId]: replacement
39
+ }
40
+ })),
41
+ acceptReplacement: oldId => set(s => {
42
+ const repl = s.replacements[oldId];
43
+ if (!repl) return s;
44
+ const byId = {
45
+ ...s.byId
46
+ };
47
+ delete byId[oldId];
48
+ byId[repl.id] = repl;
49
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
50
+ const {
51
+ [oldId]: _drop,
52
+ ...restRepl
53
+ } = s.replacements;
54
+ return {
55
+ byId,
56
+ replacements: restRepl,
57
+ expired: s.expired.filter(x => x !== oldId),
58
+ // Once accepted, you can optionally block the oldId as succeeded:
59
+ blocked: {
60
+ ...s.blocked,
61
+ [oldId]: {
62
+ reason: 'succeeded',
63
+ at: new Date().toISOString()
64
+ }
65
+ }
66
+ };
67
+ }),
68
+ clearExpired: id => set(s => ({
69
+ expired: s.expired.filter(x => x !== id)
70
+ })),
71
+ blockAsSucceeded: id => set(s => ({
72
+ blocked: {
73
+ ...s.blocked,
74
+ [id]: {
75
+ reason: 'succeeded',
76
+ at: new Date().toISOString()
77
+ }
78
+ }
79
+ })),
80
+ blockAsFailed: (id, error) => set(s => ({
81
+ blocked: {
82
+ ...s.blocked,
83
+ [id]: {
84
+ reason: 'failed',
85
+ at: new Date().toISOString(),
86
+ error
87
+ }
88
+ }
89
+ })),
90
+ unblock: id => set(s => {
91
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
92
+ const {
93
+ [id]: _drop,
94
+ ...rest
95
+ } = s.blocked;
96
+ return {
97
+ blocked: rest
98
+ };
99
+ }),
100
+ shouldSkip: id => {
101
+ const s = get();
102
+ if (s.refreshing[id]) return true; // in-progress
103
+ if (s.expired.includes(id)) return true; // replacement already queued
104
+ if (s.blocked[id]) return true; // previously succeeded/failed
105
+ return false;
106
+ },
107
+ setLastSweep: iso => set({
108
+ lastSweepAt: iso
109
+ }),
110
+ reset: () => set({
111
+ byId: {},
112
+ expired: [],
113
+ replacements: {},
114
+ refreshing: {},
115
+ blocked: {},
116
+ lastSweepAt: undefined
117
+ })
118
+ }));
119
+
120
+ // Non-React helpers for workers/services
121
+ export const readRegistry = () => credentialRegistry.getState();
122
+ export const mutateRegistry = updater => credentialRegistry.setState(s => {
123
+ updater(s);
124
+ return s;
125
+ });
126
+ export const selectOldIdByReplacementId = replacementId => {
127
+ const {
128
+ replacements
129
+ } = credentialRegistry.getState();
130
+ for (const [oldId, repl] of Object.entries(replacements)) {
131
+ if (repl.id === replacementId) return oldId;
132
+ }
133
+ return undefined;
134
+ };
135
+ //# sourceMappingURL=registery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createStore","credentialRegistry","set","get","byId","expired","replacements","refreshing","blocked","lastSweepAt","undefined","upsert","cred","s","id","markRefreshing","clearRefreshing","_drop","rest","markExpiredWithReplacement","oldId","replacement","includes","acceptReplacement","repl","restRepl","filter","x","reason","at","Date","toISOString","clearExpired","blockAsSucceeded","blockAsFailed","error","unblock","shouldSkip","setLastSweep","iso","reset","readRegistry","getState","mutateRegistry","updater","setState","selectOldIdByReplacementId","replacementId","Object","entries"],"sourceRoot":"../../../../../src","sources":["modules/openid/refresh/registery.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,11 @@
1
+ export let RefreshStatus = /*#__PURE__*/function (RefreshStatus) {
2
+ RefreshStatus["Valid"] = "valid";
3
+ RefreshStatus["Invalid"] = "invalid";
4
+ RefreshStatus["Error"] = "error";
5
+ return RefreshStatus;
6
+ }({});
7
+ export let OpenIDCustomNotificationType = /*#__PURE__*/function (OpenIDCustomNotificationType) {
8
+ OpenIDCustomNotificationType["CredentialReplacementAvailable"] = "CustomNotificationOpenIDCredential";
9
+ return OpenIDCustomNotificationType;
10
+ }({});
11
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["RefreshStatus","OpenIDCustomNotificationType"],"sourceRoot":"../../../../../src","sources":["modules/openid/refresh/types.ts"],"mappings":"AAmBA,WAAYA,aAAa,0BAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;AAoDzB,WAAYC,4BAA4B,0BAA5BA,4BAA4B;EAA5BA,4BAA4B;EAAA,OAA5BA,4BAA4B;AAAA","ignoreList":[]}
@@ -0,0 +1,28 @@
1
+ // modules/openid/refresh/verifyCredentialStatus.ts
2
+
3
+ import { getListFromStatusListJWT, getStatusListFromJWT } from '@sd-jwt/jwt-status-list';
4
+ /**
5
+ * Verifies credential status for Sd-JWT credentials using status lists.
6
+ * Non–Sd-JWT credentials (W3C jwt_vc_json without status list, or mdoc) are treated as valid here.
7
+ * Returns true if valid; false if revoked/invalid or on error.
8
+ */
9
+ export async function verifyCredentialStatus(rec, logger) {
10
+ try {
11
+ // Only Sd-JWT creds have compactSdJwtVc in this codebase
12
+ if (!('compactSdJwtVc' in rec)) return true;
13
+ logger === null || logger === void 0 || logger.info(`[Verifier] Verifying credential status for Sd-JWT credential: ${rec.id}`);
14
+ const ref = getStatusListFromJWT(rec.compactSdJwtVc);
15
+ const res = await fetch(ref.uri);
16
+ if (!res.ok) throw new Error(`HTTP ${res.status}`);
17
+ const jwt = await res.text();
18
+ const list = getListFromStatusListJWT(jwt);
19
+ const ok = list.getStatus(ref.idx) === 0;
20
+ logger === null || logger === void 0 || logger.info(`${ok ? '✅' : '❌'} [Verifier] ${rec.id} → ${ok ? 'valid' : 'revoked'}`);
21
+ return ok;
22
+ } catch (e) {
23
+ var _logger$error;
24
+ logger === null || logger === void 0 || (_logger$error = logger.error) === null || _logger$error === void 0 || _logger$error.call(logger, `💥 [Verifier] ${'id' in rec ? rec.id : 'unknown'} verify failed: ${String(e)}`);
25
+ return false;
26
+ }
27
+ }
28
+ //# sourceMappingURL=verifyCredentialStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getListFromStatusListJWT","getStatusListFromJWT","verifyCredentialStatus","rec","logger","info","id","ref","compactSdJwtVc","res","fetch","uri","ok","Error","status","jwt","text","list","getStatus","idx","e","_logger$error","error","call","String"],"sourceRoot":"../../../../../src","sources":["modules/openid/refresh/verifyCredentialStatus.ts"],"mappings":"AAAA;;AAEA,SAASA,wBAAwB,EAAEC,oBAAoB,QAAQ,yBAAyB;AAKxF;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeC,sBAAsBA,CAACC,GAAY,EAAEC,MAAqB,EAAoB;EAClG,IAAI;IACF;IACA,IAAI,EAAE,gBAAgB,IAAID,GAAG,CAAC,EAAE,OAAO,IAAI;IAE3CC,MAAM,aAANA,MAAM,eAANA,MAAM,CAAEC,IAAI,CAAC,iEAAiEF,GAAG,CAACG,EAAE,EAAE,CAAC;IAEvF,MAAMC,GAAG,GAAGN,oBAAoB,CAACE,GAAG,CAACK,cAAc,CAAC;IACpD,MAAMC,GAAG,GAAG,MAAMC,KAAK,CAACH,GAAG,CAACI,GAAG,CAAC;IAChC,IAAI,CAACF,GAAG,CAACG,EAAE,EAAE,MAAM,IAAIC,KAAK,CAAC,QAAQJ,GAAG,CAACK,MAAM,EAAE,CAAC;IAClD,MAAMC,GAAG,GAAG,MAAMN,GAAG,CAACO,IAAI,CAAC,CAAC;IAE5B,MAAMC,IAAI,GAAGjB,wBAAwB,CAACe,GAAG,CAAC;IAC1C,MAAMH,EAAE,GAAGK,IAAI,CAACC,SAAS,CAACX,GAAG,CAACY,GAAG,CAAC,KAAK,CAAC;IAExCf,MAAM,aAANA,MAAM,eAANA,MAAM,CAAEC,IAAI,CAAC,GAAGO,EAAE,GAAG,GAAG,GAAG,GAAG,eAAeT,GAAG,CAACG,EAAE,MAAMM,EAAE,GAAG,OAAO,GAAG,SAAS,EAAE,CAAC;IACpF,OAAOA,EAAE;EACX,CAAC,CAAC,OAAOQ,CAAC,EAAE;IAAA,IAAAC,aAAA;IACVjB,MAAM,aAANA,MAAM,gBAAAiB,aAAA,GAANjB,MAAM,CAAEkB,KAAK,cAAAD,aAAA,eAAbA,aAAA,CAAAE,IAAA,CAAAnB,MAAM,EAAU,iBAAiB,IAAI,IAAID,GAAG,GAAGA,GAAG,CAACG,EAAE,GAAG,SAAS,mBAAmBkB,MAAM,CAACJ,CAAC,CAAC,EAAE,CAAC;IAChG,OAAO,KAAK;EACd;AACF","ignoreList":[]}
@@ -7,6 +7,7 @@ import CommonRemoveModal from '../../../components/modals/CommonRemoveModal';
7
7
  import Record from '../../../components/record/Record';
8
8
  import { EventTypes } from '../../../constants';
9
9
  import { useTheme } from '../../../contexts/theme';
10
+ import { TOKENS, useServices } from '../../../container-api';
10
11
  import ScreenLayout from '../../../layout/ScreenLayout';
11
12
  import CredentialOfferAccept from '../../../screens/CredentialOfferAccept';
12
13
  import { BifoldError } from '../../../types/error';
@@ -16,6 +17,10 @@ import { testIdWithKey } from '../../../utils/testable';
16
17
  import OpenIDCredentialCard from '../components/OpenIDCredentialCard';
17
18
  import { useOpenIDCredentials } from '../context/OpenIDCredentialRecordProvider';
18
19
  import { getCredentialForDisplay } from '../display';
20
+ import { NotificationEventType, useOpenId4VciNotifications } from '../notification';
21
+ import { temporaryMetaVanillaObject } from '../metadata';
22
+ import { useAcceptReplacement } from '../hooks/useAcceptReplacement';
23
+ import { useDeclineReplacement } from '../hooks/useDeclineReplacement';
19
24
  const OpenIDCredentialOffer = ({
20
25
  navigation,
21
26
  route
@@ -24,6 +29,7 @@ const OpenIDCredentialOffer = ({
24
29
  const {
25
30
  credential
26
31
  } = route.params;
32
+ const [logger] = useServices([TOKENS.UTIL_LOGGER]);
27
33
  const credentialDisplay = getCredentialForDisplay(credential);
28
34
  const {
29
35
  display
@@ -41,12 +47,22 @@ const OpenIDCredentialOffer = ({
41
47
  agent
42
48
  } = useAgent();
43
49
  const {
44
- storeCredential,
45
50
  resolveBundleForCredential
46
51
  } = useOpenIDCredentials();
52
+ const {
53
+ sendOpenId4VciNotification
54
+ } = useOpenId4VciNotifications();
47
55
  const [isRemoveModalDisplayed, setIsRemoveModalDisplayed] = useState(false);
48
56
  const [buttonsVisible, setButtonsVisible] = useState(true);
49
57
  const [acceptModalVisible, setAcceptModalVisible] = useState(false);
58
+ const {
59
+ acceptNewCredential
60
+ } = useAcceptReplacement();
61
+ const {
62
+ declineByNewId
63
+ } = useDeclineReplacement({
64
+ logger: logger
65
+ });
50
66
  const [overlay, setOverlay] = useState({
51
67
  bundle: undefined,
52
68
  presentationFields: [],
@@ -80,17 +96,38 @@ const OpenIDCredentialOffer = ({
80
96
  const toggleDeclineModalVisible = () => setIsRemoveModalDisplayed(!isRemoveModalDisplayed);
81
97
  const handleDeclineTouched = async () => {
82
98
  var _navigation$getParent;
99
+ await handleSendNotification(NotificationEventType.CREDENTIAL_DELETED);
100
+ await declineByNewId(credential.id);
83
101
  toggleDeclineModalVisible();
84
102
  (_navigation$getParent = navigation.getParent()) === null || _navigation$getParent === void 0 || _navigation$getParent.navigate(TabStacks.HomeStack, {
85
103
  screen: Screens.Home
86
104
  });
87
105
  };
106
+ const handleSendNotification = async notificationEventType => {
107
+ try {
108
+ var _temporaryMetaVanilla, _temporaryMetaVanilla2, _temporaryMetaVanilla3;
109
+ if ((_temporaryMetaVanilla = temporaryMetaVanillaObject.notificationMetadata) !== null && _temporaryMetaVanilla !== void 0 && _temporaryMetaVanilla.notificationId && (_temporaryMetaVanilla2 = temporaryMetaVanillaObject.notificationMetadata) !== null && _temporaryMetaVanilla2 !== void 0 && _temporaryMetaVanilla2.notificationEndpoint && (_temporaryMetaVanilla3 = temporaryMetaVanillaObject.tokenResponse) !== null && _temporaryMetaVanilla3 !== void 0 && _temporaryMetaVanilla3.accessToken) {
110
+ var _temporaryMetaVanilla4, _temporaryMetaVanilla5, _temporaryMetaVanilla6;
111
+ await sendOpenId4VciNotification({
112
+ accessToken: (_temporaryMetaVanilla4 = temporaryMetaVanillaObject.tokenResponse) === null || _temporaryMetaVanilla4 === void 0 ? void 0 : _temporaryMetaVanilla4.accessToken,
113
+ notificationEvent: notificationEventType,
114
+ notificationMetadata: {
115
+ notificationId: temporaryMetaVanillaObject === null || temporaryMetaVanillaObject === void 0 || (_temporaryMetaVanilla5 = temporaryMetaVanillaObject.notificationMetadata) === null || _temporaryMetaVanilla5 === void 0 ? void 0 : _temporaryMetaVanilla5.notificationId,
116
+ notificationEndpoint: temporaryMetaVanillaObject === null || temporaryMetaVanillaObject === void 0 || (_temporaryMetaVanilla6 = temporaryMetaVanillaObject.notificationMetadata) === null || _temporaryMetaVanilla6 === void 0 ? void 0 : _temporaryMetaVanilla6.notificationEndpoint
117
+ }
118
+ });
119
+ }
120
+ } catch (err) {
121
+ logger.error('[Credential Offer] error sending notification');
122
+ }
123
+ };
88
124
  const handleAcceptTouched = async () => {
89
125
  if (!agent) {
90
126
  return;
91
127
  }
92
128
  try {
93
- await storeCredential(credential);
129
+ await acceptNewCredential(credential);
130
+ await handleSendNotification(NotificationEventType.CREDENTIAL_ACCEPTED);
94
131
  setAcceptModalVisible(true);
95
132
  } catch (err) {
96
133
  setButtonsVisible(true);