@bifold/core 2.10.2 → 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 (260) 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/constants.js +1 -0
  12. package/lib/commonjs/constants.js.map +1 -1
  13. package/lib/commonjs/container-api.js +3 -1
  14. package/lib/commonjs/container-api.js.map +1 -1
  15. package/lib/commonjs/container-impl.js +16 -0
  16. package/lib/commonjs/container-impl.js.map +1 -1
  17. package/lib/commonjs/hooks/notifications.js +4 -2
  18. package/lib/commonjs/hooks/notifications.js.map +1 -1
  19. package/lib/commonjs/hooks/useBifoldAgentSetup.js +5 -3
  20. package/lib/commonjs/hooks/useBifoldAgentSetup.js.map +1 -1
  21. package/lib/commonjs/index.js +16 -0
  22. package/lib/commonjs/index.js.map +1 -1
  23. package/lib/commonjs/localization/en/en.json +8 -1
  24. package/lib/commonjs/localization/fr/fr.json +8 -1
  25. package/lib/commonjs/localization/pt-br/pt-br.json +8 -1
  26. package/lib/commonjs/modules/openid/components/OpenIDCredentialCard.js +41 -1
  27. package/lib/commonjs/modules/openid/components/OpenIDCredentialCard.js.map +1 -1
  28. package/lib/commonjs/modules/openid/context/OpenIDCredentialRecordProvider.js +34 -111
  29. package/lib/commonjs/modules/openid/context/OpenIDCredentialRecordProvider.js.map +1 -1
  30. package/lib/commonjs/modules/openid/hooks/openid.js +38 -6
  31. package/lib/commonjs/modules/openid/hooks/openid.js.map +1 -1
  32. package/lib/commonjs/modules/openid/hooks/useAcceptReplacement.js +82 -0
  33. package/lib/commonjs/modules/openid/hooks/useAcceptReplacement.js.map +1 -0
  34. package/lib/commonjs/modules/openid/hooks/useCredentialErrorsFromRegistry.js +60 -0
  35. package/lib/commonjs/modules/openid/hooks/useCredentialErrorsFromRegistry.js.map +1 -0
  36. package/lib/commonjs/modules/openid/hooks/useDeclineReplacement.js +84 -0
  37. package/lib/commonjs/modules/openid/hooks/useDeclineReplacement.js.map +1 -0
  38. package/lib/commonjs/modules/openid/hooks/useOpenIdReplacementNavigation.js +55 -0
  39. package/lib/commonjs/modules/openid/hooks/useOpenIdReplacementNavigation.js.map +1 -0
  40. package/lib/commonjs/modules/openid/hooks/useReplacementNotifications.js +82 -0
  41. package/lib/commonjs/modules/openid/hooks/useReplacementNotifications.js.map +1 -0
  42. package/lib/commonjs/modules/openid/metadata.js +60 -1
  43. package/lib/commonjs/modules/openid/metadata.js.map +1 -1
  44. package/lib/commonjs/modules/openid/notification.js +42 -0
  45. package/lib/commonjs/modules/openid/notification.js.map +1 -0
  46. package/lib/commonjs/modules/openid/offerResolve.js +6 -0
  47. package/lib/commonjs/modules/openid/offerResolve.js.map +1 -1
  48. package/lib/commonjs/modules/openid/refresh/reIssuance.js +95 -0
  49. package/lib/commonjs/modules/openid/refresh/reIssuance.js.map +1 -0
  50. package/lib/commonjs/modules/openid/refresh/refreshOrchestrator.js +265 -0
  51. package/lib/commonjs/modules/openid/refresh/refreshOrchestrator.js.map +1 -0
  52. package/lib/commonjs/modules/openid/refresh/refreshToken.js +78 -0
  53. package/lib/commonjs/modules/openid/refresh/refreshToken.js.map +1 -0
  54. package/lib/commonjs/modules/openid/refresh/registery.js +143 -0
  55. package/lib/commonjs/modules/openid/refresh/registery.js.map +1 -0
  56. package/lib/commonjs/modules/openid/refresh/types.js +17 -0
  57. package/lib/commonjs/modules/openid/refresh/types.js.map +1 -0
  58. package/lib/commonjs/modules/openid/refresh/verifyCredentialStatus.js +34 -0
  59. package/lib/commonjs/modules/openid/refresh/verifyCredentialStatus.js.map +1 -0
  60. package/lib/commonjs/modules/openid/screens/OpenIDCredentialOffer.js +39 -2
  61. package/lib/commonjs/modules/openid/screens/OpenIDCredentialOffer.js.map +1 -1
  62. package/lib/commonjs/modules/openid/utils/utils.js +66 -0
  63. package/lib/commonjs/modules/openid/utils/utils.js.map +1 -1
  64. package/lib/commonjs/screens/CredentialDetails.js +28 -6
  65. package/lib/commonjs/screens/CredentialDetails.js.map +1 -1
  66. package/lib/commonjs/screens/CredentialOffer.js +6 -9
  67. package/lib/commonjs/screens/CredentialOffer.js.map +1 -1
  68. package/lib/commonjs/screens/CredentialOfferAccept.js +18 -2
  69. package/lib/commonjs/screens/CredentialOfferAccept.js.map +1 -1
  70. package/lib/commonjs/screens/Developer.js +26 -0
  71. package/lib/commonjs/screens/Developer.js.map +1 -1
  72. package/lib/commonjs/screens/Home.js +39 -1
  73. package/lib/commonjs/screens/Home.js.map +1 -1
  74. package/lib/commonjs/screens/ListCredentials.js +2 -2
  75. package/lib/commonjs/screens/ListCredentials.js.map +1 -1
  76. package/lib/commonjs/screens/ProofChangeCredential.js +3 -3
  77. package/lib/commonjs/screens/ProofChangeCredential.js.map +1 -1
  78. package/lib/commonjs/screens/ProofRequest.js +4 -4
  79. package/lib/commonjs/screens/ProofRequest.js.map +1 -1
  80. package/lib/commonjs/services/AgentBridge.js +90 -0
  81. package/lib/commonjs/services/AgentBridge.js.map +1 -0
  82. package/lib/commonjs/types/credentials.js +9 -0
  83. package/lib/commonjs/types/credentials.js.map +1 -1
  84. package/lib/commonjs/utils/agent.js +1 -1
  85. package/lib/commonjs/utils/agent.js.map +1 -1
  86. package/lib/commonjs/utils/cred-def.js +50 -43
  87. package/lib/commonjs/utils/cred-def.js.map +1 -1
  88. package/lib/commonjs/utils/credential.js +217 -1
  89. package/lib/commonjs/utils/credential.js.map +1 -1
  90. package/lib/commonjs/utils/helpers.js +83 -22
  91. package/lib/commonjs/utils/helpers.js.map +1 -1
  92. package/lib/module/components/listItems/NotificationListItem.js +19 -11
  93. package/lib/module/components/listItems/NotificationListItem.js.map +1 -1
  94. package/lib/module/components/misc/CredentialCard.js +3 -1
  95. package/lib/module/components/misc/CredentialCard.js.map +1 -1
  96. package/lib/module/components/misc/CredentialCard10.js +14 -6
  97. package/lib/module/components/misc/CredentialCard10.js.map +1 -1
  98. package/lib/module/components/misc/CredentialCard11.js +17 -14
  99. package/lib/module/components/misc/CredentialCard11.js.map +1 -1
  100. package/lib/module/components/views/CredentialDetailPrimaryHeader.js +9 -8
  101. package/lib/module/components/views/CredentialDetailPrimaryHeader.js.map +1 -1
  102. package/lib/module/constants.js +1 -0
  103. package/lib/module/constants.js.map +1 -1
  104. package/lib/module/container-api.js +3 -1
  105. package/lib/module/container-api.js.map +1 -1
  106. package/lib/module/container-impl.js +16 -0
  107. package/lib/module/container-impl.js.map +1 -1
  108. package/lib/module/hooks/notifications.js +4 -2
  109. package/lib/module/hooks/notifications.js.map +1 -1
  110. package/lib/module/hooks/useBifoldAgentSetup.js +5 -3
  111. package/lib/module/hooks/useBifoldAgentSetup.js.map +1 -1
  112. package/lib/module/index.js +3 -1
  113. package/lib/module/index.js.map +1 -1
  114. package/lib/module/localization/en/en.json +8 -1
  115. package/lib/module/localization/fr/fr.json +8 -1
  116. package/lib/module/localization/pt-br/pt-br.json +8 -1
  117. package/lib/module/modules/openid/components/OpenIDCredentialCard.js +41 -1
  118. package/lib/module/modules/openid/components/OpenIDCredentialCard.js.map +1 -1
  119. package/lib/module/modules/openid/context/OpenIDCredentialRecordProvider.js +34 -111
  120. package/lib/module/modules/openid/context/OpenIDCredentialRecordProvider.js.map +1 -1
  121. package/lib/module/modules/openid/hooks/openid.js +38 -5
  122. package/lib/module/modules/openid/hooks/openid.js.map +1 -1
  123. package/lib/module/modules/openid/hooks/useAcceptReplacement.js +76 -0
  124. package/lib/module/modules/openid/hooks/useAcceptReplacement.js.map +1 -0
  125. package/lib/module/modules/openid/hooks/useCredentialErrorsFromRegistry.js +54 -0
  126. package/lib/module/modules/openid/hooks/useCredentialErrorsFromRegistry.js.map +1 -0
  127. package/lib/module/modules/openid/hooks/useDeclineReplacement.js +77 -0
  128. package/lib/module/modules/openid/hooks/useDeclineReplacement.js.map +1 -0
  129. package/lib/module/modules/openid/hooks/useOpenIdReplacementNavigation.js +47 -0
  130. package/lib/module/modules/openid/hooks/useOpenIdReplacementNavigation.js.map +1 -0
  131. package/lib/module/modules/openid/hooks/useReplacementNotifications.js +75 -0
  132. package/lib/module/modules/openid/hooks/useReplacementNotifications.js.map +1 -0
  133. package/lib/module/modules/openid/metadata.js +52 -1
  134. package/lib/module/modules/openid/metadata.js.map +1 -1
  135. package/lib/module/modules/openid/notification.js +38 -0
  136. package/lib/module/modules/openid/notification.js.map +1 -0
  137. package/lib/module/modules/openid/offerResolve.js +7 -1
  138. package/lib/module/modules/openid/offerResolve.js.map +1 -1
  139. package/lib/module/modules/openid/refresh/reIssuance.js +89 -0
  140. package/lib/module/modules/openid/refresh/reIssuance.js.map +1 -0
  141. package/lib/module/modules/openid/refresh/refreshOrchestrator.js +257 -0
  142. package/lib/module/modules/openid/refresh/refreshOrchestrator.js.map +1 -0
  143. package/lib/module/modules/openid/refresh/refreshToken.js +72 -0
  144. package/lib/module/modules/openid/refresh/refreshToken.js.map +1 -0
  145. package/lib/module/modules/openid/refresh/registery.js +135 -0
  146. package/lib/module/modules/openid/refresh/registery.js.map +1 -0
  147. package/lib/module/modules/openid/refresh/types.js +11 -0
  148. package/lib/module/modules/openid/refresh/types.js.map +1 -0
  149. package/lib/module/modules/openid/refresh/verifyCredentialStatus.js +28 -0
  150. package/lib/module/modules/openid/refresh/verifyCredentialStatus.js.map +1 -0
  151. package/lib/module/modules/openid/screens/OpenIDCredentialOffer.js +39 -2
  152. package/lib/module/modules/openid/screens/OpenIDCredentialOffer.js.map +1 -1
  153. package/lib/module/modules/openid/utils/utils.js +64 -1
  154. package/lib/module/modules/openid/utils/utils.js.map +1 -1
  155. package/lib/module/screens/CredentialDetails.js +29 -7
  156. package/lib/module/screens/CredentialDetails.js.map +1 -1
  157. package/lib/module/screens/CredentialOffer.js +7 -10
  158. package/lib/module/screens/CredentialOffer.js.map +1 -1
  159. package/lib/module/screens/CredentialOfferAccept.js +19 -3
  160. package/lib/module/screens/CredentialOfferAccept.js.map +1 -1
  161. package/lib/module/screens/Developer.js +27 -1
  162. package/lib/module/screens/Developer.js.map +1 -1
  163. package/lib/module/screens/Home.js +41 -3
  164. package/lib/module/screens/Home.js.map +1 -1
  165. package/lib/module/screens/ListCredentials.js +1 -1
  166. package/lib/module/screens/ListCredentials.js.map +1 -1
  167. package/lib/module/screens/ProofChangeCredential.js +1 -1
  168. package/lib/module/screens/ProofChangeCredential.js.map +1 -1
  169. package/lib/module/screens/ProofRequest.js +1 -1
  170. package/lib/module/screens/ProofRequest.js.map +1 -1
  171. package/lib/module/services/AgentBridge.js +83 -0
  172. package/lib/module/services/AgentBridge.js.map +1 -0
  173. package/lib/module/types/credentials.js +8 -1
  174. package/lib/module/types/credentials.js.map +1 -1
  175. package/lib/module/utils/agent.js +2 -2
  176. package/lib/module/utils/agent.js.map +1 -1
  177. package/lib/module/utils/cred-def.js +46 -43
  178. package/lib/module/utils/cred-def.js.map +1 -1
  179. package/lib/module/utils/credential.js +210 -0
  180. package/lib/module/utils/credential.js.map +1 -1
  181. package/lib/module/utils/helpers.js +80 -22
  182. package/lib/module/utils/helpers.js.map +1 -1
  183. package/lib/typescript/src/components/listItems/NotificationListItem.d.ts.map +1 -1
  184. package/lib/typescript/src/components/misc/CredentialCard.d.ts +1 -2
  185. package/lib/typescript/src/components/misc/CredentialCard.d.ts.map +1 -1
  186. package/lib/typescript/src/components/misc/CredentialCard10.d.ts.map +1 -1
  187. package/lib/typescript/src/components/misc/CredentialCard11.d.ts +1 -5
  188. package/lib/typescript/src/components/misc/CredentialCard11.d.ts.map +1 -1
  189. package/lib/typescript/src/components/views/CredentialDetailPrimaryHeader.d.ts.map +1 -1
  190. package/lib/typescript/src/constants.d.ts +2 -1
  191. package/lib/typescript/src/constants.d.ts.map +1 -1
  192. package/lib/typescript/src/container-api.d.ts +8 -0
  193. package/lib/typescript/src/container-api.d.ts.map +1 -1
  194. package/lib/typescript/src/container-impl.d.ts +2 -0
  195. package/lib/typescript/src/container-impl.d.ts.map +1 -1
  196. package/lib/typescript/src/hooks/notifications.d.ts +2 -1
  197. package/lib/typescript/src/hooks/notifications.d.ts.map +1 -1
  198. package/lib/typescript/src/hooks/useBifoldAgentSetup.d.ts.map +1 -1
  199. package/lib/typescript/src/index.d.ts +4 -1
  200. package/lib/typescript/src/index.d.ts.map +1 -1
  201. package/lib/typescript/src/modules/openid/components/OpenIDCredentialCard.d.ts.map +1 -1
  202. package/lib/typescript/src/modules/openid/context/OpenIDCredentialRecordProvider.d.ts +1 -2
  203. package/lib/typescript/src/modules/openid/context/OpenIDCredentialRecordProvider.d.ts.map +1 -1
  204. package/lib/typescript/src/modules/openid/hooks/openid.d.ts.map +1 -1
  205. package/lib/typescript/src/modules/openid/hooks/useAcceptReplacement.d.ts +11 -0
  206. package/lib/typescript/src/modules/openid/hooks/useAcceptReplacement.d.ts.map +1 -0
  207. package/lib/typescript/src/modules/openid/hooks/useCredentialErrorsFromRegistry.d.ts +9 -0
  208. package/lib/typescript/src/modules/openid/hooks/useCredentialErrorsFromRegistry.d.ts.map +1 -0
  209. package/lib/typescript/src/modules/openid/hooks/useDeclineReplacement.d.ts +16 -0
  210. package/lib/typescript/src/modules/openid/hooks/useDeclineReplacement.d.ts.map +1 -0
  211. package/lib/typescript/src/modules/openid/hooks/useOpenIdReplacementNavigation.d.ts +8 -0
  212. package/lib/typescript/src/modules/openid/hooks/useOpenIdReplacementNavigation.d.ts.map +1 -0
  213. package/lib/typescript/src/modules/openid/hooks/useReplacementNotifications.d.ts +6 -0
  214. package/lib/typescript/src/modules/openid/hooks/useReplacementNotifications.d.ts.map +1 -0
  215. package/lib/typescript/src/modules/openid/metadata.d.ts +27 -2
  216. package/lib/typescript/src/modules/openid/metadata.d.ts.map +1 -1
  217. package/lib/typescript/src/modules/openid/notification.d.ts +16 -0
  218. package/lib/typescript/src/modules/openid/notification.d.ts.map +1 -0
  219. package/lib/typescript/src/modules/openid/offerResolve.d.ts.map +1 -1
  220. package/lib/typescript/src/modules/openid/refresh/reIssuance.d.ts +19 -0
  221. package/lib/typescript/src/modules/openid/refresh/reIssuance.d.ts.map +1 -0
  222. package/lib/typescript/src/modules/openid/refresh/refreshOrchestrator.d.ts +25 -0
  223. package/lib/typescript/src/modules/openid/refresh/refreshOrchestrator.d.ts.map +1 -0
  224. package/lib/typescript/src/modules/openid/refresh/refreshToken.d.ts +9 -0
  225. package/lib/typescript/src/modules/openid/refresh/refreshToken.d.ts.map +1 -0
  226. package/lib/typescript/src/modules/openid/refresh/registery.d.ts +55 -0
  227. package/lib/typescript/src/modules/openid/refresh/registery.d.ts.map +1 -0
  228. package/lib/typescript/src/modules/openid/refresh/types.d.ts +59 -0
  229. package/lib/typescript/src/modules/openid/refresh/types.d.ts.map +1 -0
  230. package/lib/typescript/src/modules/openid/refresh/verifyCredentialStatus.d.ts +11 -0
  231. package/lib/typescript/src/modules/openid/refresh/verifyCredentialStatus.d.ts.map +1 -0
  232. package/lib/typescript/src/modules/openid/screens/OpenIDCredentialOffer.d.ts.map +1 -1
  233. package/lib/typescript/src/modules/openid/utils/utils.d.ts +4 -0
  234. package/lib/typescript/src/modules/openid/utils/utils.d.ts.map +1 -1
  235. package/lib/typescript/src/screens/CredentialDetails.d.ts.map +1 -1
  236. package/lib/typescript/src/screens/CredentialOffer.d.ts.map +1 -1
  237. package/lib/typescript/src/screens/CredentialOfferAccept.d.ts.map +1 -1
  238. package/lib/typescript/src/screens/Developer.d.ts.map +1 -1
  239. package/lib/typescript/src/screens/Home.d.ts.map +1 -1
  240. package/lib/typescript/src/screens/ListCredentials.d.ts.map +1 -1
  241. package/lib/typescript/src/services/AgentBridge.d.ts +31 -0
  242. package/lib/typescript/src/services/AgentBridge.d.ts.map +1 -0
  243. package/lib/typescript/src/types/credentials.d.ts +5 -0
  244. package/lib/typescript/src/types/credentials.d.ts.map +1 -1
  245. package/lib/typescript/src/types/notification.d.ts +4 -0
  246. package/lib/typescript/src/types/notification.d.ts.map +1 -1
  247. package/lib/typescript/src/utils/agent.d.ts.map +1 -1
  248. package/lib/typescript/src/utils/cred-def.d.ts +8 -3
  249. package/lib/typescript/src/utils/cred-def.d.ts.map +1 -1
  250. package/lib/typescript/src/utils/credential.d.ts +36 -0
  251. package/lib/typescript/src/utils/credential.d.ts.map +1 -1
  252. package/lib/typescript/src/utils/helpers.d.ts +5 -1
  253. package/lib/typescript/src/utils/helpers.d.ts.map +1 -1
  254. package/package.json +10 -4
  255. package/lib/commonjs/modules/openid/refresh/refreshMetadata.js +0 -25
  256. package/lib/commonjs/modules/openid/refresh/refreshMetadata.js.map +0 -1
  257. package/lib/module/modules/openid/refresh/refreshMetadata.js +0 -18
  258. package/lib/module/modules/openid/refresh/refreshMetadata.js.map +0 -1
  259. package/lib/typescript/src/modules/openid/refresh/refreshMetadata.d.ts +0 -20
  260. package/lib/typescript/src/modules/openid/refresh/refreshMetadata.d.ts.map +0 -1
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.reissueCredentialWithAccessToken = reissueCredentialWithAccessToken;
7
+ var _core = require("@credo-ts/core");
8
+ var _offerResolve = require("../offerResolve");
9
+ var _metadata = require("../metadata");
10
+ var _types = require("./types");
11
+ async function reissueCredentialWithAccessToken({
12
+ agent,
13
+ logger,
14
+ record,
15
+ tokenResponse,
16
+ clientId,
17
+ pidSchemes
18
+ }) {
19
+ if (!record) {
20
+ throw new Error('No credential record provided for re-issuance.');
21
+ }
22
+ const refreshMetaData = (0, _metadata.getRefreshCredentialMetadata)(record);
23
+ if (!refreshMetaData) {
24
+ throw new Error('No refresh metadata found on the record for re-issuance.');
25
+ }
26
+ const {
27
+ credentialConfigurationId,
28
+ resolvedCredentialOffer
29
+ } = refreshMetaData;
30
+ if (!resolvedCredentialOffer) {
31
+ throw new Error('No resolved credential offer found in the refresh metadata for re-issuance.');
32
+ }
33
+ if (!tokenResponse.access_token) {
34
+ throw new Error('No access token found in the token response for re-issuance.');
35
+ }
36
+ logger.info('*** Starting to get new credential via re-issuance flow ***');
37
+ // Request a **new** credential using the *existing* configuration id
38
+ const creds = await agent.modules.openId4VcHolder.requestCredentials({
39
+ resolvedCredentialOffer,
40
+ accessToken: tokenResponse.access_token,
41
+ tokenType: tokenResponse.token_type || 'Bearer',
42
+ cNonce: tokenResponse.c_nonce,
43
+ clientId,
44
+ credentialsToRequest: [credentialConfigurationId],
45
+ verifyCredentialStatus: false,
46
+ // you’ll check after storing
47
+ allowedProofOfPossessionSignatureAlgorithms: [_core.JwaSignatureAlgorithm.EdDSA, _core.JwaSignatureAlgorithm.ES256],
48
+ credentialBindingResolver: async opts => (0, _offerResolve.customCredentialBindingResolver)({
49
+ agent,
50
+ supportedDidMethods: opts.supportedDidMethods,
51
+ keyType: opts.keyType,
52
+ supportsAllDidMethods: opts.supportsAllDidMethods,
53
+ supportsJwk: opts.supportsJwk,
54
+ credentialFormat: opts.credentialFormat,
55
+ supportedCredentialId: opts.supportedCredentialId,
56
+ resolvedCredentialOffer: resolvedCredentialOffer,
57
+ pidSchemes
58
+ })
59
+ });
60
+ logger.info('*** New credential received via re-issuance flow ***.');
61
+
62
+ // Normalize to your local record types
63
+ const [firstCredential] = creds;
64
+ if (!firstCredential || typeof firstCredential === 'string') {
65
+ throw new Error('Issuer returned empty or malformed credential on re-issuance.');
66
+ }
67
+ let newRecord;
68
+ if ('compact' in firstCredential.credential) {
69
+ newRecord = new _core.SdJwtVcRecord({
70
+ compactSdJwtVc: firstCredential.credential.compact
71
+ });
72
+ } else if ((firstCredential === null || firstCredential === void 0 ? void 0 : firstCredential.credential) instanceof _core.Mdoc) {
73
+ newRecord = new _core.MdocRecord({
74
+ mdoc: firstCredential.credential
75
+ });
76
+ } else {
77
+ newRecord = new _core.W3cCredentialRecord({
78
+ credential: firstCredential.credential,
79
+ tags: {}
80
+ });
81
+ }
82
+ const openId4VcMetadata = (0, _metadata.extractOpenId4VcCredentialMetadata)(resolvedCredentialOffer.offeredCredentials[0], {
83
+ id: resolvedCredentialOffer.metadata.issuer,
84
+ display: resolvedCredentialOffer.metadata.credentialIssuerMetadata.display
85
+ });
86
+ (0, _metadata.setOpenId4VcCredentialMetadata)(newRecord, openId4VcMetadata);
87
+ (0, _metadata.setRefreshCredentialMetadata)(newRecord, {
88
+ ...refreshMetaData,
89
+ refreshToken: tokenResponse.refresh_token || refreshMetaData.refreshToken,
90
+ lastCheckedAt: Date.now(),
91
+ lastCheckResult: _types.RefreshStatus.Valid
92
+ });
93
+ return newRecord;
94
+ }
95
+ //# sourceMappingURL=reIssuance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_core","require","_offerResolve","_metadata","_types","reissueCredentialWithAccessToken","agent","logger","record","tokenResponse","clientId","pidSchemes","Error","refreshMetaData","getRefreshCredentialMetadata","credentialConfigurationId","resolvedCredentialOffer","access_token","info","creds","modules","openId4VcHolder","requestCredentials","accessToken","tokenType","token_type","cNonce","c_nonce","credentialsToRequest","verifyCredentialStatus","allowedProofOfPossessionSignatureAlgorithms","JwaSignatureAlgorithm","EdDSA","ES256","credentialBindingResolver","opts","customCredentialBindingResolver","supportedDidMethods","keyType","supportsAllDidMethods","supportsJwk","credentialFormat","supportedCredentialId","firstCredential","newRecord","credential","SdJwtVcRecord","compactSdJwtVc","compact","Mdoc","MdocRecord","mdoc","W3cCredentialRecord","tags","openId4VcMetadata","extractOpenId4VcCredentialMetadata","offeredCredentials","id","metadata","issuer","display","credentialIssuerMetadata","setOpenId4VcCredentialMetadata","setRefreshCredentialMetadata","refreshToken","refresh_token","lastCheckedAt","Date","now","lastCheckResult","RefreshStatus","Valid"],"sourceRoot":"../../../../../src","sources":["modules/openid/refresh/reIssuance.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,265 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.RefreshOrchestrator = void 0;
7
+ var _core = require("@credo-ts/core");
8
+ var _refreshToken = require("./refreshToken");
9
+ var _reIssuance = require("./reIssuance");
10
+ var _types = require("./types");
11
+ var _registery = require("./registery");
12
+ var _verifyCredentialStatus = require("./verifyCredentialStatus");
13
+ var _metadata = require("../metadata");
14
+ // modules/openid/refresh/RefreshOrchestrator.ts
15
+
16
+ const defaultToLite = rec => {
17
+ var _rec$createdAt;
18
+ return {
19
+ id: rec.id,
20
+ // best-effort: SdJwt/W3C both expose claimFormat via tags in many setups.
21
+ // Fallback to JwtVc if unknown so UI has *some* value.
22
+ format: rec instanceof _core.W3cCredentialRecord && _core.ClaimFormat.JwtVc || rec instanceof _core.SdJwtVcRecord && _core.ClaimFormat.SdJwtVc || _core.ClaimFormat.JwtVc,
23
+ createdAt: (_rec$createdAt = rec.createdAt) === null || _rec$createdAt === void 0 ? void 0 : _rec$createdAt.toISOString(),
24
+ issuer: undefined
25
+ };
26
+ };
27
+ class RefreshOrchestrator {
28
+ intervalOn = false; // interval enabled?
29
+ runningOnce = false; // a run is in progress?
30
+
31
+ recentlyIssued = new Map();
32
+ constructor(logger, bridge, opts) {
33
+ this.logger = logger;
34
+ this.opts = {
35
+ intervalMs: 15 * 60 * 1000,
36
+ autoStart: true,
37
+ onError: e => this.logger.error(String(e)),
38
+ listRecords: async () => [],
39
+ toLite: defaultToLite,
40
+ ...(opts ?? {})
41
+ };
42
+ logger.info(`🔧 [RefreshOrchestrator] initialized -> ${JSON.stringify({
43
+ intervalMs: this.opts.intervalMs,
44
+ autoStart: this.opts.autoStart
45
+ })}`);
46
+ bridge.onReady(agent => {
47
+ this.agent = agent;
48
+ this.logger.info('🪝 [RefreshOrchestrator] Agent ready');
49
+ if (this.opts.autoStart && this.opts.intervalMs) this.start();
50
+ }, true);
51
+ }
52
+ configure(next) {
53
+ const prev = {
54
+ intervalOn: this.intervalOn,
55
+ intervalMs: this.opts.intervalMs ?? null,
56
+ autoStart: this.opts.autoStart ?? true,
57
+ agentReady: !!this.agent
58
+ };
59
+
60
+ // merge
61
+ this.opts = {
62
+ ...this.opts,
63
+ ...next
64
+ };
65
+ this.logger.info(`🔧 [RefreshOrchestrator] configure -> ${JSON.stringify({
66
+ intervalMs: this.opts.intervalMs,
67
+ autoStart: this.opts.autoStart
68
+ })}`);
69
+ const nowIntervalMs = this.opts.intervalMs ?? null;
70
+ const nowAutoStart = this.opts.autoStart ?? true;
71
+
72
+ // Case A: timer is running and intervalMs changed → restart
73
+ if (prev.intervalOn && prev.intervalMs !== nowIntervalMs) {
74
+ this.stop();
75
+ if (nowIntervalMs) this.start();
76
+ return;
77
+ }
78
+
79
+ // Case B: timer is running but user disabled intervals
80
+ if (prev.intervalOn && nowIntervalMs === null) {
81
+ this.stop();
82
+ return;
83
+ }
84
+
85
+ // Case C: timer is NOT running, but user enabled intervals
86
+ // Start iff: we have a positive interval, and either autoStart is true
87
+ // or the caller intends to enable interval operation via configure.
88
+ if (!prev.intervalOn && nowIntervalMs && nowAutoStart) {
89
+ // If agent isn't ready yet, defer; onReady() will auto-start.
90
+ if (this.agent) this.start();
91
+ // else do nothing — the constructor's bridge.onReady() will call start()
92
+ return;
93
+ }
94
+
95
+ // Case D: autoStart toggled from false→true with an interval set, and timer isn't running
96
+ if (!prev.intervalOn && !prev.autoStart && nowAutoStart && nowIntervalMs) {
97
+ if (this.agent) this.start();
98
+ // else defer to onReady()
99
+ return;
100
+ }
101
+
102
+ // Otherwise: no timer state change needed.
103
+ }
104
+ isRunning() {
105
+ return this.runningOnce;
106
+ }
107
+ start() {
108
+ if (this.intervalOn || !this.opts.intervalMs) return;
109
+ this.logger.info('⏱️ [RefreshOrchestrator] start interval');
110
+ this.intervalOn = true;
111
+ this.timer = setInterval(() => {
112
+ // fire-and-forget; guard against overlap
113
+ void this.runOnce('interval');
114
+ }, this.opts.intervalMs);
115
+ }
116
+ stop() {
117
+ if (!this.intervalOn) return;
118
+ this.logger.info('⏹️ [RefreshOrchestrator] stop interval');
119
+ clearInterval(this.timer);
120
+ this.timer = undefined;
121
+ this.intervalOn = false;
122
+ }
123
+ async runOnce(reason = 'manual') {
124
+ var _this$agent;
125
+ if (this.runningOnce) {
126
+ this.logger.warn('⚠️ [RefreshOrchestrator] runOnce skipped: already running');
127
+ return;
128
+ }
129
+ if (!this.agent || !((_this$agent = this.agent) !== null && _this$agent !== void 0 && _this$agent.isInitialized)) {
130
+ this.logger.warn('⚠️ [RefreshOrchestrator] runOnce skipped: agent not ready');
131
+ return;
132
+ }
133
+ this.runningOnce = true;
134
+ this.logger.info(`🔁 [RefreshOrchestrator] runOnce (${reason})`);
135
+ try {
136
+ const records = await this.opts.listRecords();
137
+ this.logger.info(`📦 [Refresh] found ${records.length} credential records`);
138
+ for (const rec of records) {
139
+ // don’t block whole batch if one fails
140
+ try {
141
+ await this.refreshRecord(rec);
142
+ } catch (e) {
143
+ var _this$opts$onError, _this$opts;
144
+ this.logger.error(`💥 [Refresh] record ${rec.id} failed: ${String(e)}`);
145
+ (_this$opts$onError = (_this$opts = this.opts).onError) === null || _this$opts$onError === void 0 || _this$opts$onError.call(_this$opts, e);
146
+ }
147
+ }
148
+ this.logger.info('✅ [Refresh] run completed');
149
+ } catch (e) {
150
+ var _this$opts$onError2, _this$opts2;
151
+ this.logger.error(`💥 [Refresh] global error: ${String(e)}`);
152
+ (_this$opts$onError2 = (_this$opts2 = this.opts).onError) === null || _this$opts$onError2 === void 0 || _this$opts$onError2.call(_this$opts2, e);
153
+ } finally {
154
+ this.runningOnce = false;
155
+ }
156
+ }
157
+ setIntervalMs(intervalMs) {
158
+ this.configure({
159
+ intervalMs
160
+ });
161
+ }
162
+ resolveFull(id) {
163
+ return this.recentlyIssued.get(id);
164
+ }
165
+
166
+ // ---- internals ----
167
+
168
+ async refreshRecord(rec) {
169
+ const {
170
+ shouldSkip,
171
+ markRefreshing,
172
+ clearRefreshing,
173
+ clearExpired,
174
+ markExpiredWithReplacement,
175
+ blockAsFailed,
176
+ blockAsSucceeded,
177
+ upsert
178
+ } = _registery.credentialRegistry.getState();
179
+ const id = rec.id;
180
+ if (!this.agent) {
181
+ this.logger.error(`💥 [Refresh] Agent not initialized, cannot refresh credential ${id}`);
182
+ return;
183
+ }
184
+
185
+ // 0) fast exit if this cred is already handled or in-flight
186
+ if (shouldSkip(id)) {
187
+ this.logger.info(`⏭️ [Refresh] skip credential ${id} (blocked/expired/in-flight)`);
188
+ return;
189
+ }
190
+
191
+ // 1) ensure a lite copy exists in registry (handy for UI/debug)
192
+ upsert(this.opts.toLite(rec));
193
+
194
+ // 2) mark in-flight
195
+ markRefreshing(id);
196
+ this.logger.info(`🧭 [Refresh] check credential ${id}`);
197
+ try {
198
+ // 3) verification
199
+ const isValid = await (0, _verifyCredentialStatus.verifyCredentialStatus)(rec, this.logger);
200
+ if (isValid) {
201
+ this.logger.info(`✅ [Refresh] valid → ${id}`);
202
+ // If it was previously expired for any reason, clear that and block as succeeded
203
+ clearExpired(id);
204
+ //We can block if isValid but for now we will keep checking it again every time
205
+ // blockAsSucceeded(id)
206
+ return;
207
+ }
208
+
209
+ // Invalid case:
210
+
211
+ await (0, _metadata.markOpenIDCredentialStatus)({
212
+ credential: rec,
213
+ status: _types.RefreshStatus.Invalid,
214
+ agentContext: this.agent.context
215
+ });
216
+
217
+ // 4) needs refresh → get access token
218
+ this.logger.info(`♻️ [Refresh] invalid, attempting re-issue → ${id}`);
219
+ const token = await (0, _refreshToken.refreshAccessToken)({
220
+ logger: this.logger,
221
+ cred: rec,
222
+ agentContext: this.agent.context
223
+ });
224
+ if (!token) {
225
+ const msg = `no refresh token available`;
226
+ this.logger.warn(`⚠️ [Refresh] ${msg} for ${id}`);
227
+ blockAsFailed(id, msg);
228
+ return;
229
+ }
230
+
231
+ // 5) re-issue
232
+ const newRecord = await (0, _reIssuance.reissueCredentialWithAccessToken)({
233
+ agent: this.agent,
234
+ logger: this.logger,
235
+ record: rec,
236
+ tokenResponse: token
237
+ });
238
+ if (newRecord) {
239
+ this.logger.info(`💾 [Refresh] new credential → ${newRecord.id}`);
240
+ // Queue a replacement for UI/notifications and block the old one as succeeded
241
+ markExpiredWithReplacement(id, this.opts.toLite(newRecord));
242
+ blockAsSucceeded(id);
243
+ this.recentlyIssued.set(newRecord.id, newRecord);
244
+ } else {
245
+ const msg = `re-issue returned no record`;
246
+ this.logger.warn(`⚠️ [Refresh] ${msg} for ${id}`);
247
+ blockAsFailed(id, msg);
248
+ await (0, _metadata.markOpenIDCredentialStatus)({
249
+ credential: rec,
250
+ status: _types.RefreshStatus.Invalid,
251
+ agentContext: this.agent.context
252
+ });
253
+ }
254
+ } catch (e) {
255
+ const err = String(e);
256
+ this.logger.error(`💥 [Refresh] error on ${id}: ${err}`);
257
+ blockAsFailed(id, err);
258
+ } finally {
259
+ // 6) clear in-flight marker
260
+ clearRefreshing(id);
261
+ }
262
+ }
263
+ }
264
+ exports.RefreshOrchestrator = RefreshOrchestrator;
265
+ //# sourceMappingURL=refreshOrchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_core","require","_refreshToken","_reIssuance","_types","_registery","_verifyCredentialStatus","_metadata","defaultToLite","rec","_rec$createdAt","id","format","W3cCredentialRecord","ClaimFormat","JwtVc","SdJwtVcRecord","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","credentialRegistry","getState","isValid","verifyCredentialStatus","markOpenIDCredentialStatus","credential","status","RefreshStatus","Invalid","agentContext","context","token","refreshAccessToken","cred","msg","newRecord","reissueCredentialWithAccessToken","record","tokenResponse","set","err","exports"],"sourceRoot":"../../../../../src","sources":["modules/openid/refresh/refreshOrchestrator.ts"],"mappings":";;;;;;AACA,IAAAA,KAAA,GAAAC,OAAA;AAEA,IAAAC,aAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AAEA,IAAAI,UAAA,GAAAJ,OAAA;AACA,IAAAK,uBAAA,GAAAL,OAAA;AACA,IAAAM,SAAA,GAAAN,OAAA;AATA;;AAaA,MAAMO,aAAa,GAAIC,GAAY;EAAA,IAAAC,cAAA;EAAA,OAAM;IACvCC,EAAE,EAAEF,GAAG,CAACE,EAAE;IACV;IACA;IACAC,MAAM,EACHH,GAAG,YAAYI,yBAAmB,IAAIC,iBAAW,CAACC,KAAK,IACvDN,GAAG,YAAYO,mBAAa,IAAIF,iBAAW,CAACG,OAAQ,IACrDH,iBAAW,CAACC,KAAK;IACnBG,SAAS,GAAAR,cAAA,GAAED,GAAG,CAACS,SAAS,cAAAR,cAAA,uBAAbA,cAAA,CAAeS,WAAW,CAAC,CAAC;IACvCC,MAAM,EAAEC;EACV,CAAC;AAAA,CAAC;AAEK,MAAMC,mBAAmB,CAAiC;EAEvDC,UAAU,GAAG,KAAK,EAAC;EACnBC,WAAW,GAAG,KAAK,EAAC;;EAGXC,cAAc,GAAG,IAAIC,GAAG,CAAkB,CAAC;EAErDC,WAAWA,CAAkBC,MAAoB,EAAEC,MAAmB,EAAEC,IAA8B,EAAE;IAAA,KAA3EF,MAAoB,GAApBA,MAAoB;IACtD,IAAI,CAACE,IAAI,GAAG;MACVC,UAAU,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;MAC1BC,SAAS,EAAE,IAAI;MACfC,OAAO,EAAGC,CAAC,IAAK,IAAI,CAACN,MAAM,CAACO,KAAK,CAACC,MAAM,CAACF,CAAC,CAAC,CAAC;MAC5CG,WAAW,EAAE,MAAAA,CAAA,KAAY,EAAE;MAC3BC,MAAM,EAAE9B,aAAa;MACrB,IAAIsB,IAAI,IAAI,CAAC,CAAC;IAChB,CAAC;IAEDF,MAAM,CAACW,IAAI,CACT,2CAA2CC,IAAI,CAACC,SAAS,CAAC;MACxDV,UAAU,EAAE,IAAI,CAACD,IAAI,CAACC,UAAU;MAChCC,SAAS,EAAE,IAAI,CAACF,IAAI,CAACE;IACvB,CAAC,CAAC,EACJ,CAAC;IAEDH,MAAM,CAACa,OAAO,CAAEC,KAAK,IAAK;MACxB,IAAI,CAACA,KAAK,GAAGA,KAAK;MAClB,IAAI,CAACf,MAAM,CAACW,IAAI,CAAC,sCAAsC,CAAC;MACxD,IAAI,IAAI,CAACT,IAAI,CAACE,SAAS,IAAI,IAAI,CAACF,IAAI,CAACC,UAAU,EAAE,IAAI,CAACa,KAAK,CAAC,CAAC;IAC/D,CAAC,EAAE,IAAI,CAAC;EACV;EAEOC,SAASA,CAACC,IAAsC,EAAE;IACvD,MAAMC,IAAI,GAAG;MACXxB,UAAU,EAAE,IAAI,CAACA,UAAU;MAC3BQ,UAAU,EAAE,IAAI,CAACD,IAAI,CAACC,UAAU,IAAI,IAAI;MACxCC,SAAS,EAAE,IAAI,CAACF,IAAI,CAACE,SAAS,IAAI,IAAI;MACtCgB,UAAU,EAAE,CAAC,CAAC,IAAI,CAACL;IACrB,CAAC;;IAED;IACA,IAAI,CAACb,IAAI,GAAG;MAAE,GAAG,IAAI,CAACA,IAAI;MAAE,GAAGgB;IAAK,CAAC;IAErC,IAAI,CAAClB,MAAM,CAACW,IAAI,CACd,yCAAyCC,IAAI,CAACC,SAAS,CAAC;MACtDV,UAAU,EAAE,IAAI,CAACD,IAAI,CAACC,UAAU;MAChCC,SAAS,EAAE,IAAI,CAACF,IAAI,CAACE;IACvB,CAAC,CAAC,EACJ,CAAC;IAED,MAAMiB,aAAa,GAAG,IAAI,CAACnB,IAAI,CAACC,UAAU,IAAI,IAAI;IAClD,MAAMmB,YAAY,GAAG,IAAI,CAACpB,IAAI,CAACE,SAAS,IAAI,IAAI;;IAEhD;IACA,IAAIe,IAAI,CAACxB,UAAU,IAAIwB,IAAI,CAAChB,UAAU,KAAKkB,aAAa,EAAE;MACxD,IAAI,CAACE,IAAI,CAAC,CAAC;MACX,IAAIF,aAAa,EAAE,IAAI,CAACL,KAAK,CAAC,CAAC;MAC/B;IACF;;IAEA;IACA,IAAIG,IAAI,CAACxB,UAAU,IAAI0B,aAAa,KAAK,IAAI,EAAE;MAC7C,IAAI,CAACE,IAAI,CAAC,CAAC;MACX;IACF;;IAEA;IACA;IACA;IACA,IAAI,CAACJ,IAAI,CAACxB,UAAU,IAAI0B,aAAa,IAAIC,YAAY,EAAE;MACrD;MACA,IAAI,IAAI,CAACP,KAAK,EAAE,IAAI,CAACC,KAAK,CAAC,CAAC;MAC5B;MACA;IACF;;IAEA;IACA,IAAI,CAACG,IAAI,CAACxB,UAAU,IAAI,CAACwB,IAAI,CAACf,SAAS,IAAIkB,YAAY,IAAID,aAAa,EAAE;MACxE,IAAI,IAAI,CAACN,KAAK,EAAE,IAAI,CAACC,KAAK,CAAC,CAAC;MAC5B;MACA;IACF;;IAEA;EACF;EAEOQ,SAASA,CAAA,EAAG;IACjB,OAAO,IAAI,CAAC5B,WAAW;EACzB;EAEOoB,KAAKA,CAAA,EAAG;IACb,IAAI,IAAI,CAACrB,UAAU,IAAI,CAAC,IAAI,CAACO,IAAI,CAACC,UAAU,EAAE;IAC9C,IAAI,CAACH,MAAM,CAACW,IAAI,CAAC,yCAAyC,CAAC;IAC3D,IAAI,CAAChB,UAAU,GAAG,IAAI;IACtB,IAAI,CAAC8B,KAAK,GAAGC,WAAW,CAAC,MAAM;MAC7B;MACA,KAAK,IAAI,CAACC,OAAO,CAAC,UAAU,CAAC;IAC/B,CAAC,EAAE,IAAI,CAACzB,IAAI,CAACC,UAAU,CAAC;EAC1B;EAEOoB,IAAIA,CAAA,EAAG;IACZ,IAAI,CAAC,IAAI,CAAC5B,UAAU,EAAE;IACtB,IAAI,CAACK,MAAM,CAACW,IAAI,CAAC,wCAAwC,CAAC;IAC1DiB,aAAa,CAAC,IAAI,CAACH,KAAM,CAAC;IAC1B,IAAI,CAACA,KAAK,GAAGhC,SAAS;IACtB,IAAI,CAACE,UAAU,GAAG,KAAK;EACzB;EAEA,MAAagC,OAAOA,CAACE,MAAM,GAAG,QAAQ,EAAE;IAAA,IAAAC,WAAA;IACtC,IAAI,IAAI,CAAClC,WAAW,EAAE;MACpB,IAAI,CAACI,MAAM,CAAC+B,IAAI,CAAC,2DAA2D,CAAC;MAC7E;IACF;IACA,IAAI,CAAC,IAAI,CAAChB,KAAK,IAAI,GAAAe,WAAA,GAAC,IAAI,CAACf,KAAK,cAAAe,WAAA,eAAVA,WAAA,CAAYE,aAAa,GAAE;MAC7C,IAAI,CAAChC,MAAM,CAAC+B,IAAI,CAAC,2DAA2D,CAAC;MAC7E;IACF;IAEA,IAAI,CAACnC,WAAW,GAAG,IAAI;IACvB,IAAI,CAACI,MAAM,CAACW,IAAI,CAAC,qCAAqCkB,MAAM,GAAG,CAAC;IAEhE,IAAI;MACF,MAAMI,OAAO,GAAG,MAAM,IAAI,CAAC/B,IAAI,CAACO,WAAW,CAAC,CAAC;MAC7C,IAAI,CAACT,MAAM,CAACW,IAAI,CAAC,sBAAsBsB,OAAO,CAACC,MAAM,qBAAqB,CAAC;MAC3E,KAAK,MAAMrD,GAAG,IAAIoD,OAAO,EAAe;QACtC;QACA,IAAI;UACF,MAAM,IAAI,CAACE,aAAa,CAACtD,GAAG,CAAC;QAC/B,CAAC,CAAC,OAAOyB,CAAC,EAAE;UAAA,IAAA8B,kBAAA,EAAAC,UAAA;UACV,IAAI,CAACrC,MAAM,CAACO,KAAK,CAAC,uBAAuB1B,GAAG,CAACE,EAAE,YAAYyB,MAAM,CAACF,CAAC,CAAC,EAAE,CAAC;UACvE,CAAA8B,kBAAA,IAAAC,UAAA,OAAI,CAACnC,IAAI,EAACG,OAAO,cAAA+B,kBAAA,eAAjBA,kBAAA,CAAAE,IAAA,CAAAD,UAAA,EAAoB/B,CAAC,CAAC;QACxB;MACF;MACA,IAAI,CAACN,MAAM,CAACW,IAAI,CAAC,2BAA2B,CAAC;IAC/C,CAAC,CAAC,OAAOL,CAAC,EAAE;MAAA,IAAAiC,mBAAA,EAAAC,WAAA;MACV,IAAI,CAACxC,MAAM,CAACO,KAAK,CAAC,8BAA8BC,MAAM,CAACF,CAAC,CAAC,EAAE,CAAC;MAC5D,CAAAiC,mBAAA,IAAAC,WAAA,OAAI,CAACtC,IAAI,EAACG,OAAO,cAAAkC,mBAAA,eAAjBA,mBAAA,CAAAD,IAAA,CAAAE,WAAA,EAAoBlC,CAAC,CAAC;IACxB,CAAC,SAAS;MACR,IAAI,CAACV,WAAW,GAAG,KAAK;IAC1B;EACF;EAEO6C,aAAaA,CAACtC,UAAyB,EAAE;IAC9C,IAAI,CAACc,SAAS,CAAC;MAAEd;IAAW,CAAC,CAAC;EAChC;EAEOuC,WAAWA,CAAC3D,EAAU,EAAuB;IAClD,OAAO,IAAI,CAACc,cAAc,CAAC8C,GAAG,CAAC5D,EAAE,CAAC;EACpC;;EAEA;;EAEA,MAAcoD,aAAaA,CAACtD,GAAY,EAAE;IACxC,MAAM;MACJ+D,UAAU;MACVC,cAAc;MACdC,eAAe;MACfC,YAAY;MACZC,0BAA0B;MAC1BC,aAAa;MACbC,gBAAgB;MAChBC;IACF,CAAC,GAAGC,6BAAkB,CAACC,QAAQ,CAAC,CAAC;IAEjC,MAAMtE,EAAE,GAAGF,GAAG,CAACE,EAAE;IAEjB,IAAI,CAAC,IAAI,CAACgC,KAAK,EAAE;MACf,IAAI,CAACf,MAAM,CAACO,KAAK,CAAC,iEAAiExB,EAAE,EAAE,CAAC;MACxF;IACF;;IAEA;IACA,IAAI6D,UAAU,CAAC7D,EAAE,CAAC,EAAE;MAClB,IAAI,CAACiB,MAAM,CAACW,IAAI,CAAC,gCAAgC5B,EAAE,8BAA8B,CAAC;MAClF;IACF;;IAEA;IACAoE,MAAM,CAAC,IAAI,CAACjD,IAAI,CAACQ,MAAM,CAAC7B,GAAG,CAAC,CAAC;;IAE7B;IACAgE,cAAc,CAAC9D,EAAE,CAAC;IAClB,IAAI,CAACiB,MAAM,CAACW,IAAI,CAAC,iCAAiC5B,EAAE,EAAE,CAAC;IAEvD,IAAI;MACF;MACA,MAAMuE,OAAO,GAAG,MAAM,IAAAC,8CAAsB,EAAC1E,GAAG,EAAE,IAAI,CAACmB,MAAM,CAAC;MAC9D,IAAIsD,OAAO,EAAE;QACX,IAAI,CAACtD,MAAM,CAACW,IAAI,CAAC,uBAAuB5B,EAAE,EAAE,CAAC;QAC7C;QACAgE,YAAY,CAAChE,EAAE,CAAC;QAChB;QACA;QACA;MACF;;MAEA;;MAEA,MAAM,IAAAyE,oCAA0B,EAAC;QAC/BC,UAAU,EAAE5E,GAAG;QACf6E,MAAM,EAAEC,oBAAa,CAACC,OAAO;QAC7BC,YAAY,EAAE,IAAI,CAAC9C,KAAK,CAAC+C;MAC3B,CAAC,CAAC;;MAEF;MACA,IAAI,CAAC9D,MAAM,CAACW,IAAI,CAAC,+CAA+C5B,EAAE,EAAE,CAAC;MACrE,MAAMgF,KAAK,GAAG,MAAM,IAAAC,gCAAkB,EAAC;QAAEhE,MAAM,EAAE,IAAI,CAACA,MAAM;QAAEiE,IAAI,EAAEpF,GAAG;QAAEgF,YAAY,EAAE,IAAI,CAAC9C,KAAK,CAAC+C;MAAQ,CAAC,CAAC;MAC5G,IAAI,CAACC,KAAK,EAAE;QACV,MAAMG,GAAG,GAAG,4BAA4B;QACxC,IAAI,CAAClE,MAAM,CAAC+B,IAAI,CAAC,gBAAgBmC,GAAG,QAAQnF,EAAE,EAAE,CAAC;QACjDkE,aAAa,CAAClE,EAAE,EAAEmF,GAAG,CAAC;QACtB;MACF;;MAEA;MACA,MAAMC,SAAS,GAAG,MAAM,IAAAC,4CAAgC,EAAC;QACvDrD,KAAK,EAAE,IAAI,CAACA,KAAK;QACjBf,MAAM,EAAE,IAAI,CAACA,MAAM;QACnBqE,MAAM,EAAExF,GAAG;QACXyF,aAAa,EAAEP;MACjB,CAAC,CAAC;MAEF,IAAII,SAAS,EAAE;QACb,IAAI,CAACnE,MAAM,CAACW,IAAI,CAAC,iCAAiCwD,SAAS,CAACpF,EAAE,EAAE,CAAC;QACjE;QACAiE,0BAA0B,CAACjE,EAAE,EAAE,IAAI,CAACmB,IAAI,CAACQ,MAAM,CAACyD,SAAS,CAAC,CAAC;QAC3DjB,gBAAgB,CAACnE,EAAE,CAAC;QACpB,IAAI,CAACc,cAAc,CAAC0E,GAAG,CAACJ,SAAS,CAACpF,EAAE,EAAEoF,SAAS,CAAC;MAClD,CAAC,MAAM;QACL,MAAMD,GAAG,GAAG,6BAA6B;QACzC,IAAI,CAAClE,MAAM,CAAC+B,IAAI,CAAC,gBAAgBmC,GAAG,QAAQnF,EAAE,EAAE,CAAC;QACjDkE,aAAa,CAAClE,EAAE,EAAEmF,GAAG,CAAC;QACtB,MAAM,IAAAV,oCAA0B,EAAC;UAC/BC,UAAU,EAAE5E,GAAG;UACf6E,MAAM,EAAEC,oBAAa,CAACC,OAAO;UAC7BC,YAAY,EAAE,IAAI,CAAC9C,KAAK,CAAC+C;QAC3B,CAAC,CAAC;MACJ;IACF,CAAC,CAAC,OAAOxD,CAAC,EAAE;MACV,MAAMkE,GAAG,GAAGhE,MAAM,CAACF,CAAC,CAAC;MACrB,IAAI,CAACN,MAAM,CAACO,KAAK,CAAC,yBAAyBxB,EAAE,KAAKyF,GAAG,EAAE,CAAC;MACxDvB,aAAa,CAAClE,EAAE,EAAEyF,GAAG,CAAC;IACxB,CAAC,SAAS;MACR;MACA1B,eAAe,CAAC/D,EAAE,CAAC;IACrB;EACF;AACF;AAAC0F,OAAA,CAAA/E,mBAAA,GAAAA,mBAAA","ignoreList":[]}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.refreshAccessToken = refreshAccessToken;
7
+ var _metadata = require("../metadata");
8
+ async function refreshAccessToken({
9
+ logger,
10
+ cred,
11
+ agentContext
12
+ }) {
13
+ logger.info(`[refreshAccessToken] Checking new credential for record: ${cred.id}`);
14
+ // return _mockTokenRefreshResponse
15
+ const refreshMetaData = (0, _metadata.getRefreshCredentialMetadata)(cred);
16
+ if (!refreshMetaData) {
17
+ logger.error(`[refreshAccessToken] No refresh metadata found for credential: ${cred.id}`);
18
+ return;
19
+ }
20
+ logger.info(`[refreshAccessToken] Found refresh metadata for credential: ${cred.id}`);
21
+ const {
22
+ refreshToken,
23
+ authServer
24
+ } = refreshMetaData;
25
+ try {
26
+ if (!authServer) {
27
+ throw new Error('No authorization server found in the credential offer metadata');
28
+ }
29
+ logger.info(`[refreshAccessToken] Found auth server for credential: ${cred.id}: ${authServer}`);
30
+
31
+ // Build token endpoint: <AS>/token?force=false
32
+ // React-Native-safe URL build
33
+ const tokenUrl = (authServer.endsWith('/') ? authServer.slice(0, -1) : authServer) + '/token?force=false';
34
+ // const tokenUrl = new URL('token', authServer)
35
+ // tokenUrl.searchParams.set('force', 'false')
36
+
37
+ logger.info(`[refreshAccessToken] Refreshing access token at URL: ${tokenUrl} for credential: ${cred.id}`);
38
+ const body = new URLSearchParams({
39
+ grant_type: 'refresh_token',
40
+ refresh_token: refreshToken,
41
+ // these are accepted by some ASs that share the same endpoint with pre-auth:
42
+ pre_authorized_code: '',
43
+ pre_authorized_code_alt: '',
44
+ user_pin: ''
45
+ });
46
+ const res = await fetch(tokenUrl.toString(), {
47
+ method: 'POST',
48
+ headers: {
49
+ accept: 'application/json',
50
+ 'Content-Type': 'application/x-www-form-urlencoded'
51
+ },
52
+ body: body.toString()
53
+ });
54
+ logger.info(`[refreshAccessToken] Response status: ${JSON.stringify(res)}`);
55
+ if (!res.ok) {
56
+ const errText = await res.text();
57
+ throw new Error(`Refresh failed ${res.status}: ${errText}`);
58
+ }
59
+ const data = await res.json();
60
+ logger.info(`[refreshAccessToken] New access token acquired: ${JSON.stringify(data)}`);
61
+
62
+ // If refresh token rotated, persist it
63
+ if (data.refresh_token && data.refresh_token !== refreshToken) {
64
+ logger.info(`[refreshAccessToken] Refresh token rotated; saving new one`);
65
+ (0, _metadata.setRefreshCredentialMetadata)(cred, {
66
+ ...refreshMetaData,
67
+ authServer: authServer,
68
+ refreshToken: data.refresh_token
69
+ });
70
+ await (0, _metadata.persistCredentialRecord)(agentContext, cred);
71
+ }
72
+ return data;
73
+ } catch (error) {
74
+ logger.error(`[refreshAccessToken] Error getting new token: ${error}`);
75
+ throw error;
76
+ }
77
+ }
78
+ //# sourceMappingURL=refreshToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_metadata","require","refreshAccessToken","logger","cred","agentContext","info","id","refreshMetaData","getRefreshCredentialMetadata","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","setRefreshCredentialMetadata","persistCredentialRecord"],"sourceRoot":"../../../../../src","sources":["modules/openid/refresh/refreshToken.ts"],"mappings":";;;;;;AAGA,IAAAA,SAAA,GAAAC,OAAA;AAEO,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,GAAG,IAAAC,sCAA4B,EAACL,IAAI,CAAC;EAC1D,IAAI,CAACI,eAAe,EAAE;IACpBL,MAAM,CAACO,KAAK,CAAC,kEAAkEN,IAAI,CAACG,EAAE,EAAE,CAAC;IACzF;EACF;EAEAJ,MAAM,CAACG,IAAI,CAAC,+DAA+DF,IAAI,CAACG,EAAE,EAAE,CAAC;EACrF,MAAM;IAAEI,YAAY;IAAEC;EAAW,CAAC,GAAGJ,eAAe;EAEpD,IAAI;IACF,IAAI,CAACI,UAAU,EAAE;MACf,MAAM,IAAIC,KAAK,CAAC,gEAAgE,CAAC;IACnF;IAEAV,MAAM,CAACG,IAAI,CAAC,0DAA0DF,IAAI,CAACG,EAAE,KAAKK,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;;IAEAT,MAAM,CAACG,IAAI,CAAC,wDAAwDQ,QAAQ,oBAAoBV,IAAI,CAACG,EAAE,EAAE,CAAC;IAE1G,MAAMU,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;IAEFvB,MAAM,CAACG,IAAI,CAAC,yCAAyCwB,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;IAC9ClC,MAAM,CAACG,IAAI,CAAC,mDAAmDwB,IAAI,CAACC,SAAS,CAACK,IAAI,CAAC,EAAE,CAAC;;IAEtF;IACA,IAAIA,IAAI,CAAChB,aAAa,IAAIgB,IAAI,CAAChB,aAAa,KAAKT,YAAY,EAAE;MAC7DR,MAAM,CAACG,IAAI,CAAC,4DAA4D,CAAC;MACzE,IAAAgC,sCAA4B,EAAClC,IAAI,EAAE;QACjC,GAAGI,eAAe;QAClBI,UAAU,EAAEA,UAAU;QACtBD,YAAY,EAAEyB,IAAI,CAAChB;MACrB,CAAC,CAAC;MAEF,MAAM,IAAAmB,iCAAuB,EAAClC,YAAY,EAAED,IAAI,CAAC;IACnD;IAEA,OAAOgC,IAAI;EACb,CAAC,CAAC,OAAO1B,KAAK,EAAE;IACdP,MAAM,CAACO,KAAK,CAAC,iDAAiDA,KAAK,EAAE,CAAC;IACtE,MAAMA,KAAK;EACb;AACF","ignoreList":[]}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.selectOldIdByReplacementId = exports.readRegistry = exports.mutateRegistry = exports.credentialRegistry = void 0;
7
+ var _vanilla = require("zustand/vanilla");
8
+ /** Permanent (until unblocked) blocks so the orchestrator won’t retry this cred again this session */
9
+
10
+ const credentialRegistry = exports.credentialRegistry = (0, _vanilla.createStore)((set, get) => ({
11
+ byId: {},
12
+ expired: [],
13
+ replacements: {},
14
+ refreshing: {},
15
+ blocked: {},
16
+ lastSweepAt: undefined,
17
+ upsert: cred => set(s => ({
18
+ byId: {
19
+ ...s.byId,
20
+ [cred.id]: cred
21
+ }
22
+ })),
23
+ markRefreshing: id => set(s => ({
24
+ refreshing: {
25
+ ...s.refreshing,
26
+ [id]: true
27
+ }
28
+ })),
29
+ clearRefreshing: id => set(s => {
30
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
31
+ const {
32
+ [id]: _drop,
33
+ ...rest
34
+ } = s.refreshing;
35
+ return {
36
+ refreshing: rest
37
+ };
38
+ }),
39
+ markExpiredWithReplacement: (oldId, replacement) => set(s => ({
40
+ expired: s.expired.includes(oldId) ? s.expired : [...s.expired, oldId],
41
+ replacements: {
42
+ ...s.replacements,
43
+ [oldId]: replacement
44
+ }
45
+ })),
46
+ acceptReplacement: oldId => set(s => {
47
+ const repl = s.replacements[oldId];
48
+ if (!repl) return s;
49
+ const byId = {
50
+ ...s.byId
51
+ };
52
+ delete byId[oldId];
53
+ byId[repl.id] = repl;
54
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
55
+ const {
56
+ [oldId]: _drop,
57
+ ...restRepl
58
+ } = s.replacements;
59
+ return {
60
+ byId,
61
+ replacements: restRepl,
62
+ expired: s.expired.filter(x => x !== oldId),
63
+ // Once accepted, you can optionally block the oldId as succeeded:
64
+ blocked: {
65
+ ...s.blocked,
66
+ [oldId]: {
67
+ reason: 'succeeded',
68
+ at: new Date().toISOString()
69
+ }
70
+ }
71
+ };
72
+ }),
73
+ clearExpired: id => set(s => ({
74
+ expired: s.expired.filter(x => x !== id)
75
+ })),
76
+ blockAsSucceeded: id => set(s => ({
77
+ blocked: {
78
+ ...s.blocked,
79
+ [id]: {
80
+ reason: 'succeeded',
81
+ at: new Date().toISOString()
82
+ }
83
+ }
84
+ })),
85
+ blockAsFailed: (id, error) => set(s => ({
86
+ blocked: {
87
+ ...s.blocked,
88
+ [id]: {
89
+ reason: 'failed',
90
+ at: new Date().toISOString(),
91
+ error
92
+ }
93
+ }
94
+ })),
95
+ unblock: id => set(s => {
96
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
97
+ const {
98
+ [id]: _drop,
99
+ ...rest
100
+ } = s.blocked;
101
+ return {
102
+ blocked: rest
103
+ };
104
+ }),
105
+ shouldSkip: id => {
106
+ const s = get();
107
+ if (s.refreshing[id]) return true; // in-progress
108
+ if (s.expired.includes(id)) return true; // replacement already queued
109
+ if (s.blocked[id]) return true; // previously succeeded/failed
110
+ return false;
111
+ },
112
+ setLastSweep: iso => set({
113
+ lastSweepAt: iso
114
+ }),
115
+ reset: () => set({
116
+ byId: {},
117
+ expired: [],
118
+ replacements: {},
119
+ refreshing: {},
120
+ blocked: {},
121
+ lastSweepAt: undefined
122
+ })
123
+ }));
124
+
125
+ // Non-React helpers for workers/services
126
+ const readRegistry = () => credentialRegistry.getState();
127
+ exports.readRegistry = readRegistry;
128
+ const mutateRegistry = updater => credentialRegistry.setState(s => {
129
+ updater(s);
130
+ return s;
131
+ });
132
+ exports.mutateRegistry = mutateRegistry;
133
+ const selectOldIdByReplacementId = replacementId => {
134
+ const {
135
+ replacements
136
+ } = credentialRegistry.getState();
137
+ for (const [oldId, repl] of Object.entries(replacements)) {
138
+ if (repl.id === replacementId) return oldId;
139
+ }
140
+ return undefined;
141
+ };
142
+ exports.selectOldIdByReplacementId = selectOldIdByReplacementId;
143
+ //# sourceMappingURL=registery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_vanilla","require","credentialRegistry","exports","createStore","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,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.RefreshStatus = exports.OpenIDCustomNotificationType = void 0;
7
+ let RefreshStatus = exports.RefreshStatus = /*#__PURE__*/function (RefreshStatus) {
8
+ RefreshStatus["Valid"] = "valid";
9
+ RefreshStatus["Invalid"] = "invalid";
10
+ RefreshStatus["Error"] = "error";
11
+ return RefreshStatus;
12
+ }({});
13
+ let OpenIDCustomNotificationType = exports.OpenIDCustomNotificationType = /*#__PURE__*/function (OpenIDCustomNotificationType) {
14
+ OpenIDCustomNotificationType["CredentialReplacementAvailable"] = "CustomNotificationOpenIDCredential";
15
+ return OpenIDCustomNotificationType;
16
+ }({});
17
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["RefreshStatus","exports","OpenIDCustomNotificationType"],"sourceRoot":"../../../../../src","sources":["modules/openid/refresh/types.ts"],"mappings":";;;;;;IAmBYA,aAAa,GAAAC,OAAA,CAAAD,aAAA,0BAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;AAAA,IAoDbE,4BAA4B,GAAAD,OAAA,CAAAC,4BAAA,0BAA5BA,4BAA4B;EAA5BA,4BAA4B;EAAA,OAA5BA,4BAA4B;AAAA","ignoreList":[]}