xync-client 0.0.172__py3-none-any.whl → 0.0.179.dev4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
xync_client/Abc/Agent.py CHANGED
@@ -5,11 +5,9 @@ from collections import defaultdict
5
5
  from typing import Literal
6
6
 
7
7
  from pydantic import BaseModel
8
- from pyro_client.client.file import FileClient
9
8
  from tortoise.exceptions import IntegrityError
10
9
  from x_client import df_hdrs
11
10
  from x_client.aiohttp import Client as HttpClient
12
- from xync_bot import XyncBot
13
11
  from xync_client.Abc.PmAgent import PmAgentClient
14
12
 
15
13
  from xync_client.Abc.InAgent import BaseInAgentClient
@@ -35,8 +33,6 @@ from xync_client.Gmail import GmClient
35
33
  class BaseAgentClient(HttpClient, BaseInAgentClient): # , metaclass=ABCMeta
36
34
  actor: Actor
37
35
  agent: Agent
38
- bbot: XyncBot
39
- fbot: FileClient
40
36
  ex_client: BaseExClient
41
37
  orders: dict[int, tuple[models.Order, xtype.BaseOrder]] = {} # pending
42
38
  pm_clients: dict[int, PmAgentClient] # {pm_id: PmAgentClient}
@@ -51,15 +47,11 @@ class BaseAgentClient(HttpClient, BaseInAgentClient): # , metaclass=ABCMeta
51
47
  self,
52
48
  agent: Agent, # agent.actor.person.user
53
49
  ex_client: BaseExClient,
54
- fbot: FileClient,
55
- bbot: XyncBot,
56
50
  pm_clients: dict[int, PmAgentClient] = None,
57
51
  headers: dict[str, str] = df_hdrs,
58
52
  cookies: dict[str, str] = None,
59
53
  proxy: models.Proxy = None,
60
54
  ):
61
- self.bbot = bbot
62
- self.fbot = fbot
63
55
  self.agent: Agent = agent
64
56
  self.actor: Actor = agent.actor
65
57
  self.gmail = agent.actor.person.user.gmail and GmClient(agent.actor.person.user)
xync_client/Abc/Ex.py CHANGED
@@ -26,7 +26,6 @@ class BaseExClient(HttpClient, AdLoader):
26
26
  cur_map: dict[int, str] = {}
27
27
  unifier_class: type = PmUnifier
28
28
  logo_pre_url: str
29
- bot: FileClient
30
29
  ex: models.Ex
31
30
 
32
31
  coin_x2e: dict[int, tuple[str, int]] = {}
@@ -45,14 +44,12 @@ class BaseExClient(HttpClient, AdLoader):
45
44
  def __init__(
46
45
  self,
47
46
  ex: models.Ex,
48
- bot: FileClient,
49
47
  attr: str = "host_p2p",
50
48
  headers: dict[str, str] = None,
51
49
  cookies: dict[str, str] = None,
52
50
  proxy: models.Proxy = None,
53
51
  ):
54
52
  self.ex = ex
55
- self.bot = bot
56
53
  super().__init__(self.host or getattr(ex, attr), headers, cookies, proxy and str(proxy))
57
54
 
58
55
  @abstractmethod
@@ -227,7 +224,7 @@ class BaseExClient(HttpClient, AdLoader):
227
224
  await models.CurEx.bulk_create(curexs, update_fields=["minimum", "scale"], on_conflict=["cur_id", "ex_id"])
228
225
 
229
226
  # Импорт Pm-ов (с PmCur-, PmEx- и Pmcurex-ами) и валют (с CurEx-ами) с биржи в бд
230
- async def set_pms(self, cookies: dict = None) -> bool:
227
+ async def set_pms(self, bot: FileClient, cookies: dict = None) -> bool:
231
228
  if cookies:
232
229
  self.session.cookie_jar.update_cookies(cookies)
233
230
  curs: dict[int | str, models.Cur] = {
@@ -290,7 +287,7 @@ class BaseExClient(HttpClient, AdLoader):
290
287
  ex=self.ex,
291
288
  pm=pm,
292
289
  name=pmexs_epyds[k].name,
293
- logo=await self.logo_save(pmexs_epyds[k].logo, ss),
290
+ logo=await self.logo_save(pmexs_epyds[k].logo, bot, ss),
294
291
  )
295
292
  for k, pm in pms.items()
296
293
  ]
@@ -320,13 +317,13 @@ class BaseExClient(HttpClient, AdLoader):
320
317
  # await Pmcurex.bulk_create(pmcurexs)
321
318
  return True
322
319
 
323
- async def logo_save(self, url: str | None, ss: ClientSession) -> models.File | None:
320
+ async def logo_save(self, url: str | None, bot: FileClient, ss: ClientSession) -> models.File | None:
324
321
  if url or (file := None):
325
322
  if not url.startswith("https:"):
326
323
  if not url.startswith("/"):
327
324
  url = "/" + url
328
325
  url = "https://" + self.logo_pre_url + url
329
- return await self.file_upsert(url, ss)
326
+ return await self.file_upsert(url, bot, ss)
330
327
  return file
331
328
 
332
329
  # Импорт монет (с CoinEx-ами) с биржи в бд
@@ -378,12 +375,12 @@ class BaseExClient(HttpClient, AdLoader):
378
375
  # await ad_db.pmexs.add(*getattr(ad_pydin, "pmexs_", []))
379
376
  # return ad_db
380
377
 
381
- async def file_upsert(self, url: str, ss: ClientSession = None) -> models.File:
378
+ async def file_upsert(self, url: str, bot: FileClient, ss: ClientSession = None) -> models.File:
382
379
  if not (file := await models.File.get_or_none(name__startswith=url.split("?")[0])):
383
380
  ss = ss or self.session
384
381
  if (resp := await ss.get(url)).ok:
385
382
  byts = await resp.read()
386
- upf, ref = await self.bot.save_doc(byts, resp.content_type)
383
+ upf, ref = await bot.save_doc(byts, resp.content_type)
387
384
  await sleep(0.3)
388
385
  typ = FileType[resp.content_type.split("/")[-1]]
389
386
  file, _ = await models.File.update_or_create({"ref": ref, "size": len(byts), "typ": typ}, name=url)
xync_client/Abc/Order.py CHANGED
@@ -6,6 +6,7 @@ from xync_schema.models import Order, PmEx, CredEx
6
6
 
7
7
  class BaseOrderClient:
8
8
  order: Order
9
+ agent_client: BaseAgentClient
9
10
  im_maker: bool
10
11
  im_seller: bool
11
12
 
@@ -51,6 +52,9 @@ class BaseOrderClient:
51
52
  @abstractmethod
52
53
  async def cancel_appeal(self) -> bool: ...
53
54
 
55
+ # 15: Принять аппеляцию
56
+ async def appeal_accept(self): ...
57
+
54
58
  # 16: Отправка сообщения юзеру в чат по ордеру с приложенным файлом
55
59
  @abstractmethod
56
60
  async def send_order_msg(self, msg: str, file=None) -> bool: ...
xync_client/Binance/ex.py CHANGED
@@ -140,8 +140,8 @@ async def main():
140
140
  _ = await init_db(TORM)
141
141
  ex = await Ex.get(name="Binance")
142
142
  async with FileClient(NET_TOKEN) as b:
143
- cl = ExClient(ex, b)
144
- await cl.set_pms()
143
+ cl = ExClient(ex)
144
+ await cl.set_pms(b)
145
145
  await cl.set_coins()
