@ango-ya/ccxt
Version:
A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges
1 lines • 3.54 MB
JavaScript
(()=>{"use strict";var e={4426:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},4523:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},566:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},3971:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},335:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},4619:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},3885:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},2308:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},5625:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},9332:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},6740:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},1578:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},4102:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},9152:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},3974:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},1466:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},8186:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},7202:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},8800:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},9656:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},5223:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},8535:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},8716:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},1560:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},5254:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},1769:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},9644:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},3829:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},2317:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},8430:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},8523:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},1293:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},5465:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},5661:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},6670:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},2938:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},5277:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},2948:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},8109:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},1671:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},6658:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},4935:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},9360:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},4295:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},8093:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},7227:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},4012:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},9420:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},1352:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},7418:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},3434:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},8325:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},1180:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},8617:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},2394:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},5893:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},359:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},4558:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},2459:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},1359:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},3548:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},3942:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(1397);class r extends i.A{}const a=r},6944:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},121:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},575:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},7533:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},3893:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},6928:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},9174:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},3414:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},1426:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},7774:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},9886:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},5531:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},3800:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},7849:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},8563:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},4158:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},7733:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},4025:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},995:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},334:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},7999:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},6405:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},7698:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},8646:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},3965:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},7246:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},3521:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},3578:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},8291:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},5517:(e,t,s)=>{s.d(t,{A:()=>a});var i=s(2961);class r extends i.k{}const a=r},6729:(e,t,s)=>{s.d(t,{A:()=>d});var i=s(4426),r=s(2079),a=s(5147),o=s(1579),n=s(4852);class d extends i.A{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,closeAllPositions:!1,closePosition:!1,createOrder:!0,editOrder:!1,fetchBalance:!0,fetchBorrowRateHistories:!1,fetchBorrowRateHistory:!1,fetchClosedOrders:!1,fetchCrossBorrowRate:!1,fetchCrossBorrowRates:!1,fetchCurrencies:!1,fetchDepositAddress:!1,fetchDeposits:!1,fetchFundingHistory:!1,fetchFundingRate:!1,fetchFundingRateHistory:!1,fetchFundingRates:!1,fetchIndexOHLCV:!1,fetchIsolatedBorrowRate:!1,fetchIsolatedBorrowRates:!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,ws:!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:o.kb,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();return this.parseMarkets(t)}parseMarket(e){const t=this.safeString(e,"base"),s=this.safeCurrencyCode(t),i=this.safeString(e,"quote"),r=this.safeCurrencyCode(i),a=s+"/"+r;return{id:this.safeString(e,"symbol"),uppercaseId:void 0,symbol:a,base:s,baseId:t,quote:r,quoteId:i,settle:void 0,settleId:void 0,type:"spot",spot:!0,margin:!1,swap:!1,future:!1,option:!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(e,"minLimitBaseAmount"),max:this.safeNumber(e,"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(e,"quotePrecision"))),amount:this.parseNumber(this.parsePrecision(this.safeString(e,"basePrecision")))},active:void 0,created:void 0,info:e}}parseTicker(e,t=void 0){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=void 0,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),o=this.safeValue(s,t),n=this.parseTicker(o,a);i.push(n)}return this.filterByArrayTickers(i,"symbol",e)}async fetchOrderBook(e,t=void 0,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)),o=this.safeValue(a,"attachment");return this.parseOrderBook(o,i.symbol,void 0,"bids","asks")}parseOHLCV(e,t=void 0){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=void 0,i=void 0,r={}){await this.loadMarkets();const a=this.market(e),o={duration:this.timeframes[t],quoteCurrencyId:a.quoteId,baseCurrencyId:a.baseId};void 0!==i&&(o.limit=i),void 0!==s&&(o.startTime=s);const n=await this.privatePostV2KlineGetKline(this.extend(o,r)),d=this.safeValue(n,"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=void 0){let s,i,r,a,o,n,d,h,c,l,u;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&&(n=1===t?"buy":"sell"),o=this.safeString(e,"num"),a=this.safeString(e,"price");const p=this.safeString(e,"quoteCurrencyName"),f=this.safeString(e,"baseCurrencyName");void 0!==p&&void 0!==f&&(r=f+"/"+p);const m=this.safeNumber(e,"type");void 0!==m&&(d=1===m?"limit":"market"),c=this.safeString(e,"tradeNum"),l=this.safeString(e,"remainNum"),h=this.parseOrderStatus(this.safeString(e,"status")),u=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:n,price:a,stopPrice:void 0,amount:o,cost:void 0,average:u,filled:c,remaining:l,status:h,fee:void 0,trades:void 0,info:e},t)}async createOrder(e,t,s,i,r=void 0,a={}){await this.loadMarkets();const o=this.market(e),n=t.toUpperCase(),d=s.toUpperCase(),h={baseCurrencyId:o.baseId,quoteCurrencyId:o.quoteId,type:"LIMIT"===n?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)),l=this.safeValue(c,"attachment");return this.parseOrder(l,o)}async cancelOrder(e,t=void 0,s={}){await this.loadMarkets();const i={orderNo:e};return await this.privatePostV2OrderCancel(this.extend(i,s))}async fetchOrder(e,t=void 0,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=void 0,t=void 0,s=void 0,i={}){if(void 0===e)throw new r.ArgumentsRequired(this.id+" fetchOpenOrders() requires a symbol argument");await this.loadMarkets();const a=this.market(e),o={quoteCurrencyId:a.quoteId,baseCurrencyId:a.baseId};void 0!==s&&(o.size=s);const n=await this.privatePostV2OrderGetOrderList(this.extend(o,i)),d=this.safeValue(n,"attachment");return this.parseOrders(d,a,t,s)}parseTrade(e,t=void 0){const s=this.safeString(e,"tradeNo"),i=this.safeString(e,"price"),r=this.safeString(e,"num");let o=this.safeInteger(e,"tradeTimestamp");if(void 0===o){const t=this.safeString2(e,"time","tradeTime");o=this.parse8601(t),o-=288e5}let n=t.symbol;const d=this.safeString(e,"quoteCurrencyName"),h=this.safeString(e,"baseCurrencyName");let c;void 0!==d&&void 0!==h&&(n=h+"/"+d);const l=this.safeInteger(e,"buyOrSell");void 0!==l&&(c=1===l?"buy":"sell");const u=this.safeString(e,"fee");let p;if(void 0!==u){const t=this.safeString(e,"feeSave");p={cost:a.Y.stringSub(u,t),currency:d}}return this.safeTrade({info:e,id:s,order:this.safeString(e,"orderNo"),symbol:n,side:c,type:void 0,takerOrMaker:void 0,price:i,amount:r,cost:void 0,fee:p,timestamp:o,datetime:this.iso8601(o)},t)}async fetchOrderTrades(e,t=void 0,s=void 0,i=void 0,r={}){await this.loadMarkets();const a=this.safeMarket(t),o={orderNo:e},n=await this.privatePostV2OrderShowOrderHistory(this.extend(o,r)),d=this.safeValue(n,"attachment"),h=this.safeValue(d,"trades",[]);return this.parseTrades(h,a,s,i)}async fetchMyTrades(e=void 0,t=void 0,s=void 0,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 o=await this.privatePostV2OrderGetTradeList(this.extend(a,i)),n=this.safeValue(o,"attachment",[]);return this.parseTrades(n,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),o=this.safeString(i,"amount"),n={free:this.safeString(i,"cashAmount"),total:o};t[a]=n}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=void 0,a=void 0){let o="/"+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 o=this.extend({apiKey:this.apiKey,timeStamp:e},i),d=Object.keys(o),h=this.sortBy(d,0,!1,"");for(let e=0;e<h.length;e++){const s=h[e];t+=this.safeString(o,s)}const c=this.hash(this.encode(t),n.s,"hex");if(o.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(o)}else"public"===t&&"GET"===s&&Object.keys(d).length&&(o+="?"+this.urlencode(d));return o=this.urls.api[t]+o,{url:o,method:s,body:a,headers:r}}handleErrors(e,t,s,i,r,a,o,n,d){if(void 0===o)return;const h=this.id+" "+a,c=this.safeNumber(o,"status",200);if(c>200){const e=c.toString();this.throwExactlyMatchedException(this.exceptions.exact,e,h),this.throwBroadlyMatchedException(this.exceptions.broad,e,h)}}}},7930:(e,t,s)=>{s.d(t,{A:()=>o});var i=s(4523),r=s(2079),a=s(1579);class o extends i.A{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:{broker:"https://broker-api.{hostname}",trader:"https://api.{hostname}",market:"https://data.{hostname}"},test:{broker:"https://broker-api.sandbox.{hostname}",trader:"https://paper-api.{hostname}",market:"https://data.sandbox.{hostname}"},doc:"https://alpaca.markets/docs/",fees:"https://docs.alpaca.markets/docs/crypto-fees"},has:{CORS:!1,spot:!0,margin:!1,swap:!1,future:!1,option:!1,cancelAllOrders:!0,cancelOrder:!0,closeAllPositions:!1,closePosition:!1,createOrder:!0,fetchBalance:!1,fetchBidsAsks:!1,fetchClosedOrders:!0,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:!0,fetchPositions:!1,fetchStatus:!1,fetchTicker:!1,fetchTickers:!1,fetchTime:!0,fetchTrades:!0,fetchTradingFee:!1,fetchTradingFees:!1,fetchTransactionFees:!1,fetchTransactions:!1,fetchTransfers:!1,fetchWithdrawals:!1,setLeverage:!1,setMarginMode:!1,transfer:!1,withdraw:!1},api:{broker:{},trader:{private:{get:["v2/account","v2/orders","v2/orders/{order_id}","v2/positions","v2/positions/{symbol_or_asset_id}","v2/account/portfolio/history","v2/watchlists","v2/watchlists/{watchlist_id}","v2/watchlists:by_name","v2/account/configurations","v2/account/activities","v2/account/activities/{activity_type}","v2/calendar","v2/clock","v2/assets","v2/assets/{symbol_or_asset_id}","v2/corporate_actions/announcements/{id}","v2/corporate_actions/announcements"],post:["v2/orders","v2/watchlists","v2/watchlists/{watchlist_id}","v2/watchlists:by_name"],put:["v2/watchlists/{watchlist_id}","v2/watchlists:by_name"],patch:["v2/orders/{order_id}","v2/account/configurations"],delete:["v2/orders","v2/orders/{order_id}","v2/positions","v2/positions/{symbol_or_asset_id}","v2/watchlists/{watchlist_id}","v2/watchlists:by_name","v2/watchlists/{watchlist_id}/{symbol}"]}},market:{public:{get:["v1beta3/crypto/{loc}/bars","v1beta3/crypto/{loc}/latest/bars","v1beta3/crypto/{loc}/latest/orderbooks","v1beta3/crypto/{loc}/latest/quotes","v1beta3/crypto/{loc}/latest/trades","v1beta3/crypto/{loc}/quotes","v1beta3/crypto/{loc}/snapshots","v1beta3/crypto/{loc}/trades"]},private:{get:["v1beta1/corporate-actions","v1beta1/forex/latest/rates","v1beta1/forex/rates","v1beta1/logos/{symbol}","v1beta1/news","v1beta1/screener/stocks/most-actives","v1beta1/screener/{market_type}/movers","v2/stocks/auctions","v2/stocks/bars","v2/stocks/bars/latest","v2/stocks/meta/conditions/{ticktype}","v2/stocks/meta/exchanges","v2/stocks/quotes","v2/stocks/quotes/latest","v2/stocks/snapshots","v2/stocks/trades","v2/stocks/trades/latest","v2/stocks/{symbol}/auctions","v2/stocks/{symbol}/bars","v2/stocks/{symbol}/bars/latest","v2/stocks/{symbol}/quotes","v2/stocks/{symbol}/quotes/latest","v2/stocks/{symbol}/snapshot","v2/stocks/{symbol}/trades","v2/stocks/{symbol}/trades/latest"]}}},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.kb,requiredCredentials:{apiKey:!0,secret:!0},fees:{trading:{tierBased:!0,percentage:!0,maker:this.parseNumber("0.0015"),taker:this.parseNumber("0.0025"),tiers:{taker:[[this.parseNumber("0"),this.parseNumber("0.0025")],[this.parseNumber("100000"),this.parseNumber("0.0022")],[this.parseNumber("500000"),this.parseNumber("0.0020")],[this.parseNumber("1000000"),this.parseNumber("0.0018")],[this.parseNumber("10000000"),this.parseNumber("0.0015")],[this.parseNumber("25000000"),this.parseNumber("0.0013")],[this.parseNumber("50000000"),this.parseNumber("0.0012")],[this.parseNumber("100000000"),this.parseNumber("0.001")]],maker:[[this.parseNumber("0"),this.parseNumber("0.0015")],[this.parseNumber("100000"),this.parseNumber("0.0012")],[this.parseNumber("500000"),this.parseNumber("0.001")],[this.parseNumber("1000000"),this.parseNumber("0.0008")],[this.parseNumber("10000000"),this.parseNumber("0.0005")],[this.parseNumber("25000000"),this.parseNumber("0.0002")],[this.parseNumber("50000000"),this.parseNumber("0.0002")],[this.parseNumber("100000000"),this.parseNumber("0.00")]]}}},headers:{"APCA-PARTNER-ID":"ccxt"},options:{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,4291e4:r.RateLimitExceeded},broad:{"Invalid format for parameter":r.BadRequest,"Invalid symbol":r.BadSymbol}}})}async fetchTime(e={}){const t=await this.traderPrivateGetV2Clock(e),s=this.safeString(t,"timestamp"),i=s.slice(0,23),r=s.length-6,a=s.length-3,o=s.slice(r,a);return this.parse8601(i)-3600*this.parseToNumeric(o)*1e3}async fetchMarkets(e={}){const t=await this.traderPrivateGetV2Assets(this.extend({asset_class:"crypto",status:"active"},e));return this.parseMarkets(t)}parseMarket(e){const t=this.safeString(e,"symbol"),s=t.split("/"),i=this.safeString(e,"class"),r=this.safeString(s,0),a=this.safeString(s,1),o=this.safeCurrencyCode(r);let n=this.safeCurrencyCode(a);void 0===n&&"us_equity"===i&&(n="USD");const d=o+"/"+n,h="active"===this.safeString(e,"status"),c=this.safeNumber(e,"min_order_size");return{id:t,symbol:d,base:o,quote:n,settle:void 0,baseId:r,quoteId:a,settleId:void 0,type:"spot",spot:!0,margin:void 0,swap:!1,future:!1,option:!1,active:h,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:this.safeNumber(e,"min_trade_increment"),price:this.safeNumber(e,"price_increment")},limits:{leverage:{min:void 0,max:void 0},amount:{min:c,max:void 0},price:{min:void 0,max:void 0},cost:{min:void 0,max:void 0}},created:void 0,info:e}}async fetchTrades(e,t=void 0,s=void 0,i={}){await this.loadMarkets();const a=this.market(e),o=a.id,n=this.safeString(i,"loc","us"),d=this.safeString(i,"method","marketPublicGetV1beta3CryptoLocTrades"),h={symbols:o,loc:n};let c;if(i=this.omit(i,["loc","method"]),"marketPublicGetV1beta3CryptoLocTrades"===d)void 0!==t&&(h.start=this.iso8601(t)),void 0!==s&&(h.limit=s),c=await this.marketPublicGetV1beta3CryptoLocTrades(this.extend(h,i));else{if("marketPublicGetV1beta3CryptoLocLatestTrades"!==d)throw new r.NotSupported(this.id+" fetchTrades() does not support "+d+", marketPublicGetV1beta3CryptoLocTrades and marketPublicGetV1beta3CryptoLocLatestTrades are supported");c=await this.marketPublicGetV1beta3CryptoLocLatestTrades(this.extend(h,i))}const l=this.safeValue(c,"trades",{});let u=this.safeValue(l,o,{});return Array.isArray(u)||(u=[u]),this.parseTrades(u,a,t,s)}async fetchOrderBook(e,t=void 0,s={}){await this.loadMarkets();const i=this.market(e),r=i.id,a={symbols:r,loc:this.safeString(s,"loc","us")},o=await this.marketPublicGetV1beta3CryptoLocLatestOrderbooks(this.extend(a,s)),n=this.safeValue(o,"orderbooks",{}),d=this.safeValue(n,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=void 0,i=void 0,a={}){await this.loadMarkets();const o=this.market(e),n=o.id,d=this.safeString(a,"loc","us"),h=this.safeString(a,"method","marketPublicGetV1beta3CryptoLocBars"),c={symbols:n,loc:d};let l;if(a=this.omit(a,["loc","method"]),"marketPublicGetV1beta3CryptoLocBars"===h)void 0!==i&&(c.limit=i),void 0!==s&&(c.start=this.yyyymmdd(s)),c.timeframe=this.safeString(this.timeframes,t,t),l=await this.marketPublicGetV1beta3CryptoLocBars(this.extend(c,a));else{if("marketPublicGetV1beta3CryptoLocLatestBars"!==h)throw new r.NotSupported(this.id+" fetchOHLCV() does not support "+h+", marketPublicGetV1beta3CryptoLocBars and marketPublicGetV1beta3CryptoLocLatestBars are supported");l=await this.marketPublicGetV1beta3CryptoLocLatestBars(this.extend(c,a))}const u=this.safeValue(l,"bars",{});let p=this.safeValue(u,n,{});return Array.isArray(p)||(p=[p]),this.parseOHLCVs(p,o,t,s,i)}parseOHLCV(e,t=void 0){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=void 0,o={}){await this.loadMarkets();const n=this.market(e),d={symbol:n.id,qty:this.amountToPrecision(e,i),side:s,type:t},h=this.safeStringN(o,["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(o,"timeInForce",c),o=this.omit(o,["timeInForce","triggerPrice"]);const l=this.safeString(this.options,"clientOrderId"),u=this.uuid().split("-").join(""),p=this.implodeParams(l,{id:u}),f=this.safeString(o,"clientOrderId",p);d.client_order_id=f,o=this.omit(o,["clientOrderId"]);const m=await this.traderPrivatePostV2Orders(this.extend(d,o));return this.parseOrder(m,n)}async cancelOrder(e,t=void 0,s={}){const i={order_id:e},r=await this.traderPrivateDeleteV2OrdersOrderId(this.extend(i,s));return this.safeValue(r,"message",{})}async cancelAllOrders(e=void 0,t={}){await this.loadMarkets();const s=await this.traderPrivateDeleteV2Orders(t);return Array.isArray(s)?this.parseOrders(s,void 0):s}async fetchOrder(e,t=void 0,s={}){await this.loadMarkets();const i={order_id:e},r=await this.traderPrivateGetV2OrdersOrderId(this.extend(i,s)),a=this.safeString(r,"symbol"),o=this.safeMarket(a);return this.parseOrder(r,o)}async fetchOrders(e=void 0,t=void 0,s=void 0,i={}){await this.loadMarkets();const r={status:"all"};let a;void 0!==e&&(a=this.market(e),r.symbols=a.id);const o=this.safeInteger(i,"until");void 0!==o&&(i=this.omit(i,"until"),r.endTime=o),void 0!==t&&(r.after=t),void 0!==s&&(r.limit=s);const n=await this.traderPrivateGetV2Orders(this.extend(r,i));return this.parseOrders(n,a,t,s)}async fetchOpenOrders(e=void 0,t=void 0,s=void 0,i={}){return await this.fetchOrders(e,t,s,this.extend({status:"open"},i))}async fetchClosedOrders(e=void 0,t=void 0,s=void 0,i={}){return await this.fetchOrders(e,t,s,this.extend({status:"closed"},i))}parseOrder(e,t=void 0){const s=this.safeString(e,"symbol"),i=(t=this.safeMarket(s,t)).symbol,r=this.safeString(e,"status"),a=this.parseOrderStatus(r),o=this.safeString(e,"commission");let n;void 0!==o&&(n={cost:o,currency:"USD"});let d=this.safeString(e,"order_type");void 0!==d&&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:n,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=void 0){const s=this.safeString(e,"S"),i=this.safeSymbol(s,t),r=this.safeString(e,"t"),a=this.parse8601(r),o=this.safeString(e,"tks");let n;"B"===o?n="buy":"S"===o&&(n="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:n,takerOrMaker:"taker",price:d,amount:h,cost:void 0,fee:void 0},t)}sign(e,t="public",s="GET",i={},r=void 0,a=void 0){let o="/"+this.implodeParams(e,i),n=this.implodeHostname(this.urls.api[t[0]]);r=void 0!==r?r:{},"private"===t[1]&&(r["APCA-API-KEY-ID"]=this.apiKey,r["APCA-API-SECRET-KEY"]=this.secret);const d=this.omit(i,this.extractParams(e));return Object.keys(d).length&&("GET"===s||"DELETE"===s?o+="?"+this.urlencode(d):(a=this.json(d),r["Content-Type"]="application/json")),n+=o,{url:n,method:s,body:a,headers:r}}handleErrors(e,t,s,i,a,o,n,d,h){if(void 0===n)return;const c=this.id+" "+o,l=this.safeString(n,"code");void 0!==e&&this.throwExactlyMatchedException(this.exceptions.exact,l,c);const u=this.safeValue(n,"message",void 0);if(void 0!==u)throw this.throwExactlyMatchedException(this.exceptions.exact,u,c),this.throwBroadlyMatchedException(this.exceptions.broad,u,c),new r.ExchangeError(c)}}},1411:(e,t,s)=>{s.d(t,{A:()=>d});var i=s(566),r=s(2079),a=s(5147),o=s(1579),n=s(4852);class d extends i.A{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:!1,option:!1,addMargin:!0,cancelAllOrders:!0,cancelOrder:!0,createOrder:!0,createOrders:!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:!0,fetchFundingRate:"emulated",fetchFundingRateHistory:!1,fetchFundingRates:!0,fetchIndexOHLCV:!1,fetchLeverage:!1,fetchLeverageTiers:!0,fetchMarginMode:!1,fetchMarketLeverageTiers:"emulated",fetchMarkets:!0,fetchMarkOHLCV:!1,fetchOHLCV:!0,fetchOpenInterest:!1,fetchOpenInterestHistory:!1,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:"emulated",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/funding-payments":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:o.kb,options:{"account-category":"cash","account-group":void 0,fetchClosedOrders:{method:"v2PrivateDataGetOrderHist"},defaultType:"spot",accountsByType:{spot:"cash",swap:"futures",margin:"margin"},transfer:{fillResponseFromRequest:!0},networks:{BSC:"BEP20 (BSC)",ARB:"arbitrum",SOL:"Solana",AVAX:"avalanche C chain",OMNI:"Omni",TRC:"TRC20",TRX:"TRC20",ERC:"ERC20"},networksById:{"BEP20 (BSC)":"BSC",arbitrum:"ARB",Solana:"SOL","avalanche C chain":"AVAX",Omni:"OMNI",TRC20:"TRC20",ERC20:"ERC20",GO20:"GO20",BEP2:"BEP2",Bitcoin:"BTC","Bitcoin ABC":"BCH",Litecoin:"LTC","Matic Network":"MATIC",xDai:"STAKE",Akash:"AKT"}},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",[]),o=this.safeValue(i,"data",[]),n=this.indexBy(r,"assetCode"),d=this.indexBy(a,"assetCode"),h=this.indexBy(o,"assetCode"),c=this.deepExtend(n,d,h),l=Object.keys(c),u={};for(let e=0;e<l.length;e++){const t=l[e],s=c[t],i=this.safeCurrencyCode(t),r=this.safeString2(s,"precisionScale","nativeScale"),a=this.parseNumber(this.parsePrecision(r)),o=this.safeNumber2(s,"withdrawFee","withdrawalFee"),n="Normal"===this.safeString2(s,"status","statusCode"),d="borrowAssetCode"in s;u[i]={id:t,code:i,info:s,type:void 0,margin:d,name:this.safeString(s,"assetName"),active:n,deposit:void 0,withdraw:void 0,fee:o,precision:a,limits:{amount:{min:a,max:void 0},withdraw:{min:this.safeNumber(s,"minWithdrawalAmt"),max:void 0}},networks:{}}}return u}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"),o=this.safeValue(s,"data",[]),n=this.safeValue(i,"data",[]),d=this.arrayConcat(o,n),h=this.indexBy(d,"symbol"),c=this.deepExtend(a,h),l=Object.keys(c),u=[];for(let e=0;e<l.length;e++){const t=l[e],s=c[t],i=this.safeValue(s,"settlementAsset"),r=this.safeCurrencyCode(i),a=this.safeString(s,"status"),o=this.safeString(s,"domain");let n=!1;"Normal"!==a&&"InternalTrading"!==a||"LeveragedETF"===o||(n=!0);const d=void 0===r,h=!d,p=!!h||void 0;let f,m=this.safeNumber(s,"minQty"),g=this.safeNumber(s,"maxQty"),v=this.safeNumber(s,"tickSize");const y=this.safeString2(s,"underlying","symbol").split("/"),w=this.safeString(y,0),b=this.safeString(y,1),S=this.safeCurrencyCode(w),k=this.safeCurrencyCode(b);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"),f=this.safeNumber(t,"maxPrice"),O=S+"/"+k+":"+r}const T=this.safeNumber(s,"commissionReserveRate"),P=this.safeBool(s,"marginTradable",!1);u.push({id:t,symbol:O,base:S,quote:k,settle:r,baseId:w,quoteId:b,settleId:i,type:h?"swap":"spot",spot:d,margin:d?P:void 0,swap:h,future:!1,option:!1,active:n,contract:h,linear:p,inverse:h?!p: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:f},cost:{min:this.safeNumber(s,"minNotional"),max:this.safeNumber(s,"maxNotional")}},created:this.safeInteger(s,"tradingStartTime"),info:s})}return u}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")),o=this.account();o.free=this.safeString(t,"availableBalance"),o.total=this.safeString(t,"totalBalance");const n=this.safeString(t,"borrowed"),d=this.safeString(t,"interest");o.debt=a.Y.stringAdd(n,d),s[r]=o}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(),[t,e]=this.handleMarketTypeAndParams("fetchBalance",void 0,e),[s,e]=this.handleMarginModeAndParams("fetchBalance",e);t=this.safeBool(e,"margin",!1)||"cross"===s?"margin":t,e=this.omit(e,"margin");const i=this.safeValue(this.options,"accountsByType",{}),a=this.safeString(i,t,"cash"),o=this.safeValue(this.accounts,0,{}),n={"account-group":this.safeString(o,"id")};if("isolated"===s&&"swap"!==t)throw new r.BadRequest(this.id+" does not supported isolated margin trading");let d;if("cash"!==a&&"margin"!==a||(n["account-category"]=a),"spot"===t||"margin"===t)d=await this.v1PrivateAccountCategoryGetBalance(this.extend(n,e));else{if("swap"!==t)throw new r.NotSupported(this.id+" fetchBalance() is not currently supported for "+t+" markets");d=await this.v2PrivateAccountGroupGetFuturesPosition(this.extend(n,e))}return"swap"===t?this.parseSwapBalance(d):"margin"===t?this.parseMarginBalance(d):this.parseBalance(d)}async fetchOrderBook(e,t=void 0,s={}){await this.loadMarkets();const i={symbol:this.market(e).id},r=await this.v1PublicGetDepth(this.extend(i,s)),a=this.safeValue(r,"data",{}),o=this.safeValue(a,"data",{}),n=this.safeInteger(o,"ts"),d=this.parseOrderBook(o,e,n);return d.nonce=this.safeInteger(o,"seqnum"),d}parseTicker(e,t=void 0){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"),o=this.safeValue(e,"bid",[]),n=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(o,0),bidVolume:this.safeString(o,1),ask:this.safeString(n,0),askVolume:this.safeString(n,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=void 0,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 o=this.safeValue(a,"data",[]);return Array.isArray(o)?this.parseTickers(o,e):this.parseTickers([o],e)}parseOHLCV(e,t=void 0){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=void 0,i=void 0,r={}){await this.loadMarkets();const a=this.market(e),o={symbol:a.id,interval:this.safeString(this.timeframes,t,t)},n=this.parseTimeframe(t),d=this.safeValue(this.options,"fetchOHLCV",{}),h=this.safeInteger(d,"limit",500);void 0!==s?(o.from=s,i=void 0===i?h:Math.min(i,h),o.to=this.sum(s,i*n*1e3,1)):void 0!==i&&(o.n=i);const c=await this.v1PublicGetBarhist(this.extend(o,r)),l=this.safeValue(c,"data",[]);return this.parseOHLCVs(l,a,t,s,i)}parseTrade(e,t=void 0){const s=this.safeInteger(e,"ts"),i=this.safeString2(e,"price","p"),r=this.safeString(e,"q"),a=this.safeBool(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=void 0,s=void 0,i={}){await this.loadMarkets();const r=this.market(e),a={symbol:r.id};void 0!==s&&(a.n=s);const o=await this.v1PublicGetTrades(this.extend(a,i)),n=this.safeValue(o,"data",[]),d=this.safeValue(n,"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=void 0){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 o=this.safeInteger(e,"lastExecTime");void 0===a&&(a=o);const n=this.safeString(e,"price"),d=this.safeString(e,"orderQty"),h=this.safeString(e,"avgPx"),c=this.safeStringN(e,["cumFilledQty","cumQty","fillQty"]),l=this.safeString(e,"orderId");let u=this.safeString(e,"id");void 0!==u&&u.length<1&&(u=void 0);const p=this.safeStringLower(e,"orderType");let f=p;void 0!==p&&("stoplimit"===p&&(f="limit"),"stopmarket"===p&&(f="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 w;const b=this.safeString(e,"execInst");let S;return"reduceOnly"===b&&(w=!0),"Post"===b&&(S=!0),this.safeOrder({info:e,id:l,clientOrderId:u,timestamp:a,datetime:this.iso8601(a),lastTradeTimestamp:o,symbol:r,type:f,timeInForce:void 0,postOnly:S,reduceOnly:w,side:m,price:n,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",[]),o={};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",{});o[i]={info:t,symbol:i,maker:this.safeNumber(r,"maker"),taker:this.safeNumber(r,"taker")}}return o}createOrderRequest(e,t,s,i,r=void 0,a={}){const o=this.market(e);let n,d;[n,a]=this.handleMarginModeAndParams("createOrderRequest",a),[d,a]=this.handleMarketTypeAndParams("createOrderRequest",o,a);const h=this.safeValue(this.options,"accountsByType",{});let c=this.safeString(h,d,"cash");void 0!==n&&(c="margin");const l=this.safeValue(this.accounts,0,{}),u=this.safeValue(l,"id"),p=this.safeString2(a,"clientOrderId","id"),f={"account-group":u,"account-category":c,symbol:o.id,time:this.milliseconds(),orderQty:this.amountToPrecision(e,i),orderType:t,side:s},m="market"===t||"stop_market"===t,g="limit"===t||"stop_limit"===t,v=this.safeString(a,"timeInForce"),y=this.isPostOnly(m,!1,a),w=this.safeBool(a,"reduceOnly",!1),b=this.safeValue2(a,"triggerPrice","stopPrice");return g&&(f.orderPrice=this.priceToPrecision(e,r)),"IOC"===v&&(f.timeInForce="IOC"),"FOK"===v&&(f.timeInForce="FOK"),y&&(f.postOnly=!0),void 0!==b&&(f.stopPrice=this.priceToPrecision(e,b),g?f.orderType="stop_limit":m&&(f.orderType="stop_market")),void 0!==p&&(f.id=p),o.spot?void 0!==c&&(f.category=c):(f["account-category"]=c,w&&(f.execInst="ReduceOnly"),y&&(f.execInst="Post")),a=this.omit(a,["reduceOnly","triggerPrice"]),this.extend(f,a)}async createOrder(e,t,s,i,r=void 0,a={}){await this.loadMarkets(),await this.loadAccounts();const o=this.market(e),n=this.createOrderRequest(e,t,s,i,r,a);let d;d=o.swap?await this.v2PrivateAccountGroupPostFuturesOrder(n):await this.v1PrivateAccountCategoryPostOrder(n);const h=this.safeValue(d,"data",{}),c=this.safeValue2(h,"order","info",{});return this.parseOrder(c,o)}async createOrders(e,t={}){await this.loadMarkets(),await this.loadAccounts();const s=[];let i,a;for(let t=0;t<e.length;t++){const o=e[t],n=this.safeString(o,"symbol");if(void 0===i)i=n;else if(i!==n)throw new r.BadRequest(this.id+" createOrders() requires all orders to have the same symbol");const d=this.safeString(o,"type"),h=this.safeString(o,"side"),c=this.safeValue(o,"amount"),l=this.safeValue(o,"price"),u=this.safeValue(o,"params",{}),p=this.handleMarginModeAndParams("createOrders",u)[0];if(void 0!==p)if(void 0===a)a=p;else if(a!==p)throw new r.BadRequest(this.id+" createOrders() requires all orders to have the same margin mode (isolated or cross)");const f=this.createOrderReq