import { IPrivateKey, IPublicKey } from '../types';
export interface IExtraData {
    [key: string]: string;
}
/**
 * Object representation of the card's signature.
 */
export interface ICardSignature {
    /**
     * Signature identifier.
     */
    readonly signer: string;
    /**
     * The signature as a string in base64 encoding.
     */
    readonly signature: string;
    /**
     * Snapshot of the signature's associated `extraFields` as a string in
     * UTF-8 encoding.
     */
    readonly snapshot?: string;
    /**
     * Custom attributes associated with the signature.
     */
    readonly extraFields?: IExtraData;
}
/**
 * Object representation of the Virgil Card with the properties encoded in
 * content snapshot directly accessible.
 */
export interface ICard {
    readonly id: string;
    readonly identity: string;
    /**
     * The {@link IPublicKey} object representing this card's public key,
     */
    readonly publicKey: IPublicKey;
    /**
     * Card's version. Currently always equal to "5.0"
     */
    readonly version: string;
    /**
     * The date the card was created at.
     */
    readonly createdAt: Date;
    /**
     * List of cards signatures.
     */
    readonly signatures: ICardSignature[];
    /**
     * Id of the card this card replaces as outdated, if any.
     */
    readonly previousCardId?: string;
    /**
     * The content snapshot of the card as a string in UTF-8 encoding.
     */
    readonly contentSnapshot: string;
    /**
     * Indicates whether this card had been replaced by a newer card.
     */
    isOutdated: boolean;
    /**
     * The card identified by `previousCardId` of this card, if any.
     *
     * > Note! This is only populated by {@link CardManager.searchCards}
     * method.
     */
    previousCard?: ICard;
}
/**
 * Properties encoded in the card's content snapshot.
 * @hidden
 */
export interface IRawCardContent {
    readonly identity: string;
    readonly public_key: string;
    readonly version: string;
    readonly created_at: number;
    readonly previous_card_id?: string;
}
/**
 * Parameters required to create new card.
 */
export interface INewCardParams {
    /**
     * The card's corresponding private key.
     */
    readonly privateKey: IPrivateKey;
    /**
     * The card's public key.
     */
    readonly publicKey: IPublicKey;
    /**
     * The card's identity.
     *
     * When publishing a card, the value specified in the "sub" property of
     * the JWT takes precedence over this value.
     *
     * @see {@link CardManager.publishCard}
     */
    readonly identity?: string;
    /**
     * Id of the card the new card is meant to replace.
     */
    readonly previousCardId?: string;
    /**
     * Custom attributes to be associated with the "self" signature of the
     * new card.
     */
    readonly extraFields?: IExtraData;
}