146
146
  await cl.set_pairs()
147
147
  # await cl.pairs()
xync_client/BingX/ex.py CHANGED
@@ -95,7 +95,7 @@ async def main():
95
95
  bg = await Ex.get(name="BingX").prefetch_related("pm_reps")
96
96
  async with FileClient(NET_TOKEN) as b:
97
97
  b: FileClient
98
- cl = ExClient(bg, b)
98
+ cl = ExClient(bg)
99
99
  _ads = await cl.ads(
100
100
  "USDT",
101
101
  "RUB",
@@ -103,7 +103,7 @@ async def main():
103
103
  )
104
104
  await cl.set_pairs()
105
105
  await cl.set_coins()
106
- await cl.set_pms()
106
+ await cl.set_pms(b)
107
107
  # _curs = await cl.curs()
108
108
  # _coins = await cl.coins()
109
109
  # _pairs = await cl.pairs()
xync_client/BitGet/ex.py CHANGED
@@ -94,15 +94,16 @@ class ExClient(BaseExClient):
94
94
  async def main():
95
95
  _ = await init_db(TORM, True)
96
96
  bg = await Ex.get(name="BitGet")
97
- cl = ExClient(bg, FileClient(NET_TOKEN))
98
- _ads = await cl.ads("USDT", "RUB", False, [])
99
- await cl.curs()
100
- await cl.coins()
101
- await cl.pms()
102
- await cl.cur_pms_map()
103
- await cl.set_pms()
104
- await cl.set_coins()
105
- await cl.close()
97
+ async with FileClient(NET_TOKEN) as b:
98
+ cl = ExClient(bg)
99
+ _ads = await cl.ads("USDT", "RUB", False, [])
100
+ await cl.curs()
101
+ await cl.coins()
102
+ await cl.pms()
103
+ await cl.cur_pms_map()
104
+ await cl.set_pms(b)
105
+ await cl.set_coins()
106
+ await cl.close()
106
107
 
107
108
 
108
109
  if __name__ == "__main__":
xync_client/BitPapa/ex.py CHANGED
@@ -20,19 +20,22 @@ class ExClient(BaseExClient):
20
20
 
21
21
 
22
22
  async def main():
23
+ from pyro_client.client.file import FileClient
23
24
  from xync_schema import TORM
25
+ from xync_client.loader import NET_TOKEN
24
26
 
25
27
  _ = await init_db(TORM, True)
26
28
  ex = await Ex.get(name="BitPapa")
27
- cl = ExClient(ex)
28
- _ads = await cl.ads(2, 11, True)
29
- await cl.set_pms()
30
- await cl.set_coins()
31
- _cr = await cl.curs()
32
- _cn = await cl.coins()
33
- await cl.set_pairs()
34
- _pms = await cl.pms()
35
- await cl.close()
29
+ async with FileClient(NET_TOKEN) as b:
30
+ cl = ExClient(ex)
31
+ _ads = await cl.ads(2, 11, True)
32
+ await cl.set_pms(b)
33
+ await cl.set_coins()
34
+ _cr = await cl.curs()
35
+ _cn = await cl.coins()
36
+ await cl.set_pairs()
37
+ _pms = await cl.pms()
38
+ await cl.close()
36
39
 
37
40
 
38
41
  if __name__ == "__main__":
@@ -17,7 +17,7 @@ from aiohttp.http_exceptions import HttpProcessingError
17
17
  from bybit_p2p import P2P
18
18
  from bybit_p2p._exceptions import FailedRequestError
19
19
  from payeer_api import PayeerAPI
20
- from pyro_client.client.file import FileClient
20
+ from pydantic import ValidationError
21
21
  from tortoise import BaseDBAsyncClient
22
22
  from tortoise.signals import post_save
23
23
  from tortoise.timezone import now
@@ -55,7 +55,7 @@ from xync_client.Bybit.etype.order import (
55
55
  SellerCancelChange,
56
56
  )
57
57
  from xync_client.Pms.Payeer.agent import PmAgentClient
58
- from xync_client.loader import TORM, NET_TOKEN, PAY_TOKEN, PRX
58
+ from xync_client.loader import TORM, PAY_TOKEN, PRX
59
59
 
60
60
 
61
61
  class NoMakerException(Exception):
@@ -78,18 +78,20 @@ class AgentClient(BaseAgentClient): # Bybit client
78
78
  self,
79
79
  agent: Agent,
80
80
  ex_client: ExClient,
81
- fbot: FileClient,
82
- bbot: XyncBot,
83
81
  pm_clients: dict[int, PmAgentClient] = None,
84
82
  **kwargs,
85
83
  ):
86
- super().__init__(agent, ex_client, fbot, bbot, pm_clients, **kwargs)
84
+ super().__init__(agent, ex_client, pm_clients, **kwargs)
87
85
  self.sec_hdrs = {
88
86
  "accept-language": "ru,en;q=0.9",
89
87
  "gdfp": agent.auth["Risktoken"],
90
88
  "tx-id": agent.auth["Risktoken"],
91
89
  }
92
- self.api = P2P(testnet=False, api_key=agent.auth["key"], api_secret=agent.auth["sec"])
90
+ self.api = P2P(
91
+ testnet=False,
92
+ api_key=agent.auth["key"],
93
+ api_secret=agent.auth["sec"], # , proxies=kwargs.get("proxies")
94
+ )
93
95
  self.hist: dict | None = None
94
96
  self.completed_orders: list[int] | None = None
95
97
 
@@ -178,7 +180,9 @@ class AgentClient(BaseAgentClient): # Bybit client
178
180
  return len([await self.ad_share(mad.id) for mad in mads])
179
181
 
180
182
  async def ad_share(self, maid: int):
181
- myad = await models.MyAd.get(id=maid).prefetch_related("ad__pair_side__pair__coin", "ad__pair_side__pair__cur")
183
+ myad = await models.MyAd.get(id=maid).prefetch_related(
184
+ "ad__pair_side__pair__coin", "ad__pair_side__pair__cur", "ad__maker"
185
+ )
182
186
  if myad.hex and myad.shared_at + timedelta(minutes=55) > now(): # check expired
183
187
  # check validity
184
188
  data = await self._post("/x-api/fiat/otc/item/shareItem/info", {"shareCode": myad.hex.hex()})
@@ -313,7 +317,7 @@ class AgentClient(BaseAgentClient): # Bybit client
313
317
  res = res["result"]
314
318
  return PreOrderResp.model_validate(res)
315
319
 
316
- async def _order_request(self, bor: BaseOrderReq) -> OrderResp:
320
+ async def _order_request(self, bor: BaseOrderReq, bbot: XyncBot) -> OrderResp:
317
321
  por: PreOrderResp = await self.__preorder_request(bor.ad_id)
318
322
  req = OrderRequest(
319
323
  itemId=por.id,
@@ -335,9 +339,9 @@ class AgentClient(BaseAgentClient): # Bybit client
335
339
  )
336
340
  req = OrderSellRequest(**req.model_dump(), paymentType=bor.pmex_exid, paymentId=str(credex.exid))
337
341
  # вот непосредственно сам запрос на ордер
338
- return await self.__order_create(req, bor)
342
+ return await self.__order_create(req, bor, bbot)
339
343
 
340
- async def __order_create(self, req: OrderRequest | OrderSellRequest, bor: BaseOrderReq) -> OrderResp:
344
+ async def __order_create(self, req: OrderRequest | OrderSellRequest, bor: BaseOrderReq, bbot: XyncBot) -> OrderResp:
341
345
  hdrs = {"Risktoken": self.sec_hdrs["gdfp"]}
