@bifold/core 2.10.2 → 2.11.1

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 (266) hide show
  1. package/lib/commonjs/components/listItems/NotificationListItem.js +19 -11
  2. package/lib/commonjs/components/listItems/NotificationListItem.js.map +1 -1
  3. package/lib/commonjs/components/misc/CredentialCard.js +3 -1
  4. package/lib/commonjs/components/misc/CredentialCard.js.map +1 -1
  5. package/lib/commonjs/components/misc/CredentialCard10.js +13 -5
  6. package/lib/commonjs/components/misc/CredentialCard10.js.map +1 -1
  7. package/lib/commonjs/components/misc/CredentialCard11.js +25 -22
  8. package/lib/commonjs/components/misc/CredentialCard11.js.map +1 -1
  9. package/lib/commonjs/components/views/CredentialDetailPrimaryHeader.js +8 -7
  10. package/lib/commonjs/components/views/CredentialDetailPrimaryHeader.js.map +1 -1
  11. package/lib/commonjs/components/views/KeyboardView.js +19 -4
  12. package/lib/commonjs/components/views/KeyboardView.js.map +1 -1
  13. package/lib/commonjs/constants.js +1 -0
  14. package/lib/commonjs/constants.js.map +1 -1
  15. package/lib/commonjs/container-api.js +3 -1
  16. package/lib/commonjs/container-api.js.map +1 -1
  17. package/lib/commonjs/container-impl.js +16 -0
  18. package/lib/commonjs/container-impl.js.map +1 -1
  19. package/lib/commonjs/hooks/notifications.js +4 -2
  20. package/lib/commonjs/hooks/notifications.js.map +1 -1
  21. package/lib/commonjs/hooks/useBifoldAgentSetup.js +5 -3
  22. package/lib/commonjs/hooks/useBifoldAgentSetup.js.map +1 -1
  23. package/lib/commonjs/index.js +16 -0
  24. package/lib/commonjs/index.js.map +1 -1
  25. package/lib/commonjs/localization/en/en.json +8 -1
  26. package/lib/commonjs/localization/fr/fr.json +8 -1
  27. package/lib/commonjs/localization/pt-br/pt-br.json +8 -1
  28. package/lib/commonjs/modules/openid/components/OpenIDCredentialCard.js +41 -1
  29. package/lib/commonjs/modules/openid/components/OpenIDCredentialCard.js.map +1 -1
  30. package/lib/commonjs/modules/openid/context/OpenIDCredentialRecordProvider.js +34 -111
  31. package/lib/commonjs/modules/openid/context/OpenIDCredentialRecordProvider.js.map +1 -1
  32. package/lib/commonjs/modules/openid/hooks/openid.js +38 -6
  33. package/lib/commonjs/modules/openid/hooks/openid.js.map +1 -1
  34. package/lib/commonjs/modules/openid/hooks/useAcceptReplacement.js +82 -0
  35. package/lib/commonjs/modules/openid/hooks/useAcceptReplacement.js.map +1 -0
  36. package/lib/commonjs/modules/openid/hooks/useCredentialErrorsFromRegistry.js +60 -0
  37. package/lib/commonjs/modules/openid/hooks/useCredentialErrorsFromRegistry.js.map +1 -0
  38. package/lib/commonjs/modules/openid/hooks/useDeclineReplacement.js +84 -0
  39. package/lib/commonjs/modules/openid/hooks/useDeclineReplacement.js.map +1 -0
  40. package/lib/commonjs/modules/openid/hooks/useOpenIdReplacementNavigation.js +55 -0
  41. package/lib/commonjs/modules/openid/hooks/useOpenIdReplacementNavigation.js.map +1 -0
  42. package/lib/commonjs/modules/openid/hooks/useReplacementNotifications.js +82 -0
  43. package/lib/commonjs/modules/openid/hooks/useReplacementNotifications.js.map +1 -0
  44. package/lib/commonjs/modules/openid/metadata.js +60 -1
  45. package/lib/commonjs/modules/openid/metadata.js.map +1 -1
  46. package/lib/commonjs/modules/openid/notification.js +42 -0
  47. package/lib/commonjs/modules/openid/notification.js.map +1 -0
  48. package/lib/commonjs/modules/openid/offerResolve.js +6 -0
  49. package/lib/commonjs/modules/openid/offerResolve.js.map +1 -1
  50. package/lib/commonjs/modules/openid/refresh/reIssuance.js +95 -0
  51. package/lib/commonjs/modules/openid/refresh/reIssuance.js.map +1 -0
  52. package/lib/commonjs/modules/openid/refresh/refreshOrchestrator.js +265 -0
  53. package/lib/commonjs/modules/openid/refresh/refreshOrchestrator.js.map +1 -0
  54. package/lib/commonjs/modules/openid/refresh/refreshToken.js +78 -0
  55. package/lib/commonjs/modules/openid/refresh/refreshToken.js.map +1 -0
  56. package/lib/commonjs/modules/openid/refresh/registery.js +143 -0
  57. package/lib/commonjs/modules/openid/refresh/registery.js.map +1 -0
  58. package/lib/commonjs/modules/openid/refresh/types.js +17 -0
  59. package/lib/commonjs/modules/openid/refresh/types.js.map +1 -0
  60. package/lib/commonjs/modules/openid/refresh/verifyCredentialStatus.js +34 -0
  61. package/lib/commonjs/modules/openid/refresh/verifyCredentialStatus.js.map +1 -0
  62. package/lib/commonjs/modules/openid/screens/OpenIDCredentialOffer.js +39 -2
  63. package/lib/commonjs/modules/openid/screens/OpenIDCredentialOffer.js.map +1 -1
  64. package/lib/commonjs/modules/openid/utils/utils.js +66 -0
  65. package/lib/commonjs/modules/openid/utils/utils.js.map +1 -1
  66. package/lib/commonjs/screens/CredentialDetails.js +28 -6
  67. package/lib/commonjs/screens/CredentialDetails.js.map +1 -1
  68. package/lib/commonjs/screens/CredentialOffer.js +6 -9
  69. package/lib/commonjs/screens/CredentialOffer.js.map +1 -1
  70. package/lib/commonjs/screens/CredentialOfferAccept.js +18 -2
  71. package/lib/commonjs/screens/CredentialOfferAccept.js.map +1 -1
  72. package/lib/commonjs/screens/Developer.js +26 -0
  73. package/lib/commonjs/screens/Developer.js.map +1 -1
  74. package/lib/commonjs/screens/Home.js +39 -1
  75. package/lib/commonjs/screens/Home.js.map +1 -1
  76. package/lib/commonjs/screens/ListCredentials.js +2 -2
  77. package/lib/commonjs/screens/ListCredentials.js.map +1 -1
  78. package/lib/commonjs/screens/ProofChangeCredential.js +3 -3
  79. package/lib/commonjs/screens/ProofChangeCredential.js.map +1 -1
  80. package/lib/commonjs/screens/ProofRequest.js +4 -4
  81. package/lib/commonjs/screens/ProofRequest.js.map +1 -1
  82. package/lib/commonjs/services/AgentBridge.js +90 -0
  83. package/lib/commonjs/services/AgentBridge.js.map +1 -0
  84. package/lib/commonjs/types/credentials.js +9 -0
  85. package/lib/commonjs/types/credentials.js.map +1 -1
  86. package/lib/commonjs/utils/agent.js +1 -1
  87. package/lib/commonjs/utils/agent.js.map +1 -1
  88. package/lib/commonjs/utils/cred-def.js +50 -43
  89. package/lib/commonjs/utils/cred-def.js.map +1 -1
  90. package/lib/commonjs/utils/credential.js +217 -1
  91. package/lib/commonjs/utils/credential.js.map +1 -1
  92. package/lib/commonjs/utils/helpers.js +83 -22
  93. package/lib/commonjs/utils/helpers.js.map +1 -1
  94. package/lib/module/components/listItems/NotificationListItem.js +19 -11
  95. package/lib/module/components/listItems/NotificationListItem.js.map +1 -1
  96. package/lib/module/components/misc/CredentialCard.js +3 -1
  97. package/lib/module/components/misc/CredentialCard.js.map +1 -1
  98. package/lib/module/components/misc/CredentialCard10.js +14 -6
  99. package/lib/module/components/misc/CredentialCard10.js.map +1 -1
  100. package/lib/module/components/misc/CredentialCard11.js +17 -14
  101. package/lib/module/components/misc/CredentialCard11.js.map +1 -1
  102. package/lib/module/components/views/CredentialDetailPrimaryHeader.js +9 -8
  103. package/lib/module/components/views/CredentialDetailPrimaryHeader.js.map +1 -1
  104. package/lib/module/components/views/KeyboardView.js +19 -4
  105. package/lib/module/components/views/KeyboardView.js.map +1 -1
  106. package/lib/module/constants.js +1 -0
  107. package/lib/module/constants.js.map +1 -1
  108. package/lib/module/container-api.js +3 -1
  109. package/lib/module/container-api.js.map +1 -1
  110. package/lib/module/container-impl.js +16 -0
  111. package/lib/module/container-impl.js.map +1 -1
  112. package/lib/module/hooks/notifications.js +4 -2
  113. package/lib/module/hooks/notifications.js.map +1 -1
  114. package/lib/module/hooks/useBifoldAgentSetup.js +5 -3
  115. package/lib/module/hooks/useBifoldAgentSetup.js.map +1 -1
  116. package/lib/module/index.js +3 -1
  117. package/lib/module/index.js.map +1 -1
  118. package/lib/module/localization/en/en.json +8 -1
  119. package/lib/module/localization/fr/fr.json +8 -1
  120. package/lib/module/localization/pt-br/pt-br.json +8 -1
  121. package/lib/module/modules/openid/components/OpenIDCredentialCard.js +41 -1
  122. package/lib/module/modules/openid/components/OpenIDCredentialCard.js.map +1 -1
  123. package/lib/module/modules/openid/context/OpenIDCredentialRecordProvider.js +34 -111
  124. package/lib/module/modules/openid/context/OpenIDCredentialRecordProvider.js.map +1 -1
  125. package/lib/module/modules/openid/hooks/openid.js +38 -5
  126. package/lib/module/modules/openid/hooks/openid.js.map +1 -1
  127. package/lib/module/modules/openid/hooks/useAcceptReplacement.js +76 -0
  128. package/lib/module/modules/openid/hooks/useAcceptReplacement.js.map +1 -0
  129. package/lib/module/modules/openid/hooks/useCredentialErrorsFromRegistry.js +54 -0
  130. package/lib/module/modules/openid/hooks/useCredentialErrorsFromRegistry.js.map +1 -0
  131. package/lib/module/modules/openid/hooks/useDeclineReplacement.js +77 -0
  132. package/lib/module/modules/openid/hooks/useDeclineReplacement.js.map +1 -0
  133. package/lib/module/modules/openid/hooks/useOpenIdReplacementNavigation.js +47 -0
  134. package/lib/module/modules/openid/hooks/useOpenIdReplacementNavigation.js.map +1 -0
  135. package/lib/module/modules/openid/hooks/useReplacementNotifications.js +75 -0
  136. package/lib/module/modules/openid/hooks/useReplacementNotifications.js.map +1 -0
  137. package/lib/module/modules/openid/metadata.js +52 -1
  138. package/lib/module/modules/openid/metadata.js.map +1 -1
  139. package/lib/module/modules/openid/notification.js +38 -0
  140. package/lib/module/modules/openid/notification.js.map +1 -0
  141. package/lib/module/modules/openid/offerResolve.js +7 -1
  142. package/lib/module/modules/openid/offerResolve.js.map +1 -1
  143. package/lib/module/modules/openid/refresh/reIssuance.js +89 -0
  144. package/lib/module/modules/openid/refresh/reIssuance.js.map +1 -0
  145. package/lib/module/modules/openid/refresh/refreshOrchestrator.js +257 -0
  146. package/lib/module/modules/openid/refresh/refreshOrchestrator.js.map +1 -0
  147. package/lib/module/modules/openid/refresh/refreshToken.js +72 -0
  148. package/lib/module/modules/openid/refresh/refreshToken.js.map +1 -0
  149. package/lib/module/modules/openid/refresh/registery.js +135 -0
  150. package/lib/module/modules/openid/refresh/registery.js.map +1 -0
  151. package/lib/module/modules/openid/refresh/types.js +11 -0
  152. package/lib/module/modules/openid/refresh/types.js.map +1 -0
  153. package/lib/module/modules/openid/refresh/verifyCredentialStatus.js +28 -0
  154. package/lib/module/modules/openid/refresh/verifyCredentialStatus.js.map +1 -0
  155. package/lib/module/modules/openid/screens/OpenIDCredentialOffer.js +39 -2
  156. package/lib/module/modules/openid/screens/OpenIDCredentialOffer.js.map +1 -1
  157. package/lib/module/modules/openid/utils/utils.js +64 -1
  158. package/lib/module/modules/openid/utils/utils.js.map +1 -1
  159. package/lib/module/screens/CredentialDetails.js +29 -7
  160. package/lib/module/screens/CredentialDetails.js.map +1 -1
  161. package/lib/module/screens/CredentialOffer.js +7 -10
  162. package/lib/module/screens/CredentialOffer.js.map +1 -1
  163. package/lib/module/screens/CredentialOfferAccept.js +19 -3
  164. package/lib/module/screens/CredentialOfferAccept.js.map +1 -1
  165. package/lib/module/screens/Developer.js +27 -1
  166. package/lib/module/screens/Developer.js.map +1 -1
  167. package/lib/module/screens/Home.js +41 -3
  168. package/lib/module/screens/Home.js.map +1 -1
  169. package/lib/module/screens/ListCredentials.js +1 -1
  170. package/lib/module/screens/ListCredentials.js.map +1 -1
  171. package/lib/module/screens/ProofChangeCredential.js +1 -1
  172. package/lib/module/screens/ProofChangeCredential.js.map +1 -1
  173. package/lib/module/screens/ProofRequest.js +1 -1
  174. package/lib/module/screens/ProofRequest.js.map +1 -1
  175. package/lib/module/services/AgentBridge.js +83 -0
  176. package/lib/module/services/AgentBridge.js.map +1 -0
  177. package/lib/module/types/credentials.js +8 -1
  178. package/lib/module/types/credentials.js.map +1 -1
  179. package/lib/module/utils/agent.js +2 -2
  180. package/lib/module/utils/agent.js.map +1 -1
  181. package/lib/module/utils/cred-def.js +46 -43
  182. package/lib/module/utils/cred-def.js.map +1 -1
  183. package/lib/module/utils/credential.js +210 -0
  184. package/lib/module/utils/credential.js.map +1 -1
  185. package/lib/module/utils/helpers.js +80 -22
  186. package/lib/module/utils/helpers.js.map +1 -1
  187. package/lib/typescript/src/components/listItems/NotificationListItem.d.ts.map +1 -1
  188. package/lib/typescript/src/components/misc/CredentialCard.d.ts +1 -2
  189. package/lib/typescript/src/components/misc/CredentialCard.d.ts.map +1 -1
  190. package/lib/typescript/src/components/misc/CredentialCard10.d.ts.map +1 -1
  191. package/lib/typescript/src/components/misc/CredentialCard11.d.ts +1 -5
  192. package/lib/typescript/src/components/misc/CredentialCard11.d.ts.map +1 -1
  193. package/lib/typescript/src/components/views/CredentialDetailPrimaryHeader.d.ts.map +1 -1
  194. package/lib/typescript/src/components/views/KeyboardView.d.ts +14 -0
  195. package/lib/typescript/src/components/views/KeyboardView.d.ts.map +1 -1
  196. package/lib/typescript/src/constants.d.ts +2 -1
  197. package/lib/typescript/src/constants.d.ts.map +1 -1
  198. package/lib/typescript/src/container-api.d.ts +8 -0
  199. package/lib/typescript/src/container-api.d.ts.map +1 -1
  200. package/lib/typescript/src/container-impl.d.ts +2 -0
  201. package/lib/typescript/src/container-impl.d.ts.map +1 -1
  202. package/lib/typescript/src/hooks/notifications.d.ts +2 -1
  203. package/lib/typescript/src/hooks/notifications.d.ts.map +1 -1
  204. package/lib/typescript/src/hooks/useBifoldAgentSetup.d.ts.map +1 -1
  205. package/lib/typescript/src/index.d.ts +4 -1
  206. package/lib/typescript/src/index.d.ts.map +1 -1
  207. package/lib/typescript/src/modules/openid/components/OpenIDCredentialCard.d.ts.map +1 -1
  208. package/lib/typescript/src/modules/openid/context/OpenIDCredentialRecordProvider.d.ts +1 -2
  209. package/lib/typescript/src/modules/openid/context/OpenIDCredentialRecordProvider.d.ts.map +1 -1
  210. package/lib/typescript/src/modules/openid/hooks/openid.d.ts.map +1 -1
  211. package/lib/typescript/src/modules/openid/hooks/useAcceptReplacement.d.ts +11 -0
  212. package/lib/typescript/src/modules/openid/hooks/useAcceptReplacement.d.ts.map +1 -0
  213. package/lib/typescript/src/modules/openid/hooks/useCredentialErrorsFromRegistry.d.ts +9 -0
  214. package/lib/typescript/src/modules/openid/hooks/useCredentialErrorsFromRegistry.d.ts.map +1 -0
  215. package/lib/typescript/src/modules/openid/hooks/useDeclineReplacement.d.ts +16 -0
  216. package/lib/typescript/src/modules/openid/hooks/useDeclineReplacement.d.ts.map +1 -0
  217. package/lib/typescript/src/modules/openid/hooks/useOpenIdReplacementNavigation.d.ts +8 -0
  218. package/lib/typescript/src/modules/openid/hooks/useOpenIdReplacementNavigation.d.ts.map +1 -0
  219. package/lib/typescript/src/modules/openid/hooks/useReplacementNotifications.d.ts +6 -0
  220. package/lib/typescript/src/modules/openid/hooks/useReplacementNotifications.d.ts.map +1 -0
  221. package/lib/typescript/src/modules/openid/metadata.d.ts +27 -2
  222. package/lib/typescript/src/modules/openid/metadata.d.ts.map +1 -1
  223. package/lib/typescript/src/modules/openid/notification.d.ts +16 -0
  224. package/lib/typescript/src/modules/openid/notification.d.ts.map +1 -0
  225. package/lib/typescript/src/modules/openid/offerResolve.d.ts.map +1 -1
  226. package/lib/typescript/src/modules/openid/refresh/reIssuance.d.ts +19 -0
  227. package/lib/typescript/src/modules/openid/refresh/reIssuance.d.ts.map +1 -0
  228. package/lib/typescript/src/modules/openid/refresh/refreshOrchestrator.d.ts +25 -0
  229. package/lib/typescript/src/modules/openid/refresh/refreshOrchestrator.d.ts.map +1 -0
  230. package/lib/typescript/src/modules/openid/refresh/refreshToken.d.ts +9 -0
  231. package/lib/typescript/src/modules/openid/refresh/refreshToken.d.ts.map +1 -0
  232. package/lib/typescript/src/modules/openid/refresh/registery.d.ts +55 -0
  233. package/lib/typescript/src/modules/openid/refresh/registery.d.ts.map +1 -0
  234. package/lib/typescript/src/modules/openid/refresh/types.d.ts +59 -0
  235. package/lib/typescript/src/modules/openid/refresh/types.d.ts.map +1 -0
  236. package/lib/typescript/src/modules/openid/refresh/verifyCredentialStatus.d.ts +11 -0
  237. package/lib/typescript/src/modules/openid/refresh/verifyCredentialStatus.d.ts.map +1 -0
  238. package/lib/typescript/src/modules/openid/screens/OpenIDCredentialOffer.d.ts.map +1 -1
  239. package/lib/typescript/src/modules/openid/utils/utils.d.ts +4 -0
  240. package/lib/typescript/src/modules/openid/utils/utils.d.ts.map +1 -1
  241. package/lib/typescript/src/screens/CredentialDetails.d.ts.map +1 -1
  242. package/lib/typescript/src/screens/CredentialOffer.d.ts.map +1 -1
  243. package/lib/typescript/src/screens/CredentialOfferAccept.d.ts.map +1 -1
  244. package/lib/typescript/src/screens/Developer.d.ts.map +1 -1
  245. package/lib/typescript/src/screens/Home.d.ts.map +1 -1
  246. package/lib/typescript/src/screens/ListCredentials.d.ts.map +1 -1
  247. package/lib/typescript/src/services/AgentBridge.d.ts +31 -0
  248. package/lib/typescript/src/services/AgentBridge.d.ts.map +1 -0
  249. package/lib/typescript/src/types/credentials.d.ts +5 -0
  250. package/lib/typescript/src/types/credentials.d.ts.map +1 -1
  251. package/lib/typescript/src/types/notification.d.ts +4 -0
  252. package/lib/typescript/src/types/notification.d.ts.map +1 -1
  253. package/lib/typescript/src/utils/agent.d.ts.map +1 -1
  254. package/lib/typescript/src/utils/cred-def.d.ts +8 -3
  255. package/lib/typescript/src/utils/cred-def.d.ts.map +1 -1
  256. package/lib/typescript/src/utils/credential.d.ts +36 -0
  257. package/lib/typescript/src/utils/credential.d.ts.map +1 -1
  258. package/lib/typescript/src/utils/helpers.d.ts +5 -1
  259. package/lib/typescript/src/utils/helpers.d.ts.map +1 -1
  260. package/package.json +10 -4
  261. package/lib/commonjs/modules/openid/refresh/refreshMetadata.js +0 -25
  262. package/lib/commonjs/modules/openid/refresh/refreshMetadata.js.map +0 -1
  263. package/lib/module/modules/openid/refresh/refreshMetadata.js +0 -18
  264. package/lib/module/modules/openid/refresh/refreshMetadata.js.map +0 -1
  265. package/lib/typescript/src/modules/openid/refresh/refreshMetadata.d.ts +0 -20
  266. package/lib/typescript/src/modules/openid/refresh/refreshMetadata.d.ts.map +0 -1
