import { type AxiosResponse } from 'axios';
import { type PatientReadInputType, type PatientReadResponseType, type PatientCreateInputType, type PatientCreateResponseType, type PatientMatchInputType, type PatientMatchResponseType, type DocumentReferenceCreateInputType, type DocumentReferenceCreateResponseType, type AppointmentReadResponseType, type AppointmentReadInputType, type PatientSearchInputType, type PatientSearchResponseType, type DocumentReferenceReadInputType, type DocumentReferenceReadResponseType, type BinaryReadResponseType, type BinaryReadInputType } from './schema';
/**
 * FHIR R4 API Client
 */
export declare class EpicFhirR4Client {
    private readonly client;
    private readonly authUrl;
    private readonly clientId;
    private readonly privateKey;
    private readonly kid?;
    private readonly jku?;
    private accessToken;
    private tokenExpiry;
    constructor({ baseUrl, authUrl, clientId, privateKey, kid, jku, }: {
        baseUrl: string;
        authUrl: string;
        clientId: string;
        privateKey: string;
        kid?: string;
        jku?: string;
    });
    private refreshAccessToken;
    private isTokenExpired;
    getPatient(resourceId: PatientReadInputType): Promise<AxiosResponse<PatientReadResponseType>>;
    createPatient(data: PatientCreateInputType): Promise<AxiosResponse<PatientCreateResponseType>>;
    matchPatient(data: PatientMatchInputType): Promise<AxiosResponse<PatientMatchResponseType>>;
    searchPatient(data: PatientSearchInputType): Promise<AxiosResponse<PatientSearchResponseType>>;
    createDocumentReference(data: DocumentReferenceCreateInputType): Promise<AxiosResponse<DocumentReferenceCreateResponseType>>;
    getDocumentReference(resourceId: DocumentReferenceReadInputType): Promise<AxiosResponse<DocumentReferenceReadResponseType>>;
    searchDocumentReferences({ patientResourceId, category, }: {
        patientResourceId: string;
        category?: string;
        startDate?: string;
        endDate?: string;
    }): Promise<AxiosResponse<unknown>>;
    getAppointment(resourceId: AppointmentReadInputType): Promise<AxiosResponse<AppointmentReadResponseType>>;
    getBinary(resourceId: BinaryReadInputType): Promise<AxiosResponse<BinaryReadResponseType>>;
    getMetadata(): Promise<AxiosResponse<unknown>>;
}
