import type { CredentialProtocol } from './CredentialProtocol'; 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 { CredentialExchangeRecord } from '../repository'; import { CredentialState } from '../models/CredentialState'; /** * Base implementation of the CredentialProtocol that can be used as a foundation for implementing * the CredentialProtocol interface. */ export declare abstract class BaseCredentialProtocol implements CredentialProtocol { abstract readonly version: string; protected abstract getFormatServiceForRecordType(credentialRecordType: string): CFs[number]; abstract createProposal(agentContext: AgentContext, options: CreateCredentialProposalOptions): Promise>; abstract processProposal(messageContext: InboundMessageContext): Promise; abstract acceptProposal(agentContext: AgentContext, options: AcceptCredentialProposalOptions): Promise>; abstract negotiateProposal(agentContext: AgentContext, options: NegotiateCredentialProposalOptions): Promise>; abstract createOffer(agentContext: AgentContext, options: CreateCredentialOfferOptions): Promise>; abstract processOffer(messageContext: InboundMessageContext): Promise; abstract acceptOffer(agentContext: AgentContext, options: AcceptCredentialOfferOptions): Promise>; abstract negotiateOffer(agentContext: AgentContext, options: NegotiateCredentialOfferOptions): Promise>; abstract createRequest(agentContext: AgentContext, options: CreateCredentialRequestOptions): Promise>; abstract processRequest(messageContext: InboundMessageContext): Promise; abstract acceptRequest(agentContext: AgentContext, options: AcceptCredentialRequestOptions): Promise>; abstract processCredential(messageContext: InboundMessageContext): Promise; abstract acceptCredential(agentContext: AgentContext, options: AcceptCredentialOptions): Promise>; abstract processAck(messageContext: InboundMessageContext): Promise; abstract createProblemReport(agentContext: AgentContext, options: CreateCredentialProblemReportOptions): Promise>; abstract findProposalMessage(agentContext: AgentContext, credentialExchangeId: string): Promise; abstract findOfferMessage(agentContext: AgentContext, credentialExchangeId: string): Promise; abstract findRequestMessage(agentContext: AgentContext, credentialExchangeId: string): Promise; abstract findCredentialMessage(agentContext: AgentContext, credentialExchangeId: string): Promise; abstract getFormatData(agentContext: AgentContext, credentialExchangeId: string): Promise>>; abstract register(dependencyManager: DependencyManager, featureRegistry: FeatureRegistry): void; /** * Process a received credential {@link ProblemReportMessage}. * * @param messageContext The message context containing a credential problem report message * @returns credential record associated with the credential problem report message */ processProblemReport(messageContext: InboundMessageContext): Promise; /** * Update the record to a new state and emit an state changed event. Also updates the record * in storage. * * @param credentialRecord The credential record to update the state for * @param newState The state to update to * */ updateState(agentContext: AgentContext, credentialRecord: CredentialExchangeRecord, newState: CredentialState): Promise; protected emitStateChangedEvent(agentContext: AgentContext, credentialRecord: CredentialExchangeRecord, previousState: CredentialState | null): void; /** * Retrieve a credential record by id * * @param credentialRecordId The credential record id * @throws {RecordNotFoundError} If no record is found * @return The credential record * */ getById(agentContext: AgentContext, credentialRecordId: string): Promise; /** * Retrieve all credential records * * @returns List containing all credential records */ getAll(agentContext: AgentContext): Promise; findAllByQuery(agentContext: AgentContext, query: Query): Promise; /** * Find a credential record by id * * @param credentialRecordId the credential record id * @returns The credential record or null if not found */ findById(agentContext: AgentContext, proofRecordId: string): Promise; delete(agentContext: AgentContext, credentialRecord: CredentialExchangeRecord, options?: DeleteCredentialOptions): Promise; /** * Retrieve a credential record by connection id and thread id * * @param connectionId The connection id * @param threadId The thread id * @throws {RecordNotFoundError} If no record is found * @throws {RecordDuplicateError} If multiple records are found * @returns The credential record */ getByThreadAndConnectionId(agentContext: AgentContext, threadId: string, connectionId?: string): Promise; /** * Find a credential record by connection id and thread id, returns null if not found * * @param connectionId The connection id * @param threadId The thread id * @returns The credential record */ findByThreadAndConnectionId(agentContext: AgentContext, threadId: string, connectionId?: string): Promise; update(agentContext: AgentContext, credentialRecord: CredentialExchangeRecord): Promise; }