Skip to content

Commit c2d0c45

Browse files
Merge branch 'hyperledger-feat/present-proof-v2' into feat/present-proof-v2
2 parents 4d71835 + 9866b56 commit c2d0c45

File tree

76 files changed

+2210
-336
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+2210
-336
lines changed

packages/core/src/agent/Agent.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { CredentialsModule } from '../modules/credentials/CredentialsModule'
2020
import { DidsModule } from '../modules/dids/DidsModule'
2121
import { DiscoverFeaturesModule } from '../modules/discover-features'
2222
import { LedgerModule } from '../modules/ledger/LedgerModule'
23-
import { ProofsModule } from '../modules/proofs/ProofsModule'
23+
import { ProofsAPI } from '../modules/proofs/ProofsAPI'
2424
import { MediatorModule } from '../modules/routing/MediatorModule'
2525
import { RecipientModule } from '../modules/routing/RecipientModule'
2626
import { InMemoryMessageRepository } from '../storage/InMemoryMessageRepository'
@@ -47,7 +47,7 @@ export class Agent {
4747
public messageSubscription: Subscription
4848

4949
public readonly connections: ConnectionsModule
50-
public readonly proofs: ProofsModule
50+
public readonly proofs: ProofsAPI
5151
public readonly basicMessages: BasicMessagesModule
5252
public readonly ledger: LedgerModule
5353
public readonly credentials: CredentialsModule
@@ -98,7 +98,7 @@ export class Agent {
9898
// We set the modules in the constructor because that allows to set them as read-only
9999
this.connections = this.container.resolve(ConnectionsModule)
100100
this.credentials = this.container.resolve(CredentialsModule)
101-
this.proofs = this.container.resolve(ProofsModule)
101+
this.proofs = this.container.resolve(ProofsAPI)
102102
this.mediator = this.container.resolve(MediatorModule)
103103
this.mediationRecipient = this.container.resolve(RecipientModule)
104104
this.basicMessages = this.container.resolve(BasicMessagesModule)

packages/core/src/agent/AgentConfig.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { DID_COMM_TRANSPORT_QUEUE } from '../constants'
99
import { AriesFrameworkError } from '../error'
1010
import { ConsoleLogger, LogLevel } from '../logger'
1111
import { AutoAcceptCredential } from '../modules/credentials/CredentialAutoAcceptType'
12-
import { AutoAcceptProof } from '../modules/proofs/ProofAutoAcceptType'
12+
import { AutoAcceptProof } from '../modules/proofs/models/ProofAutoAcceptType'
1313
import { MediatorPickupStrategy } from '../modules/routing/MediatorPickupStrategy'
1414
import { DidCommMimeType } from '../types'
1515

packages/core/src/agent/__tests__/Agent.test.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@ import { CredentialRepository, CredentialService } from '../../modules/credentia
1212
import { CredentialsModule } from '../../modules/credentials/CredentialsModule'
1313
import { IndyLedgerService } from '../../modules/ledger'
1414
import { LedgerModule } from '../../modules/ledger/LedgerModule'
15-
import { ProofRepository, ProofService } from '../../modules/proofs'
15+
import { ProofRepository } from '../../modules/proofs'
1616
import { ProofsModule } from '../../modules/proofs/ProofsModule'
17+
import { V1LegacyProofService } from '../../modules/proofs/protocol/v1/V1LegacyProofService'
1718
import {
1819
MediatorModule,
1920
RecipientModule,
@@ -121,7 +122,7 @@ describe('Agent', () => {
121122
expect(container.resolve(TrustPingService)).toBeInstanceOf(TrustPingService)
122123

123124
expect(container.resolve(ProofsModule)).toBeInstanceOf(ProofsModule)
124-
expect(container.resolve(ProofService)).toBeInstanceOf(ProofService)
125+
expect(container.resolve(V1LegacyProofService)).toBeInstanceOf(V1LegacyProofService)
125126
expect(container.resolve(ProofRepository)).toBeInstanceOf(ProofRepository)
126127

127128
expect(container.resolve(CredentialsModule)).toBeInstanceOf(CredentialsModule)
@@ -165,7 +166,7 @@ describe('Agent', () => {
165166
expect(container.resolve(TrustPingService)).toBe(container.resolve(TrustPingService))
166167

167168
expect(container.resolve(ProofsModule)).toBe(container.resolve(ProofsModule))
168-
expect(container.resolve(ProofService)).toBe(container.resolve(ProofService))
169+
expect(container.resolve(V1LegacyProofService)).toBe(container.resolve(V1LegacyProofService))
169170
expect(container.resolve(ProofRepository)).toBe(container.resolve(ProofRepository))
170171

171172
expect(container.resolve(CredentialsModule)).toBe(container.resolve(CredentialsModule))

packages/core/src/modules/proofs/ProofEvents.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { BaseEvent } from '../../agent/Events'
2-
import type { ProofState } from './ProofState'
2+
import type { ProofState } from './models/ProofState'
33
import type { ProofRecord } from './repository'
44

55
export enum ProofEventTypes {

packages/core/src/modules/proofs/ProofResponseCoordinator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { scoped, Lifecycle } from 'tsyringe'
44

55
import { AgentConfig } from '../../agent/AgentConfig'
66

7-
import { AutoAcceptProof } from './ProofAutoAcceptType'
7+
import { AutoAcceptProof } from './models/ProofAutoAcceptType'
88

99
/**
1010
* This class handles all the automation with all the messages in the present proof protocol
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
import type { AgentMessage } from '../../agent/AgentMessage'
2+
import type { HandlerInboundMessage } from '../../agent/Handler'
3+
import type { InboundMessageContext } from '../../agent/models/InboundMessageContext'
4+
import type {
5+
CreateRequestOptions,
6+
RequestProofOptions,
7+
CreateProposalOptions,
8+
CreateProposalAsResponseOptions,
9+
CreateRequestAsResponseOptions,
10+
} from './interface'
11+
import type { ProofProtocolVersion } from './models/ProofProtocolVersion'
12+
import type { ProofRequest, RetrievedCredentials } from './protocol/v1/models'
13+
import type { PresentationPreview } from './protocol/v1/models/PresentationPreview'
14+
import type { ProofRecord } from './repository'
15+
import type { PresentationRecordType } from './repository/PresentationExchangeRecord'
16+
import type { ProofFormatService } from './v2/formats/ProofFormatService'
17+
import type { V2ProposePresentationHandler } from './v2/handlers/V2ProposePresentationHandler'
18+
19+
import { ConsoleLogger, LogLevel } from '../../logger'
20+
21+
const logger = new ConsoleLogger(LogLevel.debug)
22+
23+
/**
24+
* - creates records & messages
25+
* - stores records
26+
* - returns records & messages
27+
*/
28+
export abstract class ProofService {
29+
abstract getVersion(): ProofProtocolVersion
30+
31+
/**
32+
* 1. Assert (connection ready, record state)
33+
* 1. Create proposal message
34+
* 2. loop through all formats from ProposeProofOptions and call format service
35+
* 3. Create and store proof record
36+
* 4. Store proposal message
37+
* 5. Return proposal message + proof record
38+
*/
39+
abstract createProposal(options: CreateProposalOptions): Promise<{ proofRecord: ProofRecord; message: AgentMessage }>
40+
41+
/**
42+
* Create a proposal message in response to a received proof request message
43+
*
44+
* 1. assert record state
45+
* 1. Create proposal message
46+
* 2. loop through all formats from ProposeProofOptions and call format service
47+
* 3. Update proof record
48+
* 4. Create or update proposal message
49+
* 5. Return proposal message + proof record
50+
*/
51+
abstract createProposalAsResponse(
52+
options: CreateProposalAsResponseOptions
53+
): Promise<{ proofRecord: ProofRecord; message: AgentMessage }>
54+
55+
/**
56+
* Process a received proposal message (does not accept yet)
57+
*
58+
* 1. Find proof record by thread and connection id
59+
*
60+
* Two flows possible:
61+
* - Proof record already exist
62+
* 2. Assert state
63+
* 3. Save or update proposal message in storage (didcomm message record)
64+
* 4. Loop through all format services to process proposal message
65+
* 5. Update & return record
66+
*
67+
* - Proof record does not exist yet
68+
* 2. Create record
69+
* 3. Save proposal message
70+
* 4. Loop through all format services to process proposal message
71+
* 5. Save & return record
72+
*/
73+
abstract processProposal(messageContext: InboundMessageContext<AgentMessage>): Promise<ProofRecord>
74+
75+
abstract createRequest(options: CreateRequestOptions): Promise<{ proofRecord: ProofRecord; message: AgentMessage }>
76+
77+
abstract createRequestAsResponse(
78+
options: CreateRequestAsResponseOptions
79+
): Promise<{ proofRecord: ProofRecord; message: AgentMessage }>
80+
81+
abstract processRequest(messageContext: InboundMessageContext<AgentMessage>): Promise<ProofRecord>
82+
83+
abstract createPresentation(
84+
options: CreatePresentationOptions
85+
): Promise<{ proofRecord: ProofRecord; message: AgentMessage }>
86+
87+
abstract processPresentation(messageContext: InboundMessageContext<AgentMessage>): Promise<ProofRecord>
88+
89+
abstract createAck(options: CreateAckOptions): Promise<{ proofRecord: ProofRecord; message: AgentMessage }>
90+
91+
abstract processAck(messageContext: InboundMessageContext<AgentMessage>): Promise<ProofRecord>
92+
93+
abstract createProblemReport(
94+
options: CreateProblemReportOptions
95+
): Promise<{ proofRecord: ProofRecord; message: AgentMessage }>
96+
abstract processProblemReport(messageContext: InboundMessageContext<AgentMessage>): Promise<ProofRecord>
97+
98+
abstract getRequestedCredentialsForProofRequest(options: {
99+
proofRecord: ProofRecord
100+
}): Promise<{ indy?: RetrievedCredentials; w3c?: never }>
101+
102+
public getFormatService(presentationRecordType: PresentationRecordType): ProofFormatService {
103+
logger.debug(presentationRecordType.toString())
104+
throw Error('Not Implemented')
105+
}
106+
107+
public getById(proofRecordId: string): Promise<ProofRecord> {
108+
return this.proofRepository.getById(proofRecordId)
109+
}
110+
}

0 commit comments

Comments
 (0)