import { ethers } from "ethers";
import { Metadata } from "../../types";
export declare const METADATA_VALIDATION: {
    URL_PATTERN: RegExp;
    IPFS_URI_PATTERN: RegExp;
    DATA_URI_PATTERN: RegExp;
    IMAGE_EXTENSIONS: string[];
    MAX_METADATA_SIZE: number;
    MAX_NAME_LENGTH: number;
    MAX_DESCRIPTION_LENGTH: number;
    ETH_ADDRESS_PATTERN: RegExp;
    SOCIAL_TWITTER_PATTERN: RegExp;
    SOCIAL_DISCORD_PATTERN: RegExp;
    SOCIAL_TELEGRAM_PATTERN: RegExp;
    SOCIAL_GITHUB_PATTERN: RegExp;
};
/**
 * Get the metadata URI of the vault
 * @param vaultContract - The vault contract instance
 * @returns The metadata URI string
 */
export declare function getVaultMetadata(vaultContract: ethers.Contract): Promise<Metadata>;
/**
 * Convert Metadata object to URI using Pinata IPFS service
 * This function tries to upload metadata to IPFS via Pinata API
 * If Pinata fails, it falls back to a data URI
 *
 * @param metadata - The metadata object to convert
 * @returns An IPFS URI or data URI representing the metadata
 */
export declare const convertMetadataToURI: (metadata: Metadata) => Promise<string>;
/**
 * Convert URI back to Metadata object
 * Supports both IPFS URIs and data URIs
 *
 * @param uri - The URI to convert (ipfs:// or data:application/json;base64,)
 * @returns The metadata object
 */
export declare const convertURItoMetadata: (uri: string) => Promise<Metadata>;
/**
 * Update the metadata URI of the vault
 * @param vaultContract - The vault contract connected to signer
 * @param metadata - The metadata object to be stored or directly URI
 * @returns Transaction response
 */
export declare function setMetadata(vaultContract: ethers.Contract, metadata: Metadata | string): Promise<ethers.TransactionResponse>;
