import type { CreateCredentialProposalOptions, CredentialProtocolMsgReturnType, DeleteCredentialOptions, AcceptCredentialProposalOptions, NegotiateCredentialProposalOptions, CreateCredentialOfferOptions, NegotiateCredentialOfferOptions, CreateCredentialRequestOptions, AcceptCredentialOfferOptions, AcceptCredentialRequestOptions, AcceptCredentialOptions, GetCredentialFormatDataReturn, CreateCredentialProblemReportOptions, } from './CredentialProtocolOptions' import type { AgentContext } from '../../../agent' import type { AgentMessage } from '../../../agent/AgentMessage' import type { FeatureRegistry } from '../../../agent/FeatureRegistry' import type { InboundMessageContext } from '../../../agent/models/InboundMessageContext' import type { DependencyManager } from '../../../plugins' import type { Query } from '../../../storage/StorageService' import type { ProblemReportMessage } from '../../problem-reports' import type { CredentialFormatService, ExtractCredentialFormats } from '../formats' import type { CredentialState } from '../models/CredentialState' import type { CredentialExchangeRecord } from '../repository' export interface CredentialProtocol { readonly version: string // methods for proposal createProposal( agentContext: AgentContext, options: CreateCredentialProposalOptions ): Promise> processProposal(messageContext: InboundMessageContext): Promise acceptProposal( agentContext: AgentContext, options: AcceptCredentialProposalOptions ): Promise> negotiateProposal( agentContext: AgentContext, options: NegotiateCredentialProposalOptions ): Promise> // methods for offer createOffer( agentContext: AgentContext, options: CreateCredentialOfferOptions ): Promise> processOffer(messageContext: InboundMessageContext): Promise acceptOffer( agentContext: AgentContext, options: AcceptCredentialOfferOptions ): Promise> negotiateOffer( agentContext: AgentContext, options: NegotiateCredentialOfferOptions ): Promise> // methods for request createRequest( agentContext: AgentContext, options: CreateCredentialRequestOptions ): Promise> processRequest(messageContext: InboundMessageContext): Promise acceptRequest( agentContext: AgentContext, options: AcceptCredentialRequestOptions ): Promise> // methods for issue processCredential(messageContext: InboundMessageContext): Promise acceptCredential( agentContext: AgentContext, options: AcceptCredentialOptions ): Promise> // methods for ack processAck(messageContext: InboundMessageContext): Promise // methods for problem-report createProblemReport( agentContext: AgentContext, options: CreateCredentialProblemReportOptions ): Promise> processProblemReport(messageContext: InboundMessageContext): Promise findProposalMessage(agentContext: AgentContext, credentialExchangeId: string): Promise findOfferMessage(agentContext: AgentContext, credentialExchangeId: string): Promise findRequestMessage(agentContext: AgentContext, credentialExchangeId: string): Promise findCredentialMessage(agentContext: AgentContext, credentialExchangeId: string): Promise getFormatData( agentContext: AgentContext, credentialExchangeId: string ): Promise>> // Repository methods updateState( agentContext: AgentContext, credentialRecord: CredentialExchangeRecord, newState: CredentialState ): Promise getById(agentContext: AgentContext, credentialExchangeId: string): Promise getAll(agentContext: AgentContext): Promise findAllByQuery( agentContext: AgentContext, query: Query ): Promise findById(agentContext: AgentContext, credentialExchangeId: string): Promise delete( agentContext: AgentContext, credentialRecord: CredentialExchangeRecord, options?: DeleteCredentialOptions ): Promise getByThreadAndConnectionId( agentContext: AgentContext, threadId: string, connectionId?: string ): Promise findByThreadAndConnectionId( agentContext: AgentContext, threadId: string, connectionId?: string ): Promise update(agentContext: AgentContext, credentialRecord: CredentialExchangeRecord): Promise register(dependencyManager: DependencyManager, featureRegistry: FeatureRegistry): void }