import type { HTTPSignedField } from "./http-server/common.js";
import type { Logger } from "./log/index.js";
import type { ToValuizable } from "./resolver.js";
/**
 * This is the type of content that can be rendered directly in a client application.
 *
 * There is no guarantee on if/how this content will be displayed, so it should not be used for critical information, rather as a way to provide the user additional context about a transfer.
 */
export type ClientRenderableContent = {
    type: 'markdown' | 'plaintext';
    content: string;
};
/**
 * Authentication requirement attached to a service operation endpoint.
 */
export type ServiceMetadataAuthenticationType = {
    method: 'keeta-account';
    type: 'required' | 'optional' | 'none';
};
/**
 * Operation endpoint exposed by a service.
 */
export type ServiceMetadataEndpoint = string | {
    url: string;
    options?: {
        authentication?: ServiceMetadataAuthenticationType;
    };
};
export interface AnchorMetadataLegalField {
    disclaimers?: {
        purpose: 'general';
        content: ClientRenderableContent;
    }[] | undefined;
}
export interface SharedAnchorMetadataLegalExtension {
    /**
     * Legal details that the anchor wants to share with the user.
     * This can include things like disclaimers, terms of service, etc.
     */
    legal?: AnchorMetadataLegalField;
}
/**
 * Signature over `{ operations, legal }` for a service entry. `account` and
 * `signed` are coupled at runtime: either both are absent (unsigned entry)
 * or both are present (signed entry that MUST verify). The coupling cannot
 * be expressed at the type level without breaking `JSONSerializable`
 * compatibility, so consumers MUST treat one-sided forms as malformed.
 */
export type SharedAnchorMetadataSignedExtension = {
    account?: string;
    signed?: HTTPSignedField;
};
export type SharedAnchorCallerCertificateRequirementMetadata = {
    /**
     * Issuer DNs this anchor accepts for caller authentication. Outer array
     * is any-of (OR), inner array is all-of (AND) within a single DN.
     * When present, callers MUST present an on-chain certificate that chains
     * to an issuer whose subject DN matches one of these.
     */
    acceptedIssuerDNs?: {
        name: string;
        value: string;
    }[][];
};
export declare function resolveSharedAnchorMetadataLegalExtension(metadata: ToValuizable<AnchorMetadataLegalField> | undefined, options: {
    logger?: Logger | undefined;
}): Promise<SharedAnchorMetadataLegalExtension>;
//# sourceMappingURL=metadata.types.d.ts.map