342
346
  res: dict = await self._post("/x-api/fiat/otc/order/create", json=req.model_dump(), hdrs=hdrs)
343
347
  if res["ret_code"] == 0:
@@ -346,16 +350,16 @@ class AgentClient(BaseAgentClient): # Bybit client
346
350
  logging.error(req.model_dump(), "POST", self.session._base_url)
347
351
  raise HTTPException()
348
352
  elif res["ret_code"] == 912120030 or res["ret_msg"] == "The price has changed, please try again later.":
349
- resp = await self._order_request(bor)
353
+ resp = await self._order_request(bor, bbot)
350
354
  else:
351
355
  logging.exception(res)
352
356
  if not resp.orderId and resp.needSecurityRisk:
353
357
  if rc := await self._check_2fa(resp.securityRiskToken):
354
- await self.bbot.send(self.actor.person.user.username_id, f"Bybit 2fa: {rc}")
358
+ await bbot.send(self.actor.person.user.username_id, f"Bybit 2fa: {rc}")
355
359
  raise Exception(f"Bybit 2fa: {rc}")
356
360
  # еще раз уже с токеном
357
361
  req.securityRiskToken = resp.securityRiskToken
358
- resp = await self.__order_create(req, bor)
362
+ resp = await self.__order_create(req, bor, bbot)
359
363
  return resp
360
364
 
361
365
  async def cancel_order(self, order_id: str) -> bool:
@@ -495,7 +499,7 @@ class AgentClient(BaseAgentClient): # Bybit client
495
499
  # if round(cpc * new_premium / cpm, 2) == m
496
500
  # mad.premium = new_premium.to_eng_string()
497
501
 
498
- async def take_ad(self, req: TakeAdReq):
502
+ async def take_ad(self, req: TakeAdReq, bbot: XyncBot):
499
503
  if req.price and req.is_sell and req.cur_:
500
504
  ... # todo call the get_ad_details() only if lack of data
501
505
  # res = self.api.get_ad_details(itemId=req.ad_id)["result"]
@@ -531,10 +535,10 @@ class AgentClient(BaseAgentClient): # Bybit client
531
535
  coin_scale=coinex.scale,
532
536
  pmex_exid=pmexid,
533
537
  )
534
- resp: OrderResp = await self._order_request(bor)
538
+ resp: OrderResp = await self._order_request(bor, bbot)
535
539
  return resp
536
540
 
537
- async def watch_payeer(self, mcs: dict[int, "AgentClient"]):
541
+ async def watch_payeer(self, mcs: dict[int, "AgentClient"], bbot: XyncBot):
538
542
  await models.CoinEx.get(coin_id=1, ex=self.actor.ex).prefetch_related("coin")
539
543
  await models.CurEx.get(cur_id=1, ex=self.actor.ex).prefetch_related("cur")
540
544
  post_pmexs = set(await models.PmEx.filter(pm_id=366, ex=self.actor.ex).prefetch_related("pm"))
@@ -546,7 +550,7 @@ class AgentClient(BaseAgentClient): # Bybit client
546
550
  bs = [b for b in bs if float(b.price) < 100 or int(b.userId) in mcs.keys()]
547
551
  if bs:
548
552
  ad: Ad = bs[0]
549
- await self.bbot.send(
553
+ await bbot.send(
550
554
  193017646,
551
555
  f"price: {ad.price}\nnick: {ad.nickName}\nprice: {ad.price}"
552
556
  f"\nqty: {ad.quantity} [{ad.minAmount}-{ad.maxAmount}]",
@@ -560,7 +564,7 @@ class AgentClient(BaseAgentClient): # Bybit client
560
564
  coin_id=1,
561
565
  cur_id=1,
562
566
  )
563
- ord_resp: OrderResp = await self.take_ad(req)
567
+ ord_resp: OrderResp = await self.take_ad(req, bbot)
564
568
  # order: OrderFull = OrderFull(**self.api.get_order_details(orderId=ord_resp.orderId)["result"])
565
569
  order: OrderFull = await self.get_order_info(ord_resp.orderId)
566
570
  odb = await self.order_save(order)
@@ -584,7 +588,7 @@ class AgentClient(BaseAgentClient): # Bybit client
584
588
  ss = [s for s in ss if float(s.price) > 92 or int(s.userId) in mcs.keys()]
585
589
  if ss:
586
590
  ad: Ad = ss[0]
587
- await self.bbot.send(
591
+ await bbot.send(
588
592
  193017646,
589
593
  f"price: {ad.price}\nnick: {ad.nickName}\nprice: {ad.price}"
590
594
  f"\nqty: {ad.quantity} [{ad.minAmount}-{ad.maxAmount}]",
@@ -598,7 +602,7 @@ class AgentClient(BaseAgentClient): # Bybit client
598
602
  coin_id=1,
599
603
  cur_id=1,
600
604
  )
601
- ord_resp: OrderResp = await self.take_ad(req)
605
+ ord_resp: OrderResp = await self.take_ad(req, bbot)
602
606
  # order: OrderFull = OrderFull(**self.api.get_order_details(orderId=ord_resp.orderId)["result"])
603
607
  order: OrderFull = await self.get_order_info(ord_resp.orderId)
604
608
  odb = await self.order_save(order)
@@ -693,7 +697,11 @@ class AgentClient(BaseAgentClient): # Bybit client
693
697
  case "OTC_ORDER_STATUS":
694
698
  match data["type"]:
695
699
  case "STATUS_CHANGE":
696
- upd = StatusChange.model_validate(data["data"])
700
+ try:
701
+ upd = StatusChange.model_validate(data["data"])
702
+ except ValidationError as e:
703
+ logging.error(data["data"])
704
+ raise e
697
705
  if not upd.status:
698
706
  logging.warning(data["data"])
699
707
  order_db, order = await self.load_order(upd.exid)
@@ -820,7 +828,8 @@ class AgentClient(BaseAgentClient): # Bybit client
820
828
  }
821
829
  ).save(update_fields=["status", "confirmed_at"])
822
830
  # await self.money_upd(order_db)
823
-
831
+ case OrderStatus.appeal_disputed:
832
+ logging.info(f"Order {order.exid} appeal_disputed at {datetime.now()}")
824
833
  case _:
825
834
  logging.warning(f"Order {order.exid} UNKNOWN STATUS {datetime.now()}")
826
835
  case "COUNT_DOWN":
@@ -1060,16 +1069,14 @@ async def main():
1060
1069
  )
1061
1070
  .first()
1062
1071
  )
1063
- filebot = FileClient(NET_TOKEN)
1064
- # await filebot.start()
1065
1072
  # b.add_handler(MessageHandler(cond_start_handler, command("cond")))
1066
1073
  ex = await models.Ex.get(name="Bybit")
1067
1074
  prx = PRX and "http://" + PRX
1068
- ecl: ExClient = ex.client(filebot, proxy=prx)
1075
+ ecl: ExClient = ex.client(proxy=prx)
1069
1076
  abot = XyncBot(PAY_TOKEN, cn)
1070
1077
  # pmas = await models.PmAgent.filter(active=True, user_id=1).prefetch_related("pm", "user__gmail")
1071
1078
  # pm_clients = {pma.pm_id: pma.client(abot) for pma in pmas}
