import type { CredentialProtocol } from './CredentialProtocol'; import type { AgentMessage } from '../../../agent/AgentMessage'; import type { ConnectionRecord } from '../../connections/repository/ConnectionRecord'; import type { CredentialFormat, CredentialFormatPayload, CredentialFormatService, ExtractCredentialFormats } from '../formats'; import type { CredentialPreviewAttributeOptions } from '../models'; import type { AutoAcceptCredential } from '../models/CredentialAutoAcceptType'; import type { CredentialExchangeRecord } from '../repository/CredentialExchangeRecord'; /** * Get the format data payload for a specific message from a list of CredentialFormat interfaces and a message * * For an indy offer, this resolves to the cred abstract format as defined here: * https://github.com/hyperledger/aries-rfcs/tree/b3a3942ef052039e73cd23d847f42947f8287da2/features/0592-indy-attachments#cred-abstract-format * * @example * ``` * * type OfferFormatData = CredentialFormatDataMessagePayload<[IndyCredentialFormat, JsonLdCredentialFormat], 'createOffer'> * * // equal to * type OfferFormatData = { * indy: { * // ... payload for indy offer attachment as defined in RFC 0592 ... * }, * jsonld: { * // ... payload for jsonld offer attachment as defined in RFC 0593 ... * } * } * ``` */ export type CredentialFormatDataMessagePayload = { [Service in CFs[number] as Service['formatKey']]?: Service['formatData'][M]; }; /** * Infer the {@link CredentialFormat} types based on an array of {@link CredentialProtocol} types. * * It does this by extracting the `CredentialFormatServices` generic from the `CredentialProtocol`, and * then extracting the `CredentialFormat` generic from each of the `CredentialFormatService` types. * * @example * ``` * // TheCredentialFormatServices is now equal to [IndyCredentialFormatService] * type TheCredentialFormatServices = CredentialFormatsFromProtocols<[V1CredentialProtocol]> * ``` * * Because the `V1CredentialProtocol` is defined as follows: * ``` * class V1CredentialProtocol implements CredentialProtocol<[IndyCredentialFormatService]> { * } * ``` */ export type CredentialFormatsFromProtocols = Type[number] extends CredentialProtocol ? CredentialFormatServices extends CredentialFormatService[] ? ExtractCredentialFormats : never : never; /** * Get format data return value. Each key holds a mapping of credential format key to format data. * * @example * ``` * { * proposal: { * indy: { * cred_def_id: string * } * } * } * ``` */ export type GetCredentialFormatDataReturn = { proposalAttributes?: CredentialPreviewAttributeOptions[]; proposal?: CredentialFormatDataMessagePayload; offer?: CredentialFormatDataMessagePayload; offerAttributes?: CredentialPreviewAttributeOptions[]; request?: CredentialFormatDataMessagePayload; credential?: CredentialFormatDataMessagePayload; }; export interface CreateCredentialProposalOptions { connectionRecord: ConnectionRecord; credentialFormats: CredentialFormatPayload, 'createProposal'>; autoAcceptCredential?: AutoAcceptCredential; comment?: string; } export interface AcceptCredentialProposalOptions { credentialRecord: CredentialExchangeRecord; credentialFormats?: CredentialFormatPayload, 'acceptProposal'>; autoAcceptCredential?: AutoAcceptCredential; comment?: string; } export interface NegotiateCredentialProposalOptions { credentialRecord: CredentialExchangeRecord; credentialFormats: CredentialFormatPayload, 'createOffer'>; autoAcceptCredential?: AutoAcceptCredential; comment?: string; } export interface CreateCredentialOfferOptions { connectionRecord?: ConnectionRecord; credentialFormats: CredentialFormatPayload, 'createOffer'>; autoAcceptCredential?: AutoAcceptCredential; comment?: string; } export interface AcceptCredentialOfferOptions { credentialRecord: CredentialExchangeRecord; credentialFormats?: CredentialFormatPayload, 'acceptOffer'>; autoAcceptCredential?: AutoAcceptCredential; comment?: string; } export interface NegotiateCredentialOfferOptions { credentialRecord: CredentialExchangeRecord; credentialFormats: CredentialFormatPayload, 'createProposal'>; autoAcceptCredential?: AutoAcceptCredential; comment?: string; } export interface CreateCredentialRequestOptions { connectionRecord: ConnectionRecord; credentialFormats: CredentialFormatPayload, 'createRequest'>; autoAcceptCredential?: AutoAcceptCredential; comment?: string; } export interface AcceptCredentialRequestOptions { credentialRecord: CredentialExchangeRecord; credentialFormats?: CredentialFormatPayload, 'acceptRequest'>; autoAcceptCredential?: AutoAcceptCredential; comment?: string; } export interface AcceptCredentialOptions { credentialRecord: CredentialExchangeRecord; } export interface CreateCredentialProblemReportOptions { credentialRecord: CredentialExchangeRecord; description: string; } export interface CredentialProtocolMsgReturnType { message: MessageType; credentialRecord: CredentialExchangeRecord; } export interface DeleteCredentialOptions { deleteAssociatedCredentials?: boolean; deleteAssociatedDidCommMessages?: boolean; }