diff --git a/packages/core/src/delegation/delegation-offer.test.ts b/packages/core/src/delegation/delegation-offer.test.ts new file mode 100644 index 00000000..686305d6 --- /dev/null +++ b/packages/core/src/delegation/delegation-offer.test.ts @@ -0,0 +1,31 @@ +import {delegationPolicyTravelAgent} from './delegation-fixtures'; +import {createOOBInvitation, decodeMessage} from './delegation-offer'; + +const CORPORATE_ACCOUNT_MANAGER = '8e5abc88-7006-42ae-ae48-9e34f8f66124'; + +function getPreview(offer) { + const url = createOOBInvitation('did:issuer', offer, {goal: 'delegate'}); + return decodeMessage(url).attachments[0].data.json; +} + +describe('createOOBInvitation roleLabel', () => { + const baseOffer = { + id: 'offer-1', + issuerName: 'Issuer', + delegationPolicy: delegationPolicyTravelAgent, + delegationRole: CORPORATE_ACCOUNT_MANAGER, + sentAt: '2026-01-01T00:00:00.000Z', + expiresAt: '2026-01-02T00:00:00.000Z', + }; + + it('resolves roleLabel from the policy role', () => { + const preview = getPreview(baseOffer); + expect(preview.role).toBe(CORPORATE_ACCOUNT_MANAGER); + expect(preview.roleLabel).toBe('Corporate Account Manager'); + }); + + it('leaves roleLabel undefined when the role is not in the policy', () => { + const preview = getPreview({...baseOffer, delegationRole: 'unknown-role-id'}); + expect(preview.roleLabel).toBeUndefined(); + }); +}); diff --git a/packages/core/src/delegation/delegation-offer.ts b/packages/core/src/delegation/delegation-offer.ts index 3276c878..f03ea9cd 100644 --- a/packages/core/src/delegation/delegation-offer.ts +++ b/packages/core/src/delegation/delegation-offer.ts @@ -4,7 +4,7 @@ import {logger} from '@docknetwork/wallet-sdk-data-store/src/logger'; import {getAllDIDs, getDefaultDID} from '../did-provider'; import {delegateCredential} from './delegation-issuance'; import {getDelegationChain} from './delegation-chain'; -import {getDelegationDetails} from './delegation-policy'; +import {getDelegationDetails, getRole} from './delegation-policy'; import {isDelegatableCredential} from './delegation-utils'; import { assertPolicyConformsToParent, @@ -52,6 +52,7 @@ export type DelegationOfferPreview = { issuerDID: string; issuerName?: string; role: string; + roleLabel?: string; createdAt: string; expiresAt?: string; }; @@ -148,6 +149,8 @@ export function createOOBInvitation( issuerDID: issuerDID, issuerName: finalIssuerName, role: delegationOffer.delegationRole, + roleLabel: getRole(delegationOffer.delegationRole, delegationOffer.delegationPolicy) + ?.label, createdAt: delegationOffer.sentAt, expiresAt: delegationOffer.expiresAt, };