import { AmountExactness, SetuError } from "../types";
export declare enum SetuEnv {
    SANDBOX = "SANDBOX",
    PRODUCTION = "PRODUCTION"
}
export declare enum AuthScheme {
    OAUTH = "OAUTH",
    JWT = "JWT"
}
export declare enum API {
    FETCH_TOKEN = "/auth/token",
    PAYMENT_LINK_BASE = "/payment-links",
    REFUND_BASE = "/refund",
    TRIGGER_MOCK_PAYMENT = "/triggers/funds/addCredit",
    EXPIRE_BILL = "/utilities/bills/%s/expire",
    REPORTS_BASE = "/reports"
}
export declare type SetuResponseBase<T> = {
    readonly status: number;
    readonly success: boolean;
    readonly error: SetuError;
    readonly data: T;
};
export declare type BillStatus = "BILL_CREATED" | "PAYMENT_SUCCESSFUL" | "PAYMENT_FAILED" | "CREDIT_RECEIVED" | "SETTLEMENT_SUCCESSFUL" | "SETTLEMENT_FAILED" | "BILL_EXPIRED";
export declare type SetuUPIDeepLinkParams = {
    readonly schemeID: string;
    readonly secret: string;
    readonly productInstanceID: string;
    readonly mode: `${SetuEnv}`;
    readonly authType: `${AuthScheme}`;
};
export declare type FetchTokenResponseData = {
    readonly expiresIn: number;
    readonly token: string;
};
export declare type CreatePaymentLinkData = {
    readonly name?: string;
    readonly transactionNote?: string;
    readonly amount: Amount;
    readonly expiryDate?: string;
    readonly billerBillID: string;
    readonly amountExactness: AmountExactness;
    readonly validationRules?: ValidationRules;
    readonly settlement?: Settlement;
    readonly additionalInfo?: Record<string, string>;
    readonly campaignID?: string;
};
export declare type Settlement = {
    readonly parts: readonly SettlementPart[];
    readonly primaryAccount: Account;
};
declare type SettlementPart = {
    readonly account: Account;
    readonly remarks: string;
    readonly split: Split;
};
declare type Split = {
    readonly unit: string;
    readonly value: number;
};
declare type Account = {
    readonly id: string;
    readonly ifsc: string;
};
declare type Amount = {
    readonly currencyCode: string;
    readonly value: number;
};
export declare type ValidationRules = {
    readonly amount?: AmountValidation;
    readonly sourceAccounts?: SourceAccounts;
};
declare type AmountValidation = {
    readonly minimum: number;
    readonly maximum: number;
};
declare type SourceAccounts = {
    readonly items: readonly SourceAccountItem[];
};
declare type SourceAccountItem = {
    readonly number: string;
    readonly ifsc: string;
};
export declare type CreatePaymentLinkResponseData = {
    readonly name: string;
    readonly paymentLink: PaymentLink;
    readonly platformBillID: string;
};
declare type PaymentLink = {
    readonly shortURL: string;
    readonly upiID: string;
    readonly upiLink: string;
};
export declare type GetPaymentStatusResponseData = {
    readonly amountPaid: Amount;
    readonly billerBillID: string;
    readonly createdAt: string;
    readonly expiresAt: string;
    readonly name: string;
    readonly payerVpa: string;
    readonly paymentLink: PaymentLink;
    readonly platformBillID: string;
    readonly receipt: Receipt;
    readonly status: BillStatus;
    readonly transactionNote: string;
};
declare type Receipt = {
    readonly date: string;
    readonly id: string;
};
export declare type TriggerMockPaymentData = {
    readonly amount: number;
    readonly destinationAccount: DestinationAccount;
    readonly sourceAccount: DestinationAccount;
    readonly transactionReference: string;
    readonly type: "UPI" | "ACCOUNT";
};
declare type DestinationAccount = {
    readonly accountID: string;
};
export declare type TriggerMockPaymentResponseData = {
    readonly utr: string;
};
export declare type InitiateRefundData = {
    readonly refunds: readonly RefundRequestItem[];
};
declare type InitiateRefundPartialAmountParams = {
    readonly refundType: "PARTIAL";
    readonly refundAmount: number;
};
declare type InitiateRefundPartialAmount = {
    readonly refundType: "PARTIAL";
    readonly refundAmount: Amount;
};
declare type InitiateRefundFullAmount = {
    readonly refundType: "FULL";
};
export declare type InitiateRefundAmountParams = InitiateRefundPartialAmountParams | InitiateRefundFullAmount;
declare type InitiateRefundAmount = InitiateRefundPartialAmount | InitiateRefundFullAmount;
export declare type RefundRequestItem = InitiateRefundAmount & {
    readonly seqNo: number;
    readonly identifier: string;
    readonly identifierType: "BILL_ID";
    readonly deductions?: readonly Deduction[];
};
export declare type Deduction = {
    readonly account: Account;
    readonly split: Split;
};
export declare type InitiateRefundResponseData = {
    readonly batchID: string;
    readonly refunds: readonly RefundResponseDataItem[];
};
declare type RefundResponseErrorData = {
    readonly code: string;
    readonly detail: string;
    readonly title: string;
};
declare type RefundStatus = "Created" | "MarkedForRefund" | "QueuedForRefund" | "Rejected" | "Initiated";
export declare type RefundResponseSuccessData = {
    readonly id: string;
    readonly billID: string;
    readonly transactionRefID: string;
    readonly status: RefundStatus;
    readonly amount: Amount;
    readonly deductions: readonly Deduction[];
    readonly initiatedAt?: string;
};
declare type RefundResponseDataItem = ({
    readonly success: true;
    readonly seqNo: number;
} & RefundResponseSuccessData) | ({
    readonly success: false;
    readonly seqNo: number;
} & RefundResponseErrorData);
export declare type BatchRefundStatusResponseData = {
    readonly refunds: readonly RefundResponseSuccessData[];
};
export {};