1072
- cl: AgentClient = agent.client(ecl, filebot, abot, proxy=prx)
1079
+ cl: AgentClient = agent.client(ecl, proxy=prx)
1073
1080
 
1074
1081
  # req = TakeAdReq(ad_id=1955696985964089344, amount=504, pm_id=128)
1075
1082
  # await cl.take_ad(req)
@@ -1097,11 +1104,11 @@ async def main():
1097
1104
  "actor__my_ads__pair_side__pair__cur",
1098
1105
  "actor__my_ads__pms",
1099
1106
  )
1100
- mcs = {m.actor.exid: m.client(ecl, filebot, abot) for m in ms}
1107
+ mcs = {m.actor.exid: m.client(ecl) for m in ms}
1101
1108
 
1102
1109
  await gather(
1103
1110
  # create_task(cl.start()),
1104
- create_task(cl.watch_payeer(mcs)),
1111
+ create_task(cl.watch_payeer(mcs, abot)),
1105
1112
  )
1106
1113
  # ensure_future(cl.start(True))
1107
1114
  # await cl.boost_acc()
@@ -1131,7 +1138,6 @@ async def main():
1131
1138
  # await cl.get_api_orders() # 43, 1741294800000, 1749157199999)
1132
1139
 
1133
1140
  # await cl.cancel_order(res.orderId)
1134
- await filebot.stop()
1135
1141
  await cl.stop()
1136
1142
 
1137
1143
 
@@ -4,7 +4,7 @@ from typing import Literal, ClassVar
4
4
  from pydantic import BaseModel, Field, model_validator
5
5
  from xync_schema.enums import OrderStatus
6
6
 
7
- from xync_client.Abc.xtype import RemapBase, BaseOrderItem, BaseOrderFull, BaseOrder, BaseCounteragent
7
+ from xync_client.Abc.xtype import RemapBase, BaseOrderItem, BaseOrderFull, BaseCounteragent
8
8
  from xync_client.Bybit.etype.cred import CredEpyd, PaymentTerm as CredPaymentTerm, PaymentConfigVo, CredEx
9
9
 
10
10
 
@@ -152,12 +152,9 @@ class _BaseOrder(RemapBase):
152
152
  created_at: int = Field(alias="createDate")
153
153
 
154
154
 
155
- class _BaseChange(_BaseOrder, BaseOrder):
156
- ad__pair_side__is_sell: bool # int: 0 покупка, 1 продажа (именно для меня - апи агента, и пох мейкер я или тейкер)
157
- created_at: int
155
+ class _BaseChange(_BaseOrder):
158
156
  exid: int = Field(alias="id")
159
157
  my_exid: int | None = None # апи агент юзер
160
- status: OrderStatus | None = None
161
158
 
162
159
  ad__maker_exid: int = Field(alias="makerUserId")
163
160
  appealedTimes: int
@@ -327,15 +324,19 @@ class Message(BaseModel):
327
324
 
328
325
  class StatusChange(_BaseChange):
329
326
  status: OrderStatus | None = None
327
+ appealType: int = None # 3 - I (seller) uploaded additional proofs # todo: выяснить другие значения
330
328
  appealVersion: int = None # 3 - my (seller) appeal is accepted by support # todo: выяснить другие значения
331
329
 
332
330
  @model_validator(mode="after")
333
331
  def amount_or_quantity_required(self):
334
- if not self.status and not self.appealVersion:
335
- raise ValueError("either status or appealVersion is required")
332
+ if not self.status and not self.appealType and not self.appealVersion:
333
+ raise ValueError("either status or appealVersion or appealType is required")
336
334
  if not self.status:
337
335
  if self.appealVersion == 3:
338
336
  self.status = OrderStatus.canceled
337
+ elif self.appealType == 3:
338
+ self.status = OrderStatus.appeal_disputed
339
+
339
340
  return self
340
341
 
341
342
 
xync_client/Bybit/ex.py CHANGED
@@ -111,11 +111,11 @@ class ExClient(BaseExClient): # Bybit client
111
111
  async def main():
112
112
  _ = await init_db(TORM, True)
113
113
  ex = await Ex.get(name="Bybit")
114
- bot: FileClient = FileClient(NET_TOKEN)
114
+ FileClient(NET_TOKEN)
115
115
  # await bot.start()
116
- cl = ExClient(ex, bot)
116
+ cl = ExClient(ex)
117
117
  await cl.set_curs()
118
- # await cl.set_pms()
118
+ # await cl.set_pms(bot)
119
119
  # await cl.set_coins()
120
120
  # await cl.set_pairs()
121
121
  x_ads_req = GetAdsReq(coin_id=1, cur_id=1, is_sell=True, pm_ids=[330, 366, 1853], amount=1000)
@@ -23,12 +23,14 @@ class OrderClient(BaseOrderClient):
23
23
  # 7: Подтвердить получение оплаты
24
24
  async def confirm(self):
25
25
  try:
26
- self.agent_client.api.release_assets(orderId=str(self.order.exid))
26
+ res = self.agent_client.api.release_assets(orderId=str(self.order.exid))
27
27
  except FailedRequestError as e:
28
28
  if e.status_code == 912100202: # Server error, please try again later
29
- await sleep(5, self.agent_client.api.release_assets(orderId=str(self.order.exid)))
29
+ await sleep(5)
30
+ res = self.agent_client.api.release_assets(orderId=str(self.order.exid))
30
31
  else:
31
32
  raise e
33
+ return res
32
34
 
33
35
  # 6: Отмена одобренной сделки
34
36
  async def cancel(self) -> bool: ...
@@ -37,9 +39,10 @@ class OrderClient(BaseOrderClient):
37
39
  async def cancel_request(self) -> bool: ...
38
40
 
39
41
  # 6: Одобрение запроса на отмену (оплаченная мной покупка)
40
- async def cancel_accept(self):
41
- data = {"orderId": self.order.exid, "examineResult": "PASS"}
42
- await self.agent_client._post("/x-api/fiat/otc/order/buyer/examine/sellerCancelOrderApply", data)
42
+ async def cancel_accept(self) -> bool:
43
+ data = {"orderId": str(self.order.exid), "examineResult": "PASS"}
44
+ res = await self.agent_client._post("/x-api/fiat/otc/order/buyer/examine/sellerCancelOrderApply", data)
45
+ return res["ret_code"] == 0
43
46
 
44
47
  # 9, 10: Подать аппеляцию cо скриншотом/видео/файлом
45
48
  async def start_appeal(self, file) -> bool: ...
@@ -50,6 +53,12 @@ class OrderClient(BaseOrderClient):
50
53
  # 15: Отмена аппеляции
51
54
  async def cancel_appeal(self) -> bool: ...
52
55
 
56
+ async def appeal_accept(self) -> bool:
57
+ data = {"orderId": str(self.order.exid)}
58
+ # Принять аппеляцию: я покупатель, прожал оплачено, продавец оспорил, я согл, ордер отменился
59
+ res = await self.agent_client._post("/x-api/fiat/otc/order/cancelAfterCustomerNegotiation", data)
60
+ return res["ret_code"] == 0
61
+
53
62
  # 16: Отправка сообщения юзеру в чат по ордеру с приложенным файлом
54
63
  async def send_order_msg(self, msg: str, file=None) -> bool: ...
55
64
 
xync_client/Gate/ex.py CHANGED
@@ -94,11 +94,11 @@ async def main():
94
94
  _ = await init_db(TORM, True)
95
95
  gt = await Ex.get(name="Gate")
