def binance(args: tuple[str, URL], kwargs: dict[str, Any]) -> tuple[str, URL]: method: str = args[0] url: URL = args[1] data: dict[str, Any] = kwargs["data"] or {} headers: CIMultiDict = kwargs["headers"] session: aiohttp.ClientSession = kwargs["session"] key: str = session.__dict__["_apis"][Hosts.items[url.host].name][0] secret: bytes = session.__dict__["_apis"][Hosts.items[url.host].name][1] expires = str(int(time.time() * 1000)) if method == METH_GET: if url.scheme == "https": query = MultiDict(url.query) query.extend({"timestamp": expires}) query_string = "&".join(f"{k}={v}" for k, v in query.items()) signature = hmac.new( secret, query_string.encode(), hashlib.sha256 ).hexdigest() query.extend({"signature": signature}) url = url.with_query(query) args = ( method, url, ) else: data.update({"timestamp": expires}) body = FormData(data)() signature = hmac.new(secret, body._value, hashlib.sha256).hexdigest() body._value += f"&signature={signature}".encode() body._size = len(body._value) kwargs.update({"data": body}) headers.update({"X-MBX-APIKEY": key}) return args
def bybit(args: Tuple[str, URL], kwargs: Dict[str, Any]) -> Tuple[str, URL]: method: str = args[0] url: URL = args[1] data: Dict[str, Any] = kwargs['data'] or {} session: aiohttp.ClientSession = kwargs['session'] key: str = session.__dict__['_apis'][Hosts.items[url.host].name][0] secret: bytes = session.__dict__['_apis'][Hosts.items[ url.host].name][1] expires = str(int((time.time() + 1.0) * 1000)) if method == METH_GET: query = MultiDict(url.query) if url.scheme == 'https': query.extend({'api_key': key, 'timestamp': expires}) query_string = '&'.join(f'{k}={v}' for k, v in sorted(query.items())) sign = hmac.new(secret, query_string.encode(), hashlib.sha256).hexdigest() query.extend({'sign': sign}) else: path = f'{method}/realtime{expires}' signature = hmac.new(secret, path.encode(), hashlib.sha256).hexdigest() query.extend({ 'api_key': key, 'expires': expires, 'signature': signature }) url = url.with_query(query) args = ( method, url, ) else: data.update({'api_key': key, 'timestamp': expires}) body = FormData(sorted(data.items()))() sign = hmac.new(secret, body._value, hashlib.sha256).hexdigest() body._value += f'&sign={sign}'.encode() body._size = len(body._value) kwargs.update({'data': body}) return args
def bybit(args: tuple[str, URL], kwargs: dict[str, Any]) -> tuple[str, URL]: method: str = args[0] url: URL = args[1] data: dict[str, Any] = kwargs["data"] or {} session: aiohttp.ClientSession = kwargs["session"] key: str = session.__dict__["_apis"][Hosts.items[url.host].name][0] secret: bytes = session.__dict__["_apis"][Hosts.items[url.host].name][1] if url.scheme == "https": expires = str(int((time.time() - 5.0) * 1000)) recv_window = ( "recv_window" if not url.path.startswith("/spot") else "recvWindow" ) auth_params = {"api_key": key, "timestamp": expires, recv_window: 10000} if method in (METH_GET, METH_DELETE): query = MultiDict(url.query) query.extend(auth_params) query_string = "&".join(f"{k}={v}" for k, v in sorted(query.items())) sign = hmac.new( secret, query_string.encode(), hashlib.sha256 ).hexdigest() query.extend({"sign": sign}) url = url.with_query(query) args = (method, url) else: data.update(auth_params) body = FormData(sorted(data.items()))() sign = hmac.new(secret, body._value, hashlib.sha256).hexdigest() body._value += f"&sign={sign}".encode() body._size = len(body._value) kwargs.update({"data": body}) elif url.scheme == "wss": query = MultiDict(url.query) expires = str(int((time.time() + 5.0) * 1000)) path = f"{method}/realtime{expires}" signature = hmac.new(secret, path.encode(), hashlib.sha256).hexdigest() query.extend({"api_key": key, "expires": expires, "signature": signature}) url = url.with_query(query) args = (method, url) return args
def binance(args: Tuple[str, URL], kwargs: Dict[str, Any]) -> Tuple[str, URL]: method: str = args[0] url: URL = args[1] data: Dict[str, Any] = kwargs['data'] or {} headers: CIMultiDict = kwargs['headers'] session: aiohttp.ClientSession = kwargs['session'] key: str = session.__dict__['_apis'][Hosts.items[url.host].name][0] secret: bytes = session.__dict__['_apis'][Hosts.items[ url.host].name][1] expires = str(int(time.time() * 1000)) if method == METH_GET: if url.scheme == 'https': query = MultiDict(url.query) query.extend({'timestamp': expires}) query_string = '&'.join(f'{k}={v}' for k, v in query.items()) signature = hmac.new(secret, query_string.encode(), hashlib.sha256).hexdigest() query.extend({'signature': signature}) url = url.with_query(query) args = ( method, url, ) else: data.update({'timestamp': expires}) body = FormData(data)() signature = hmac.new(secret, body._value, hashlib.sha256).hexdigest() body._value += f'&signature={signature}'.encode() body._size = len(body._value) kwargs.update({'data': body}) headers.update({'X-MBX-APIKEY': key}) return args