import { DataSource } from 'typeorm';
import { DBResponse } from './response-entity';
type HttpMethod = 'GET' | 'POST';
export interface AddResponseOptions {
    method: HttpMethod;
    endpoint: string;
    url: string | null;
    requestHeaders: string | null;
    requestBody: string | null;
    responseType: string;
    statusCode: number;
    responseHeaders: string | null;
    responseBody: string;
}
/**
 * レスポンスを保存するデータベースのオプション
 */
export interface ResponseDatabaseOptions {
    /**
     * ホスト名 (MySQL のみ)
     */
    hostname?: string;
    /**
     * ポート (MySQL のみ)
     */
    port?: string;
    /**
     * ユーザー名 (MySQL のみ)
     */
    username?: string;
    /**
     * パスワード (MySQL のみ)
     */
    password?: string;
    /**
     * データベース名 (MySQL のみ)
     */
    database?: string;
}
export interface ResponseEndPoint {
    method: HttpMethod;
    endpoint: string;
    statusCode: number;
}
export type ResponseEndPointWithCount = ResponseEndPoint & {
    count: number;
};
interface GetResponseRangeOptions {
    page?: number;
    limit?: number;
}
/**
 * レスポンスを保存するデータベース
 */
export declare class ResponseDatabase {
    private dataSource;
    constructor(options?: ResponseDatabaseOptions);
    /**
     * データソースを初期化する
     *
     * @returns 初期化に成功したかどうか
     */
    init(): Promise<boolean>;
    /**
     * データソースをマイグレーションする
     */
    migrate(): Promise<void>;
    /**
     * データソーススキーマを同期する
     */
    sync(): Promise<void>;
    /**
     * レスポンスを追加する
     *
     * @param options レスポンスの追加オプション
     * @returns 追加されたレスポンス
     */
    addResponse(options: AddResponseOptions): Promise<DBResponse | undefined>;
    /**
     * レスポンスを取得する。但し直近90日間のレスポンスのみ取得可能
     *
     * @param endpoint エンドポイントの情報。指定しない場合はすべてのレスポンスを取得する
     * @param rangeOptions 取得するレスポンスの範囲
     *
     * @returns レスポンスの配列
     */
    getResponses(endpoint?: ResponseEndPoint | ResponseEndPoint[], rangeOptions?: GetResponseRangeOptions): Promise<DBResponse[]>;
    /**
     * レスポンスの数を取得する。但し直近90日間のレスポンスのみ取得可能
     *
     * @param endpoint エンドポイントの情報。指定しない場合はすべてのレスポンスを取得する
     * @returns レスポンスの数
     */
    getResponseCount(endpoint?: ResponseEndPoint | ResponseEndPoint[]): Promise<number>;
    /**
     * エンドポイントを取得する。但し直近90日間のレスポンスのみ取得可能
     */
    getEndpoints(): Promise<ResponseEndPointWithCount[]>;
    close(): Promise<void>;
    isInitialized(): boolean;
    /**
     * データソースを取得する
     *
     * @returns データソース
     */
    getDataSource(): DataSource;
    /**
     * 環境変数で指定されたデータベースのポートをパースする。
     * 数値にパースできない場合と1以上でない場合はエラーを投げる。
     * undefinedの場合は、各データベースのデフォルトポートを使用する
     *
     * @param port データベースのポート
     * @returns パースされたポート
     */
    private parsePort;
    static printDebug(text: string, error?: Error): void;
}
export {};
//# sourceMappingURL=index.d.ts.map