96
96
  async with FileClient(NET_TOKEN) as b:
97
- cl = ExClient(gt, b)
97
+ cl = ExClient(gt)
98
98
  await cl.set_pairs()
99
99
  pms = await cl.set_coins()
100
100
  pms = await cl.cur_pms_map()
101
- pms = await cl.set_pms()
101
+ pms = await cl.set_pms(b)
102
102
  pms = await cl.set_coins()
103
103
  pms = await cl.set_curs()
104
104
  _ads = await cl.ads("USDT", "RUB", True, ["payeer"], 1000)
xync_client/Htx/agent.py CHANGED
@@ -4,14 +4,12 @@ from time import time
4
4
  from urllib.parse import quote
5
5
 
6
6
  from aiohttp import ClientResponse
7
- from pyro_client.client.file import FileClient
8
7
  from x_client import df_hdrs
9
8
  from x_client.aiohttp import Client
10
- from xync_bot import XyncBot
11
9
 
12
10
  from xync_client.Abc.xtype import AdUpdReq, GetAdsReq
13
11
  from xync_client.Htx.etype.order import OrderItem, OrderFull
14
- from xync_client.loader import NET_TOKEN, PAY_TOKEN, TORM
12
+ from xync_client.loader import TORM
15
13
 
16
14
  from xync_schema.enums import AdStatus, PmType, OrderStatus
17
15
  from xync_schema import models
@@ -309,10 +307,9 @@ class AgentClient(BaseAgentClient):
309
307
  async def _test():
310
308
  from x_model import init_db
311
309
 
312
- cn = await init_db(TORM, True)
310
+ _cn = await init_db(TORM, True)
313
311
  ex = await models.Ex[9]
314
- filebot = FileClient(NET_TOKEN)
315
- ecl = ex.client(filebot)
312
+ ecl = ex.client()
316
313
  agent = (
317
314
  await models.Agent.filter(actor__ex=ex, auth__isnull=False)
318
315
  .prefetch_related(
@@ -324,7 +321,7 @@ async def _test():
324
321
  )
325
322
  .first()
326
323
  )
327
- cl: AgentClient = agent.client(ecl, filebot, XyncBot(PAY_TOKEN, cn))
324
+ cl: AgentClient = agent.client(ecl)
328
325
  # cred = await models.Cred[89]
329
326
  # _ = await cl.cred_new(cred)
330
327
  # _creds = await cl.creds()
xync_client/Htx/ex.py CHANGED
@@ -188,9 +188,9 @@ async def main():
188
188
  ex = await Ex.get(name="Htx")
189
189
  async with FileClient(NET_TOKEN) as b:
190
190
  b: FileClient
191
- cl = ExClient(ex, b)
191
+ cl = ExClient(ex)
192
192
  await cl.set_curs()
193
- await cl.set_pms()
193
+ await cl.set_pms(b)
194
194
  await cl.set_coins()
195
195
  await cl.set_pairs()
196
196
  # _pms = await cl.pms()
xync_client/KuCoin/ex.py CHANGED
@@ -81,8 +81,8 @@ async def main():
81
81
  _ = await init_db(TORM, True)
82
82
  bg = await models.Ex.get(name="KuCoin")
83
83
  async with FileClient(NET_TOKEN) as b:
84
- cl: ExClient = bg.client(b)
85
- await cl.set_pms()
84
+ cl = ExClient(bg)
85
+ await cl.set_pms(b)
86
86
  await cl.set_coins()
87
87
  await cl.set_pairs()
88
88
 
xync_client/Mexc/agent.py CHANGED
@@ -7,7 +7,6 @@ from uuid import uuid4
7
7
 
8
8
  import websockets
9
9
  from blackboxprotobuf import protobuf_to_json
10
- from pyro_client.client.file import FileClient
11
10
  from xync_bot import XyncBot
12
11
 
13
12
  from xync_client.Mexc.api import MEXCP2PApiClient
@@ -17,7 +16,7 @@ from xync_client.Abc.xtype import GetAdsReq, AdUpdReq
17
16
  from xync_client.Bybit.etype.order import TakeAdReq
18
17
  from xync_client.Mexc.etype.order import OrderDetail
19
18
 
20
- from xync_client.loader import PAY_TOKEN, NET_TOKEN
19
+ from xync_client.loader import PAY_TOKEN
21
20
  from xync_schema import models
22
21
  from xync_schema.enums import UserStatus, AgentStatus
23
22
 
@@ -161,9 +160,8 @@ async def main():
161
160
  .first()
162
161
  )
163
162
  bbot = XyncBot(PAY_TOKEN, cn)
164
- fbot = FileClient(NET_TOKEN)
165
- ecl = ex.client(fbot)
166
- cl: AgentClient = agent.client(ecl, fbot, bbot)
163
+ ecl = ex.client()
164
+ cl: AgentClient = agent.client(ecl)
167
165
  cl.api = MEXCP2PApiClient(agent.auth["key"], agent.auth["sec"])
168
166
  create_task(cl.ws_prv())
169
167
 
@@ -181,7 +179,7 @@ async def main():
181
179
  bads: list[ad.Ad] = await cl.ex_client.ads(breq)
182
180
  if bads[0].price >= sceil:
183
181
  bad: ad.Ad = bads.pop(0)
