Skip to content

Commit 5510d3a

Browse files
committed
should not add delegation chain document to the credential store
1 parent 159f753 commit 5510d3a

2 files changed

Lines changed: 29 additions & 20 deletions

File tree

integration-tests/delegation-offer.test.ts

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -169,26 +169,27 @@ describe('Credential Distribution', () => {
169169
expect(updatedOffer.holderDID).toBe(holderWallet.did);
170170

171171
// Step 4: Holder receive the delegatable credential from the issuer
172-
const delegatableCredential = await holderWallet.messageProvider.waitForMessage();
172+
const delegationIssuanceMessage =
173+
await holderWallet.messageProvider.waitForMessage();
173174

174-
console.log('[holder] received message after credential request:', delegatableCredential);
175+
console.log('[holder] received message after credential request:', delegationIssuanceMessage);
175176

176-
expect(delegatableCredential).toBeDefined();
177-
expect(delegatableCredential.type).toBe('https://didcomm.org/issue-credential/3.0/issue-credential');
178-
expect(delegatableCredential.from).toBe(issuerWallet.did);
179-
expect(delegatableCredential.body.delegationOfferId).toBe(acceptedOffer.id);
180-
expect(Array.isArray(delegatableCredential.body.credentials)).toBe(true);
181-
expect(delegatableCredential.body.credentials.length).toBeGreaterThan(0);
177+
expect(delegationIssuanceMessage).toBeDefined();
178+
expect(delegationIssuanceMessage.type).toBe('https://didcomm.org/issue-credential/3.0/issue-credential');
179+
expect(delegationIssuanceMessage.from).toBe(issuerWallet.did);
180+
expect(delegationIssuanceMessage.body.delegationOfferId).toBe(acceptedOffer.id);
181+
expect(Array.isArray(delegationIssuanceMessage.body.credentials)).toBe(true);
182+
expect(delegationIssuanceMessage.body.credentials.length).toBeGreaterThan(0);
182183

183-
const [issuedCredential] = delegatableCredential.body.credentials;
184+
const [issuedCredential] = delegationIssuanceMessage.body.credentials;
184185
expect(issuedCredential.type).toContain('DelegationCredential');
185186
expect(issuedCredential.rootCredentialId).toBe(rootCredential.id);
186187
expect(issuedCredential.delegationRoleId).toBe('e79c0d16-8739-4e54-94d7-53d9f1c97c71');
187188

188189
// Re-delegated credential must carry the same credentialSchema as the root credential.
189190
expect(issuedCredential.credentialSchema).toEqual(rootCredential.credentialSchema);
190191

191-
const delegationChain = delegatableCredential.body.delegationChain;
192+
const delegationChain = delegationIssuanceMessage.body.delegationChain;
192193
expect(Array.isArray(delegationChain)).toBe(true);
193194
expect(delegationChain.length).toBeGreaterThan(0);
194195
expect(delegationChain[0].id).toBe(rootCredential.id);
@@ -205,7 +206,7 @@ describe('Credential Distribution', () => {
205206
);
206207
});
207208

208-
await handleMessage(delegatableCredential, {
209+
await handleMessage(delegationIssuanceMessage, {
209210
wallet: holderWallet.wallet,
210211
messageProvider: holderWallet.messageProvider,
211212
});
@@ -214,13 +215,22 @@ describe('Credential Distribution', () => {
214215
expect(receivedPayload.delegationOfferId).toBe(acceptedOffer.id);
215216
expect(receivedPayload.credentials[0].id).toBe(issuedCredential.id);
216217

218+
const allCredentials =
219+
await holderWallet.credentialProvider.getCredentials();
220+
221+
// Delegated credential should be added to the credential store
222+
expect(allCredentials.some(c => c.id === issuedCredential.id)).toBe(true);
223+
// Delegation chain credentials should NOT be added to the credential store
224+
expect(allCredentials.some(c => c.id === rootCredential.id)).toBe(false);
225+
// Delegation chain documents should be stored in the wallet as separate document
226+
const delegationChainDoc = await holderWallet.wallet.getDocumentById(`delegation-chain-${issuedCredential.id}`);
227+
expect(delegationChainDoc).toBeDefined();
228+
expect(delegationChainDoc.credentials).toEqual(delegationChain);
229+
217230
// Verify the delegated credential was persisted on the holder side.
218231
const storedCredential = await holderWallet.wallet.getDocumentById(
219232
issuedCredential.id,
220233
);
221-
expect(storedCredential).toBeDefined();
222-
expect(storedCredential.rootCredentialId).toBe(rootCredential.id);
223-
224234

225235
// Resolve the full delegation details for the stored credential and verify
226236
// it carries the capabilities the holder was delegated.

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -426,12 +426,11 @@ export const ISSUE_CREDENTIAL_HANDLER = {
426426
await wallet.addDocument(credential);
427427
}
428428

429-
for (const ancestor of delegationChain) {
430-
const existing = await wallet.getDocumentById(ancestor.id);
431-
if (!existing) {
432-
await wallet.addDocument(ancestor);
433-
}
434-
}
429+
await wallet.addDocument({
430+
type: 'DelegationChain',
431+
id: `delegation-chain-${credentials[0].id}`,
432+
credentials: delegationChain,
433+
});
435434

436435
await wallet.updateDocument({
437436
...storedOffer,

0 commit comments

Comments
 (0)