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 +0 -8
- xync_client/Abc/Ex.py +6 -9
- xync_client/Abc/Order.py +4 -0
- xync_client/Binance/ex.py +2 -2
- xync_client/BingX/ex.py +2 -2
- xync_client/BitGet/ex.py +10 -9
- xync_client/BitPapa/ex.py +12 -9
- xync_client/Bybit/agent.py +35 -29
- xync_client/Bybit/etype/order.py +8 -7
- xync_client/Bybit/ex.py +3 -3
- xync_client/Bybit/order.py +14 -5
- xync_client/Gate/ex.py +2 -2
- xync_client/Htx/agent.py +4 -7
- xync_client/Htx/ex.py +2 -2
- xync_client/KuCoin/ex.py +2 -2
- xync_client/Mexc/agent.py +5 -7
- xync_client/Mexc/ex.py +3 -3
- xync_client/Okx/agent.py +3 -9
- xync_client/Okx/ex.py +11 -10
- xync_client/TgWallet/ex.py +4 -4
- {xync_client-0.0.172.dist-info → xync_client-0.0.179.dev4.dist-info}/METADATA +1 -1
- {xync_client-0.0.172.dist-info → xync_client-0.0.179.dev4.dist-info}/RECORD +24 -24
- {xync_client-0.0.172.dist-info → xync_client-0.0.179.dev4.dist-info}/WHEEL +0 -0
- {xync_client-0.0.172.dist-info → xync_client-0.0.179.dev4.dist-info}/top_level.txt +0 -0
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
|
|
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
|
|
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
|
|
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
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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__":
|
xync_client/Bybit/agent.py
CHANGED
|
@@ -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
|
|
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,
|
|
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,
|
|
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(
|
|
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(
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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(
|
|
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,
|
|
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
|
|
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
|
|
xync_client/Bybit/etype/order.py
CHANGED
|
@@ -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,
|
|
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
|
|
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
|
-
|
|
114
|
+
FileClient(NET_TOKEN)
|
|
115
115
|
# await bot.start()
|
|
116
|
-
cl = ExClient(ex
|
|
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)
|
xync_client/Bybit/order.py
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
-
|
|
310
|
+
_cn = await init_db(TORM, True)
|
|
313
311
|
ex = await models.Ex[9]
|
|
314
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
165
|
-
|
|
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
|
|
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
|
|
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)
|
|
104
|
+
async with FileClient(NET_TOKEN):
|
|
105
105
|
ex = await Ex.get(name="Mexc")
|
|
106
|
-
cl
|
|
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
|
-
|
|
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
|
-
|
|
29
|
-
|
|
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
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
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__":
|
xync_client/TgWallet/ex.py
CHANGED
|
@@ -31,10 +31,10 @@ class ExClient(BaseExClient, AuthClient):
|
|
|
31
31
|
"NOT": 9,
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
def __init__(self, ex: models.Ex,
|
|
34
|
+
def __init__(self, ex: models.Ex, actor: models.Actor = None):
|
|
35
35
|
if actor:
|
|
36
36
|
self.actor = actor
|
|
37
|
-
super().__init__(ex
|
|
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
|
|
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)
|
|
@@ -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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
39
|
-
xync_client/Bybit/agent.py,sha256=
|
|
40
|
-
xync_client/Bybit/ex.py,sha256=
|
|
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=
|
|
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=
|
|
50
|
-
xync_client/Gate/ex.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
75
|
-
xync_client/Okx/ex.py,sha256=
|
|
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=
|
|
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.
|
|
108
|
-
xync_client-0.0.
|
|
109
|
-
xync_client-0.0.
|
|
110
|
-
xync_client-0.0.
|
|
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,,
|
|
File without changes
|
|
File without changes
|