184
- await cl.bbot.send(
182
+ await bbot.send(
185
183
  193017646,
186
184
  f"price: {bad.price}\nnick: {bad.merchant.nickName}\nmax:{bad.maxPayLimit}"
187
185
  f"\nqty: {bad.availableQuantity} [{bad.minTradeLimit}-{bad.maxTradeLimit}]",
@@ -219,7 +217,7 @@ async def main():
219
217
  sads: list[ad.Ad] = await cl.ex_client.ads(sreq)
220
218
  if sads[0].price <= bceil:
221
219
  sad: ad.Ad = sads.pop(0)
222
- await cl.bbot.send(
220
+ await bbot.send(
223
221
  193017646,
224
222
  f"price: {sad.price}\nnick: {sad.merchant.nickName}\nmax:{sad.maxPayLimit}"
225
223
  f"\nqty: {sad.availableQuantity} [{sad.minTradeLimit}-{sad.maxTradeLimit}]",
xync_client/Mexc/ex.py CHANGED
@@ -101,11 +101,11 @@ class ExClient(BaseExClient):
101
101
 
102
102
  async def main():
103
103
  _ = await init_db(TORM)
104
- async with FileClient(NET_TOKEN) as b:
104
+ async with FileClient(NET_TOKEN):
105
105
  ex = await Ex.get(name="Mexc")
106
- cl: ExClient = ex.client(b)
106
+ cl = ExClient(ex)
107
107
  # await ex.curexs.filter(cur__ticker="EUR")
108
- # await cl.set_pms()
108
+ # await cl.set_pms(b)
109
109
  # await cl.set_coinexs()
110
110
  coinex = await models.CoinEx.get(ex=cl.ex, coin_id=1)
111
111
  _ads = await cl.ads(coinex.exid, "RUB", True, ["5"])
xync_client/Okx/agent.py CHANGED
@@ -1,13 +1,9 @@
1
- from pyro_client.client.file import FileClient
2
- from xync_bot import XyncBot
3
-
4
1
  from xync_client.Abc.Agent import BaseAgentClient
5
2
  from asyncio import run
6
3
  from x_model import init_db
7
4
  from xync_schema.models import Agent, Ex
8
5
 
9
6
  from xync_client.Okx.ex import ExClient
10
- from xync_client.loader import NET_TOKEN, PAY_TOKEN
11
7
 
12
8
 
13
9
  class AgentClient(BaseAgentClient):
@@ -22,13 +18,11 @@ class AgentClient(BaseAgentClient):
22
18
  async def main():
23
19
  from xync_client.loader import TORM
24
20
 
25
- cn = await init_db(TORM)
21
+ _cn = await init_db(TORM)
26
22
  ex = await Ex.get(name="Okx")
27
23
  agent = await Agent.get(actor__ex=ex).prefetch_related("actor__ex", "actor__person__user__gmail")
28
- fbot = FileClient(NET_TOKEN)
29
- ecl: ExClient = ex.client(fbot)
30
- abot = XyncBot(PAY_TOKEN, cn)
31
- cl = agent.client(ecl, fbot, abot)
24
+ ecl: ExClient = ex.client()
25
+ cl = agent.client(ecl)
32
26
 
33
27
  _fiats = await cl.my_fiats()
34
28
 
xync_client/Okx/ex.py CHANGED
@@ -102,16 +102,17 @@ class ExClient(BaseExClient):
102
102
  async def main():
103
103
  _ = await init_db(TORM)
104
104
  bg = await models.Ex.get(name="Okx")
105
- cl = ExClient(bg, FileClient(NET_TOKEN))
106
- await cl.ads("USDT", "EUR", True)
107
- # curs = await cl.curs()
108
- # coins = await cl.coins()
109
- await cl.pms()
110
- await cl.cur_pms_map()
111
- await cl.pairs()
112
- await cl.set_coins()
113
- await cl.set_pms()
114
- await cl.close()
105
+ async with FileClient(NET_TOKEN) as b:
106
+ cl = ExClient(bg)
107
+ await cl.ads("USDT", "EUR", True)
108
+ # curs = await cl.curs()
109
+ # coins = await cl.coins()
110
+ await cl.pms()
111
+ await cl.cur_pms_map()
112
+ await cl.pairs()
113
+ await cl.set_coins()
114
+ await cl.set_pms(b)
115
+ await cl.close()
115
116
 
116
117
 
117
118
  if __name__ == "__main__":
@@ -31,10 +31,10 @@ class ExClient(BaseExClient, AuthClient):
31
31
  "NOT": 9,
32
32
  }
33
33
 
34
- def __init__(self, ex: models.Ex, bot: FileClient, actor: models.Actor = None):
34
+ def __init__(self, ex: models.Ex, actor: models.Actor = None):
35
35
  if actor:
36
36
  self.actor = actor
37
- super().__init__(ex, bot) # BaseExClient
37
+ super().__init__(ex) # BaseExClient
38
38
 
39
39
  def pm_type_map(self, pm: models.Pm) -> str:
40
40
  # todo: no pm.name
@@ -157,12 +157,12 @@ async def _test():
157
157
  await init_db(TORM)
158
158
  tgex = await models.Ex.get(name="TgWallet")
159
159
  async with FileClient(NET_TOKEN) as b:
160
- cl: ExClient = tgex.client(b)
160
+ cl = ExClient(tgex)
161
161
 
162
162
  await cl.set_coins()
163
163
  await cl.set_curs()
164
164
  await cl.set_pairs()
165
- await cl.set_pms()
165
+ await cl.set_pms(b)
166
166
  # # # SALE # # #
167
167
  # get ads list
168
168
  ads: list[AdTakerSaleBuy] = await cl.ads("TON", "RUB", True)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xync-client
3
- Version: 0.0.172
3
+ Version: 0.0.179.dev4
4
4
  Author-email: Mike Artemiev <mixartemev@gmail.com>
5
5
  Project-URL: Homepage, https://gitlab.com/XyncNet/client
6
6
  Project-URL: Repository, https://gitlab.com/XyncNet/client
@@ -3,21 +3,21 @@ xync_client/details.py,sha256=21itVPCgAtaYRR1H9J9oYudj95gafcFjExUN6QL17OI,1330
3
3
  xync_client/loader.py,sha256=DA6lHUxGidULjpHyKGS1POc5r11rlOThQRdueOgr04A,617
4
4
  xync_client/pm_unifier.py,sha256=TCN4ml59xPzMayxorGnTKLZcyxi1ZnteA2GI1GHIlBk,6584
5
5
  xync_client/Abc/AdLoader.py,sha256=PkVl6CwRvXkL7dd9HA124hBgXVMOQiXac73rYKL0PIk,67
6
- xync_client/Abc/Agent.py,sha256=TkbUOULFMh1FEAWg7dLqR21JyRTQnRyDnRmvVupbI7g,29544
6
+ xync_client/Abc/Agent.py,sha256=ja6nidaT9TkeeL2xQAKsnxmKEeDe-Kd_Q83fn5lYsGw,29330
7
7
  xync_client/Abc/Asset.py,sha256=hlgyFaU9byr2N2r8Heh-_ICx49SKuKxfRTUA4yQWmEw,454
8
8
  xync_client/Abc/Auth.py,sha256=OPQXN7_XYQZP9431ylFksd6JDusbKG8N_1g6CXTZ6yY,1495
9
9
  xync_client/Abc/BaseTest.py,sha256=vaAs5Z4HYV7k_C3zQz6JKO75s2hXtVbBI3-0Srkzv5Q,2388
10
- xync_client/Abc/Ex.py,sha256=EH9yrgg-ZAIm9jdWXymBu7wmo8HIK4G6zRBQ9tS1jiE,32671
10
+ xync_client/Abc/Ex.py,sha256=K4DuL3r1BWZcNiU-vyoQMiLwY1Vd0-a0hubWZFYY5X4,32659
11
11
  xync_client/Abc/Exception.py,sha256=Sts7RpP370NBdjaH_cyXDdHtjge8zXNUGWCrKw49Zyk,482
12
12
  xync_client/Abc/HasAbotUid.py,sha256=LsTHHjMHBauCwJoqgDa9Lx4R6xsDOHfsN4jM539Bpqg,279
13
13
  xync_client/Abc/InAgent.py,sha256=8BnZ7VzWLIJY93xnNTqlpY3JdarQkkpRRjDDEALaVAA,303
14
- xync_client/Abc/Order.py,sha256=mHlRQhVOpKkiC_fCAY22--uVTUwnm-0d6Ib1c6faTrs,2585
14
+ xync_client/Abc/Order.py,sha256=9srqDBOyQZBVkIHj5o54L7mkdcTWEw6QI-2norMcsH4,2703
15
15
  xync_client/Abc/PmAgent.py,sha256=Xl-0-KMwcTp_7qIt7NV7-aD22j955tFYFqcHHbmGMTQ,4193
16
16
  xync_client/Abc/xtype.py,sha256=WzX-D38E3RgQoolLTyx4AqvXpKyaU4QFaPrypgGfmgc,6714
17
17
  xync_client/Binance/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
18
  xync_client/Binance/binance_async.py,sha256=LP2DZaHwkfsp_4Tjvetb-1ntjQtJfODF0OgZpoPx4KU,2688
19
19
  xync_client/Binance/earn_api.py,sha256=hvk0MaVTLszIglQXVhbUjGcaHfbF9Ul7FFXmy94U2so,4411
20
- xync_client/Binance/ex.py,sha256=m9KvSS-FjPe0BH-npkoqaIZ2WyNUsddxEgrbUpFzGsw,5368
20
+ xync_client/Binance/ex.py,sha256=I-ANDijPM6bEAplOZOslGI07ssxAe7wd2cV6KmgVjzM,5366
21
21
  xync_client/Binance/exceptions.py,sha256=An-TK5_SKmGXMdGIs_K59u-0iBpqVgOPfkJqrEELcGQ,847
22
22
  xync_client/Binance/sapi.py,sha256=_2eXFtcFIerjvyyyqqSnwZxCqQPiMUdqAXJj7hyOQDQ,9584
23
23
  xync_client/Binance/web_c2c.py,sha256=WZ2BVq26ZcdOEcRvRsEKxvwe6x-XQ51b-nEFFAaRNOk,9249
@@ -26,53 +26,53 @@ xync_client/Binance/etype/pm.py,sha256=rorFX4HDjqDQwJ7Kqx41KOO1JJAi4yWbe4pkGAMmR
26
26
  xync_client/BingX/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
27
  xync_client/BingX/agent.py,sha256=tfMiS1ttD1PTxlsQhMWpMKNP3Rl2_dP3wj5S1gihng8,4322
28
28
  xync_client/BingX/base.py,sha256=Zx2H21iZrF94cMOz3imz6djMMNzAaB_iJSzDSP6beXo,739
29
- xync_client/BingX/ex.py,sha256=QzHaEEB_mnOSdMSfvg3Odd9oHortj6wZeIC7fPPFFf4,4275
29
+ xync_client/BingX/ex.py,sha256=Dir4hmAF3AD7-gDElc9IycKULldIQy6m_QKbA2GKaLE,4273
30
30
  xync_client/BingX/req.mjs,sha256=JvLv1KBKsiIVVvRmAFC0RqpsxkBcwqbjk2_PGCubnX0,304
31
31
  xync_client/BingX/sign.js,sha256=uTfbKV0Y7bKapOs1AtlT1FmduelwvH2pGqIxCK2z5NY,100086
32
32
  xync_client/BingX/etype/ad.py,sha256=aUsZcvhk418d73SaOQlZYYYikHN1zFVYj49d5Xzb6qc,1360
33
33
  xync_client/BingX/etype/pm.py,sha256=hKaUHwkZC2ioBv_mNfIIutDkNNhO_ljhsCtSy2uwLAY,128
34
34
  xync_client/BitGet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
35
  xync_client/BitGet/agent.py,sha256=_-E9tX2m5n_2hBGuPKDfojS2dFrdOqrFO7q_mYLK3Zc,2965
36
- xync_client/BitGet/ex.py,sha256=uEvvXuLaJv8o8BFi0bMA3XyBuTfVDWagAjLOHZl-xlE,3765
36
+ xync_client/BitGet/ex.py,sha256=D8sQYFQJek1M5LZ7PeUjAxojXv__uQOsa6QvQMAi9Ok,3822
37
37
  xync_client/BitGet/etype/ad.py,sha256=fysSW47wGYjSOPUqY864z857AJz4gjN-nOkI1Jxd27U,1838
38
- xync_client/BitPapa/ex.py,sha256=U-RRB_RSOtErfRgxOZYWegZ_td_uZO37YKo3Jxchf_w,912
39
- xync_client/Bybit/agent.py,sha256=SM7jLRU0b-G-5emcAHfOv9etrmnqYgbs24fIKc3Y-ac,53851
40
- xync_client/Bybit/ex.py,sha256=eYpUgAwb4HoAXzd3UvhkcBdjc6D2cN5oCYg5ToeiWoA,4850
38
+ xync_client/BitPapa/ex.py,sha256=7tq14aJ1pYMlp2Ejvdod_Ci496Hjh-EjuVEWrbuQxuU,1088
39
+ xync_client/Bybit/agent.py,sha256=TM86Ic3Ui2lYysnKmz7GLgJfl8T7mmr_gkgtXH73B3k,54188
40
+ xync_client/Bybit/ex.py,sha256=_vfxWpI2FgUMa026j4H6QBs8dtvntpCQVXmAWdBy9Bs,4830
41
41
  xync_client/Bybit/inAgent.py,sha256=HC3NtKpf9Rh7dEqeTUI0QFNmu7qzKo9q5kVu5HsKh8E,1199
42
- xync_client/Bybit/order.py,sha256=tghj52V47WsgvgouiUmVLyX1GyycKLJIAIGkrZZmzIc,2781
42
+ xync_client/Bybit/order.py,sha256=1jrJYyQS7t3zGgFH7grbhWSJW-DbjMmL19i7SaOBUoU,3294
43
43
  xync_client/Bybit/web_earn.py,sha256=qjqS10xlFc8r40IhDdPZ0LxA2dFEGbvBGXdsrUUJCMo,3019
44
44
  xync_client/Bybit/web_p2p.py,sha256=sAXzK03t6jwDnz4rrvP2IzI0KxfKa7C_5GuzH1HwLuA,11768
45
45
  xync_client/Bybit/ws.py,sha256=OQjZHo_MiAH1dlOs3c-aUZBKyqToNTmH560udh6RYDE,1431
46
46
  xync_client/Bybit/etype/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
47
  xync_client/Bybit/etype/ad.py,sha256=46fbcT9o0LToLTTesT6Od7XxJEKlYyHy9qKRjPMfE_Y,6387
48
48
  xync_client/Bybit/etype/cred.py,sha256=2rRwGUNNXvneTcoOw2HfO7S29J-c8bWhnolo03w5tcg,2490
49
- xync_client/Bybit/etype/order.py,sha256=8P0J3hcHRyYP3d1f4FWMZ3xWZot28GiFDDXKe204vtM,11793
50
- xync_client/Gate/ex.py,sha256=QbhB3u7TWnvVGD-AknB2nay6KZjEXQ-1JT9UacX4sWI,3735
49
+ xync_client/Bybit/etype/order.py,sha256=e5_7u5Je79mtMKMXsDkZB7-QKB2i9tqB7K8O2R5l_NU,11800
50
+ xync_client/Gate/ex.py,sha256=1Mp5Ji-wEucX2BQOZmqhHQ0JEjDlUoPnfmPly6wVx38,3733
51
51
  xync_client/Gate/premarket.py,sha256=IW-CgkmNJePJR2j_NRfULNKTePMX35XlhldqdiO76zY,2138
52
52
  xync_client/Gate/etype/ad.py,sha256=-EwtFcOWWvtE6UjaOdsuXWDTCVjAIRK0kSEsqPP4Yls,1296
53
53
  xync_client/Gmail/__init__.py,sha256=9JGT8PyzJaOTVvaFV0Gki3Fdo6Bp6m6DnWOPGZJ-eAA,5436
54
- xync_client/Htx/agent.py,sha256=YJ8bbGC-30_cOfIAoN-EHIr0N0ecNHD3aILJVrMilN0,14496
54
+ xync_client/Htx/agent.py,sha256=SpJqH1nhYGu_SMz9a4El72YiSeFaRBDvVuqKdD5Qe2k,14323
55
55
  xync_client/Htx/earn.py,sha256=jL6eRwytZEMRom_3bFm1DYthi_GFg-E1Mm3ZDXENHSg,2386
56
- xync_client/Htx/ex.py,sha256=pxGF_mU-O9YKOU1V95E1hmZKHFlainjSIwMHPtxaQfM,6678
56
+ xync_client/Htx/ex.py,sha256=mdoiukoS3zY9SJUMQ4RYPq6gp4AbL45fN3TA-mhDd9A,6676
57
57
  xync_client/Htx/etype/__init__.py,sha256=sZIhFOxj2dRQRmMe86-y9vlzOGAPo1qoOi6u1qVxWr0,123
58
58
  xync_client/Htx/etype/ad.py,sha256=MUPDcB8-qh5yGmt1HqwP0J1550MZpzOL-t7zOrt8Q9c,2679
59
59
  xync_client/Htx/etype/cred.py,sha256=sAOQTsk7BA8zBWUkkwM6vIQcq1LcSK5NLYGrkTdtkQ8,1129
60
60
  xync_client/Htx/etype/order.py,sha256=9es-uYOAI1Zpjnntdc6KogvN9OQuD_-mUZiQVTIycjM,6276
61
61
  xync_client/Htx/etype/pm.py,sha256=ILCP9reFRkfuzmtsJDYomJ3WBTU4s_KE-69JksTxwMk,375
62
62
  xync_client/Htx/etype/test.py,sha256=3fh2R70Wel66xLg00RYdftVeUAr2L5iPSN_brwlCKVg,908
63
- xync_client/KuCoin/ex.py,sha256=w-6-aedlC1mYf8LShMv6pOrQzqMR9E6yIyXGUHQP888,3237
63
+ xync_client/KuCoin/ex.py,sha256=8g35zRsOqVzrkIrQU4qKFQiBVuLreLaE5B0fknKcJMo,3228
64
64
  xync_client/KuCoin/web.py,sha256=--OHS0Z29xjfNUjdTL7K0EDmU4dwej95OJ8Sv4PsxLI,920
65
65
  xync_client/KuCoin/etype/ad.py,sha256=MTx90Qo2xFKvfgIr4_qMowjwO23HVpFCD6J7INNFDuQ,1223
66
66
  xync_client/KuCoin/etype/pm.py,sha256=S50S5fyY5YeWlcPwO66o-GsPcdqgoeXuxvmEIy6Zqvs,130
67
- xync_client/Mexc/agent.py,sha256=3NZJm_cpAggvK07DvgYH-CTPDoE4ZXcqhBjLUEsRcm0,10515
67
+ xync_client/Mexc/agent.py,sha256=vN5wsRLQSRFWLGc2_H31LQM8zSCDmGD8Evhfkg7Voxg,10402
68
68
  xync_client/Mexc/api.py,sha256=z4PCAa9LfzTjjcYbkUzpt6pVFkREriog4QUcxsG2leM,44447
69
- xync_client/Mexc/ex.py,sha256=X8FXUDda2l_WYK8Qq6nSqnRS2NNtdp9zii5-qsKqnPo,5015
69
+ xync_client/Mexc/ex.py,sha256=hLZMd7RRrP-tchLOzEgNWKxc89ic457vFI8crEaCt_k,5001
70
70
  xync_client/Mexc/etype/ad.py,sha256=CVSkaP2FrAVHgJkVGw1pFk55AM2cAZHtRJHnOhPc2y8,2634
71
71
  xync_client/Mexc/etype/order.py,sha256=Ts3yUOl8Qow21Jqak-3E67EbLm6AfY8lbrk07bIpp6I,7391
72
72
  xync_client/Mexc/etype/pm.py,sha256=m5kCoMx9IEKUPB-z7YwwymQhASkv2npC4-Z_ePYeeRY,453
73
73
  xync_client/Okx/1.py,sha256=c2mbB6C1q0k24yg1T_WHA69MjLFnrC6GzUC461vaw0s,1625
74
- xync_client/Okx/agent.py,sha256=y_6tjGPyMCD6AK7qYUSvm26kJxEPnt3ZTRhAszPztJA,1089
75
- xync_client/Okx/ex.py,sha256=4eQGQzON1mRv98beweoXmb02GfRwZAIiQUfKKAe-uuE,4558
74
+ xync_client/Okx/agent.py,sha256=IJhJEv4PH7bia7IGZJnmYFU9wfnJbNlvjNaqcpAJIOQ,878
75
+ xync_client/Okx/ex.py,sha256=iBItJAuSvJmMQdEW-gASQzNNPqMznc5jiD0jtO7B9m0,4619
76
76
  xync_client/Okx/etype/ad.py,sha256=rTWMMmDwJK9chBByyihCZcgE5P6c5ti2yR1RbUtev3A,3773
77
77
  xync_client/Okx/etype/pm.py,sha256=MaxeyltowP3ESdOjec2HvSfMBwV_mC6w56Xbw-puadc,251
78
78
  xync_client/Pms/.gitignore,sha256=uGduC1_B8Wc0RiBzBS1YsrLPClFG2e42r1At9taidMI,6
@@ -98,13 +98,13 @@ xync_client/Pms/Yandex/__init__.py,sha256=2Fu77vDlnGnhesu-OTSsn8lYsnMGO2eDBxWW57
98
98
  xync_client/TgWallet/agent.py,sha256=e0QoyKNwYYTFcSZyjPIIx_uftqQR0Czajzp_gOM6B1s,22061
99
99
  xync_client/TgWallet/asset.py,sha256=pNauwSE7tp5mKQVxH3W-B1yyEV6ZCefttVElOhyqJ1c,433
100
100
  xync_client/TgWallet/auth.py,sha256=pfoEiOW3bg8oJqD4hFBlSNnxTTVTzr305YrAREqqfFY,1284
101
- xync_client/TgWallet/ex.py,sha256=St4T-ozy0dxQHxeu5y2pvFU01pdfIDrAR0HHBRRh_6M,8186
101
+ xync_client/TgWallet/ex.py,sha256=QWqywpP8_vOXa1uA_Vl04A-CDQDp-SQBMhN_UAdoC4M,8155
102
102
  xync_client/TgWallet/inAgent.py,sha256=vJUQNlQviSnDnhSfEubqwz-DnrYtMnS4qZ2gDjnK3Tc,5441
103
103
  xync_client/TgWallet/order.py,sha256=BOmBx5WWfJv0-_-A8DcR-Xd8utqO_VTmSqSegm0cteQ,3818
104
104
  xync_client/TgWallet/pyd.py,sha256=eLcnWKlA8UTZ9_rxy6AHuWDjedslY2WzaEVIAjRmff8,5654
105
105
  xync_client/TgWallet/pyro.py,sha256=2K7QWdo48k4MbbgQt90gdz_HiPck69Njm4xaMjIVgoo,1440
106
106
  xync_client/TgWallet/web.py,sha256=kDcv9SKKQPe91mw1qJBpbuyKYCAmZdfdHJylHumLBVU,1608
107
- xync_client-0.0.172.dist-info/METADATA,sha256=hU5ZRVPngaZOeQ-T54oRY9E581ocJTLIf-Q03v6eaAQ,1181
108
- xync_client-0.0.172.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
109
- xync_client-0.0.172.dist-info/top_level.txt,sha256=bmYEVIIrD3v7yFwH-X15pEfRvzhuAdfsAZ2igvNI4O8,12
110
- xync_client-0.0.172.dist-info/RECORD,,
107
+ xync_client-0.0.179.dev4.dist-info/METADATA,sha256=H-R_fsQescydGScSZxqIzhNjjYliSaViK_zlpsleV_k,1186
108
+ xync_client-0.0.179.dev4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
109
+ xync_client-0.0.179.dev4.dist-info/top_level.txt,sha256=bmYEVIIrD3v7yFwH-X15pEfRvzhuAdfsAZ2igvNI4O8,12
110
+ xync_client-0.0.179.dev4.dist-info/RECORD,,