@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.
- package/lib/commonjs/components/listItems/NotificationListItem.js +19 -11
- package/lib/commonjs/components/listItems/NotificationListItem.js.map +1 -1
- package/lib/commonjs/components/misc/CredentialCard.js +3 -1
- package/lib/commonjs/components/misc/CredentialCard.js.map +1 -1
- package/lib/commonjs/components/misc/CredentialCard10.js +13 -5
- package/lib/commonjs/components/misc/CredentialCard10.js.map +1 -1
- package/lib/commonjs/components/misc/CredentialCard11.js +25 -22
- package/lib/commonjs/components/misc/CredentialCard11.js.map +1 -1
- package/lib/commonjs/components/views/CredentialDetailPrimaryHeader.js +8 -7
- package/lib/commonjs/components/views/CredentialDetailPrimaryHeader.js.map +1 -1
- package/lib/commonjs/components/views/KeyboardView.js +19 -4
- package/lib/commonjs/components/views/KeyboardView.js.map +1 -1
- package/lib/commonjs/constants.js +1 -0
- package/lib/commonjs/constants.js.map +1 -1
- package/lib/commonjs/container-api.js +3 -1
- package/lib/commonjs/container-api.js.map +1 -1
- package/lib/commonjs/container-impl.js +16 -0
- package/lib/commonjs/container-impl.js.map +1 -1
- package/lib/commonjs/hooks/notifications.js +4 -2
- package/lib/commonjs/hooks/notifications.js.map +1 -1
- package/lib/commonjs/hooks/useBifoldAgentSetup.js +5 -3
- package/lib/commonjs/hooks/useBifoldAgentSetup.js.map +1 -1
- package/lib/commonjs/index.js +16 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/localization/en/en.json +8 -1
- package/lib/commonjs/localization/fr/fr.json +8 -1
- package/lib/commonjs/localization/pt-br/pt-br.json +8 -1
- package/lib/commonjs/modules/openid/components/OpenIDCredentialCard.js +41 -1
- package/lib/commonjs/modules/openid/components/OpenIDCredentialCard.js.map +1 -1
- package/lib/commonjs/modules/openid/context/OpenIDCredentialRecordProvider.js +34 -111
- package/lib/commonjs/modules/openid/context/OpenIDCredentialRecordProvider.js.map +1 -1
- package/lib/commonjs/modules/openid/hooks/openid.js +38 -6
- package/lib/commonjs/modules/openid/hooks/openid.js.map +1 -1
- package/lib/commonjs/modules/openid/hooks/useAcceptReplacement.js +82 -0
- package/lib/commonjs/modules/openid/hooks/useAcceptReplacement.js.map +1 -0
- package/lib/commonjs/modules/openid/hooks/useCredentialErrorsFromRegistry.js +60 -0
- package/lib/commonjs/modules/openid/hooks/useCredentialErrorsFromRegistry.js.map +1 -0
- package/lib/commonjs/modules/openid/hooks/useDeclineReplacement.js +84 -0
- package/lib/commonjs/modules/openid/hooks/useDeclineReplacement.js.map +1 -0
- package/lib/commonjs/modules/openid/hooks/useOpenIdReplacementNavigation.js +55 -0
- package/lib/commonjs/modules/openid/hooks/useOpenIdReplacementNavigation.js.map +1 -0
- package/lib/commonjs/modules/openid/hooks/useReplacementNotifications.js +82 -0
- package/lib/commonjs/modules/openid/hooks/useReplacementNotifications.js.map +1 -0
- package/lib/commonjs/modules/openid/metadata.js +60 -1
- package/lib/commonjs/modules/openid/metadata.js.map +1 -1
- package/lib/commonjs/modules/openid/notification.js +42 -0
- package/lib/commonjs/modules/openid/notification.js.map +1 -0
- package/lib/commonjs/modules/openid/offerResolve.js +6 -0
- package/lib/commonjs/modules/openid/offerResolve.js.map +1 -1
- package/lib/commonjs/modules/openid/refresh/reIssuance.js +95 -0
- package/lib/commonjs/modules/openid/refresh/reIssuance.js.map +1 -0
- package/lib/commonjs/modules/openid/refresh/refreshOrchestrator.js +265 -0
- package/lib/commonjs/modules/openid/refresh/refreshOrchestrator.js.map +1 -0
- package/lib/commonjs/modules/openid/refresh/refreshToken.js +78 -0
- package/lib/commonjs/modules/openid/refresh/refreshToken.js.map +1 -0
- package/lib/commonjs/modules/openid/refresh/registery.js +143 -0
- package/lib/commonjs/modules/openid/refresh/registery.js.map +1 -0
- package/lib/commonjs/modules/openid/refresh/types.js +17 -0
- package/lib/commonjs/modules/openid/refresh/types.js.map +1 -0
- package/lib/commonjs/modules/openid/refresh/verifyCredentialStatus.js +34 -0
- package/lib/commonjs/modules/openid/refresh/verifyCredentialStatus.js.map +1 -0
- package/lib/commonjs/modules/openid/screens/OpenIDCredentialOffer.js +39 -2
- package/lib/commonjs/modules/openid/screens/OpenIDCredentialOffer.js.map +1 -1
- package/lib/commonjs/modules/openid/utils/utils.js +66 -0
- package/lib/commonjs/modules/openid/utils/utils.js.map +1 -1
- package/lib/commonjs/screens/CredentialDetails.js +28 -6
- package/lib/commonjs/screens/CredentialDetails.js.map +1 -1
- package/lib/commonjs/screens/CredentialOffer.js +6 -9
- package/lib/commonjs/screens/CredentialOffer.js.map +1 -1
- package/lib/commonjs/screens/CredentialOfferAccept.js +18 -2
- package/lib/commonjs/screens/CredentialOfferAccept.js.map +1 -1
- package/lib/commonjs/screens/Developer.js +26 -0
- package/lib/commonjs/screens/Developer.js.map +1 -1
- package/lib/commonjs/screens/Home.js +39 -1
- package/lib/commonjs/screens/Home.js.map +1 -1
- package/lib/commonjs/screens/ListCredentials.js +2 -2
- package/lib/commonjs/screens/ListCredentials.js.map +1 -1
- package/lib/commonjs/screens/ProofChangeCredential.js +3 -3
- package/lib/commonjs/screens/ProofChangeCredential.js.map +1 -1
- package/lib/commonjs/screens/ProofRequest.js +4 -4
- package/lib/commonjs/screens/ProofRequest.js.map +1 -1
- package/lib/commonjs/services/AgentBridge.js +90 -0
- package/lib/commonjs/services/AgentBridge.js.map +1 -0
- package/lib/commonjs/types/credentials.js +9 -0
- package/lib/commonjs/types/credentials.js.map +1 -1
- package/lib/commonjs/utils/agent.js +1 -1
- package/lib/commonjs/utils/agent.js.map +1 -1
- package/lib/commonjs/utils/cred-def.js +50 -43
- package/lib/commonjs/utils/cred-def.js.map +1 -1
- package/lib/commonjs/utils/credential.js +217 -1
- package/lib/commonjs/utils/credential.js.map +1 -1
- package/lib/commonjs/utils/helpers.js +83 -22
- package/lib/commonjs/utils/helpers.js.map +1 -1
- package/lib/module/components/listItems/NotificationListItem.js +19 -11
- package/lib/module/components/listItems/NotificationListItem.js.map +1 -1
- package/lib/module/components/misc/CredentialCard.js +3 -1
- package/lib/module/components/misc/CredentialCard.js.map +1 -1
- package/lib/module/components/misc/CredentialCard10.js +14 -6
- package/lib/module/components/misc/CredentialCard10.js.map +1 -1
- package/lib/module/components/misc/CredentialCard11.js +17 -14
- package/lib/module/components/misc/CredentialCard11.js.map +1 -1
- package/lib/module/components/views/CredentialDetailPrimaryHeader.js +9 -8
- package/lib/module/components/views/CredentialDetailPrimaryHeader.js.map +1 -1
- package/lib/module/components/views/KeyboardView.js +19 -4
- package/lib/module/components/views/KeyboardView.js.map +1 -1
- package/lib/module/constants.js +1 -0
- package/lib/module/constants.js.map +1 -1
- package/lib/module/container-api.js +3 -1
- package/lib/module/container-api.js.map +1 -1
- package/lib/module/container-impl.js +16 -0
- package/lib/module/container-impl.js.map +1 -1
- package/lib/module/hooks/notifications.js +4 -2
- package/lib/module/hooks/notifications.js.map +1 -1
- package/lib/module/hooks/useBifoldAgentSetup.js +5 -3
- package/lib/module/hooks/useBifoldAgentSetup.js.map +1 -1
- package/lib/module/index.js +3 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/localization/en/en.json +8 -1
- package/lib/module/localization/fr/fr.json +8 -1
- package/lib/module/localization/pt-br/pt-br.json +8 -1
- package/lib/module/modules/openid/components/OpenIDCredentialCard.js +41 -1
- package/lib/module/modules/openid/components/OpenIDCredentialCard.js.map +1 -1
- package/lib/module/modules/openid/context/OpenIDCredentialRecordProvider.js +34 -111
- package/lib/module/modules/openid/context/OpenIDCredentialRecordProvider.js.map +1 -1
- package/lib/module/modules/openid/hooks/openid.js +38 -5
- package/lib/module/modules/openid/hooks/openid.js.map +1 -1
- package/lib/module/modules/openid/hooks/useAcceptReplacement.js +76 -0
- package/lib/module/modules/openid/hooks/useAcceptReplacement.js.map +1 -0
- package/lib/module/modules/openid/hooks/useCredentialErrorsFromRegistry.js +54 -0
- package/lib/module/modules/openid/hooks/useCredentialErrorsFromRegistry.js.map +1 -0
- package/lib/module/modules/openid/hooks/useDeclineReplacement.js +77 -0
- package/lib/module/modules/openid/hooks/useDeclineReplacement.js.map +1 -0
- package/lib/module/modules/openid/hooks/useOpenIdReplacementNavigation.js +47 -0
- package/lib/module/modules/openid/hooks/useOpenIdReplacementNavigation.js.map +1 -0
- package/lib/module/modules/openid/hooks/useReplacementNotifications.js +75 -0
- package/lib/module/modules/openid/hooks/useReplacementNotifications.js.map +1 -0
- package/lib/module/modules/openid/metadata.js +52 -1
- package/lib/module/modules/openid/metadata.js.map +1 -1
- package/lib/module/modules/openid/notification.js +38 -0
- package/lib/module/modules/openid/notification.js.map +1 -0
- package/lib/module/modules/openid/offerResolve.js +7 -1
- package/lib/module/modules/openid/offerResolve.js.map +1 -1
- package/lib/module/modules/openid/refresh/reIssuance.js +89 -0
- package/lib/module/modules/openid/refresh/reIssuance.js.map +1 -0
- package/lib/module/modules/openid/refresh/refreshOrchestrator.js +257 -0
- package/lib/module/modules/openid/refresh/refreshOrchestrator.js.map +1 -0
- package/lib/module/modules/openid/refresh/refreshToken.js +72 -0
- package/lib/module/modules/openid/refresh/refreshToken.js.map +1 -0
- package/lib/module/modules/openid/refresh/registery.js +135 -0
- package/lib/module/modules/openid/refresh/registery.js.map +1 -0
- package/lib/module/modules/openid/refresh/types.js +11 -0
- package/lib/module/modules/openid/refresh/types.js.map +1 -0
- package/lib/module/modules/openid/refresh/verifyCredentialStatus.js +28 -0
- package/lib/module/modules/openid/refresh/verifyCredentialStatus.js.map +1 -0
- package/lib/module/modules/openid/screens/OpenIDCredentialOffer.js +39 -2
- package/lib/module/modules/openid/screens/OpenIDCredentialOffer.js.map +1 -1
- package/lib/module/modules/openid/utils/utils.js +64 -1
- package/lib/module/modules/openid/utils/utils.js.map +1 -1
- package/lib/module/screens/CredentialDetails.js +29 -7
- package/lib/module/screens/CredentialDetails.js.map +1 -1
- package/lib/module/screens/CredentialOffer.js +7 -10
- package/lib/module/screens/CredentialOffer.js.map +1 -1
- package/lib/module/screens/CredentialOfferAccept.js +19 -3
- package/lib/module/screens/CredentialOfferAccept.js.map +1 -1
- package/lib/module/screens/Developer.js +27 -1
- package/lib/module/screens/Developer.js.map +1 -1
- package/lib/module/screens/Home.js +41 -3
- package/lib/module/screens/Home.js.map +1 -1
- package/lib/module/screens/ListCredentials.js +1 -1
- package/lib/module/screens/ListCredentials.js.map +1 -1
- package/lib/module/screens/ProofChangeCredential.js +1 -1
- package/lib/module/screens/ProofChangeCredential.js.map +1 -1
- package/lib/module/screens/ProofRequest.js +1 -1
- package/lib/module/screens/ProofRequest.js.map +1 -1
- package/lib/module/services/AgentBridge.js +83 -0
- package/lib/module/services/AgentBridge.js.map +1 -0
- package/lib/module/types/credentials.js +8 -1
- package/lib/module/types/credentials.js.map +1 -1
- package/lib/module/utils/agent.js +2 -2
- package/lib/module/utils/agent.js.map +1 -1
- package/lib/module/utils/cred-def.js +46 -43
- package/lib/module/utils/cred-def.js.map +1 -1
- package/lib/module/utils/credential.js +210 -0
- package/lib/module/utils/credential.js.map +1 -1
- package/lib/module/utils/helpers.js +80 -22
- package/lib/module/utils/helpers.js.map +1 -1
- package/lib/typescript/src/components/listItems/NotificationListItem.d.ts.map +1 -1
- package/lib/typescript/src/components/misc/CredentialCard.d.ts +1 -2
- package/lib/typescript/src/components/misc/CredentialCard.d.ts.map +1 -1
- package/lib/typescript/src/components/misc/CredentialCard10.d.ts.map +1 -1
- package/lib/typescript/src/components/misc/CredentialCard11.d.ts +1 -5
- package/lib/typescript/src/components/misc/CredentialCard11.d.ts.map +1 -1
- package/lib/typescript/src/components/views/CredentialDetailPrimaryHeader.d.ts.map +1 -1
- package/lib/typescript/src/components/views/KeyboardView.d.ts +14 -0
- package/lib/typescript/src/components/views/KeyboardView.d.ts.map +1 -1
- package/lib/typescript/src/constants.d.ts +2 -1
- package/lib/typescript/src/constants.d.ts.map +1 -1
- package/lib/typescript/src/container-api.d.ts +8 -0
- package/lib/typescript/src/container-api.d.ts.map +1 -1
- package/lib/typescript/src/container-impl.d.ts +2 -0
- package/lib/typescript/src/container-impl.d.ts.map +1 -1
- package/lib/typescript/src/hooks/notifications.d.ts +2 -1
- package/lib/typescript/src/hooks/notifications.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useBifoldAgentSetup.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +4 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/modules/openid/components/OpenIDCredentialCard.d.ts.map +1 -1
- package/lib/typescript/src/modules/openid/context/OpenIDCredentialRecordProvider.d.ts +1 -2
- package/lib/typescript/src/modules/openid/context/OpenIDCredentialRecordProvider.d.ts.map +1 -1
- package/lib/typescript/src/modules/openid/hooks/openid.d.ts.map +1 -1
- package/lib/typescript/src/modules/openid/hooks/useAcceptReplacement.d.ts +11 -0
- package/lib/typescript/src/modules/openid/hooks/useAcceptReplacement.d.ts.map +1 -0
- package/lib/typescript/src/modules/openid/hooks/useCredentialErrorsFromRegistry.d.ts +9 -0
- package/lib/typescript/src/modules/openid/hooks/useCredentialErrorsFromRegistry.d.ts.map +1 -0
- package/lib/typescript/src/modules/openid/hooks/useDeclineReplacement.d.ts +16 -0
- package/lib/typescript/src/modules/openid/hooks/useDeclineReplacement.d.ts.map +1 -0
- package/lib/typescript/src/modules/openid/hooks/useOpenIdReplacementNavigation.d.ts +8 -0
- package/lib/typescript/src/modules/openid/hooks/useOpenIdReplacementNavigation.d.ts.map +1 -0
- package/lib/typescript/src/modules/openid/hooks/useReplacementNotifications.d.ts +6 -0
- package/lib/typescript/src/modules/openid/hooks/useReplacementNotifications.d.ts.map +1 -0
- package/lib/typescript/src/modules/openid/metadata.d.ts +27 -2
- package/lib/typescript/src/modules/openid/metadata.d.ts.map +1 -1
- package/lib/typescript/src/modules/openid/notification.d.ts +16 -0
- package/lib/typescript/src/modules/openid/notification.d.ts.map +1 -0
- package/lib/typescript/src/modules/openid/offerResolve.d.ts.map +1 -1
- package/lib/typescript/src/modules/openid/refresh/reIssuance.d.ts +19 -0
- package/lib/typescript/src/modules/openid/refresh/reIssuance.d.ts.map +1 -0
- package/lib/typescript/src/modules/openid/refresh/refreshOrchestrator.d.ts +25 -0
- package/lib/typescript/src/modules/openid/refresh/refreshOrchestrator.d.ts.map +1 -0
- package/lib/typescript/src/modules/openid/refresh/refreshToken.d.ts +9 -0
- package/lib/typescript/src/modules/openid/refresh/refreshToken.d.ts.map +1 -0
- package/lib/typescript/src/modules/openid/refresh/registery.d.ts +55 -0
- package/lib/typescript/src/modules/openid/refresh/registery.d.ts.map +1 -0
- package/lib/typescript/src/modules/openid/refresh/types.d.ts +59 -0
- package/lib/typescript/src/modules/openid/refresh/types.d.ts.map +1 -0
- package/lib/typescript/src/modules/openid/refresh/verifyCredentialStatus.d.ts +11 -0
- package/lib/typescript/src/modules/openid/refresh/verifyCredentialStatus.d.ts.map +1 -0
- package/lib/typescript/src/modules/openid/screens/OpenIDCredentialOffer.d.ts.map +1 -1
- package/lib/typescript/src/modules/openid/utils/utils.d.ts +4 -0
- package/lib/typescript/src/modules/openid/utils/utils.d.ts.map +1 -1
- package/lib/typescript/src/screens/CredentialDetails.d.ts.map +1 -1
- package/lib/typescript/src/screens/CredentialOffer.d.ts.map +1 -1
- package/lib/typescript/src/screens/CredentialOfferAccept.d.ts.map +1 -1
- package/lib/typescript/src/screens/Developer.d.ts.map +1 -1
- package/lib/typescript/src/screens/Home.d.ts.map +1 -1
- package/lib/typescript/src/screens/ListCredentials.d.ts.map +1 -1
- package/lib/typescript/src/services/AgentBridge.d.ts +31 -0
- package/lib/typescript/src/services/AgentBridge.d.ts.map +1 -0
- package/lib/typescript/src/types/credentials.d.ts +5 -0
- package/lib/typescript/src/types/credentials.d.ts.map +1 -1
- package/lib/typescript/src/types/notification.d.ts +4 -0
- package/lib/typescript/src/types/notification.d.ts.map +1 -1
- package/lib/typescript/src/utils/agent.d.ts.map +1 -1
- package/lib/typescript/src/utils/cred-def.d.ts +8 -3
- package/lib/typescript/src/utils/cred-def.d.ts.map +1 -1
- package/lib/typescript/src/utils/credential.d.ts +36 -0
- package/lib/typescript/src/utils/credential.d.ts.map +1 -1
- package/lib/typescript/src/utils/helpers.d.ts +5 -1
- package/lib/typescript/src/utils/helpers.d.ts.map +1 -1
- package/package.json +10 -4
- package/lib/commonjs/modules/openid/refresh/refreshMetadata.js +0 -25
- package/lib/commonjs/modules/openid/refresh/refreshMetadata.js.map +0 -1
- package/lib/module/modules/openid/refresh/refreshMetadata.js +0 -18
- package/lib/module/modules/openid/refresh/refreshMetadata.js.map +0 -1
- package/lib/typescript/src/modules/openid/refresh/refreshMetadata.d.ts +0 -20
- 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
|
-
|
|
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":"
|
|
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":"AAAA,SAGEA,iCAAiC,QAI5B,qBAAqB;AAC5B,SAEEC,MAAM,EACNC,MAAM,EACNC,aAAa,EACbC,qBAAqB,EAErBC,UAAU,EAEVC,IAAI,EACJC,UAAU,EACVC,aAAa,EACbC,mBAAmB,QAGd,gBAAgB;AACvB,
|
|
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
|