import { AuthenticationStatus } from './authentication'; import { Country } from './appConfig'; import { Currency } from './currency'; import { Discount, Item, Vat } from './invoice'; import { HttpMethodFilters } from './api'; export interface ChargeDialog { id: string; order: number; } export interface CustomerInfo { firstName: string; lastName: string; email: string; phoneNumber: string; } export interface BrandInfo { id: string; entity: { id: string; merchant: { id: string; display_name: string; legacy_id: string; }; }; } export interface ChargeInfo { items: Item[]; transactionType: string; isReceiptVisible: boolean; customer: CustomerInfo; selectedCurrency: Currency; isLoading: boolean; totalGrossAmount: number; totalNetAmount: number; totalVat: Vat; totalDiscount: Discount; country: Country; errors: any; isDragging: boolean; isItemsNotValid: boolean; isAmountIsMissing: boolean; brand: BrandInfo; receiptId: string; isMerchantNotValid?: boolean; isCustomerNotValid?: boolean; isCardNotValid?: boolean; cardError?: string; } export interface Charge { id: string; object: string; live_mode: boolean; customer_initiated: boolean; api_version: string; method: string; status: 'INITIATED' | 'IN_PROGRESS' | 'ABANDONED' | 'CANCELLED' | 'FAILED' | 'DECLINED' | 'RESTRICTED' | 'CAPTURED' | 'VOID' | 'TIMEDOUT' | 'UNKNOWN'; amount: number; currency: string; threeDSecure: boolean; card_threeDSecure: boolean; save_card: boolean; merchant_id: string; product: string; statement_descriptor: string; description: string; metadata: Record; flagId?: string; flagDate?: number; exchange?: { requested?: { amount: number; currency: string; rate: number; }; capture?: { amount: number; currency: string; rate: number; }; settlement?: { amount: number; currency: string; rate: number; }; }; transaction: { authorization_id: string; timezone: string; created: string | number; date?: { created?: string | number; completed?: string | number; posted?: string | number; }; expiry: { period: number; type: string; }; asynchronous: boolean; amount: number; currency: string; order: { reference: string; store_url: string; }; }; flags: { flag: Array<{ id: string; status: 'OPEN' | 'CLEARED'; amount: number; created: number; note: string; ishold: boolean; }>; }; authentication?: { acsEci: string; transaction_status?: 'Y' | 'A' | 'N' | 'R'; id: string; status: AuthenticationStatus; threeDSecure?: { status: AuthenticationStatus; provider: string; }; }; payment: { type: string; account: string; method: string; scheme: string; authentication?: '3DS' | 'Non-3DS'; card: string; wallet: string; id: string; }; card: { object: string; first_six: string; first_eight: string; scheme: string; brand: string; last_four: string; name: string; expiry: { month: string; year: string; }; registered: boolean; }; reference: { id: string; track: string; payment: string; gateway: string; acquirer: string; transaction: string; order: string; invoice: string; trace_id: string; }; response: { code: string; message: string; }; receipt: { id: string; email: boolean; sms: boolean; }; acquirer: { id: string; response: { code: string; message: string; }; name: string; mid: string; }; gateway: { id: string; name: string; response: { code: string; message: string; }; }; customer: { country: { code: string; name: string; }; id: string; first_name: string; last_name: string; email: string; phone: { country_code: string; number: string; }; region: { name: 'Local' | 'Global' | 'Regional'; code: 'R' | 'G' | 'L'; }; timezone: string; }; source: { object: string; type: string; payment_type: string; payment_method: 'MASTERCARD' | 'VISA' | 'APPLE_PAY'; channel: string; id: string; region: 'Local' | 'Global' | 'Regional'; }; issuer?: { id: string; name: string; country: string; region: 'G' | 'L' | 'R'; issuer_region: { code: 'G' | 'L' | 'R'; name: 'Local' | 'Global' | 'Regional'; }; }; redirect: { status: string; url: string; }; post: { status: string; }; payouts: { amount: number; currency: string; count: number; payout: Array<{ date: number; by: string; reference_id: string; id: string; amount: number; created: number; }>; }; order: { id: string; currency: string; amount: number; items_count?: number; items?: object[]; }; balance: { status?: 'PAID_OUT' | 'SETTLED' | 'PENDING'; payout: { id: string; scheduled: number; activities: [ { object: string; status: 'PAID_OUT' | 'PENDING'; date: number; } ]; }; settlement: { status: 'SETTLED' | 'PENDING'; id: string; scheduled: number; activities: [ { object: string; status: 'SETTLED' | 'PENDING'; date: number; } ]; }; scheduled: number; }; net: { transaction_currency: string; transaction_amount: number; currency: string; currency_rate: number; fee: number; amount: number; base: { amount: number; currency: string; rate: number; fee: number; vat: number; }; }; fees: { amount: number; currency: string; count: number; fee: Array<{ id: string; type: string; by: string; on: string; amount: number; currency: string; }>; }; auto_reversed: boolean; security: { threeDSecure: { id: string; status: string; }; }; destinations?: { amount: number; currency: string; count: number; destination: Array<{ id: string; amount: number; currency: string; description: string; reference: string; transfer: { id: string; amount: number; currency: string; }; }>; }; merchant: { id: string; legacy_id: string; country: string; name: string; retailer: { id: string; }; payment_provider?: { technology?: { id: string; brand?: { name?: { en: string; }; }; }; institution?: { id: string; brand?: { name?: { en: string; }; }; }; }; }; refunds: { summary: { charge_amount: number; refund_amount: number; refunded_count: number; remaing_amount: number; remaing_percentage: number; }; refund: Array<{ id: string; amount: number; currency: string; created: number; date: number; status: 'REFUNDED' | 'PENDING'; }>; }; topup: { id: string; amount: number; currency: string; }; device?: { type: 'DESKTOP' | 'PHONE' | 'TABLET' | 'TERMINAL'; id: string; timezone: string; location: { ip: string; country: string; region: { code: 'G' | 'L' | 'R'; name: 'Global' | 'Local' | 'Regional'; }; }; }; authenticate: { id: string; object: string; type: string; value: string; by: string; status: string; created: string; authenticated: string; count: number; retry_attempt: number; message: string; }; payment_agreement?: { id: string; type: 'UNSCHEDULED' | 'SCHEDULED_INSTALLMENT' | 'SCHEDULED_SUBSCRIPTION' | 'SCHEDULED_BILLING'; contract?: { id: string; type: 'ORDER' | 'SAVED_CARD' | 'SUBSCRIPTION' | 'INSTALLMENT'; period: { start_date: number; end_date: number; auto_renewal: boolean; }; }; variable_amount?: { id: string; maximum_amount: number; }; scheduled_payments?: { id: string; count: number; frequency: { period: 'MINUTES' | 'HOURS' | 'DAYS' | 'MONTHS'; count: number; }; }; total_payments_count?: number; }; request_body?: Record; risk?: { id: string; status: 'ACCEPTED' | 'REJECTED' | 'WARNING'; rules: Array<{ id: string; name: string; type: string; rule_group: string; risk: string; value: string; decision: string; }>; }; } export type ChargeFilterStatus = 'captured' | 'unCaptured' | 'all' | 'initiated' | (string & {}) | undefined; export interface ChargeFilters extends HttpMethodFilters { status?: ChargeFilterStatus; periodType?: string; destinationIds?: string[]; } export interface RefundChargeRequest { charge_id: string; amount: number; currency: string; reason: string; user: { id: string; name: string; channel: string; }; } export interface ChargeRequestBody { id?: string; source: { id: string; }; amount: number; currency: string; product: 'TAP OS'; statement_descriptor?: string; customer?: { id?: string; first_name: string; middle_name?: string; last_name: string; email?: string; phone?: { country_code: string; number: string; }; }; hashstring?: string; post?: { url: string; }; redirect?: { url: string; }; customer_initiated?: boolean; threeDSecure?: boolean; merchant?: { id: string; }; auto?: { type: 'VOID' | 'CAPTURE'; time: number; }; card_threeDSecure?: boolean; order: { amount: number; merchant?: { id: string; }; currency: string; customer?: { id?: string; first_name: string; middle_name?: string; last_name: string; email?: string; phone?: { country_code: string; number: string; }; }; items: Array<{ name: string; amount: number; currency: string; quantity: number; description: string; requires_shipping: boolean; }>; }; receipt: { email?: boolean; sms?: boolean; }; } export interface ChargeResponse { object: string; charges: Charge[]; has_more: boolean; total_count: number; count: number; live_mode: boolean; receipt: { id: string; }; status?: string; }