import { Query, QueryOptions } from "../../storage/StorageService.js";
import { ClaimFormat } from "./models/ClaimFormat.js";
import { W3cV2CredentialRecord } from "./repository/W3cV2CredentialRecord.js";
import { W3cV2CredentialRepository } from "./repository/W3cV2CredentialRepository.js";
import { W3cV2SignCredentialOptions, W3cV2SignPresentationOptions, W3cV2StoreCredentialOptions, W3cV2VerifyCredentialOptions, W3cV2VerifyPresentationOptions } from "./W3cV2CredentialServiceOptions.js";
import { W3cV2SdJwtCredentialService } from "./sd-jwt-vc/W3cV2SdJwtCredentialService.js";
import { W3cV2VerifiableCredential } from "./models/credential/W3cV2VerifiableCredential.js";
import { W3cV2VerifyCredentialResult, W3cV2VerifyPresentationResult } from "./models/W3cV2VerifyResult.js";
import { W3cV2JwtCredentialService } from "./jwt-vc/W3cV2JwtCredentialService.js";
import { W3cV2VerifiablePresentation } from "./models/presentation/W3cV2VerifiablePresentation.js";
import { AgentContext } from "../../agent/context/AgentContext.js";

//#region src/modules/vc/W3cV2CredentialService.d.ts
declare class W3cV2CredentialService {
  private w3cV2CredentialRepository;
  private w3cV2SdJwtCredentialService;
  private w3cV2JwtCredentialService;
  constructor(w3cV2CredentialRepository: W3cV2CredentialRepository, w3cV2SdJwtCredentialService: W3cV2SdJwtCredentialService, w3cV2JwtCredentialService: W3cV2JwtCredentialService);
  /**
   * Signs a credential
   *
   * @param credential the credential to be signed
   * @returns the signed credential
   */
  signCredential<Format extends ClaimFormat.JwtW3cVc | ClaimFormat.SdJwtW3cVc>(agentContext: AgentContext, options: W3cV2SignCredentialOptions<Format>): Promise<W3cV2VerifiableCredential<Format>>;
  /**
   * Verifies the signature(s) of a credential
   */
  verifyCredential(agentContext: AgentContext, options: W3cV2VerifyCredentialOptions): Promise<W3cV2VerifyCredentialResult>;
  /**
   * Signs a presentation including the credentials it includes
   *
   * @param presentation the presentation to be signed
   * @returns the signed presentation
   */
  signPresentation<Format extends ClaimFormat.JwtW3cVp | ClaimFormat.SdJwtW3cVp>(agentContext: AgentContext, options: W3cV2SignPresentationOptions<Format>): Promise<W3cV2VerifiablePresentation<Format>>;
  /**
   * Verifies a presentation including the credentials it includes
   *
   * @param presentation the presentation to be verified
   * @returns the verification result
   */
  verifyPresentation(agentContext: AgentContext, options: W3cV2VerifyPresentationOptions): Promise<W3cV2VerifyPresentationResult>;
  /**
   * Writes a credential to storage
   *
   * @param record the credential to be stored
   * @returns the credential record that was written to storage
   */
  storeCredential(agentContext: AgentContext, options: W3cV2StoreCredentialOptions): Promise<W3cV2CredentialRecord>;
  removeCredentialRecord(agentContext: AgentContext, id: string): Promise<void>;
  getAllCredentialRecords(agentContext: AgentContext): Promise<W3cV2CredentialRecord[]>;
  getCredentialRecordById(agentContext: AgentContext, id: string): Promise<W3cV2CredentialRecord>;
  findCredentialsByQuery(agentContext: AgentContext, query: Query<W3cV2CredentialRecord>, queryOptions?: QueryOptions): Promise<W3cV2VerifiableCredential[]>;
  findCredentialRecordByQuery(agentContext: AgentContext, query: Query<W3cV2CredentialRecord>): Promise<W3cV2VerifiableCredential | undefined>;
}
//#endregion
export { W3cV2CredentialService };
//# sourceMappingURL=W3cV2CredentialService.d.ts.map