UNPKG

@proton/ccxt

Version:

A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 130+ exchanges

1 lines 3.02 MB
(()=>{"use strict";var e={6696:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},9650:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},1359:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},4890:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},4611:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},3108:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},1868:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},657:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},4928:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},3420:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},2787:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},491:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},2065:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},5823:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},4993:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},8154:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},3813:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},8365:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},7317:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},9581:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},1573:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},3768:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},5414:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},15:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},5569:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},858:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},3617:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},5489:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},6851:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},806:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},2003:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},1698:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},2090:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},1006:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},2456:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},2925:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},7089:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},8519:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},4507:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},7044:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},3767:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},435:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},4663:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},6450:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},1304:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},2708:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},6563:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},823:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},4680:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},2465:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},8185:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},9190:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},9426:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},3727:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},2498:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},7758:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},5563:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},1106:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},7872:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},3203:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},3931:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},5792:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},5667:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3583);class r extends i.Z{}const a=r},4722:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},9720:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},6168:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},7767:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},3148:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},8850:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},2874:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},8240:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},5491:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},6513:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},3229:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},5848:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},5190:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},6123:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},9192:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},2735:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},3480:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},7875:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},843:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},6057:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},1696:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},58:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},2120:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},8888:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},9564:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},5307:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},3771:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},5790:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},5224:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},3565:(e,t,s)=>{s.d(t,{Z:()=>a});var i=s(3043);class r extends i.e{}const a=r},9869:(e,t,s)=>{s.d(t,{Z:()=>d});var i=s(6696),r=s(6689),a=s(2194),n=s(9292),o=s(1372);class d extends i.Z{describe(){return this.deepExtend(super.describe(),{id:"ace",name:"ACE",countries:["TW"],version:"v2",rateLimit:100,pro:!1,has:{CORS:void 0,spot:!0,margin:!1,swap:!1,future:!1,option:!1,cancelAllOrders:!1,cancelOrder:!0,cancelOrders:!1,createOrder:!0,editOrder:!1,fetchBalance:!0,fetchBorrowRate:!1,fetchBorrowRateHistories:!1,fetchBorrowRateHistory:!1,fetchBorrowRates:!1,fetchClosedOrders:!1,fetchCurrencies:!1,fetchDepositAddress:!1,fetchDeposits:!1,fetchFundingHistory:!1,fetchFundingRate:!1,fetchFundingRateHistory:!1,fetchFundingRates:!1,fetchIndexOHLCV:!1,fetchMarginMode:!1,fetchMarkets:!0,fetchMarkOHLCV:!1,fetchMyTrades:!0,fetchOHLCV:!0,fetchOpenInterestHistory:!1,fetchOpenOrders:!0,fetchOrder:!0,fetchOrderBook:!0,fetchOrders:!1,fetchOrderTrades:!0,fetchPositionMode:!1,fetchPositions:!1,fetchPremiumIndexOHLCV:!1,fetchTicker:!0,fetchTickers:!0,fetchTime:!1,fetchTrades:!1,fetchTradingFee:!1,fetchTradingFees:!1,fetchTransactionFees:!1,fetchTransactions:!1,fetchTransfer:!1,fetchTransfers:!1,fetchWithdrawal:!1,fetchWithdrawals:!1,setLeverage:!1,setMarginMode:!1,transfer:!1,withdraw:!1},timeframes:{"1m":1,"5m":5,"10m":10,"30m":10,"1h":60,"2h":120,"4h":240,"8h":480,"12h":720,"1d":24,"1w":70,"1M":31},urls:{logo:"https://user-images.githubusercontent.com/1294454/216908003-fb314cf6-e66e-471c-b91d-1d86e4baaa90.jpg",api:{public:"https://ace.io/polarisex",private:"https://ace.io/polarisex/open"},www:"https://ace.io/",doc:["https://github.com/ace-exchange/ace-offical-api-docs"],fees:"https://helpcenter.ace.io/hc/zh-tw/articles/360018609132-%E8%B2%BB%E7%8E%87%E8%AA%AA%E6%98%8E"},requiredCredentials:{apiKey:!0,secret:!0},api:{public:{get:["oapi/v2/list/tradePrice","oapi/v2/list/marketPair","open/v2/public/getOrderBook"]},private:{post:["v2/coin/customerAccount","v2/kline/getKline","v2/order/order","v2/order/cancel","v2/order/getOrderList","v2/order/showOrderStatus","v2/order/showOrderHistory","v2/order/getTradeList"]}},fees:{trading:{percentage:!0,maker:this.parseNumber("0.0005"),taker:this.parseNumber("0.001")}},options:{brokerId:"ccxt"},precisionMode:n.sh,exceptions:{exact:{2003:r.InvalidOrder,2004:r.InvalidOrder,2005:r.InvalidOrder,2021:r.InsufficientFunds,2036:r.InvalidOrder,2039:r.InvalidOrder,2053:r.InvalidOrder,2061:r.BadRequest,2063:r.InvalidOrder,9996:r.BadRequest,10012:r.AuthenticationError,20182:r.AuthenticationError,20183:r.InvalidOrder},broad:{}},commonCurrencies:{}})}async fetchMarkets(e={}){const t=await this.publicGetOapiV2ListMarketPair(),s=[];for(let e=0;e<t.length;e++){const i=t[e],r=this.safeString(i,"base"),a=this.safeCurrencyCode(r),n=this.safeString(i,"quote"),o=this.safeCurrencyCode(n),d=r+"/"+n;s.push({id:this.safeString(i,"symbol"),uppercaseId:void 0,symbol:d,base:a,baseId:this.safeInteger(i,"baseCurrencyId"),quote:o,quoteId:this.safeInteger(i,"quoteCurrencyId"),settle:void 0,settleId:void 0,type:"spot",spot:!0,margin:!1,swap:!1,future:!1,option:!1,derivative:!1,contract:!1,linear:void 0,inverse:void 0,contractSize:void 0,expiry:void 0,expiryDatetime:void 0,strike:void 0,optionType:void 0,limits:{amount:{min:this.safeNumber(i,"minLimitBaseAmount"),max:this.safeNumber(i,"maxLimitBaseAmount")},price:{min:void 0,max:void 0},cost:{min:void 0,max:void 0},leverage:{min:void 0,max:void 0}},precision:{price:this.parseNumber(this.parsePrecision(this.safeString(i,"quotePrecision"))),amount:this.parseNumber(this.parsePrecision(this.safeString(i,"basePrecision")))},active:void 0,info:i})}return s}parseTicker(e,t=undefined){const s=this.safeString(e,"id"),i=this.safeSymbol(s,t);return this.safeTicker({symbol:i,timestamp:void 0,datetime:void 0,high:void 0,low:void 0,bid:void 0,bidVolume:void 0,ask:void 0,askVolume:void 0,vwap:void 0,open:void 0,close:this.safeString(e,"last_price"),last:this.safeString(e,"last_price"),previousClose:void 0,change:void 0,percentage:void 0,average:void 0,baseVolume:this.safeString(e,"base_volume"),quoteVolume:this.safeString(e,"quote_volume"),info:e},t)}async fetchTicker(e,t={}){await this.loadMarkets();const s=this.market(e),i=await this.publicGetOapiV2ListTradePrice(t),r=s.id,a=this.safeValue(i,r,{});return this.parseTicker(a,s)}async fetchTickers(e=undefined,t={}){await this.loadMarkets();const s=await this.publicGetOapiV2ListTradePrice(),i=[],r=Object.keys(s);for(let e=0;e<r.length;e++){const t=r[e],a=this.safeMarket(t),n=this.safeValue(s,t),o=this.parseTicker(n,a);i.push(o)}return this.filterByArray(i,"symbol",e)}async fetchOrderBook(e,t=undefined,s={}){await this.loadMarkets();const i=this.market(e),r={quoteCurrencyId:i.quoteId,baseCurrencyId:i.baseId};void 0!==t&&(r.depth=t);const a=await this.publicGetOpenV2PublicGetOrderBook(this.extend(r,s)),n=this.safeValue(a,"attachment");return this.parseOrderBook(n,i.symbol,void 0,"bids","asks")}parseOHLCV(e,t=undefined){const s=this.safeString(e,"createTime");let i=this.parse8601(s);return void 0!==i&&(i-=288e5),[i,this.safeNumber(e,"openPrice"),this.safeNumber(e,"highPrice"),this.safeNumber(e,"lowPrice"),this.safeNumber(e,"closePrice"),this.safeNumber(e,"volume")]}async fetchOHLCV(e,t="1m",s=undefined,i=undefined,r={}){await this.loadMarkets();const a=this.market(e),n={duration:this.timeframes[t],quoteCurrencyId:a.quoteId,baseCurrencyId:a.baseId};void 0!==i&&(n.limit=i),void 0!==s&&(n.startTime=s);const o=await this.privatePostV2KlineGetKline(this.extend(n,r)),d=this.safeValue(o,"attachment",[]);return this.parseOHLCVs(d,a,t,s,i)}parseOrderStatus(e){return this.safeString({0:"open",1:"open",2:"closed",4:"canceled",5:"canceled"},e,void 0)}parseOrder(e,t=undefined){let s,i,r,a,n,o,d,h,c,u,l;if("string"==typeof e)s=e;else{if(s=this.safeString(e,"orderNo"),i=this.safeInteger(e,"orderTimeStamp"),void 0===i){const t=this.safeString(e,"orderTime");void 0!==t&&(i=this.parse8601(t),i-=288e5)}const t=this.safeNumber(e,"buyOrSell");void 0!==t&&(o=1===t?"buy":"sell"),n=this.safeString(e,"num"),a=this.safeString(e,"price");const f=this.safeString(e,"quoteCurrencyName"),p=this.safeString(e,"baseCurrencyName");void 0!==f&&void 0!==p&&(r=p+"/"+f);const m=this.safeNumber(e,"type");void 0!==m&&(d=1===m?"limit":"market"),c=this.safeString(e,"tradeNum"),u=this.safeString(e,"remainNum"),h=this.parseOrderStatus(this.safeString(e,"status")),l=this.safeString(e,"averagePrice")}return this.safeOrder({id:s,clientOrderId:void 0,timestamp:i,datetime:this.iso8601(i),lastTradeTimestamp:void 0,symbol:r,type:d,timeInForce:void 0,postOnly:void 0,side:o,price:a,stopPrice:void 0,amount:n,cost:void 0,average:l,filled:c,remaining:u,status:h,fee:void 0,trades:void 0,info:e},t)}async createOrder(e,t,s,i,r=undefined,a={}){await this.loadMarkets();const n=this.market(e),o=t.toUpperCase(),d=s.toUpperCase(),h={baseCurrencyId:n.baseId,quoteCurrencyId:n.quoteId,type:"LIMIT"===o?1:2,buyOrSell:"BUY"===d?1:2,num:this.amountToPrecision(e,i)};"limit"===t&&(h.price=this.priceToPrecision(e,r));const c=await this.privatePostV2OrderOrder(this.extend(h,a)),u=this.safeValue(c,"attachment");return this.parseOrder(u,n)}async cancelOrder(e,t=undefined,s={}){await this.loadMarkets();const i={orderNo:e};return await this.privatePostV2OrderCancel(this.extend(i,s))}async fetchOrder(e,t=undefined,s={}){await this.loadMarkets();const i={orderNo:e},r=await this.privatePostV2OrderShowOrderStatus(this.extend(i,s)),a=this.safeValue(r,"attachment");return this.parseOrder(a,void 0)}async fetchOpenOrders(e=undefined,t=undefined,s=undefined,i={}){if(void 0===e)throw new r.ArgumentsRequired(this.id+" fetchOpenOrders() requires the symbol argument");await this.loadMarkets();const a=this.market(e),n={quoteCurrencyId:a.quoteId,baseCurrencyId:a.baseId};void 0!==s&&(n.size=s);const o=await this.privatePostV2OrderGetOrderList(this.extend(n,i)),d=this.safeValue(o,"attachment");return this.parseOrders(d,a,t,s)}parseTrade(e,t=undefined){const s=this.safeString(e,"tradeNo"),i=this.safeString(e,"price"),r=this.safeString(e,"num");let n=this.safeInteger(e,"tradeTimestamp");if(void 0===n){const t=this.safeString2(e,"time","tradeTime");n=this.parse8601(t),n-=288e5}let o=t.symbol;const d=this.safeString(e,"quoteCurrencyName"),h=this.safeString(e,"baseCurrencyName");let c;void 0!==d&&void 0!==h&&(o=h+"/"+d);const u=this.safeNumber(e,"buyOrSell");void 0!==u&&(c=1===u?"buy":"sell");const l=this.safeString(e,"fee");let f;if(void 0!==l){const t=this.safeString(e,"feeSave");f={cost:a.O.stringSub(l,t),currency:d}}return this.safeTrade({info:e,id:s,order:this.safeString(e,"orderNo"),symbol:o,side:c,type:void 0,takerOrMaker:void 0,price:i,amount:r,cost:void 0,fee:f,timestamp:n,datetime:this.iso8601(n)},t)}async fetchOrderTrades(e,t=undefined,s=undefined,i=undefined,r={}){await this.loadMarkets();const a=this.safeMarket(t),n={orderNo:e},o=await this.privatePostV2OrderShowOrderHistory(this.extend(n,r)),d=this.safeValue(o,"attachment"),h=this.safeValue(d,"trades");return void 0===h?h:this.parseTrades(h,a,s,i)}async fetchMyTrades(e=undefined,t=undefined,s=undefined,i={}){await this.loadMarkets();const r=this.safeMarket(e),a={};void 0!==r.id&&(a.quoteCurrencyId=r.quoteId,a.baseCurrencyId=r.baseId),void 0!==s&&(a.size=s);const n=await this.privatePostV2OrderGetTradeList(this.extend(a,i)),o=this.safeValue(n,"attachment",[]);return this.parseTrades(o,r,t,s)}parseBalance(e){const t={info:e};for(let s=0;s<e.length;s++){const i=e[s],r=this.safeString(i,"currencyName"),a=this.safeCurrencyCode(r),n=this.safeString(i,"amount"),o={free:this.safeString(i,"cashAmount"),total:n};t[a]=o}return this.safeBalance(t)}async fetchBalance(e={}){await this.loadMarkets();const t=await this.privatePostV2CoinCustomerAccount(e),s=this.safeValue(t,"attachment",[]);return this.parseBalance(s)}sign(e,t="public",s="GET",i={},r=undefined,a=undefined){let n="/"+this.implodeParams(e,i);const d=this.omit(i,this.extractParams(e));if(void 0===r&&(r={}),"private"===t){this.checkRequiredCredentials();const e=this.milliseconds();let t="ACE_SIGN"+this.secret;const n=this.extend({apiKey:this.apiKey,timeStamp:e},i),d=Object.keys(n),h=this.sortBy(d,0);for(let e=0;e<h.length;e++){const s=h[e];t+=this.safeString(n,s)}const c=this.hash(this.encode(t),o.J,"hex");if(n.signKey=c,r={"Content-Type":"application/x-www-form-urlencoded"},"POST"===s){const e=this.safeString(this.options,"brokerId");void 0!==e&&(r.Referer=e)}a=this.urlencode(n)}else"public"===t&&"GET"===s&&Object.keys(d).length&&(n+="?"+this.urlencode(d));return n=this.urls.api[t]+n,{url:n,method:s,body:a,headers:r}}handleErrors(e,t,s,i,r,a,n,o,d){if(void 0===n)return;const h=this.id+" "+a,c=this.safeNumber(n,"status",200);c>200&&(this.throwExactlyMatchedException(this.exceptions.exact,c,h),this.throwBroadlyMatchedException(this.exceptions.broad,c,h))}}},5660:(e,t,s)=>{s.d(t,{Z:()=>n});var i=s(9650),r=s(6689),a=s(9292);class n extends i.Z{describe(){return this.deepExtend(super.describe(),{id:"alpaca",name:"Alpaca",countries:["US"],rateLimit:333,hostname:"alpaca.markets",pro:!0,urls:{logo:"https://user-images.githubusercontent.com/1294454/187234005-b864db3d-f1e3-447a-aaf9-a9fc7b955d07.jpg",www:"https://alpaca.markets",api:{public:"https://api.{hostname}/{version}",private:"https://api.{hostname}/{version}",cryptoPublic:"https://data.{hostname}/{version}",markets:"https://api.{hostname}/{version}"},test:{public:"https://paper-api.{hostname}/{version}",private:"https://paper-api.{hostname}/{version}",cryptoPublic:"https://data.{hostname}/{version}",markets:"https://api.{hostname}/{version}"},doc:"https://alpaca.markets/docs/",fees:"https://alpaca.markets/support/what-are-the-fees-associated-with-crypto-trading/"},has:{CORS:!1,spot:!0,margin:!1,swap:!1,future:!1,option:!1,cancelAllOrders:!0,cancelOrder:!0,createOrder:!0,fetchBalance:!0,fetchBidsAsks:!1,fetchClosedOrders:!1,fetchCurrencies:!1,fetchDepositAddress:!1,fetchDepositAddressesByNetwork:!1,fetchDeposits:!1,fetchDepositsWithdrawals:!1,fetchFundingHistory:!1,fetchFundingRate:!1,fetchFundingRates:!1,fetchL1OrderBook:!0,fetchL2OrderBook:!1,fetchMarkets:!0,fetchMyTrades:!1,fetchOHLCV:!0,fetchOpenOrder:!1,fetchOpenOrders:!0,fetchOrder:!0,fetchOrderBook:!0,fetchOrders:!1,fetchPositions:!1,fetchStatus:!1,fetchTicker:!1,fetchTickers:!1,fetchTime:!1,fetchTrades:!0,fetchTradingFee:!1,fetchTradingFees:!1,fetchTransactionFees:!1,fetchTransactions:!1,fetchTransfers:!1,fetchWithdrawals:!1,setLeverage:!1,setMarginMode:!1,transfer:!1,withdraw:!1},api:{markets:{get:["assets/public/beta"]},private:{get:["account","orders","orders/{order_id}","positions","positions/{symbol}","account/activities/{activity_type}"],post:["orders"],delete:["orders","orders/{order_id}"]},cryptoPublic:{get:["crypto/latest/orderbooks","crypto/trades","crypto/quotes","crypto/latest/quotes","crypto/bars","crypto/snapshots"]}},timeframes:{"1m":"1min","3m":"3min","5m":"5min","15m":"15min","30m":"30min","1h":"1H","2h":"2H","4h":"4H","6h":"6H","8h":"8H","12h":"12H","1d":"1D","3d":"3D","1w":"1W","1M":"1M"},precisionMode:a.sh,requiredCredentials:{apiKey:!0,secret:!0},fees:{trading:{tierBased:!0,percentage:!0,maker:this.parseNumber("0.003"),taker:this.parseNumber("0.003"),tiers:{taker:[[this.parseNumber("0"),this.parseNumber("0.003")],[this.parseNumber("500000"),this.parseNumber("0.0028")],[this.parseNumber("1000000"),this.parseNumber("0.0025")],[this.parseNumber("5000000"),this.parseNumber("0.002")],[this.parseNumber("10000000"),this.parseNumber("0.0018")],[this.parseNumber("25000000"),this.parseNumber("0.0015")],[this.parseNumber("50000000"),this.parseNumber("0.00125")],[this.parseNumber("100000000"),this.parseNumber("0.001")]],maker:[[this.parseNumber("0"),this.parseNumber("0.003")],[this.parseNumber("500000"),this.parseNumber("0.0028")],[this.parseNumber("1000000"),this.parseNumber("0.0025")],[this.parseNumber("5000000"),this.parseNumber("0.002")],[this.parseNumber("10000000"),this.parseNumber("0.0018")],[this.parseNumber("25000000"),this.parseNumber("0.0015")],[this.parseNumber("50000000"),this.parseNumber("0.00125")],[this.parseNumber("100000000"),this.parseNumber("0.001")]]}}},headers:{"APCA-PARTNER-ID":"ccxt"},options:{fetchTradesMethod:"cryptoPublicGetCryptoTrades",fetchOHLCVMethod:"cryptoPublicGetCryptoBars",versions:{public:"v2",private:"v2",cryptoPublic:"v1beta2",markets:"v2"},defaultExchange:"CBSE",exchanges:["CBSE","FTX","GNSS","ERSX"],defaultTimeInForce:"gtc",clientOrderId:"ccxt_{id}"},exceptions:{exact:{"forbidden.":r.PermissionDenied,4041e4:r.InvalidOrder,40010001:r.BadRequest,4011e4:r.PermissionDenied,4031e4:r.InsufficientFunds},broad:{"Invalid format for parameter":r.BadRequest,"Invalid symbol":r.BadSymbol}}})}async fetchMarkets(e={}){const t=await this.marketsGetAssetsPublicBeta(this.extend({asset_class:"crypto",tradeable:!0},e)),s=[];for(let e=0;e<t.length;e++){const i=t[e],r=this.safeString(i,"symbol"),a=r.split("/"),n=this.safeString(a,0),o=this.safeString(a,1),d=this.safeCurrencyCode(n),h=this.safeCurrencyCode(o),c=d+"/"+h,u="active"===this.safeString(i,"status"),l=this.safeNumber(i,"min_order_size"),f=this.safeNumber(i,"min_trade_increment"),p=this.safeNumber(i,"price_increment");s.push({id:r,symbol:c,base:d,quote:h,settle:void 0,baseId:n,quoteId:o,settleId:void 0,type:"spot",spot:!0,margin:void 0,swap:!1,future:!1,option:!1,active:u,contract:!1,linear:void 0,inverse:void 0,contractSize:void 0,expiry:void 0,expiryDatetime:void 0,strike:void 0,optionType:void 0,precision:{amount:f,price:p},limits:{leverage:{min:void 0,max:void 0},amount:{min:l,max:void 0},price:{min:void 0,max:void 0},cost:{min:void 0,max:void 0}},info:i})}return s}async fetchTrades(e,t=undefined,s=undefined,i={}){await this.loadMarkets();const r=this.market(e),a={symbols:r.id};void 0!==t&&(a.start=this.iso8601(t)),void 0!==s&&(a.limit=s);const n=this.safeString(this.options,"fetchTradesMethod","cryptoPublicGetCryptoTrades"),o=await this[n](this.extend(a,i)),d=this.safeValue(o,"trades",{}),h=this.safeValue(d,r.id,{});return this.parseTrades(h,r,t,s)}async fetchOrderBook(e,t=undefined,s={}){await this.loadMarkets();const i=this.market(e),r=i.id,a={symbols:r},n=await this.cryptoPublicGetCryptoLatestOrderbooks(this.extend(a,s)),o=this.safeValue(n,"orderbooks",{}),d=this.safeValue(o,r,{}),h=this.parse8601(this.safeString(d,"t"));return this.parseOrderBook(d,i.symbol,h,"b","a","p","s")}async fetchOHLCV(e,t="1m",s=undefined,i=undefined,r={}){await this.loadMarkets();const a=this.market(e),n={symbols:a.id,timeframe:this.safeString(this.timeframes,t,t)};void 0!==i&&(n.limit=i),void 0!==s&&(n.start=this.yyyymmdd(s));const o=this.safeString(this.options,"fetchOHLCVMethod","cryptoPublicGetCryptoBars"),d=await this[o](this.extend(n,r)),h=this.safeValue(d,"bars",{}),c=this.safeValue(h,a.id,{});return this.parseOHLCVs(c,a,t,s,i)}parseOHLCV(e,t=undefined){const s=this.safeString(e,"t");return[this.parse8601(s),this.safeNumber(e,"o"),this.safeNumber(e,"h"),this.safeNumber(e,"l"),this.safeNumber(e,"c"),this.safeNumber(e,"v")]}async createOrder(e,t,s,i,a=undefined,n={}){await this.loadMarkets();const o=this.market(e),d={symbol:o.id,qty:this.amountToPrecision(e,i),side:s,type:t},h=this.safeStringN(n,["triggerPrice","stop_price"]);if(void 0!==h){let s;if(!(t.indexOf("limit")>=0))throw new r.NotSupported(this.id+" createOrder() does not support stop orders for "+t+" orders, only stop_limit orders are supported");s="stop_limit",d.stop_price=this.priceToPrecision(e,h),d.type=s}t.indexOf("limit")>=0&&(d.limit_price=this.priceToPrecision(e,a));const c=this.safeString(this.options,"defaultTimeInForce");d.time_in_force=this.safeString(n,"timeInForce",c),n=this.omit(n,["timeInForce","triggerPrice"]);const u=this.safeString(this.options,"clientOrderId"),l=this.uuid().split("-").join(""),f=this.implodeParams(u,{id:l}),p=this.safeString(n,"clientOrderId",f);d.client_order_id=p,n=this.omit(n,["clientOrderId"]);const m=await this.privatePostOrders(this.extend(d,n));return this.parseOrder(m,o)}async cancelOrder(e,t=undefined,s={}){const i={order_id:e},r=await this.privateDeleteOrdersOrderId(this.extend(i,s));return this.safeValue(r,"message",{})}async fetchOrder(e,t=undefined,s={}){await this.loadMarkets();const i={order_id:e},r=await this.privateGetOrdersOrderId(this.extend(i,s)),a=this.safeString(r,"symbol"),n=this.safeMarket(a);return this.parseOrder(r,n)}async fetchOpenOrders(e=undefined,t=undefined,s=undefined,i={}){let r;await this.loadMarkets(),void 0!==e&&(r=this.market(e));const a=await this.privateGetOrders(i);return this.parseOrders(a,r,t,s)}parseOrder(e,t=undefined){const s=this.safeString(e,"symbol"),i=(t=this.safeMarket(s,t)).symbol,r=this.safeString(e,"status"),a=this.parseOrderStatus(r),n=this.safeString(e,"commission");let o;void 0!==n&&(o={cost:n,currency:"USD"});let d=this.safeString(e,"order_type");d.indexOf("limit")>=0&&(d="limit");const h=this.safeString(e,"submitted_at"),c=this.parse8601(h);return this.safeOrder({id:this.safeString(e,"id"),clientOrderId:this.safeString(e,"client_order_id"),timestamp:c,datetime:h,lastTradeTimeStamp:void 0,status:a,symbol:i,type:d,timeInForce:this.parseTimeInForce(this.safeString(e,"time_in_force")),postOnly:void 0,side:this.safeString(e,"side"),price:this.safeNumber(e,"limit_price"),stopPrice:this.safeNumber(e,"stop_price"),triggerPrice:this.safeNumber(e,"stop_price"),cost:void 0,average:this.safeNumber(e,"filled_avg_price"),amount:this.safeNumber(e,"qty"),filled:this.safeNumber(e,"filled_qty"),remaining:void 0,trades:void 0,fee:o,info:e},t)}parseOrderStatus(e){return this.safeString({pending_new:"open",accepted:"open",new:"open",partially_filled:"open",activated:"open",filled:"closed"},e,e)}parseTimeInForce(e){return this.safeString({day:"Day"},e,e)}parseTrade(e,t=undefined){const s=this.safeString(e,"S"),i=this.safeSymbol(s,t),r=this.safeString(e,"t"),a=this.parse8601(r),n=this.safeString(e,"tks");let o;"B"===n?o="buy":"S"===n&&(o="sell");const d=this.safeString(e,"p"),h=this.safeString(e,"s");return this.safeTrade({info:e,id:this.safeString(e,"i"),timestamp:a,datetime:this.iso8601(a),symbol:i,order:void 0,type:void 0,side:o,takerOrMaker:"taker",price:d,amount:h,cost:void 0,fee:void 0},t)}sign(e,t="public",s="GET",i={},r=undefined,a=undefined){const n=this.safeValue(this.options,"versions"),o=this.safeString(n,t);let d="/"+this.implodeParams(e,i),h=this.implodeParams(this.urls.api[t],{version:o});h=this.implodeHostname(h),r=void 0!==r?r:{},"private"===t&&(r["APCA-API-KEY-ID"]=this.apiKey,r["APCA-API-SECRET-KEY"]=this.secret);const c=this.omit(i,this.extractParams(e));return Object.keys(c).length&&("GET"===s||"DELETE"===s?d+="?"+this.urlencode(c):(a=this.json(c),r["Content-Type"]="application/json")),h+=d,{url:h,method:s,body:a,headers:r}}handleErrors(e,t,s,i,a,n,o,d,h){if(void 0===o)return;const c=this.id+" "+n,u=this.safeString(o,"code");void 0!==e&&this.throwExactlyMatchedException(this.exceptions.exact,u,c);const l=this.safeValue(o,"message",void 0);if(void 0!==l)throw this.throwExactlyMatchedException(this.exceptions.exact,l,c),this.throwBroadlyMatchedException(this.exceptions.broad,l,c),new r.ExchangeError(c)}}},9612:(e,t,s)=>{s.d(t,{Z:()=>d});var i=s(1359),r=s(6689),a=s(2194),n=s(9292),o=s(1372);class d extends i.Z{describe(){return this.deepExtend(super.describe(),{id:"ascendex",name:"AscendEX",countries:["SG"],rateLimit:400,certified:!1,pro:!0,has:{CORS:void 0,spot:!0,margin:!0,swap:!0,future:!0,option:!1,addMargin:!0,cancelAllOrders:!0,cancelOrder:!0,createOrder:!0,createPostOnlyOrder:!0,createReduceOnlyOrder:!0,createStopLimitOrder:!0,createStopMarketOrder:!0,createStopOrder:!0,fetchAccounts:!0,fetchBalance:!0,fetchClosedOrders:!0,fetchCurrencies:!0,fetchDepositAddress:!0,fetchDepositAddresses:!1,fetchDepositAddressesByNetwork:!1,fetchDeposits:!0,fetchDepositsWithdrawals:!0,fetchDepositWithdrawFee:"emulated",fetchDepositWithdrawFees:!0,fetchFundingHistory:!1,fetchFundingRate:"emulated",fetchFundingRateHistory:!1,fetchFundingRates:!0,fetchIndexOHLCV:!1,fetchLeverage:!1,fetchLeverageTiers:!0,fetchMarginMode:!1,fetchMarketLeverageTiers:"emulated",fetchMarkets:!0,fetchMarkOHLCV:!1,fetchOHLCV:!0,fetchOpenOrders:!0,fetchOrder:!0,fetchOrderBook:!0,fetchOrders:!1,fetchPosition:!1,fetchPositionMode:!1,fetchPositions:!0,fetchPositionsRisk:!1,fetchPremiumIndexOHLCV:!1,fetchTicker:!0,fetchTickers:!0,fetchTime:!0,fetchTrades:!0,fetchTradingFee:!1,fetchTradingFees:!0,fetchTransactionFee:!1,fetchTransactionFees:!1,fetchTransactions:!0,fetchTransfer:!1,fetchTransfers:!1,fetchWithdrawal:!1,fetchWithdrawals:!0,reduceMargin:!0,setLeverage:!0,setMarginMode:!0,setPositionMode:!1,transfer:!0},timeframes:{"1m":"1","5m":"5","15m":"15","30m":"30","1h":"60","2h":"120","4h":"240","6h":"360","12h":"720","1d":"1d","1w":"1w","1M":"1m"},version:"v2",urls:{logo:"https://user-images.githubusercontent.com/1294454/112027508-47984600-8b48-11eb-9e17-d26459cc36c6.jpg",api:{rest:"https://ascendex.com"},test:{rest:"https://api-test.ascendex-sandbox.com"},www:"https://ascendex.com",doc:["https://ascendex.github.io/ascendex-pro-api/#ascendex-pro-api-documentation"],fees:"https://ascendex.com/en/feerate/transactionfee-traderate",referral:{url:"https://ascendex.com/en-us/register?inviteCode=EL6BXBQM",discount:.25}},api:{v1:{public:{get:{assets:1,products:1,ticker:1,"barhist/info":1,barhist:1,depth:1,trades:1,"cash/assets":1,"cash/products":1,"margin/assets":1,"margin/products":1,"futures/collateral":1,"futures/contracts":1,"futures/ref-px":1,"futures/market-data":1,"futures/funding-rates":1,"risk-limit-info":1,"exchange-info":1}},private:{get:{info:1,"wallet/transactions":1,"wallet/deposit/address":1,"data/balance/snapshot":1,"data/balance/history":1},accountCategory:{get:{balance:1,"order/open":1,"order/status":1,"order/hist/current":1,risk:1},post:{order:1,"order/batch":1},delete:{order:1,"order/all":1,"order/batch":1}},accountGroup:{get:{"cash/balance":1,"margin/balance":1,"margin/risk":1,"futures/collateral-balance":1,"futures/position":1,"futures/risk":1,"futures/funding-payments":1,"order/hist":1,"spot/fee":1},post:{transfer:1,"futures/transfer/deposit":1,"futures/transfer/withdraw":1}}}},v2:{public:{get:{assets:1,"futures/contract":1,"futures/collateral":1,"futures/pricing-data":1,"futures/ticker":1,"risk-limit-info":1}},private:{data:{get:{"order/hist":1}},get:{"account/info":1},accountGroup:{get:{"order/hist":1,"futures/position":1,"futures/free-margin":1,"futures/order/hist/current":1,"futures/order/open":1,"futures/order/status":1},post:{"futures/isolated-position-margin":1,"futures/margin-type":1,"futures/leverage":1,"futures/transfer/deposit":1,"futures/transfer/withdraw":1,"futures/order":1,"futures/order/batch":1,"futures/order/open":1,"subuser/subuser-transfer":1,"subuser/subuser-transfer-hist":1},delete:{"futures/order":1,"futures/order/batch":1,"futures/order/all":1}}}}},fees:{trading:{feeSide:"get",tierBased:!0,percentage:!0,taker:this.parseNumber("0.002"),maker:this.parseNumber("0.002")}},precisionMode:n.sh,options:{"account-category":"cash","account-group":void 0,fetchClosedOrders:{method:"v2PrivateDataGetOrderHist"},defaultType:"spot",accountsByType:{spot:"cash",swap:"futures",future:"futures",margin:"margin"},transfer:{fillResponseFromRequest:!0},networks:{BSC:"BEP20 (BSC)",ARB:"arbitrum",SOL:"Solana",AVAX:"avalanche C chain",OMNI:"Omni"},networksById:{"BEP20 (BSC)":"BSC",arbitrum:"ARB",Solana:"SOL","avalanche C chain":"AVAX",Omni:"OMNI"}},exceptions:{exact:{1900:r.BadRequest,2100:r.AuthenticationError,5002:r.BadSymbol,6001:r.BadSymbol,6010:r.InsufficientFunds,60060:r.InvalidOrder,600503:r.InvalidOrder,100001:r.BadRequest,100002:r.BadRequest,100003:r.BadRequest,100004:r.BadRequest,100005:r.BadRequest,100006:r.BadRequest,100007:r.BadRequest,100008:r.BadSymbol,100009:r.AuthenticationError,100010:r.BadRequest,100011:r.BadRequest,100012:r.BadRequest,100013:r.BadRequest,100101:r.ExchangeError,150001:r.BadRequest,200001:r.AuthenticationError,200002:r.ExchangeError,200003:r.ExchangeError,200004:r.ExchangeError,200005:r.ExchangeError,200006:r.ExchangeError,200007:r.ExchangeError,200008:r.ExchangeError,200009:r.ExchangeError,200010:r.AuthenticationError,200011:r.ExchangeError,200012:r.ExchangeError,200013:r.ExchangeError,200014:r.PermissionDenied,200015:r.PermissionDenied,300001:r.InvalidOrder,300002:r.InvalidOrder,300003:r.InvalidOrder,300004:r.InvalidOrder,300005:r.InvalidOrder,300006:r.InvalidOrder,300007:r.InvalidOrder,300008:r.InvalidOrder,300009:r.InvalidOrder,300011:r.InsufficientFunds,300012:r.BadSymbol,300013:r.InvalidOrder,300014:r.InvalidOrder,300020:r.InvalidOrder,300021:r.InvalidOrder,300031:r.InvalidOrder,310001:r.InsufficientFunds,310002:r.InvalidOrder,310003:r.InvalidOrder,310004:r.BadSymbol,310005:r.InvalidOrder,510001:r.ExchangeError,900001:r.ExchangeError},broad:{}},commonCurrencies:{BOND:"BONDED",BTCBEAR:"BEAR",BTCBULL:"BULL",BYN:"BeyondFi",PLN:"Pollen"}})}getAccount(e={}){const t=this.safeValue(e,"account",this.options.account).toLowerCase();return this.capitalize(t)}async fetchCurrencies(e={}){const t=await this.v1PublicGetAssets(e),s=await this.v1PublicGetMarginAssets(e),i=await this.v1PublicGetCashAssets(e),r=this.safeValue(t,"data",[]),a=this.safeValue(s,"data",[]),n=this.safeValue(i,"data",[]),o=this.indexBy(r,"assetCode"),d=this.indexBy(a,"assetCode"),h=this.indexBy(n,"assetCode"),c=this.deepExtend(o,d,h),u=Object.keys(c),l={};for(let e=0;e<u.length;e++){const t=u[e],s=c[t],i=this.safeCurrencyCode(t),r=this.safeString2(s,"precisionScale","nativeScale"),a=this.parseNumber(this.parsePrecision(r)),n=this.safeNumber2(s,"withdrawFee","withdrawalFee"),o="Normal"===this.safeString2(s,"status","statusCode"),d="borrowAssetCode"in s;l[i]={id:t,code:i,info:s,type:void 0,margin:d,name:this.safeString(s,"assetName"),active:o,deposit:void 0,withdraw:void 0,fee:n,precision:a,limits:{amount:{min:a,max:void 0},withdraw:{min:this.safeNumber(s,"minWithdrawalAmt"),max:void 0}},networks:{}}}return l}async fetchMarkets(e={}){const t=await this.v1PublicGetProducts(e),s=await this.v1PublicGetCashProducts(e),i=await this.v2PublicGetFuturesContract(e),r=this.safeValue(t,"data",[]),a=this.indexBy(r,"symbol"),n=this.safeValue(s,"data",[]),o=this.safeValue(i,"data",[]),d=this.arrayConcat(n,o),h=this.indexBy(d,"symbol"),c=this.deepExtend(a,h),u=Object.keys(c),l=[];for(let e=0;e<u.length;e++){const t=u[e],s=c[t],i=this.safeValue(s,"settlementAsset"),r=this.safeCurrencyCode(i),a=this.safeString(s,"status"),n=this.safeString(s,"domain");let o=!1;"Normal"!==a&&"InternalTrading"!==a||"LeveragedETF"===n||(o=!0);const d=void 0===r,h=!d,f=!!h||void 0;let p,m=this.safeNumber(s,"minQty"),g=this.safeNumber(s,"maxQty"),v=this.safeNumber(s,"tickSize");const y=this.safeString2(s,"underlying","symbol").split("/"),b=this.safeString(y,0),w=this.safeString(y,1),S=this.safeCurrencyCode(b),k=this.safeCurrencyCode(w);let O=S+"/"+k;if(h){const e=this.safeValue(s,"lotSizeFilter");m=this.safeNumber(e,"minQty"),g=this.safeNumber(e,"maxQty");const t=this.safeValue(s,"priceFilter");v=this.safeNumber(t,"minPrice"),p=this.safeNumber(t,"maxPrice"),O=S+"/"+k+":"+r}const T=this.safeNumber(s,"commissionReserveRate"),I=this.safeValue(s,"marginTradable",!1);l.push({id:t,symbol:O,base:S,quote:k,settle:r,baseId:b,quoteId:w,settleId:i,type:h?"swap":"spot",spot:d,margin:d?I:void 0,swap:h,future:!1,option:!1,active:o,contract:h,linear:f,inverse:h?!f:void 0,taker:T,maker:T,contractSize:h?this.parseNumber("1"):void 0,expiry:void 0,expiryDatetime:void 0,strike:void 0,optionType:void 0,precision:{amount:this.safeNumber(s,"lotSize"),price:this.safeNumber(s,"tickSize")},limits:{leverage:{min:void 0,max:void 0},amount:{min:m,max:g},price:{min:v,max:p},cost:{min:this.safeNumber(s,"minNotional"),max:this.safeNumber(s,"maxNotional")}},info:s})}return l}async fetchTime(e={}){const t={requestTime:this.milliseconds()},s=await this.v1PublicGetExchangeInfo(this.extend(t,e)),i=this.safeValue(s,"data");return this.safeInteger(i,"requestReceiveAt")}async fetchAccounts(e={}){let t,s=this.safeString(this.options,"account-group");if(void 0===s){t=await this.v1PrivateGetInfo(e);const i=this.safeValue(t,"data",{});s=this.safeString(i,"accountGroup"),this.options["account-group"]=s}return[{id:s,type:void 0,currency:void 0,info:t}]}parseBalance(e){const t=this.milliseconds(),s={info:e,timestamp:t,datetime:this.iso8601(t)},i=this.safeValue(e,"data",[]);for(let e=0;e<i.length;e++){const t=i[e],r=this.safeCurrencyCode(this.safeString(t,"asset")),a=this.account();a.free=this.safeString(t,"availableBalance"),a.total=this.safeString(t,"totalBalance"),s[r]=a}return this.safeBalance(s)}parseMarginBalance(e){const t=this.milliseconds(),s={info:e,timestamp:t,datetime:this.iso8601(t)},i=this.safeValue(e,"data",[]);for(let e=0;e<i.length;e++){const t=i[e],r=this.safeCurrencyCode(this.safeString(t,"asset")),n=this.account();n.free=this.safeString(t,"availableBalance"),n.total=this.safeString(t,"totalBalance");const o=this.safeString(t,"borrowed"),d=this.safeString(t,"interest");n.debt=a.O.stringAdd(o,d),s[r]=n}return this.safeBalance(s)}parseSwapBalance(e){const t=this.milliseconds(),s={info:e,timestamp:t,datetime:this.iso8601(t)},i=this.safeValue(e,"data",{}),r=this.safeValue(i,"collaterals",[]);for(let e=0;e<r.length;e++){const t=r[e],i=this.safeCurrencyCode(this.safeString(t,"asset")),a=this.account();a.total=this.safeString(t,"balance"),s[i]=a}return this.safeBalance(s)}async fetchBalance(e={}){let t,s;await this.loadMarkets(),await this.loadAccounts(),[s,t]=this.handleMarketTypeAndParams("fetchBalance",void 0,e);s=this.safeValue(e,"margin",!1)?"margin":s,e=this.omit(e,"margin");const i=this.safeValue(this.options,"fetchBalance",{}),r=this.safeValue(this.options,"accountsByType",{}),a=this.safeString(r,s,"cash"),n=this.safeValue(this.accounts,0,{}),o={"account-group":this.safeString(n,"id")},d=this.safeString(i,"method","v1PrivateAccountCategoryGetBalance"),h=this.getSupportedMapping(s,{spot:d,margin:d,swap:"v2PrivateAccountGroupGetFuturesPosition"});"cash"!==a&&"margin"!==a||(o["account-category"]=a);const c=await this[h](this.extend(o,t));return"swap"===s?this.parseSwapBalance(c):"margin"===s?this.parseMarginBalance(c):this.parseBalance(c)}async fetchOrderBook(e,t=undefined,s={}){await this.loadMarkets();const i={symbol:this.market(e).id},r=await this.v1PublicGetDepth(this.extend(i,s)),a=this.safeValue(r,"data",{}),n=this.safeValue(a,"data",{}),o=this.safeInteger(n,"ts"),d=this.parseOrderBook(n,e,o);return d.nonce=this.safeInteger(n,"seqnum"),d}parseTicker(e,t=undefined){const s=this.safeString(e,"symbol"),i="spot"===this.safeString(e,"type")?"/":void 0,r=this.safeSymbol(s,t,i),a=this.safeString(e,"close"),n=this.safeValue(e,"bid",[]),o=this.safeValue(e,"ask",[]),d=this.safeString(e,"open");return this.safeTicker({symbol:r,timestamp:undefined,datetime:void 0,high:this.safeString(e,"high"),low:this.safeString(e,"low"),bid:this.safeString(n,0),bidVolume:this.safeString(n,1),ask:this.safeString(o,0),askVolume:this.safeString(o,1),vwap:void 0,open:d,close:a,last:a,previousClose:void 0,change:void 0,percentage:void 0,average:void 0,baseVolume:this.safeString(e,"volume"),quoteVolume:void 0,info:e},t)}async fetchTicker(e,t={}){await this.loadMarkets();const s=this.market(e),i={symbol:s.id},r=await this.v1PublicGetTicker(this.extend(i,t)),a=this.safeValue(r,"data",{});return this.parseTicker(a,s)}async fetchTickers(e=undefined,t={}){await this.loadMarkets();const s={};let i,r,a;if(void 0!==e){const t=this.safeValue(e,0);i=this.market(t);const r=this.marketIds(e);s.symbol=r.join(",")}[r,t]=this.handleMarketTypeAndParams("fetchTickers",i,t),a="spot"===r?await this.v1PublicGetTicker(this.extend(s,t)):await this.v2PublicGetFuturesTicker(this.extend(s,t));const n=this.safeValue(a,"data",[]);return Array.isArray(n)?this.parseTickers(n,e):this.parseTickers([n],e)}parseOHLCV(e,t=undefined){const s=this.safeValue(e,"data",{});return[this.safeInteger(s,"ts"),this.safeNumber(s,"o"),this.safeNumber(s,"h"),this.safeNumber(s,"l"),this.safeNumber(s,"c"),this.safeNumber(s,"v")]}async fetchOHLCV(e,t="1m",s=undefined,i=undefined,r={}){await this.loadMarkets();const a=this.market(e),n={symbol:a.id,interval:this.safeString(this.timeframes,t,t)},o=this.parseTimeframe(t),d=this.safeValue(this.options,"fetchOHLCV",{}),h=this.safeInteger(d,"limit",500);void 0!==s?(n.from=s,i=void 0===i?h:Math.min(i,h),n.to=this.sum(s,i*o*1e3,1)):void 0!==i&&(n.n=i);const c=await this.v1PublicGetBarhist(this.extend(n,r)),u=this.safeValue(c,"data",[]);return this.parseOHLCVs(u,a,t,s,i)}parseTrade(e,t=undefined){const s=this.safeInteger(e,"ts"),i=this.safeString2(e,"price","p"),r=this.safeString(e,"q"),a=this.safeValue(e,"bm",!1)?"sell":"buy";return t=this.safeMarket(void 0,t),this.safeTrade({info:e,timestamp:s,datetime:this.iso8601(s),symbol:t.symbol,id:void 0,order:void 0,type:void 0,takerOrMaker:void 0,side:a,price:i,amount:r,cost:void 0,fee:void 0},t)}async fetchTrades(e,t=undefined,s=undefined,i={}){await this.loadMarkets();const r=this.market(e),a={symbol:r.id};void 0!==s&&(a.n=s);const n=await this.v1PublicGetTrades(this.extend(a,i)),o=this.safeValue(n,"data",[]),d=this.safeValue(o,"data",[]);return this.parseTrades(d,r,t,s)}parseOrderStatus(e){return this.safeString({PendingNew:"open",New:"open",PartiallyFilled:"open",Filled:"closed",Canceled:"canceled",Rejected:"rejected"},e,e)}parseOrder(e,t=undefined){const s=this.parseOrderStatus(this.safeString(e,"status")),i=this.safeString(e,"symbol"),r=this.safeSymbol(i,t,"/");let a=this.safeInteger2(e,"timestamp","sendingTime");const n=this.safeInteger(e,"lastExecTime");void 0===a&&(a=n);const o=this.safeString(e,"price"),d=this.safeString(e,"orderQty"),h=this.safeString(e,"avgPx"),c=this.safeStringN(e,["cumFilledQty","cumQty","fillQty"]),u=this.safeString(e,"orderId");let l=this.safeString(e,"id");void 0!==l&&l.length<1&&(l=void 0);const f=this.safeStringLower(e,"orderType");let p=f;void 0!==f&&("stoplimit"===f&&(p="limit"),"stopmarket"===f&&(p="market"));const m=this.safeStringLower(e,"side"),g=this.safeNumber2(e,"cumFee","fee");let v;if(void 0!==g){const t=this.safeString(e,"feeAsset");v={cost:g,currency:this.safeCurrencyCode(t)}}const y=this.safeNumber(e,"stopPrice");let b;const w=this.safeString(e,"execInst");let S;return"reduceOnly"===w&&(b=!0),"Post"===w&&(S=!0),this.safeOrder({info:e,id:u,clientOrderId:l,timestamp:a,datetime:this.iso8601(a),lastTradeTimestamp:n,symbol:r,type:p,timeInForce:void 0,postOnly:S,reduceOnly:b,side:m,price:o,stopPrice:y,triggerPrice:y,amount:d,cost:void 0,average:h,filled:c,remaining:void 0,status:s,fee:v,trades:void 0},t)}async fetchTradingFees(e={}){await this.loadMarkets(),await this.loadAccounts();const t=this.safeValue(this.accounts,0,{}),s={"account-group":this.safeString(t,"id")},i=await this.v1PrivateAccountGroupGetSpotFee(this.extend(s,e)),r=this.safeValue(i,"data",{}),a=this.safeValue(r,"fees",[]),n={};for(let e=0;e<a.length;e++){const t=a[e],s=this.safeString(t,"symbol"),i=this.safeSymbol(s,void 0,"/"),r=this.safeValue(t,"fee",{});n[i]={info:t,symbol:i,maker:this.safeNumber(r,"maker"),taker:this.safeNumber(r,"taker")}}return n}async createOrder(e,t,s,i,a=undefined,n={}){await this.loadMarkets(),await this.loadAccounts();const o=this.market(e);let d;[d,n]=this.handleMarketTypeAndParams("createOrder",o,n);const h=this.safeValue(this.options,"createOrder",{}),c=this.safeValue(this.options,"accountsByType",{}),u=this.safeString(c,d,"cash"),l=this.safeValue(this.accounts,0,{}),f=this.safeValue(l,"id"),p=this.safeString2(n,"clientOrderId","id"),m={"account-group":f,"account-category":u,symbol:o.id,time:this.milliseconds(),orderQty:this.amountToPrecision(e,i),orderType:t,side:s},g="market"===t||"stop_market"===t,v="limit"===t||"stop_limit"===t,y=this.safeString(n,"timeInForce"),b=this.isPostOnly(g,!1,n),w=this.safeValue(n,"reduceOnly",!1),S=this.safeValue2(n,"triggerPrice","stopPrice");if(n=this.omit(n,["timeInForce","postOnly","reduceOnly","stopPrice","triggerPrice"]),w){if("swap"!==d)throw new r.InvalidOrder(this.id+" createOrder() does not support reduceOnly for "+d+" orders, reduceOnly orders are supported for perpetuals only");m.execInst="ReduceOnly"}v&&(m.orderPrice=this.priceToPrecision(e,a)),"IOC"===y&&(m.timeInForce="IOC"),"FOK"===y&&(m.timeInForce="FOK"),b&&(m.postOnly=!0),void 0!==S&&(m.stopPrice=this.priceToPrecision(e,S),v?m.orderType="stop_limit":g&&(m.orderType="stop_market")),void 0!==p&&(m.id=p);const k=this.safeString(h,"method","v1PrivateAccountCategoryPostOrder"),O=this.getSupportedMapping(d,{spot:k,margin:k,swap:"v2PrivateAccountGroupPostFuturesOrder"});"v1PrivateAccountCategoryPostOrder"===O?void 0!==u&&(m.category=u):m["account-category"]=u;const T=await this[O](this.extend(m,n)),I=this.safeValue(T,"data",{}),x=this.safeValue2(I,"order","info",{});return this.parseOrder(x,o)}async fetchOrder(e,t=undefined,s={}){let i;await this.loadMarkets(),await this.loadAccounts(),void 0!==t&&(i=this.market(t));const[r,a]=this.handleMarketTypeAndParams("fetchOrder",i,s),n=this.safeValue(this.options,"fetchOrder",{}),o=this.safeValue(this.options,"accountsByType",{}),d=this.safeString(o,r,"cash"),h=this.safeValue(this.accounts,0,{}),c={"account-group":this.safeValue(h,"id"),"account-category":d,orderId:e},u=this.safeString(n,"method","v1PrivateAccountCategoryGetOrderStatus"),l=this.getSupportedMapping(r,{spot:u,margin:u,swap:"v2PrivateAccountGroupGetFuturesOrderStatus"});"v1PrivateAccountCategoryGetOrderStatus"===l?void 0!==d&&(c.category=d):c["account-category"]=d;const f=await this[l](this.extend(c,a)),p=this.safeValue(f,"data",{});return this.parseOrder(p,i)}async fetchOpenOrders(e=undefined,t=undefined,s=undefined,i={}){let r;await this.loadMarkets(),await this.loadAccounts(),void 0!==e&&(r=this.market(e),e=r.symbol);const a=this.safeValue(this.accounts,0,{}),n=this.safeValue(a,"id"),[o,d]=this.handleMarketTypeAndParams("fetchOpenOrders",r,i),h=this.safeValue(this.options,"accountsByType",{}),c=this.safeString(h,o,"cash"),u={"account-group":n,"account-category":c},l=this.safeValue(this.options,"fetchOpenOrders",{}),f=this.safeString(l,"method","v1PrivateAccountCategoryGetOrderOpen"),p=this.getSupportedMapping(o,{spot:f,margin:f,swap:"v2PrivateAccountGroupGetFuturesOrderOpen"});"v1PrivateAccountCategoryGetOrderOpen"===p?void 0!==c&&(u.category=c):u["account-category"]=c;const m=await this[p](this.extend(u,d)),g=this.safeValue(m,"data",[]);if("futures"===c)return this.parseOrders(g,r,t,s);const v=[];for(let e=0;e<g.length;e++){const t=this.parseOrder(g[e],r);v.push(t)}return this.filterBySymbolSinceLimit(v,e,t,s)}async fetchClosedOrders(e=undefined,t=undefined,s=undefined,i={}){await this.loadMarkets(),await this.loadAccounts();const r=this.safeValue(this.accounts,0,{}),a={"account-group":this.safeValue(r,"id")};let n;void 0!==e&&(n=this.market(e),a.symbol=n.id);const[o,d]=this.handleMarketTypeAndParams("fetchClosedOrders",n,i),h=this.safeValue(this.options,"fetchClosedOrders",{}),c=this.safeString(h,"method","v2PrivateDataGetOrderHist"),u=this.getSupportedMapping(o,{spot:c,margin:c,swap:"v2PrivateAccountGroupGetFuturesOrderHistCurrent"}),l=this.safeValue(this.options,"accountsByType",{}),f=this.safeString(l,o,"cash");"v2PrivateDataGetOrderHist"===u?(a.account=f,void 0!==s&&(a.limit=s)):(a["account-category"]=f,void 0!==s&&(a.pageSize=s)),void 0!==t&&(a.startTime=t);const p=this.safeString(i,"until");void 0!==p&&(a.endTime=p);const m=await this[u](this.extend(a,d));let g=this.safeValue(m,"data");return Array.isArray(g)||(g=this.safeValue(g,"data",[])),this.parseOrders(g,n,t,s)}async cancelOrder(e,t=undefined,s={}){if(void 0===t)throw new r.ArgumentsRequired(this.id+" cancelOrder() requires a symbol argument");await this.loadMarkets(),await this.loadAccounts();const i=this.market(t),[a,n]=this.handleMarketTypeAndParams("cancelOrder",i,s),o=this.safeValue(this.options,"cancelOrder",{}),d=this.safeValue(this.options,"accountsByType",{}),h=this.safeString(d,a,"cash"),c=this.safeValue(this.accounts,0,{}),u={"account-group":this.safeValue(c,"id"),"account-category":h,symbol:i.id,time:this.milliseconds(),id:"foobar"},l=this.safeString(o,"method","v1PrivateAccountCategoryDeleteOrder"),f=this.getSupportedMapping(a,{spot:l,margin:l,swap:"v2PrivateAccountGroupDeleteFuturesOrder"});"v1PrivateAccountCategoryDeleteOrder"===f?void 0!==h&&(u.category=h):u["account-category"]=h;const p=this.safeString2(s,"clientOrderId","id");void 0===p?u.orderId=e:(u.id=p,s=this.omit(s,["clientOrderId","id"]));const m=await this[f](this.extend(u,n)),g=this.safeValue(m,"data",{}),v=this.safeValue2(g,"order","info",{});return this.parseOrder(v,i)}async cancelAllOrders(e=undefined,t={}){let s;await this.loadMarkets(),await this.loadAccounts(),void 0!==e&&(s=this.market(e));const[i,r]=this.handleMarketTypeAndParams("cancelAllOrders",s,t),a=this.safeValue(this.options,"canc