/**
 * INP Protocol Types
 *
 * Core type definitions for the INP (Internet Native Payments) protocol
 * These types are based on the INP specification and API responses
 */
export interface INPEndpointConfig {
    pricing_model: 'fixed' | 'dynamic';
    price?: {
        amount: string;
        currency: string;
    };
    base_price?: {
        amount: string;
        currency: string;
    };
    bidding_enabled?: boolean;
    networks: string[];
    guaranteed_response_time?: string;
    availability?: string;
}
export interface INPDiscoveryEndpoint {
    version: string;
    service_info: {
        name: string;
        description?: string;
        base_url: string;
    };
    endpoints: Record<string, INPEndpointConfig>;
}
export interface INPPayment {
    amount: number;
    currency: string;
    network: string;
    walletAddress: string;
    transactionId?: string;
    proof?: string;
}
export interface INPClientConfig {
    baseUrl: string;
    apiKey?: string;
    timeout?: number;
    retries?: number;
}
export interface INPDiscoveryRequest {
    projectId: string;
    baseUrl?: string;
}
export interface INPPaymentValidationRequest {
    endpointId: string;
    payment: INPPayment;
    validateTransaction?: boolean;
}
export interface INPServiceInvocationRequest {
    serviceId: string;
    method?: string;
    url?: string;
    headers?: Record<string, string>;
    body?: any;
    auth?: any;
    payment?: INPPayment;
}
export interface INPMiddlewareOptions {
    inpPlatformUrl?: string;
    projectId?: string;
    apiKey?: string;
    discoveryPath?: string;
    cacheTTL?: number;
    validatePayment?: (payment: INPPayment, endpointConfig: any) => Promise<INPValidationResult> | INPValidationResult;
    timeout?: number;
    retries?: number;
    strictMode?: boolean;
    logErrors?: boolean;
}
export interface INPPaymentMiddlewareOptions extends INPMiddlewareOptions {
    endpointConfig?: INPEndpointConfig;
    endpointId?: string;
    fallbackToDiscovery?: boolean;
}
export interface INPDiscoveryMiddlewareOptions extends INPMiddlewareOptions {
    autoGenerate?: boolean;
    customEndpoints?: Record<string, INPEndpointConfig>;
}
export interface INPValidationResult {
    isValid: boolean;
    error?: string;
    details?: any;
    warnings?: string[];
}
export interface INPDiscoveryResult {
    success: boolean;
    data?: INPDiscoveryEndpoint;
    error?: string;
    cached?: boolean;
    statusCode?: number;
}
export interface INPPaymentValidationResult extends INPValidationResult {
    transactionVerified?: boolean;
    paymentDetails?: {
        amount: number;
        currency: string;
        network: string;
        timestamp?: string;
    };
}
export interface INPServiceInvocationResult {
    success: boolean;
    status: number;
    statusText: string;
    data?: any;
    headers?: Record<string, string>;
    metadata?: {
        serviceId: string;
        serviceName?: string;
        projectName?: string;
        invokedAt: string;
        responseTime: number;
    };
    error?: string;
}
export interface INPErrorResponse {
    error: string;
    code?: string;
    timestamp?: string;
    details?: any;
}
export interface INPValidationError extends INPErrorResponse {
    code: 'VALIDATION_ERROR';
    field?: string;
    value?: any;
    expected?: any;
}
export interface INPPaymentError extends INPErrorResponse {
    code: 'PAYMENT_ERROR' | 'PAYMENT_REQUIRED' | 'TRANSACTION_VERIFICATION_FAILED';
    required?: {
        amount?: string;
        currency?: string;
        networks?: string[];
    };
}
export interface INPRequest extends Request {
    inpPayment?: INPPayment;
    inpDiscovery?: INPDiscoveryEndpoint;
    inpValidation?: INPValidationResult;
}
export type HTTPMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS';
export type SupportedNetwork = 'algorand' | 'base' | 'ethereum' | 'polygon';
export type SupportedCurrency = 'USDC' | 'USD' | 'EUR' | 'ETH' | 'ALGO';
export interface CacheEntry<T> {
    data: T;
    timestamp: number;
    ttl: number;
}
export interface INPLogger {
    info(message: string, data?: any): void;
    warn(message: string, data?: any): void;
    error(message: string, error?: Error, data?: any): void;
    debug(message: string, data?: any): void;
}
//# sourceMappingURL=index.d.ts.map