Skip to content

Commit cab1595

Browse files
committed
handle message ack
1 parent bb1d93d commit cab1595

2 files changed

Lines changed: 40 additions & 3 deletions

File tree

integration-tests/delegation-offer.test.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -262,9 +262,8 @@ describe('Credential Distribution', () => {
262262
].sort(),
263263
);
264264

265-
// Chain starts with the holder's own delegated credential.
266-
expect(delegationDetails.delegationChain[0].id).toBe(storedCredential.id);
267-
expect(delegationDetails.delegationChain[0].rootCredentialId).toBe(rootCredential.id);
265+
expect(delegationDetails.delegationChain[1].id).toBe(storedCredential.id);
266+
expect(delegationDetails.delegationChain[1].rootCredentialId).toBe(rootCredential.id);
268267

269268
// Verify the holder's stored offer was advanced to 'accepted'.
270269
const holderStoredOffer = await holderWallet.wallet.getDocumentById(
@@ -279,5 +278,16 @@ describe('Credential Distribution', () => {
279278
expect(ackMessage.from).toBe(holderWallet.did);
280279
expect(ackMessage.body.delegationOfferId).toBe(acceptedOffer.id);
281280
expect(ackMessage.body.status).toBe('OK');
281+
282+
await handleMessage(ackMessage, {
283+
wallet: issuerWallet.wallet,
284+
messageProvider: issuerWallet.messageProvider,
285+
});
286+
287+
const delegationOfferDoc = await issuerWallet.wallet.getDocumentById(
288+
acceptedOffer.id,
289+
);
290+
291+
expect(delegationOfferDoc.status).toBe('accepted');
282292
}, 60_000);
283293
});

packages/core/src/delegation/delegation-offer.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,10 +462,37 @@ export const ISSUE_CREDENTIAL_HANDLER = {
462462
},
463463
};
464464

465+
export const DELEGATION_ACK_HANDLER = {
466+
check: function (message) {
467+
return message.type === ACK && message.body?.goal_code === GOAL_CODE;
468+
},
469+
handle: async function (message, {wallet}) {
470+
const offerId = message.body.delegationOfferId;
471+
472+
const storedOffer = await wallet.getDocumentById(offerId);
473+
if (!storedOffer) {
474+
logger.debug(
475+
`DELEGATION_ACK_HANDLER: no stored offer found for ${offerId}`,
476+
);
477+
return;
478+
}
479+
480+
storedOffer.status = 'accepted';
481+
storedOffer.updatedAt = new Date().toISOString();
482+
483+
await wallet.updateDocument(storedOffer);
484+
485+
logger.debug(
486+
`DELEGATION_ACK_HANDLER: delegation offer ${offerId} marked as accepted`,
487+
);
488+
},
489+
};
490+
465491
export const messageHandlers = [
466492
INVITATION_HANDLER,
467493
DELEGATION_REQUEST_HANDLER,
468494
ISSUE_CREDENTIAL_HANDLER,
495+
DELEGATION_ACK_HANDLER,
469496
];
470497

471498
export async function handleMessage(

0 commit comments

Comments
 (0)