@@ -0,0 +1,76 @@
1
+ // modules/openid/hooks/useAcceptReplacement.ts
2
+
3
+ import { useCallback } from 'react';
4
+ import { TOKENS, useServices } from '../../../container-api';
5
+ import { useOpenIDCredentials } from '../context/OpenIDCredentialRecordProvider';
6
+ import { credentialRegistry, selectOldIdByReplacementId } from '../refresh/registery';
7
+ import { OpenIDCredentialType } from '../types';
8
+ const sleep = ms => new Promise(res => setTimeout(res, ms));
9
+ /**
10
+ * A hook that provides functions to accept newly issued credentials, handling replacements if applicable.
11
+ */
12
+
13
+ export function useAcceptReplacement() {
14
+ const {
15
+ storeCredential,
16
+ removeCredential,
17
+ getW3CCredentialById,
18
+ getSdJwtCredentialById
19
+ } = useOpenIDCredentials();
20
+ const [logger] = useServices([TOKENS.UTIL_LOGGER]);
21
+
22
+ /**
23
+ * Accept a newly issued credential:
24
+ * 1) store it
25
+ * 2) if it replaces an old one (per registry), fetch old via provider & delete it
26
+ * 3) update the registry (acceptReplacement)
27
+ */
28
+ const acceptNewCredential = useCallback(async newCred => {
29
+ logger.info(`🟢 [useAcceptReplacement] accepting new credential → ${newCred.id}`);
30
+
31
+ // 1) persist new
32
+ await storeCredential(newCred);
33
+
34
+ // 2) check if it replaces an old credential
35
+ const oldId = selectOldIdByReplacementId(newCred.id);
36
+ if (!oldId) {
37
+ logger.info(`ℹ️ [useAcceptReplacement] no replacement mapping for ${newCred.id} — done`);
38
+ return;
39
+ }
40
+
41
+ // 3) fetch old via provider (always)
42
+ const oldRecord = await getSdJwtCredentialById(oldId);
43
+ if (!oldRecord) {
44
+ logger.warn(`⚠️ [useAcceptReplacement] old record ${oldId} not found — skipping delete`);
45
+ // still accept swap in registry to avoid stuck state
46
+ credentialRegistry.getState().acceptReplacement(oldId);
47
+ return;
48
+ }
49
+ await sleep(200);
50
+
51
+ // 4) delete old
52
+ await removeCredential(oldRecord, OpenIDCredentialType.SdJwtVc);
53
+
54
+ // 5) finalize the swap in registry
55
+ credentialRegistry.getState().acceptReplacement(oldId);
56
+ logger.info(`✅ [useAcceptReplacement] replacement complete: old=${oldId} → new=${newCred.id}`);
57
+ }, [storeCredential, removeCredential, getSdJwtCredentialById, logger]);
58
+
59
+ /**
60
+ * Convenience: accept by new credential id (fetch via provider first).
61
+ * Useful if your screen only carries the new id.
62
+ */
63
+ const acceptById = useCallback(async newId => {
64
+ // try W3C first, then Sd-JWT
65
+ const newW3c = await getW3CCredentialById(newId);
66
+ const newSd = newW3c ? undefined : await getSdJwtCredentialById(newId);
67
+ const rec = newW3c ?? newSd;
68
+ if (!rec) throw new Error(`New credential not found for id=${newId}`);
69
+ await acceptNewCredential(rec);
70
+ }, [getW3CCredentialById, getSdJwtCredentialById, acceptNewCredential]);
71
+ return {
72
+ acceptNewCredential,
73
+ acceptById
74
+ };
75
+ }
76
+ //# sourceMappingURL=useAcceptReplacement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","TOKENS","useServices","useOpenIDCredentials","credentialRegistry","selectOldIdByReplacementId","OpenIDCredentialType","sleep","ms","Promise","res","setTimeout","useAcceptReplacement","storeCredential","removeCredential","getW3CCredentialById","getSdJwtCredentialById","logger","UTIL_LOGGER","acceptNewCredential","newCred","info","id","oldId","oldRecord","warn","getState","acceptReplacement","SdJwtVc","acceptById","newId","newW3c","newSd","undefined","rec","Error"],"sourceRoot":"../../../../../src","sources":["modules/openid/hooks/useAcceptReplacement.ts"],"mappings":"AAAA;;AAEA,SAASA,WAAW,QAAQ,OAAO;AACnC,SAASC,MAAM,EAAEC,WAAW,QAAQ,wBAAwB;AAC5D,SAASC,oBAAoB,QAAQ,2CAA2C;AAChF,SAASC,kBAAkB,EAAEC,0BAA0B,QAAQ,sBAAsB;AACrF,SAASC,oBAAoB,QAAQ,UAAU;AAI/C,MAAMC,KAAK,GAAIC,EAAU,IAAK,IAAIC,OAAO,CAAQC,GAAG,IAAKC,UAAU,CAACD,GAAG,EAAEF,EAAE,CAAC,CAAC;AAC7E;AACA;AACA;;AAEA,OAAO,SAASI,oBAAoBA,CAAA,EAAG;EACrC,MAAM;IAAEC,eAAe;IAAEC,gBAAgB;IAAEC,oBAAoB;IAAEC;EAAuB,CAAC,GAAGb,oBAAoB,CAAC,CAAC;EAClH,MAAM,CAACc,MAAM,CAAC,GAAGf,WAAW,CAAC,CAACD,MAAM,CAACiB,WAAW,CAAC,CAAC;;EAElD;AACF;AACA;AACA;AACA;AACA;EACE,MAAMC,mBAAmB,GAAGnB,WAAW,CACrC,MAAOoB,OAAgB,IAAK;IAC1BH,MAAM,CAACI,IAAI,CAAC,wDAAwDD,OAAO,CAACE,EAAE,EAAE,CAAC;;IAEjF;IACA,MAAMT,eAAe,CAACO,OAAO,CAAC;;IAE9B;IACA,MAAMG,KAAK,GAAGlB,0BAA0B,CAACe,OAAO,CAACE,EAAE,CAAC;IACpD,IAAI,CAACC,KAAK,EAAE;MACVN,MAAM,CAACI,IAAI,CAAC,wDAAwDD,OAAO,CAACE,EAAE,SAAS,CAAC;MACxF;IACF;;IAEA;IACA,MAAME,SAAS,GAAG,MAAMR,sBAAsB,CAACO,KAAK,CAAC;IAErD,IAAI,CAACC,SAAS,EAAE;MACdP,MAAM,CAACQ,IAAI,CAAC,wCAAwCF,KAAK,8BAA8B,CAAC;MACxF;MACAnB,kBAAkB,CAACsB,QAAQ,CAAC,CAAC,CAACC,iBAAiB,CAACJ,KAAK,CAAC;MACtD;IACF;IAEA,MAAMhB,KAAK,CAAC,GAAG,CAAC;;IAEhB;IACA,MAAMO,gBAAgB,CAACU,SAAS,EAAElB,oBAAoB,CAACsB,OAAO,CAAC;;IAE/D;IACAxB,kBAAkB,CAACsB,QAAQ,CAAC,CAAC,CAACC,iBAAiB,CAACJ,KAAK,CAAC;IAEtDN,MAAM,CAACI,IAAI,CAAC,sDAAsDE,KAAK,UAAUH,OAAO,CAACE,EAAE,EAAE,CAAC;EAChG,CAAC,EACD,CAACT,eAAe,EAAEC,gBAAgB,EAAEE,sBAAsB,EAAEC,MAAM,CACpE,CAAC;;EAED;AACF;AACA;AACA;EACE,MAAMY,UAAU,GAAG7B,WAAW,CAC5B,MAAO8B,KAAa,IAAK;IACvB;IACA,MAAMC,MAAM,GAAG,MAAMhB,oBAAoB,CAACe,KAAK,CAAC;IAChD,MAAME,KAAK,GAAGD,MAAM,GAAGE,SAAS,GAAG,MAAMjB,sBAAsB,CAACc,KAAK,CAAC;IACtE,MAAMI,GAAG,GAAIH,MAAM,IAAIC,KAA6B;IACpD,IAAI,CAACE,GAAG,EAAE,MAAM,IAAIC,KAAK,CAAC,mCAAmCL,KAAK,EAAE,CAAC;IACrE,MAAMX,mBAAmB,CAACe,GAAG,CAAC;EAChC,CAAC,EACD,CAACnB,oBAAoB,EAAEC,sBAAsB,EAAEG,mBAAmB,CACpE,CAAC;EAED,OAAO;IAAEA,mBAAmB;IAAEU;EAAW,CAAC;AAC5C","ignoreList":[]}
@@ -0,0 +1,54 @@
1
+ // hooks/useCredentialErrorsFromRegistry.ts
2
+ import { useEffect, useMemo, useState } from 'react';
3
+ import { credentialRegistry } from '../refresh/registery';
4
+ import { getRefreshCredentialMetadata } from '../metadata';
5
+ import { RefreshStatus } from '../refresh/types';
6
+ import { CredentialErrors } from '../../../types/credentials';
7
+ import { MdocRecord, SdJwtVcRecord, W3cCredentialRecord } from '@credo-ts/core';
8
+
9
+ /**
10
+ * Computes the UI error list for a credential by:
11
+ * 1) Checking the in-memory registry (live session truth)
12
+ * 2) Falling back to persisted refresh metadata (after app restart)
13
+ * You can merge with any existing `propErrors` provided by the caller.
14
+ */
15
+ export function useCredentialErrorsFromRegistry(credential, propErrors) {
16
+ const id = credential === null || credential === void 0 ? void 0 : credential.id;
17
+ const [isInvalidByRegistry, setIsInvalidByRegistry] = useState(false);
18
+
19
+ // Subscribe to registry changes and keep a boolean for this credential
20
+ useEffect(() => {
21
+ if (!id) return;
22
+
23
+ // Immediate read
24
+ const s = credentialRegistry.getState();
25
+ setIsInvalidByRegistry(s.expired.includes(id));
26
+
27
+ // Subscribe to changes
28
+ const unsub = credentialRegistry.subscribe(next => {
29
+ const flagged = next.expired.includes(id);
30
+ setIsInvalidByRegistry(flagged);
31
+ });
32
+ return unsub;
33
+ }, [id]);
34
+
35
+ // Fallback: metadata (covers case after restart when registry is empty)
36
+ const isInvalidByMetadata = useMemo(() => {
37
+ if (!(credential instanceof W3cCredentialRecord || credential instanceof SdJwtVcRecord || credential instanceof MdocRecord)) {
38
+ return;
39
+ }
40
+ if (!credential) return false;
41
+ const meta = getRefreshCredentialMetadata(credential);
42
+ return (meta === null || meta === void 0 ? void 0 : meta.lastCheckResult) === RefreshStatus.Invalid;
43
+ }, [credential]);
44
+
45
+ // Merge: propErrors + derived “invalid” → map to existing enum (Revoked)
46
+ const merged = useMemo(() => {
47
+ const base = Array.isArray(propErrors) ? [...propErrors] : [];
48
+ const withoutRevoked = base.filter(e => e !== CredentialErrors.Revoked);
49
+ const shouldMarkInvalid = isInvalidByRegistry || isInvalidByMetadata;
50
+ return shouldMarkInvalid ? [...withoutRevoked, CredentialErrors.Revoked] : withoutRevoked;
51
+ }, [propErrors, isInvalidByRegistry, isInvalidByMetadata]);
52
+ return merged;
53
+ }
54
+ //# sourceMappingURL=useCredentialErrorsFromRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useMemo","useState","credentialRegistry","getRefreshCredentialMetadata","RefreshStatus","CredentialErrors","MdocRecord","SdJwtVcRecord","W3cCredentialRecord","useCredentialErrorsFromRegistry","credential","propErrors","id","isInvalidByRegistry","setIsInvalidByRegistry","s","getState","expired","includes","unsub","subscribe","next","flagged","isInvalidByMetadata","meta","lastCheckResult","Invalid","merged","base","Array","isArray","withoutRevoked","filter","e","Revoked","shouldMarkInvalid"],"sourceRoot":"../../../../../src","sources":["modules/openid/hooks/useCredentialErrorsFromRegistry.ts"],"mappings":"AAAA;AACA,SAASA,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,OAAO;AACpD,SAASC,kBAAkB,QAAuB,sBAAsB;AACxE,SAASC,4BAA4B,QAAQ,aAAa;AAC1D,SAASC,aAAa,QAAQ,kBAAkB;AAChD,SAASC,gBAAgB,QAAyC,4BAA4B;AAC9F,SAASC,UAAU,EAAEC,aAAa,EAAEC,mBAAmB,QAAQ,gBAAgB;;AAE/E;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,+BAA+BA,CAC7CC,UAAuD,EACvDC,UAA+B,EAC/B;EACA,MAAMC,EAAE,GAAGF,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEE,EAAE;EACzB,MAAM,CAACC,mBAAmB,EAAEC,sBAAsB,CAAC,GAAGb,QAAQ,CAAC,KAAK,CAAC;;EAErE;EACAF,SAAS,CAAC,MAAM;IACd,IAAI,CAACa,EAAE,EAAE;;IAET;IACA,MAAMG,CAAC,GAAGb,kBAAkB,CAACc,QAAQ,CAAC,CAAC;IACvCF,sBAAsB,CAACC,CAAC,CAACE,OAAO,CAACC,QAAQ,CAACN,EAAE,CAAC,CAAC;;IAE9C;IACA,MAAMO,KAAK,GAAGjB,kBAAkB,CAACkB,SAAS,CAAEC,IAAmB,IAAK;MAClE,MAAMC,OAAO,GAAGD,IAAI,CAACJ,OAAO,CAACC,QAAQ,CAACN,EAAE,CAAC;MACzCE,sBAAsB,CAACQ,OAAO,CAAC;IACjC,CAAC,CAAC;IAEF,OAAOH,KAAK;EACd,CAAC,EAAE,CAACP,EAAE,CAAC,CAAC;;EAER;EACA,MAAMW,mBAAmB,GAAGvB,OAAO,CAAC,MAAM;IACxC,IACE,EACEU,UAAU,YAAYF,mBAAmB,IACzCE,UAAU,YAAYH,aAAa,IACnCG,UAAU,YAAYJ,UAAU,CACjC,EACD;MACA;IACF;IACA,IAAI,CAACI,UAAU,EAAE,OAAO,KAAK;IAC7B,MAAMc,IAAI,GAAGrB,4BAA4B,CAACO,UAAU,CAAC;IACrD,OAAO,CAAAc,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEC,eAAe,MAAKrB,aAAa,CAACsB,OAAO;EACxD,CAAC,EAAE,CAAChB,UAAU,CAAC,CAAC;;EAEhB;EACA,MAAMiB,MAAM,GAAG3B,OAAO,CAAC,MAAM;IAC3B,MAAM4B,IAAI,GAAGC,KAAK,CAACC,OAAO,CAACnB,UAAU,CAAC,GAAG,CAAC,GAAGA,UAAU,CAAC,GAAG,EAAE;IAC7D,MAAMoB,cAAc,GAAGH,IAAI,CAACI,MAAM,CAAEC,CAAC,IAAKA,CAAC,KAAK5B,gBAAgB,CAAC6B,OAAO,CAAC;IACzE,MAAMC,iBAAiB,GAAGtB,mBAAmB,IAAIU,mBAAmB;IACpE,OAAOY,iBAAiB,GAAG,CAAC,GAAGJ,cAAc,EAAE1B,gBAAgB,CAAC6B,OAAO,CAAC,GAAGH,cAAc;EAC3F,CAAC,EAAE,CAACpB,UAAU,EAAEE,mBAAmB,EAAEU,mBAAmB,CAAC,CAAC;EAE1D,OAAOI,MAAM;AACf","ignoreList":[]}
@@ -0,0 +1,77 @@
1
+ // modules/openid/hooks/useDeclineReplacement.ts
2
+ import { useCallback } from 'react';
3
+ import { credentialRegistry } from '../refresh/registery';
4
+ function findOldIdByNewId(newId) {
5
+ const s = credentialRegistry.getState();
6
+ // replacements: { [oldId]: { id: newId, ... } }
7
+ for (const [oldId, lite] of Object.entries(s.replacements)) {
8
+ if ((lite === null || lite === void 0 ? void 0 : lite.id) === newId) return oldId;
9
+ }
10
+ return undefined;
11
+ }
12
+
13
+ /**
14
+ * Decline a replacement offer: clears the registry entry so the notification disappears.
15
+ * No repo operations (no save/delete) are performed.
16
+ */
17
+ export function useDeclineReplacement(opts = {}) {
18
+ const {
19
+ logger
20
+ } = opts;
21
+
22
+ /**
23
+ * Decline by OLD credential id (kept for callers that know oldId)
24
+ */
25
+ const declineByOldId = useCallback(async oldId => {
26
+ credentialRegistry.setState(prev => {
27
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
28
+ const {
29
+ [oldId]: _drop,
30
+ ...restRepl
31
+ } = prev.replacements;
32
+ return {
33
+ ...prev,
34
+ expired: prev.expired.filter(x => x !== oldId),
35
+ replacements: restRepl,
36
+ refreshing: Object.fromEntries(Object.entries(prev.refreshing).filter(([k]) => k !== oldId))
37
+ };
38
+ });
39
+ logger === null || logger === void 0 || logger.info(`🧹 [Decline] Cleared replacement notification for oldId=${oldId}`);
40
+ }, [logger]);
41
+
42
+ /**
43
+ * Decline by NEW credential id (use this from the Offer screen where you only know newId)
44
+ */
45
+ const declineByNewId = useCallback(async newId => {
46
+ const oldId = findOldIdByNewId(newId);
47
+ if (!oldId) {
48
+ logger === null || logger === void 0 || logger.warn(`🧹 [Decline] No matching oldId found for newId=${newId}`);
49
+ return;
50
+ }
51
+ await declineByOldId(oldId);
52
+ }, [declineByOldId, logger]);
53
+
54
+ /**
55
+ * Helper: decline directly from a CustomNotification object
56
+ */
57
+ const declineFromNotification = useCallback(async notif => {
58
+ var _notif$metadata, _notif$metadata2;
59
+ const oldId = notif === null || notif === void 0 || (_notif$metadata = notif.metadata) === null || _notif$metadata === void 0 ? void 0 : _notif$metadata.oldId;
60
+ if (oldId) {
61
+ await declineByOldId(oldId);
62
+ return;
63
+ }
64
+ const newId = notif === null || notif === void 0 || (_notif$metadata2 = notif.metadata) === null || _notif$metadata2 === void 0 ? void 0 : _notif$metadata2.replacementId;
65
+ if (newId) {
66
+ await declineByNewId(newId);
67
+ return;
68
+ }
69
+ logger === null || logger === void 0 || logger.warn(`🧹 [Decline] Missing oldId/newId in notification.metadata`);
70
+ }, [declineByOldId, declineByNewId, logger]);
71
+ return {
72
+ declineByOldId,
73
+ declineByNewId,
74
+ declineFromNotification
75
+ };
76
+ }
77
+ //# sourceMappingURL=useDeclineReplacement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","credentialRegistry","findOldIdByNewId","newId","s","getState","oldId","lite","Object","entries","replacements","id","undefined","useDeclineReplacement","opts","logger","declineByOldId","setState","prev","_drop","restRepl","expired","filter","x","refreshing","fromEntries","k","info","declineByNewId","warn","declineFromNotification","notif","_notif$metadata","_notif$metadata2","metadata","replacementId"],"sourceRoot":"../../../../../src","sources":["modules/openid/hooks/useDeclineReplacement.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,47 @@
1
+ // hooks/useOpenIdReplacementNavigation.ts
2
+ import { useCallback } from 'react';
3
+ import { useNavigation } from '@react-navigation/native';
4
+ import Toast from 'react-native-toast-message';
5
+ import { TOKENS, useServices } from '../../../container-api';
6
+ import { Screens, Stacks } from '../../../types/navigators';
7
+ /**
8
+ * A hook that returns a function to open the OpenID Credential Offer screen for a replacement credential
9
+ */
10
+ export function useOpenIdReplacementNavigation() {
11
+ const navigation = useNavigation();
12
+ const [orchestrator] = useServices([TOKENS.UTIL_REFRESH_ORCHESTRATOR]);
13
+ const openReplacementOffer = useCallback(notif => {
14
+ var _notif$metadata;
15
+ const replacementId = notif === null || notif === void 0 || (_notif$metadata = notif.metadata) === null || _notif$metadata === void 0 ? void 0 : _notif$metadata['replacementId'];
16
+ // const oldId = notif?.metadata?.['oldId'] as string | undefined
17
+
18
+ if (!replacementId) {
19
+ Toast.show({
20
+ type: 'error',
21
+ text1: 'Missing replacement',
22
+ text2: 'No replacementId in notification.'
23
+ });
24
+ return;
25
+ }
26
+
27
+ // Fetch the full record strictly from orchestrator’s in-memory cache
28
+ const full = orchestrator.resolveFull(replacementId);
29
+ if (!full) {
30
+ // Keep it dead simple: no repo lookups here
31
+ Toast.show({
32
+ type: 'info',
33
+ text1: 'Preparing credential',
34
+ text2: 'Please try again in a moment.'
35
+ });
36
+ return;
37
+ }
38
+ navigation.navigate(Stacks.ConnectionStack, {
39
+ screen: Screens.OpenIDCredentialOffer,
40
+ params: {
41
+ credential: full
42
+ }
43
+ });
44
+ }, [navigation, orchestrator]);
45
+ return openReplacementOffer;
46
+ }
47
+ //# sourceMappingURL=useOpenIdReplacementNavigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useNavigation","Toast","TOKENS","useServices","Screens","Stacks","useOpenIdReplacementNavigation","navigation","orchestrator","UTIL_REFRESH_ORCHESTRATOR","openReplacementOffer","notif","_notif$metadata","replacementId","metadata","show","type","text1","text2","full","resolveFull","navigate","ConnectionStack","screen","OpenIDCredentialOffer","params","credential"],"sourceRoot":"../../../../../src","sources":["modules/openid/hooks/useOpenIdReplacementNavigation.ts"],"mappings":"AAAA;AACA,SAASA,WAAW,QAAQ,OAAO;AACnC,SAASC,aAAa,QAAwB,0BAA0B;AACxE,OAAOC,KAAK,MAAM,4BAA4B;AAC9C,SAASC,MAAM,EAAEC,WAAW,QAAQ,wBAAwB;AAC5D,SAA0BC,OAAO,EAAEC,MAAM,QAAQ,2BAA2B;AAK5E;AACA;AACA;AACA,OAAO,SAASC,8BAA8BA,CAAA,EAA2B;EACvE,MAAMC,UAAU,GAAGP,aAAa,CAAkC,CAAC;EACnE,MAAM,CAACQ,YAAY,CAAC,GAAGL,WAAW,CAAC,CAACD,MAAM,CAACO,yBAAyB,CAAC,CAAC;EAEtE,MAAMC,oBAAoB,GAAGX,WAAW,CACrCY,KAAK,IAAK;IAAA,IAAAC,eAAA;IACT,MAAMC,aAAa,GAAGF,KAAK,aAALA,KAAK,gBAAAC,eAAA,GAALD,KAAK,CAAEG,QAAQ,cAAAF,eAAA,uBAAfA,eAAA,CAAkB,eAAe,CAAuB;IAC9E;;IAEA,IAAI,CAACC,aAAa,EAAE;MAClBZ,KAAK,CAACc,IAAI,CAAC;QAAEC,IAAI,EAAE,OAAO;QAAEC,KAAK,EAAE,qBAAqB;QAAEC,KAAK,EAAE;MAAoC,CAAC,CAAC;MACvG;IACF;;IAEA;IACA,MAAMC,IAAI,GAAGX,YAAY,CAACY,WAAW,CAACP,aAAa,CAAC;IACpD,IAAI,CAACM,IAAI,EAAE;MACT;MACAlB,KAAK,CAACc,IAAI,CAAC;QAAEC,IAAI,EAAE,MAAM;QAAEC,KAAK,EAAE,sBAAsB;QAAEC,KAAK,EAAE;MAAgC,CAAC,CAAC;MACnG;IACF;IAEAX,UAAU,CAACc,QAAQ,CAAChB,MAAM,CAACiB,eAAe,EAAE;MAC1CC,MAAM,EAAEnB,OAAO,CAACoB,qBAAqB;MACrCC,MAAM,EAAE;QAAEC,UAAU,EAAEP;MAAK;IAC7B,CAAC,CAAC;EACJ,CAAC,EACD,CAACZ,UAAU,EAAEC,YAAY,CAC3B,CAAC;EAED,OAAOE,oBAAoB;AAC7B","ignoreList":[]}
@@ -0,0 +1,75 @@
1
+ // modules/openid/ui/useReplacementNotifications.ts
2
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
3
+ import { credentialRegistry } from '../refresh/registery';
4
+ import { OpenIDCustomNotificationType } from '../refresh/types';
5
+ import { useDeclineReplacement } from './useDeclineReplacement';
6
+ import { TOKENS, useServices } from '../../../container-api';
7
+
8
+ /**
9
+ * A hook that returns a list of CustomNotifications for credentials that have replacements available
10
+ */
11
+
12
+ export const useReplacementNotifications = () => {
13
+ const [items, setItems] = useState([]);
14
+ const [logger] = useServices([TOKENS.UTIL_LOGGER]);
15
+ const {
16
+ declineByOldId
17
+ } = useDeclineReplacement({
18
+ logger
19
+ });
20
+
21
+ // Keep first-seen timestamps stable per (oldId -> replId)
22
+ const firstSeenRef = useRef({});
23
+ const build = useCallback(s => {
24
+ const out = [];
25
+ for (const oldId of s.expired) {
26
+ const repl = s.replacements[oldId];
27
+ if (!repl) continue;
28
+ const key = `${oldId}::${repl.id}`;
29
+ if (!firstSeenRef.current[key]) firstSeenRef.current[key] = new Date().toISOString();
30
+ out.push({
31
+ type: OpenIDCustomNotificationType.CredentialReplacementAvailable,
32
+ title: 'Credential update available',
33
+ pageTitle: 'Credential Update',
34
+ buttonTitle: 'Review update',
35
+ description: 'A newer version of this credential is ready to accept.',
36
+ createdAt: new Date(firstSeenRef.current[key]),
37
+ onPressAction: () => {},
38
+ // your list item handles navigation
39
+ onCloseAction: () => declineByOldId(oldId),
40
+ component: () => null,
41
+ // keeps renderer happy
42
+ metadata: {
43
+ oldId,
44
+ replacementId: repl.id
45
+ }
46
+ });
47
+ }
48
+
49
+ // Newest first for consistent UI
50
+ out.sort((a, b) => {
51
+ var _b$createdAt, _a$createdAt;
52
+ return (((_b$createdAt = b.createdAt) === null || _b$createdAt === void 0 ? void 0 : _b$createdAt.getTime()) ?? 0) - (((_a$createdAt = a.createdAt) === null || _a$createdAt === void 0 ? void 0 : _a$createdAt.getTime()) ?? 0);
53
+ });
54
+ return out;
55
+ }, [declineByOldId]);
56
+ useEffect(() => {
57
+ // Initial build
58
+ const s = credentialRegistry.getState();
59
+ setItems(build({
60
+ expired: s.expired,
61
+ replacements: s.replacements
62
+ }));
63
+
64
+ // Subscribe to full state updates (since vanilla store lacks selector arg)
65
+ const unsub = credentialRegistry.subscribe(state => {
66
+ setItems(build({
67
+ expired: state.expired,
68
+ replacements: state.replacements
69
+ }));
70
+ });
71
+ return unsub;
72
+ }, [build]);
73
+ return useMemo(() => items, [items]);
74
+ };
75
+ //# sourceMappingURL=useReplacementNotifications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useEffect","useMemo","useRef","useState","credentialRegistry","OpenIDCustomNotificationType","useDeclineReplacement","TOKENS","useServices","useReplacementNotifications","items","setItems","logger","UTIL_LOGGER","declineByOldId","firstSeenRef","build","s","out","oldId","expired","repl","replacements","key","id","current","Date","toISOString","push","type","CredentialReplacementAvailable","title","pageTitle","buttonTitle","description","createdAt","onPressAction","onCloseAction","component","metadata","replacementId","sort","a","b","_b$createdAt","_a$createdAt","getTime","getState","unsub","subscribe","state"],"sourceRoot":"../../../../../src","sources":["modules/openid/hooks/useReplacementNotifications.ts"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,6 @@
1
- const openId4VcCredentialMetadataKey = '_bifold/openId4VcCredentialMetadata';
1
+ import { W3cCredentialRecord, SdJwtVcRecord, MdocRecord, W3cCredentialRepository, SdJwtVcRepository, MdocRepository } from '@credo-ts/core';
2
+ export const openId4VcCredentialMetadataKey = '_bifold/openId4VcCredentialMetadata';
3
+ export const refreshCredentialMetadataKey = '_bifold/refreshCredentialMetadata';
2
4
  export function extractOpenId4VcCredentialMetadata(credentialMetadata, serverMetadata) {
3
5
  return {
4
6
  credential: {
@@ -28,4 +30,53 @@ export function getOpenId4VcCredentialMetadata(credentialRecord) {
28
30
  export function setOpenId4VcCredentialMetadata(credentialRecord, metadata) {
29
31
  credentialRecord.metadata.set(openId4VcCredentialMetadataKey, metadata);
30
32
  }
33
+
34
+ /**
35
+ * Gets the refresh credential metadata from the given credential record.
36
+ */
37
+ export function getRefreshCredentialMetadata(credentialRecord) {
38
+ return credentialRecord.metadata.get(refreshCredentialMetadataKey);
39
+ }
40
+
41
+ /**
42
+ * Sets the refresh credential metadata on the given credential record
43
+ *
44
+ * NOTE: this does not save the record.
45
+ */
46
+ export function setRefreshCredentialMetadata(credentialRecord, metadata) {
47
+ credentialRecord.metadata.set(refreshCredentialMetadataKey, metadata);
48
+ }
49
+ export function deleteRefreshCredentialMetadata(credentialRecord) {
50
+ credentialRecord.metadata.delete(refreshCredentialMetadataKey);
51
+ }
52
+ export async function persistCredentialRecord(agentContext, record) {
53
+ if (record instanceof W3cCredentialRecord) {
54
+ await agentContext.dependencyManager.resolve(W3cCredentialRepository).update(agentContext, record);
55
+ } else if (record instanceof SdJwtVcRecord) {
56
+ await agentContext.dependencyManager.resolve(SdJwtVcRepository).update(agentContext, record);
57
+ } else if (record instanceof MdocRecord) {
58
+ await agentContext.dependencyManager.resolve(MdocRepository).update(agentContext, record);
59
+ } else {
60
+ throw new Error('Unsupported credential record type for persistence');
61
+ }
62
+ }
63
+ export async function markOpenIDCredentialStatus({
64
+ credential,
65
+ status,
66
+ agentContext
67
+ }) {
68
+ const refreshMetadata = getRefreshCredentialMetadata(credential);
69
+ if (!refreshMetadata) {
70
+ throw new Error('No refresh metadata found on the credential record.');
71
+ }
72
+ refreshMetadata.lastCheckResult = status;
73
+ setRefreshCredentialMetadata(credential, refreshMetadata);
74
+
75
+ // Persist the updated credential record
76
+ await persistCredentialRecord(agentContext, credential);
77
+ }
78
+ export const temporaryMetaVanillaObject = {
79
+ notificationMetadata: undefined,
80
+ tokenResponse: undefined
81
+ };
31
82
  //# sourceMappingURL=metadata.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["openId4VcCredentialMetadataKey","extractOpenId4VcCredentialMetadata","credentialMetadata","serverMetadata","credential","display","order","credential_subject","issuer","id","getOpenId4VcCredentialMetadata","credentialRecord","metadata","get","setOpenId4VcCredentialMetadata","set"],"sourceRoot":"../../../../src","sources":["modules/openid/metadata.tsx"],"mappings":"AAoBA,MAAMA,8BAA8B,GAAG,qCAAqC;AAE5E,OAAO,SAASC,kCAAkCA,CAChDC,kBAA4G,EAC5GC,cAA2D,EAC9B;EAC7B,OAAO;IACLC,UAAU,EAAE;MACVC,OAAO,EAAEH,kBAAkB,CAACG,OAAO;MACnCC,KAAK,EAAEJ,kBAAkB,CAACI,KAAK;MAC/BC,kBAAkB,EAAEL,kBAAkB,CAACK;IACzC,CAAC;IACDC,MAAM,EAAE;MACNH,OAAO,EAAEF,cAAc,CAACE,OAAO;MAC/BI,EAAE,EAAEN,cAAc,CAACM;IACrB;EACF,CAAC;AACH;;AAEA;AACA;AACA;AACA,OAAO,SAASC,8BAA8BA,CAC5CC,gBAAkE,EAC9B;EACpC,OAAOA,gBAAgB,CAACC,QAAQ,CAACC,GAAG,CAACb,8BAA8B,CAAC;AACtE;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASc,8BAA8BA,CAC5CH,gBAAkE,EAClEC,QAAqC,EACrC;EACAD,gBAAgB,CAACC,QAAQ,CAACG,GAAG,CAACf,8BAA8B,EAAEY,QAAQ,CAAC;AACzE","ignoreList":[]}
1
+ {"version":3,"names":["W3cCredentialRecord","SdJwtVcRecord","MdocRecord","W3cCredentialRepository","SdJwtVcRepository","MdocRepository","openId4VcCredentialMetadataKey","refreshCredentialMetadataKey","extractOpenId4VcCredentialMetadata","credentialMetadata","serverMetadata","credential","display","order","credential_subject","issuer","id","getOpenId4VcCredentialMetadata","credentialRecord","metadata","get","setOpenId4VcCredentialMetadata","set","getRefreshCredentialMetadata","setRefreshCredentialMetadata","deleteRefreshCredentialMetadata","delete","persistCredentialRecord","agentContext","record","dependencyManager","resolve","update","Error","markOpenIDCredentialStatus","status","refreshMetadata","lastCheckResult","temporaryMetaVanillaObject","notificationMetadata","undefined","tokenResponse"],"sourceRoot":"../../../../src","sources":["modules/openid/metadata.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,38 @@
1
+ import { useAgent } from '@credo-ts/react-hooks';
2
+ import { useServices, TOKENS } from '../../container-api';
3
+ export let NotificationEventType = /*#__PURE__*/function (NotificationEventType) {
4
+ NotificationEventType["CREDENTIAL_ACCEPTED"] = "credential_accepted";
5
+ NotificationEventType["CREDENTIAL_DELETED"] = "credential_deleted";
6
+ NotificationEventType["CREDENTIAL_FAILURE"] = "credential_failure";
7
+ return NotificationEventType;
8
+ }({});
9
+
10
+ //TODO: ADD TYPE SAFETY
11
+
12
+ export const useOpenId4VciNotifications = () => {
13
+ const {
14
+ agent
15
+ } = useAgent();
16
+ const [logger] = useServices([TOKENS.UTIL_LOGGER, TOKENS.UTIL_OCA_RESOLVER]);
17
+
18
+ /**
19
+ * Sends notification to issuer with credential status.
20
+ * @param options
21
+ */
22
+ const sendOpenId4VciNotification = async options => {
23
+ if (!agent) {
24
+ const error = 'Agent undefined!';
25
+ logger.error(`[OpenIDCredentialNotification] ${error}`);
26
+ throw new Error(error);
27
+ }
28
+ await agent.modules.openId4VcHolder.sendNotification({
29
+ notificationMetadata: options === null || options === void 0 ? void 0 : options.notificationMetadata,
30
+ accessToken: options === null || options === void 0 ? void 0 : options.accessToken,
31
+ notificationEvent: options === null || options === void 0 ? void 0 : options.notificationEvent
32
+ });
33
+ };
34
+ return {
35
+ sendOpenId4VciNotification
36
+ };
37
+ };
38
+ //# sourceMappingURL=notification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useAgent","useServices","TOKENS","NotificationEventType","useOpenId4VciNotifications","agent","logger","UTIL_LOGGER","UTIL_OCA_RESOLVER","sendOpenId4VciNotification","options","error","Error","modules","openId4VcHolder","sendNotification","notificationMetadata","accessToken","notificationEvent"],"sourceRoot":"../../../../src","sources":["modules/openid/notification.tsx"],"mappings":"AACA,SAASA,QAAQ,QAAQ,uBAAuB;AAChD,SAASC,WAAW,EAAEC,MAAM,QAAQ,qBAAqB;AAEzD,WAAYC,qBAAqB,0BAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAAA,OAArBA,qBAAqB;AAAA;;AAMjC;;AAOA,OAAO,MAAMC,0BAA0B,GAAGA,CAAA,KAAM;EAC9C,MAAM;IAAEC;EAAM,CAAC,GAAGL,QAAQ,CAAC,CAAC;EAC5B,MAAM,CAACM,MAAM,CAAC,GAAGL,WAAW,CAAC,CAACC,MAAM,CAACK,WAAW,EAAEL,MAAM,CAACM,iBAAiB,CAAC,CAAC;;EAE5E;AACF;AACA;AACA;EACE,MAAMC,0BAA0B,GAAG,MAAOC,OAA0C,IAAK;IACvF,IAAI,CAACL,KAAK,EAAE;MACV,MAAMM,KAAK,GAAG,kBAAkB;MAChCL,MAAM,CAACK,KAAK,CAAC,kCAAkCA,KAAK,EAAE,CAAC;MACvD,MAAM,IAAIC,KAAK,CAACD,KAAK,CAAC;IACxB;IACA,MAAMN,KAAK,CAACQ,OAAO,CAACC,eAAe,CAACC,gBAAgB,CAAC;MACnDC,oBAAoB,EAAEN,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEM,oBAAoB;MACnDC,WAAW,EAAEP,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEO,WAAW;MACjCC,iBAAiB,EAAER,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEQ;IAC9B,CAAC,CAAC;EACJ,CAAC;EACD,OAAO;IACLT;EACF,CAAC;AACH,CAAC","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  import { OpenId4VciCredentialFormatProfile } from '@credo-ts/openid4vc';
2
2
  import { DidJwk, DidKey, getJwkFromKey, JwaSignatureAlgorithm, KeyBackend, Mdoc, MdocRecord, SdJwtVcRecord, W3cCredentialRecord } from '@credo-ts/core';
3
- import { extractOpenId4VcCredentialMetadata, setOpenId4VcCredentialMetadata } from './metadata';
3
+ import { extractOpenId4VcCredentialMetadata, setOpenId4VcCredentialMetadata, temporaryMetaVanillaObject } from './metadata';
4
4
  export const resolveOpenId4VciOffer = async ({
5
5
  agent,
6
6
  data,
@@ -169,6 +169,12 @@ export const receiveCredentialFromOpenId4VciOffer = async ({
169
169
  tags: {}
170
170
  });
171
171
  }
172
+ const notificationMetadata = {
173
+ ...firstCredential.notificationMetadata
174
+ };
175
+ if (notificationMetadata) {
176
+ temporaryMetaVanillaObject.notificationMetadata = notificationMetadata;
177
+ }
172
178
  const openId4VcMetadata = extractOpenId4VcCredentialMetadata(resolvedCredentialOffer.offeredCredentials[0], {
173
179
  id: resolvedCredentialOffer.metadata.issuer,
174
180
  display: resolvedCredentialOffer.metadata.credentialIssuerMetadata.display
@@ -1 +1 @@
1
- {"version":3,"names":["OpenId4VciCredentialFormatProfile","DidJwk","DidKey","getJwkFromKey","JwaSignatureAlgorithm","KeyBackend","Mdoc","MdocRecord","SdJwtVcRecord","W3cCredentialRecord","extractOpenId4VcCredentialMetadata","setOpenId4VcCredentialMetadata","resolveOpenId4VciOffer","agent","data","uri","authorization","offerUri","encodeURIComponent","JSON","stringify","Error","config","logger","info","resolvedCredentialOffer","modules","openId4VcHolder","resolveCredentialOffer","acquirePreAuthorizedAccessToken","txCode","requestToken","customCredentialBindingResolver","supportedDidMethods","keyType","supportsAllDidMethods","supportsJwk","credentialFormat","supportedCredentialId","pidSchemes","didMethod","includes","undefined","offeredCredentialConfiguration","offeredCredentialConfigurations","shouldKeyBeHardwareBackedForMsoMdoc","format","MsoMdoc","msoMdocDoctypes","doctype","shouldKeyBeHardwareBackedForSdJwtVc","sdJwtVcVcts","vct","shouldKeyBeHardwareBacked","key","wallet","createKey","keyBackend","SecureElement","Software","didResult","dids","create","method","options","didState","state","verificationMethodId","didJwk","fromDid","did","didKey","fingerprint","didUrl","SdJwtVc","jwk","join","receiveCredentialFromOpenId4VciOffer","tokenResponse","credentialConfigurationIdsToRequest","clientId","offeredCredentialsToRequest","offeredCredentials","filter","offered","id","length","credentials","requestCredentials","credentialsToRequest","verifyCredentialStatus","allowedProofOfPossessionSignatureAlgorithms","EdDSA","ES256","credentialBindingResolver","firstCredential","record","credential","compactSdJwtVc","compact","mdoc","tags","openId4VcMetadata","metadata","issuer","display","credentialIssuerMetadata"],"sourceRoot":"../../../../src","sources":["modules/openid/offerResolve.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["OpenId4VciCredentialFormatProfile","DidJwk","DidKey","getJwkFromKey","JwaSignatureAlgorithm","KeyBackend","Mdoc","MdocRecord","SdJwtVcRecord","W3cCredentialRecord","extractOpenId4VcCredentialMetadata","setOpenId4VcCredentialMetadata","temporaryMetaVanillaObject","resolveOpenId4VciOffer","agent","data","uri","authorization","offerUri","encodeURIComponent","JSON","stringify","Error","config","logger","info","resolvedCredentialOffer","modules","openId4VcHolder","resolveCredentialOffer","acquirePreAuthorizedAccessToken","txCode","requestToken","customCredentialBindingResolver","supportedDidMethods","keyType","supportsAllDidMethods","supportsJwk","credentialFormat","supportedCredentialId","pidSchemes","didMethod","includes","undefined","offeredCredentialConfiguration","offeredCredentialConfigurations","shouldKeyBeHardwareBackedForMsoMdoc","format","MsoMdoc","msoMdocDoctypes","doctype","shouldKeyBeHardwareBackedForSdJwtVc","sdJwtVcVcts","vct","shouldKeyBeHardwareBacked","key","wallet","createKey","keyBackend","SecureElement","Software","didResult","dids","create","method","options","didState","state","verificationMethodId","didJwk","fromDid","did","didKey","fingerprint","didUrl","SdJwtVc","jwk","join","receiveCredentialFromOpenId4VciOffer","tokenResponse","credentialConfigurationIdsToRequest","clientId","offeredCredentialsToRequest","offeredCredentials","filter","offered","id","length","credentials","requestCredentials","credentialsToRequest","verifyCredentialStatus","allowedProofOfPossessionSignatureAlgorithms","EdDSA","ES256","credentialBindingResolver","firstCredential","record","credential","compactSdJwtVc","compact","mdoc","tags","notificationMetadata","openId4VcMetadata","metadata","issuer","display","credentialIssuerMetadata"],"sourceRoot":"../../../../src","sources":["modules/openid/offerResolve.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,89 @@
1
+ import { JwaSignatureAlgorithm, Mdoc, MdocRecord, SdJwtVcRecord, W3cCredentialRecord } from '@credo-ts/core';
2
+ import { customCredentialBindingResolver } from '../offerResolve';
3
+ import { extractOpenId4VcCredentialMetadata, getRefreshCredentialMetadata, setOpenId4VcCredentialMetadata, setRefreshCredentialMetadata } from '../metadata';
4
+ import { RefreshStatus } from './types';
5
+ export async function reissueCredentialWithAccessToken({
6
+ agent,
7
+ logger,
8
+ record,
9
+ tokenResponse,
10
+ clientId,
11
+ pidSchemes
12
+ }) {
13
+ if (!record) {
14
+ throw new Error('No credential record provided for re-issuance.');
15
+ }
16
+ const refreshMetaData = getRefreshCredentialMetadata(record);
17
+ if (!refreshMetaData) {
18
+ throw new Error('No refresh metadata found on the record for re-issuance.');
19
+ }
20
+ const {
21
+ credentialConfigurationId,
22
+ resolvedCredentialOffer
23
+ } = refreshMetaData;
24
+ if (!resolvedCredentialOffer) {
25
+ throw new Error('No resolved credential offer found in the refresh metadata for re-issuance.');
26
+ }
27
+ if (!tokenResponse.access_token) {
28
+ throw new Error('No access token found in the token response for re-issuance.');
29
+ }
30
+ logger.info('*** Starting to get new credential via re-issuance flow ***');
31
+ // Request a **new** credential using the *existing* configuration id
32
+ const creds = await agent.modules.openId4VcHolder.requestCredentials({
33
+ resolvedCredentialOffer,
34
+ accessToken: tokenResponse.access_token,
35
+ tokenType: tokenResponse.token_type || 'Bearer',
36
+ cNonce: tokenResponse.c_nonce,
37
+ clientId,
38
+ credentialsToRequest: [credentialConfigurationId],
39
+ verifyCredentialStatus: false,
40
+ // you’ll check after storing
41
+ allowedProofOfPossessionSignatureAlgorithms: [JwaSignatureAlgorithm.EdDSA, JwaSignatureAlgorithm.ES256],
42
+ credentialBindingResolver: async opts => customCredentialBindingResolver({
43
+ agent,
44
+ supportedDidMethods: opts.supportedDidMethods,
45
+ keyType: opts.keyType,
46
+ supportsAllDidMethods: opts.supportsAllDidMethods,
47
+ supportsJwk: opts.supportsJwk,
48
+ credentialFormat: opts.credentialFormat,
49
+ supportedCredentialId: opts.supportedCredentialId,
50
+ resolvedCredentialOffer: resolvedCredentialOffer,
51
+ pidSchemes
52
+ })
53
+ });
54
+ logger.info('*** New credential received via re-issuance flow ***.');
55
+
56
+ // Normalize to your local record types
57
+ const [firstCredential] = creds;
58
+ if (!firstCredential || typeof firstCredential === 'string') {
59
+ throw new Error('Issuer returned empty or malformed credential on re-issuance.');
60
+ }
61
+ let newRecord;
62
+ if ('compact' in firstCredential.credential) {
63
+ newRecord = new SdJwtVcRecord({
64
+ compactSdJwtVc: firstCredential.credential.compact
65
+ });
66
+ } else if ((firstCredential === null || firstCredential === void 0 ? void 0 : firstCredential.credential) instanceof Mdoc) {
67
+ newRecord = new MdocRecord({
68
+ mdoc: firstCredential.credential
69
+ });
70
+ } else {
71
+ newRecord = new W3cCredentialRecord({
72
+ credential: firstCredential.credential,
73
+ tags: {}
74
+ });
75
+ }
76
+ const openId4VcMetadata = extractOpenId4VcCredentialMetadata(resolvedCredentialOffer.offeredCredentials[0], {
77
+ id: resolvedCredentialOffer.metadata.issuer,
78
+ display: resolvedCredentialOffer.metadata.credentialIssuerMetadata.display
79
+ });
80
+ setOpenId4VcCredentialMetadata(newRecord, openId4VcMetadata);
81
+ setRefreshCredentialMetadata(newRecord, {
82
+ ...refreshMetaData,
83
+ refreshToken: tokenResponse.refresh_token || refreshMetaData.refreshToken,
84
+ lastCheckedAt: Date.now(),
85
+ lastCheckResult: RefreshStatus.Valid
86
+ });
87
+ return newRecord;
88
+ }
89
+ //# sourceMappingURL=reIssuance.js.map