﻿import { AxiosInstance } from "axios";
import { TypableApiMethodOptions } from "./types";
import { ProblemDetails, ResponseEnvelopes } from "@tectonique/api-standards";
export declare function createTypeSafeAxios<PROBLEM_DETAIL_SUPER_TYPE extends ProblemDetails.ProblemDetail<SUPER_STATUS, SUPER_TYPE, SUPER_PAYLOAD>, SUPER_STATUS extends number = PROBLEM_DETAIL_SUPER_TYPE["status"], SUPER_TYPE extends string = PROBLEM_DETAIL_SUPER_TYPE["type"], SUPER_PAYLOAD = PROBLEM_DETAIL_SUPER_TYPE["payload"]>(axios: AxiosInstance): {
    verbs: {
        get: <RESPONSE, QUERY>(url: string, options?: TypableApiMethodOptions<QUERY> | undefined) => Promise<ResponseEnvelopes.SuccessEnvelope<RESPONSE>>;
        post: <RESPONSE_1, BODY, QUERY_1>(url: string, body: BODY, options?: TypableApiMethodOptions<QUERY_1> | undefined) => Promise<ResponseEnvelopes.SuccessEnvelope<RESPONSE_1>>;
        put: <RESPONSE_2, BODY_1, QUERY_2>(url: string, body: BODY_1, options?: TypableApiMethodOptions<QUERY_2> | undefined) => Promise<ResponseEnvelopes.SuccessEnvelope<RESPONSE_2>>;
        patch: <RESPONSE_3, BODY_2, QUERY_3>(url: string, body: BODY_2, options?: TypableApiMethodOptions<QUERY_3> | undefined) => Promise<ResponseEnvelopes.SuccessEnvelope<RESPONSE_3>>;
        delete: <RESPONSE_4, QUERY_4>(url: string, options?: TypableApiMethodOptions<QUERY_4> | undefined) => Promise<ResponseEnvelopes.SuccessEnvelope<RESPONSE_4>>;
    };
    createProblemDetailHandler: <RESULT>(handler: (problemDetail: PROBLEM_DETAIL_SUPER_TYPE) => RESULT) => (reason: any) => RESULT;
    handleProblemDetail: <RESULT_1>(reason: any, handler: (problemDetail: PROBLEM_DETAIL_SUPER_TYPE) => RESULT_1) => RESULT_1;
};
export declare function createTypedHandleProblemDetail<PROBLEM_DETAIL_SUPER_TYPE extends ProblemDetails.ProblemDetail<SUPER_STATUS, SUPER_TYPE, SUPER_PAYLOAD>, SUPER_STATUS extends number = PROBLEM_DETAIL_SUPER_TYPE["status"], SUPER_TYPE extends string = PROBLEM_DETAIL_SUPER_TYPE["type"], SUPER_PAYLOAD = PROBLEM_DETAIL_SUPER_TYPE["payload"]>(): <RESULT>(reason: any, handler: (problemDetail: PROBLEM_DETAIL_SUPER_TYPE) => RESULT) => RESULT;
export declare function createTypedAxiosVerbs<PROBLEM_DETAIL_SUPER_TYPE extends ProblemDetails.ProblemDetail<SUPER_STATUS, SUPER_TYPE, SUPER_PAYLOAD>, SUPER_STATUS extends number = PROBLEM_DETAIL_SUPER_TYPE["status"], SUPER_TYPE extends string = PROBLEM_DETAIL_SUPER_TYPE["type"], SUPER_PAYLOAD = PROBLEM_DETAIL_SUPER_TYPE["payload"]>(axios: AxiosInstance): {
    get: <RESPONSE, QUERY>(url: string, options?: TypableApiMethodOptions<QUERY> | undefined) => Promise<ResponseEnvelopes.SuccessEnvelope<RESPONSE>>;
    post: <RESPONSE_1, BODY, QUERY_1>(url: string, body: BODY, options?: TypableApiMethodOptions<QUERY_1> | undefined) => Promise<ResponseEnvelopes.SuccessEnvelope<RESPONSE_1>>;
    put: <RESPONSE_2, BODY_1, QUERY_2>(url: string, body: BODY_1, options?: TypableApiMethodOptions<QUERY_2> | undefined) => Promise<ResponseEnvelopes.SuccessEnvelope<RESPONSE_2>>;
    patch: <RESPONSE_3, BODY_2, QUERY_3>(url: string, body: BODY_2, options?: TypableApiMethodOptions<QUERY_3> | undefined) => Promise<ResponseEnvelopes.SuccessEnvelope<RESPONSE_3>>;
    delete: <RESPONSE_4, QUERY_4>(url: string, options?: TypableApiMethodOptions<QUERY_4> | undefined) => Promise<ResponseEnvelopes.SuccessEnvelope<RESPONSE_4>>;
};
