import { APP_PAYMENT_ORDER, APP_PAY_ORDER_LIST, APP_RECHARGE_CONFIG, APP_WITHDRAW_BASE_INFO, APP_WITHDRAW_PAYOUT, APP_WITHDRAW_RECORD, APP_WITHDRAW_SET_INFO, success, } from '@scripts/api'; import { ApiEnvelope, Http } from '@scripts/request'; import { IGoodsConfig, IPaymentOrder, IPaymentOrderRequest, IPayOrderItem, IPayOrderPageData, IRechargeConfigData, IWithdrawBaseInfo, IWithdrawBaseInfoRequest, IWithdrawPayoutRequest, IWithdrawRecordItem, IWithdrawRecordPageData, IWithdrawRecordRequest, IWithdrawSetInfoRequest, } from './data'; class PayStore { private _config: IGoodsConfig[] = []; private _showBonus: boolean | number = false; private _cpfFirst: boolean | number = false; private _currPayOrder: IPaymentOrder = null; private _currPayGiftID = -1; private _payOrderList: IPayOrderItem[] = []; private _withdrawBaseInfo: IWithdrawBaseInfo = null; private _withdrawRecord: IWithdrawRecordItem[] = []; public get config() { return this._config; } public get showBonus() { return this._showBonus; } public get cpfFirst() { return this._cpfFirst; } public get currPayOrder() { return this._currPayOrder; } public get currPayGiftID() { return this._currPayGiftID; } public get payOrderList() { return this._payOrderList; } public get withdrawBaseInfo() { return this._withdrawBaseInfo; } public get withdrawRecord() { return this._withdrawRecord; } async reqRechargeConfig() { const res = await Http.call(APP_RECHARGE_CONFIG); if (success(res) && res.data) { this._config = Array.isArray(res.data.list) ? res.data.list : []; this._showBonus = res.data.bonus_show ?? false; this._cpfFirst = res.data.cpf_first ?? false; } return res; } async reqPaymentOrder(arg: IPaymentOrderRequest): Promise { const user = arg.user; const price = arg.price ?? arg.prices; const params = { tranType: '0502', payAmt: price, goodsName: arg.goodsName, buyIp: '', pay_type: arg.payType, pay_method: arg.pay_method, GiftsID: arg.GiftsID, eventType: arg.eventType || 1, AdId: user?.GlobalUID, userName: user?.NickName, userEmail: user?.Email, userPhone: user?.Phone, rand_str: Date.now(), cpf_first: arg.cpf_first || 0, }; const res = await Http.call>(APP_PAYMENT_ORDER, params); if (success(res) && res.data && !Array.isArray(res.data)) { const orderArg: Partial = { ...arg }; delete orderArg.user; this._currPayOrder = { ...res.data, createAt: Date.now(), deadline: Number(res.data.deadline ?? 15 * 60), status: 'pending', arg: orderArg, }; this._currPayGiftID = Number(arg.GiftsID ?? -1); return true; } return false; } async reqPayOrderList(page = 1, pageSize = 10) { const res = await Http.call(APP_PAY_ORDER_LIST, { page, pageSize }); if (success(res) && res.data) { this._payOrderList = Array.isArray(res.data.data) ? res.data.data : []; return true; } return false; } async reqWithdrawBaseInfo(arg: IWithdrawBaseInfoRequest = {}): Promise { const res = await Http.call(APP_WITHDRAW_BASE_INFO, { paypass: arg.paypass || '', }); if (success(res) && res.data) { this._withdrawBaseInfo = this.parseWithdrawBaseInfo(res.data); return true; } return false; } async reqWithdrawRecord(arg: IWithdrawRecordRequest = {}) { const params: Record = { paypass: arg.paypass || '', }; if (arg.score_type !== undefined) params.score_type = arg.score_type; if (arg.sort_by !== undefined) params.sort_by = arg.sort_by; if (arg.sort !== undefined) params.sort = arg.sort; const res = await Http.call(APP_WITHDRAW_RECORD, params); if (success(res) && res.data) { this._withdrawRecord = Array.isArray(res.data.data) ? res.data.data : []; return true; } return false; } async reqWithdrawSetInfo(arg: IWithdrawSetInfoRequest): Promise { const params = { paypass: arg.paypass || '', cbPixType: arg.PixType, bank: arg.bank, account: arg.account, userName: arg.userName, phone: arg.phone, PAN: arg.PAN, email: arg.email, IFSC: arg.IFSC, adhaar: arg.adhaar, branceBank: arg.branceBank, PixNum: arg.PixNum, code: arg.code || '', }; const res = await Http.call(APP_WITHDRAW_SET_INFO, params); if (success(res)) { await this.reqWithdrawBaseInfo({ paypass: arg.paypass }); return true; } return false; } async reqWithdrawPayout(arg: IWithdrawPayoutRequest): Promise { const res = await Http.call(APP_WITHDRAW_PAYOUT, { paypass: arg.paypass || '', score: arg.score, }); if (success(res)) { await this.reqWithdrawBaseInfo({ paypass: arg.paypass }); return true; } return false; } clear() { this._currPayOrder = null; this._currPayGiftID = -1; this._payOrderList = []; this._withdrawBaseInfo = null; this._withdrawRecord = []; } private parseWithdrawBaseInfo(data: IWithdrawBaseInfo): IWithdrawBaseInfo { const info = { ...data }; if (Number(info.SumCanExchange) < 0) info.SumCanExchange = 0; const defaultCooldown = Number(info.withdraw_info_cooldown_seconds || 0); const cashappCooldown = Number( info.withdraw_info_precheck?.cashapp?.cooldown_seconds ?? defaultCooldown, ); const paypalCooldown = Number( info.withdraw_info_precheck?.paypal?.cooldown_seconds ?? defaultCooldown, ); info.cashapp_update_cd = cashappCooldown > 0 ? Date.now() + cashappCooldown * 1000 : 0; info.paypal_update_cd = paypalCooldown > 0 ? Date.now() + paypalCooldown * 1000 : 0; info.lastUpdateTs = Date.now() - Number(info.withdraw_info_update_time_pass || 0) * 1000; return info; } } export const payStore = new PayStore();