xync-client 0.0.138__py3-none-any.whl → 0.0.141__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/PmAgent.py +16 -17
- xync_client/Binance/ex.py +2 -2
- xync_client/BingX/ex.py +2 -2
- xync_client/BitGet/ex.py +2 -2
- xync_client/Bybit/InAgent.py +6 -6
- xync_client/Bybit/agent.py +6 -6
- xync_client/Bybit/ex.py +2 -2
- xync_client/Gate/ex.py +2 -2
- xync_client/Gmail/__init__.py +4 -4
- xync_client/Htx/ex.py +2 -2
- xync_client/KuCoin/ex.py +2 -2
- xync_client/Mexc/ex.py +2 -2
- xync_client/Okx/ex.py +2 -2
- xync_client/Pms/Payeer/__init__.py +20 -5
- xync_client/Pms/Volet/__init__.py +90 -55
- xync_client/Pms/Volet/api.py +16 -13
- xync_client/TgWallet/ex.py +2 -2
- xync_client/loader.py +1 -1
- {xync_client-0.0.138.dist-info → xync_client-0.0.141.dist-info}/METADATA +1 -1
- {xync_client-0.0.138.dist-info → xync_client-0.0.141.dist-info}/RECORD +22 -22
- {xync_client-0.0.138.dist-info → xync_client-0.0.141.dist-info}/WHEEL +0 -0
- {xync_client-0.0.138.dist-info → xync_client-0.0.141.dist-info}/top_level.txt +0 -0
xync_client/Abc/PmAgent.py
CHANGED
|
@@ -6,7 +6,9 @@ from enum import StrEnum
|
|
|
6
6
|
|
|
7
7
|
from playwright.async_api import Page, Playwright
|
|
8
8
|
from pyro_client.client.file import FileClient
|
|
9
|
-
from
|
|
9
|
+
from pyro_client.client.user import UserClient
|
|
10
|
+
|
|
11
|
+
from xync_client.loader import NET_TOKEN
|
|
10
12
|
from xync_schema.enums import UserStatus
|
|
11
13
|
from xync_schema.models import PmAgent, User
|
|
12
14
|
|
|
@@ -22,29 +24,22 @@ class PmAgentClient(metaclass=ABCMeta):
|
|
|
22
24
|
OTP_LOGIN = base + "login/otp"
|
|
23
25
|
|
|
24
26
|
norm: str
|
|
25
|
-
uid: int
|
|
26
27
|
agent: PmAgent
|
|
27
|
-
bot: FileClient
|
|
28
|
+
bot: FileClient | UserClient
|
|
28
29
|
page: Page
|
|
29
30
|
pages: type(StrEnum) = Pages
|
|
30
31
|
last_page: int = 0
|
|
31
32
|
last_active: datetime = datetime.now()
|
|
32
33
|
_is_started: bool = False
|
|
33
34
|
|
|
34
|
-
async def start(self, pw: Playwright, headed: bool = False) -> "PmAgentClient":
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
dct.update({"user__username_id": self.uid})
|
|
38
|
-
|
|
39
|
-
self.bot = FileClient(TOKEN)
|
|
35
|
+
async def start(self, pw: Playwright, headed: bool = False, userbot: bool = False) -> "PmAgentClient":
|
|
36
|
+
bot = FileClient(NET_TOKEN)
|
|
37
|
+
self.bot = UserClient(self.uid, bot) if userbot else bot
|
|
40
38
|
await self.bot.start()
|
|
41
39
|
|
|
42
|
-
self.
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
raise Exception(f"No active users for {self.norm}!")
|
|
46
|
-
|
|
47
|
-
self.browser = await pw.chromium.launch(channel="chromium-headless-shell", headless=not headed)
|
|
40
|
+
self.browser = await pw.chromium.launch(
|
|
41
|
+
channel="chromium" if headed else "chromium-headless-shell", headless=not headed
|
|
42
|
+
)
|
|
48
43
|
context = await self.browser.new_context(storage_state=self.agent.state)
|
|
49
44
|
self.page = await context.new_page()
|
|
50
45
|
await self.page.goto(self.pages.SEND) # Оптимистично переходим сразу на страницу отправки
|
|
@@ -59,6 +54,8 @@ class PmAgentClient(metaclass=ABCMeta):
|
|
|
59
54
|
self._is_started = True
|
|
60
55
|
return self
|
|
61
56
|
|
|
57
|
+
def get_topup(self, tid: str) -> dict: ...
|
|
58
|
+
|
|
62
59
|
async def _idle(self): # todo: не мешать другим процессам, обновлять на другой вкладке?
|
|
63
60
|
while (await User.get(username_id=self.uid)).status >= UserStatus.ACTIVE:
|
|
64
61
|
await self.page.wait_for_timeout(30 * 1000)
|
|
@@ -90,5 +87,7 @@ class PmAgentClient(metaclass=ABCMeta):
|
|
|
90
87
|
@abstractmethod # видео входа в аккаунт, и переход в историю поступлений за последние сутки (минимум)
|
|
91
88
|
async def proof(self) -> bytes: ...
|
|
92
89
|
|
|
93
|
-
def __init__(self,
|
|
94
|
-
self.
|
|
90
|
+
def __init__(self, agent: PmAgent):
|
|
91
|
+
self.agent = agent
|
|
92
|
+
self.uid = agent.user.username_id
|
|
93
|
+
self.norm = agent.pm.norm
|
xync_client/Binance/ex.py
CHANGED
|
@@ -6,7 +6,7 @@ from x_model import init_db
|
|
|
6
6
|
from xync_client.Abc.Ex import BaseExClient
|
|
7
7
|
from xync_client.Binance.etype import pm, ad
|
|
8
8
|
from xync_client.Abc.xtype import PmEx, MapOfIdsList
|
|
9
|
-
from xync_client.loader import
|
|
9
|
+
from xync_client.loader import NET_TOKEN, TORM
|
|
10
10
|
|
|
11
11
|
from xync_schema.models import Ex
|
|
12
12
|
from xync_schema import xtype
|
|
@@ -139,7 +139,7 @@ class ExClient(BaseExClient):
|
|
|
139
139
|
async def main():
|
|
140
140
|
_ = await init_db(TORM)
|
|
141
141
|
ex = await Ex.get(name="Binance")
|
|
142
|
-
async with FileClient(
|
|
142
|
+
async with FileClient(NET_TOKEN) as b:
|
|
143
143
|
cl = ExClient(ex, b)
|
|
144
144
|
await cl.set_pms()
|
|
145
145
|
await cl.set_coins()
|
xync_client/BingX/ex.py
CHANGED
|
@@ -8,7 +8,7 @@ from xync_schema import xtype
|
|
|
8
8
|
|
|
9
9
|
from xync_client.Abc.Ex import BaseExClient
|
|
10
10
|
from xync_client.BingX.base import BaseBingXClient
|
|
11
|
-
from xync_client.loader import
|
|
11
|
+
from xync_client.loader import NET_TOKEN, TORM
|
|
12
12
|
from xync_client.Abc.xtype import MapOfIdsList
|
|
13
13
|
from xync_client.BingX.etype import ad, pm
|
|
14
14
|
from xync_client.Abc.xtype import PmEx
|
|
@@ -93,7 +93,7 @@ class ExClient(BaseExClient, BaseBingXClient):
|
|
|
93
93
|
async def main():
|
|
94
94
|
_ = await init_db(TORM, True)
|
|
95
95
|
bg = await Ex.get(name="BingX").prefetch_related("pm_reps")
|
|
96
|
-
async with FileClient(
|
|
96
|
+
async with FileClient(NET_TOKEN) as b:
|
|
97
97
|
b: FileClient
|
|
98
98
|
cl = ExClient(bg, b)
|
|
99
99
|
_ads = await cl.ads(
|
xync_client/BitGet/ex.py
CHANGED
|
@@ -6,7 +6,7 @@ from xync_schema.models import Ex
|
|
|
6
6
|
from xync_schema import xtype
|
|
7
7
|
|
|
8
8
|
from xync_client.Abc.Ex import BaseExClient
|
|
9
|
-
from xync_client.loader import TORM,
|
|
9
|
+
from xync_client.loader import TORM, NET_TOKEN
|
|
10
10
|
from xync_client.Abc.xtype import PmEx, MapOfIdsList
|
|
11
11
|
from xync_client.BitGet.etype import ad
|
|
12
12
|
|
|
@@ -94,7 +94,7 @@ 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(
|
|
97
|
+
cl = ExClient(bg, FileClient(NET_TOKEN))
|
|
98
98
|
_ads = await cl.ads("USDT", "RUB", False, [])
|
|
99
99
|
await cl.curs()
|
|
100
100
|
await cl.coins()
|
xync_client/Bybit/InAgent.py
CHANGED
|
@@ -19,7 +19,6 @@ from xync_client.Abc.PmAgent import PmAgentClient
|
|
|
19
19
|
from xync_schema import models
|
|
20
20
|
from xync_schema.enums import UserStatus, OrderStatus
|
|
21
21
|
|
|
22
|
-
from xync_client.Pms.Payeer import Client
|
|
23
22
|
from xync_client.Bybit.etype.order import (
|
|
24
23
|
StatusChange,
|
|
25
24
|
CountDown,
|
|
@@ -29,7 +28,7 @@ from xync_client.Bybit.etype.order import (
|
|
|
29
28
|
OrderFull,
|
|
30
29
|
StatusApi,
|
|
31
30
|
)
|
|
32
|
-
from xync_client.loader import
|
|
31
|
+
from xync_client.loader import NET_TOKEN
|
|
33
32
|
from xync_client.Abc.InAgent import BaseInAgentClient
|
|
34
33
|
from xync_client.Bybit.agent import AgentClient
|
|
35
34
|
|
|
@@ -407,17 +406,18 @@ async def main():
|
|
|
407
406
|
person__user__status=UserStatus.ACTIVE,
|
|
408
407
|
person__user__pm_agents__isnull=False,
|
|
409
408
|
)
|
|
410
|
-
.prefetch_related("ex", "agent", "
|
|
409
|
+
.prefetch_related("ex", "agent", "person__user__pm_agents__user", "person__user__pm_agents__pm")
|
|
411
410
|
.first()
|
|
412
411
|
)
|
|
413
412
|
|
|
414
|
-
async with FileClient(
|
|
413
|
+
async with FileClient(NET_TOKEN) as b:
|
|
415
414
|
b: FileClient
|
|
416
415
|
cl: InAgentClient = actor.in_client(b)
|
|
417
416
|
# await cl.agent_client.export_my_ads()
|
|
418
|
-
payeer_cl = Client(actor.person.user.username_id)
|
|
417
|
+
# payeer_cl = Client(actor.person.user.username_id)
|
|
419
418
|
for pma in actor.person.user.pm_agents:
|
|
420
|
-
|
|
419
|
+
pcl = pma.client()
|
|
420
|
+
cl.pmacs[pma.pm_id] = await pcl.start(await async_playwright().start(), False)
|
|
421
421
|
try:
|
|
422
422
|
_ = await cl.start_listen()
|
|
423
423
|
except Exception as e:
|
xync_client/Bybit/agent.py
CHANGED
|
@@ -43,7 +43,7 @@ from xync_client.Bybit.etype.order import (
|
|
|
43
43
|
Message,
|
|
44
44
|
Status,
|
|
45
45
|
)
|
|
46
|
-
from xync_client.loader import TORM,
|
|
46
|
+
from xync_client.loader import TORM, NET_TOKEN
|
|
47
47
|
|
|
48
48
|
|
|
49
49
|
class NoMakerException(Exception):
|
|
@@ -1264,7 +1264,7 @@ async def main():
|
|
|
1264
1264
|
actor = (
|
|
1265
1265
|
await models.Actor.filter(ex_id=4, agent__isnull=False).prefetch_related("ex", "agent", "person__user").first()
|
|
1266
1266
|
)
|
|
1267
|
-
filebot = FileClient(
|
|
1267
|
+
filebot = FileClient(NET_TOKEN)
|
|
1268
1268
|
await filebot.start()
|
|
1269
1269
|
# b.add_handler(MessageHandler(cond_start_handler, command("cond")))
|
|
1270
1270
|
cl: AgentClient = actor.client(filebot)
|
|
@@ -1315,10 +1315,10 @@ async def main():
|
|
|
1315
1315
|
hist |= papi.history(count=1000, append=list(hist.keys())[-1])
|
|
1316
1316
|
cl.hist = hist
|
|
1317
1317
|
|
|
1318
|
-
cl.completed_orders = await models.Order.filter(status=OrderStatus.completed, transfer__isnull=False).values_list(
|
|
1319
|
-
|
|
1320
|
-
)
|
|
1321
|
-
await cl.get_api_orders() # 43, 1741294800000, 1749157199999)
|
|
1318
|
+
# cl.completed_orders = await models.Order.filter(status=OrderStatus.completed, transfer__isnull=False).values_list(
|
|
1319
|
+
# "exid", flat=True
|
|
1320
|
+
# )
|
|
1321
|
+
# await cl.get_api_orders() # 43, 1741294800000, 1749157199999)
|
|
1322
1322
|
|
|
1323
1323
|
races = await models.Race.filter(started=True).prefetch_related(
|
|
1324
1324
|
"road__ad__pair_side__pair__cur",
|
xync_client/Bybit/ex.py
CHANGED
|
@@ -7,7 +7,7 @@ from xync_schema import models, xtype
|
|
|
7
7
|
from xync_schema.models import Ex, Agent
|
|
8
8
|
|
|
9
9
|
from xync_client.Abc.Ex import BaseExClient
|
|
10
|
-
from xync_client.loader import
|
|
10
|
+
from xync_client.loader import NET_TOKEN
|
|
11
11
|
from xync_client.Bybit.etype import ad
|
|
12
12
|
from xync_client.Abc.xtype import PmEx, MapOfIdsList
|
|
13
13
|
from xync_client.loader import TORM
|
|
@@ -114,7 +114,7 @@ class ExClient(BaseExClient): # Bybit client
|
|
|
114
114
|
async def main():
|
|
115
115
|
_ = await init_db(TORM, True)
|
|
116
116
|
ex = await Ex.get(name="Bybit")
|
|
117
|
-
bot: FileClient = FileClient(
|
|
117
|
+
bot: FileClient = FileClient(NET_TOKEN)
|
|
118
118
|
# await bot.start()
|
|
119
119
|
cl = ExClient(ex, bot)
|
|
120
120
|
await cl.set_pms()
|
xync_client/Gate/ex.py
CHANGED
|
@@ -6,7 +6,7 @@ from xync_schema.models import Ex
|
|
|
6
6
|
from xync_schema import xtype
|
|
7
7
|
|
|
8
8
|
from xync_client.Abc.Ex import BaseExClient
|
|
9
|
-
from xync_client.loader import
|
|
9
|
+
from xync_client.loader import NET_TOKEN, TORM
|
|
10
10
|
from xync_client.Abc.xtype import PmEx, MapOfIdsList
|
|
11
11
|
from xync_client.Gate.etype import ad
|
|
12
12
|
|
|
@@ -93,7 +93,7 @@ class ExClient(BaseExClient):
|
|
|
93
93
|
async def main():
|
|
94
94
|
_ = await init_db(TORM, True)
|
|
95
95
|
gt = await Ex.get(name="Gate")
|
|
96
|
-
async with FileClient(
|
|
96
|
+
async with FileClient(NET_TOKEN) as b:
|
|
97
97
|
cl = ExClient(gt, b)
|
|
98
98
|
await cl.set_pairs()
|
|
99
99
|
pms = await cl.set_coins()
|
xync_client/Gmail/__init__.py
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
from playwright.async_api import Page, Playwright
|
|
2
|
-
from pyro_client.client.
|
|
2
|
+
from pyro_client.client.file import FileClient
|
|
3
3
|
from pyro_client.client.user import UserClient
|
|
4
4
|
from xync_schema.models import User, Gmail
|
|
5
5
|
|
|
6
|
-
from xync_client.loader import
|
|
6
|
+
from xync_client.loader import NET_TOKEN
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
class GmClient:
|
|
@@ -83,8 +83,8 @@ class GmClient:
|
|
|
83
83
|
|
|
84
84
|
async def load_bot(self):
|
|
85
85
|
if not self.bot:
|
|
86
|
-
bot =
|
|
87
|
-
self.bot =
|
|
86
|
+
bot = FileClient(NET_TOKEN)
|
|
87
|
+
self.bot = UserClient(self.uid, bot)
|
|
88
88
|
if not self.bot.is_connected:
|
|
89
89
|
await self.bot.start()
|
|
90
90
|
|
xync_client/Htx/ex.py
CHANGED
|
@@ -11,7 +11,7 @@ from xync_schema.enums import PmType
|
|
|
11
11
|
from xync_client.Abc.Ex import BaseExClient
|
|
12
12
|
from xync_client.Abc.xtype import PmEx, MapOfIdsList
|
|
13
13
|
from xync_client.Htx.etype import pm, Country, ad
|
|
14
|
-
from xync_client.loader import
|
|
14
|
+
from xync_client.loader import NET_TOKEN
|
|
15
15
|
from xync_client.loader import TORM
|
|
16
16
|
|
|
17
17
|
|
|
@@ -156,7 +156,7 @@ class ExClient(BaseExClient):
|
|
|
156
156
|
async def main():
|
|
157
157
|
_ = await init_db(TORM, True)
|
|
158
158
|
ex = await Ex.get(name="Htx")
|
|
159
|
-
async with FileClient(
|
|
159
|
+
async with FileClient(NET_TOKEN) as b:
|
|
160
160
|
b: FileClient
|
|
161
161
|
cl = ExClient(ex, b)
|
|
162
162
|
await cl.set_curs()
|
xync_client/KuCoin/ex.py
CHANGED
|
@@ -2,7 +2,7 @@ from asyncio import run
|
|
|
2
2
|
|
|
3
3
|
from pyro_client.client.file import FileClient
|
|
4
4
|
from x_model import init_db
|
|
5
|
-
from xync_client.loader import TORM,
|
|
5
|
+
from xync_client.loader import TORM, NET_TOKEN
|
|
6
6
|
from xync_schema import models
|
|
7
7
|
from xync_schema import xtype
|
|
8
8
|
|
|
@@ -80,7 +80,7 @@ class ExClient(BaseExClient):
|
|
|
80
80
|
async def main():
|
|
81
81
|
_ = await init_db(TORM, True)
|
|
82
82
|
bg = await models.Ex.get(name="KuCoin")
|
|
83
|
-
async with FileClient(
|
|
83
|
+
async with FileClient(NET_TOKEN) as b:
|
|
84
84
|
cl: ExClient = bg.client(b)
|
|
85
85
|
await cl.set_pms()
|
|
86
86
|
await cl.set_coins()
|
xync_client/Mexc/ex.py
CHANGED
|
@@ -3,7 +3,7 @@ from asyncio import run
|
|
|
3
3
|
from pyro_client.client.file import FileClient
|
|
4
4
|
from x_model import init_db
|
|
5
5
|
import requests
|
|
6
|
-
from xync_client.loader import TORM,
|
|
6
|
+
from xync_client.loader import TORM, NET_TOKEN
|
|
7
7
|
|
|
8
8
|
from xync_client.Abc.Ex import BaseExClient
|
|
9
9
|
from xync_client.Abc.xtype import PmEx, MapOfIdsList
|
|
@@ -90,7 +90,7 @@ class ExClient(BaseExClient):
|
|
|
90
90
|
|
|
91
91
|
async def main():
|
|
92
92
|
_ = await init_db(TORM)
|
|
93
|
-
async with FileClient(
|
|
93
|
+
async with FileClient(NET_TOKEN) as b:
|
|
94
94
|
ex = await Ex.get(name="Mexc")
|
|
95
95
|
cl = ex.client(b)
|
|
96
96
|
# await ex.curexs.filter(cur__ticker="EUR")
|
xync_client/Okx/ex.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from asyncio import run
|
|
2
2
|
|
|
3
3
|
from pyro_client.client.file import FileClient
|
|
4
|
-
from pyro_client.loader import
|
|
4
|
+
from pyro_client.loader import NET_TOKEN
|
|
5
5
|
from x_model import init_db
|
|
6
6
|
|
|
7
7
|
from xync_client.Abc.Exception import NoPairOnEx
|
|
@@ -102,7 +102,7 @@ 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(
|
|
105
|
+
cl = ExClient(bg, FileClient(NET_TOKEN))
|
|
106
106
|
await cl.ads("USDT", "EUR", True)
|
|
107
107
|
# curs = await cl.curs()
|
|
108
108
|
# coins = await cl.coins()
|
|
@@ -19,7 +19,7 @@ from cryptography.hazmat.primitives.ciphers.modes import CBC
|
|
|
19
19
|
from payeer_api import PayeerAPI
|
|
20
20
|
from playwright.async_api import async_playwright, Playwright, Error
|
|
21
21
|
from playwright._impl._errors import TimeoutError
|
|
22
|
-
from xync_schema.models import TopUp, TopUpAble
|
|
22
|
+
from xync_schema.models import TopUp, TopUpAble, PmAgent
|
|
23
23
|
|
|
24
24
|
from xync_client.loader import TORM
|
|
25
25
|
|
|
@@ -65,11 +65,10 @@ class Client(PmAgentClient):
|
|
|
65
65
|
pages: type(StrEnum) = Pages
|
|
66
66
|
api: PayeerAPI
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
def __init__(self, agent: PmAgent):
|
|
69
|
+
super().__init__(agent)
|
|
70
70
|
if api_id := self.agent.auth.get("api_id"):
|
|
71
71
|
self.api = PayeerAPI(self.agent.auth["email"], api_id, self.agent.auth["api_sec"])
|
|
72
|
-
return self
|
|
73
72
|
|
|
74
73
|
async def _login(self):
|
|
75
74
|
await login(self.agent)
|
|
@@ -121,6 +120,17 @@ class Client(PmAgentClient):
|
|
|
121
120
|
url = "https://payeer.com/merchant/?" + urlencode(params)
|
|
122
121
|
return url, None
|
|
123
122
|
|
|
123
|
+
def get_topup(self, tid: str) -> dict:
|
|
124
|
+
hi = self.api.get_history_info(tid)
|
|
125
|
+
ti = self.api.shop_order_info(hi["params"]["SHOP_ID"], hi["params"]["ORDER_ID"])["info"]
|
|
126
|
+
return ti["status"] == "execute" and {
|
|
127
|
+
"pmid": ti["id"],
|
|
128
|
+
"from_acc": hi["params"]["ACCOUNT_NUMBER"],
|
|
129
|
+
"oid": hi["params"]["ORDER_ID"],
|
|
130
|
+
"amount": int(float(ti["sumOut"]) * 100),
|
|
131
|
+
"ts": datetime.strptime(ti["dateCreate"], "%d.%m.%Y %H:%M:%S") - timedelta(hours=3),
|
|
132
|
+
}
|
|
133
|
+
|
|
124
134
|
async def send(self, dest: str, amount: int, cur: str) -> tuple[int, bytes, int] | int:
|
|
125
135
|
self.last_active = datetime.now()
|
|
126
136
|
page = self.page
|
|
@@ -204,8 +214,13 @@ async def main(uid: int):
|
|
|
204
214
|
from x_model import init_db
|
|
205
215
|
|
|
206
216
|
_ = await init_db(TORM, True)
|
|
217
|
+
agent = await PmAgent.get_or_none(pm__norm="payeer", user__username_id=uid).prefetch_related(
|
|
218
|
+
"user__username__session", "pm"
|
|
219
|
+
)
|
|
220
|
+
if not agent:
|
|
221
|
+
raise Exception(f"No active user #{uid} with agent for volet!")
|
|
222
|
+
pyr = agent.client()
|
|
207
223
|
playwright: Playwright = await async_playwright().start()
|
|
208
|
-
pyr = Client(uid)
|
|
209
224
|
try:
|
|
210
225
|
dest, amount, cur = "P79619335", 4, "RUB"
|
|
211
226
|
ta = await TopUpAble.get(pm__norm="payeer")
|
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import re
|
|
3
3
|
from asyncio import run, ensure_future
|
|
4
|
+
from decimal import Decimal
|
|
4
5
|
from enum import StrEnum
|
|
5
|
-
from
|
|
6
|
+
from hashlib import sha256
|
|
6
7
|
|
|
7
8
|
from playwright.async_api import async_playwright, Page, Locator, Position, Playwright # , FloatRect
|
|
8
9
|
from pyotp import TOTP
|
|
9
10
|
|
|
10
11
|
# noinspection PyProtectedMember
|
|
11
12
|
from playwright._impl._errors import TimeoutError
|
|
12
|
-
from pyro_client.client.bot import BotClient
|
|
13
13
|
from pyro_client.client.user import UserClient
|
|
14
|
+
from pyrogram.handlers import MessageHandler
|
|
14
15
|
from xync_schema.enums import UserStatus
|
|
15
|
-
from xync_schema.models import Cur, User, PmAgent, Cred, PmCur, Fiat
|
|
16
|
+
from xync_schema.models import Cur, User, PmAgent, Cred, PmCur, Fiat, TopUp
|
|
16
17
|
|
|
18
|
+
from xync_client.Abc.PmAgent import PmAgentClient
|
|
17
19
|
from xync_client.Gmail import GmClient
|
|
18
20
|
from xync_client.Pms.Volet.api import APIClient
|
|
19
|
-
from xync_client.loader import TOKEN
|
|
20
21
|
|
|
21
22
|
|
|
22
23
|
class CaptchaException(Exception): ...
|
|
@@ -31,14 +32,6 @@ class NoCodeException(Exception): ...
|
|
|
31
32
|
class NoMailException(Exception): ...
|
|
32
33
|
|
|
33
34
|
|
|
34
|
-
class Pages(StrEnum):
|
|
35
|
-
base_url = "https://account.volet.com/"
|
|
36
|
-
LOGIN = base_url + "login"
|
|
37
|
-
OTP_LOGIN = base_url + "login/otp"
|
|
38
|
-
HOME = base_url + "pages/transaction"
|
|
39
|
-
SEND = base_url + "pages/transfer/wallet"
|
|
40
|
-
|
|
41
|
-
|
|
42
35
|
def parse_transaction_info(text: str) -> dict[str, str] | None:
|
|
43
36
|
# Поиск ID транзакции
|
|
44
37
|
transaction_id_match = re.search(r"Transaction ID:\s*([\w-]+)", text)
|
|
@@ -57,65 +50,101 @@ def parse_transaction_info(text: str) -> dict[str, str] | None:
|
|
|
57
50
|
return None
|
|
58
51
|
|
|
59
52
|
|
|
60
|
-
class Client:
|
|
53
|
+
class Client(PmAgentClient):
|
|
54
|
+
class Pages(StrEnum):
|
|
55
|
+
base = "https://account.volet.com/"
|
|
56
|
+
LOGIN = base + "login"
|
|
57
|
+
OTP_LOGIN = base + "login/otp"
|
|
58
|
+
# HOME = base + "pages/transaction"
|
|
59
|
+
SEND = base + "pages/transfer/wallet"
|
|
60
|
+
|
|
61
|
+
async def check_in(self, amount: int | Decimal | float, cur: str, tid: str | int = None) -> float | None:
|
|
62
|
+
pass
|
|
63
|
+
|
|
64
|
+
async def proof(self) -> bytes:
|
|
65
|
+
pass
|
|
66
|
+
|
|
61
67
|
uid: int
|
|
62
68
|
agent: PmAgent
|
|
63
69
|
bot: UserClient
|
|
64
70
|
api: APIClient
|
|
65
71
|
page: Page
|
|
66
72
|
gmail: GmClient
|
|
73
|
+
norm: str = "payeer"
|
|
74
|
+
pages: type(StrEnum) = Pages
|
|
75
|
+
|
|
76
|
+
def __init__(self, agent: PmAgent):
|
|
77
|
+
super().__init__(agent)
|
|
78
|
+
self.gmail = GmClient(self.uid)
|
|
79
|
+
self.api = APIClient(self.agent.auth["api"], self.agent.auth["password"], self.agent.auth["login"])
|
|
67
80
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
81
|
+
@staticmethod
|
|
82
|
+
def form_redirect(topup: TopUp) -> tuple[str, dict | None]:
|
|
83
|
+
ac_account_email = topup.topupable.auth["ac_account_email"]
|
|
84
|
+
ac_sci_name = topup.topupable.auth["ac_sci_name"]
|
|
85
|
+
ac_order_id = str(topup.id)
|
|
86
|
+
ac_amount = "{0:.2f}".format(topup.amount * 0.01)
|
|
87
|
+
ac_currency = topup.cur.ticker
|
|
88
|
+
ac_comments = "XyncPay top up"
|
|
89
|
+
secret = topup.topupable.auth["secret"]
|
|
90
|
+
data = [ac_account_email, ac_sci_name, ac_amount, ac_currency, secret, ac_order_id]
|
|
91
|
+
|
|
92
|
+
ac_sign = sha256(":".join(data).encode()).hexdigest()
|
|
93
|
+
|
|
94
|
+
params = {
|
|
95
|
+
"ac_account_email": ac_account_email,
|
|
96
|
+
"ac_sci_name": ac_sci_name,
|
|
97
|
+
"ac_amount": ac_amount,
|
|
98
|
+
"ac_currency": ac_currency,
|
|
99
|
+
"ac_order_id": ac_order_id,
|
|
100
|
+
"ac_sign": ac_sign,
|
|
101
|
+
"ac_comments": ac_comments,
|
|
102
|
+
}
|
|
103
|
+
url = "https://account.volet.com/sci/"
|
|
104
|
+
return url, params
|
|
105
|
+
|
|
106
|
+
def get_topup(self, tid: str) -> dict:
|
|
107
|
+
t = self.api.check_by_id(tid)
|
|
108
|
+
return t["status"] == "COMPLETED" and {
|
|
109
|
+
"pmid": t["id"],
|
|
110
|
+
"from_acc": t["walletSrcId"],
|
|
111
|
+
"oid": t["orderId"],
|
|
112
|
+
"amount": int(t["amount"] * 100),
|
|
113
|
+
"ts": t["updatedTime"],
|
|
114
|
+
}
|
|
71
115
|
|
|
72
116
|
async def start(self, pw: Playwright, headed: bool = False):
|
|
73
|
-
self.
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
context = await browser.new_context(storage_state=self.agent.state, locale="en")
|
|
84
|
-
self.page = await context.new_page()
|
|
85
|
-
ensure_future(self.gmail.start(pw, headed))
|
|
86
|
-
await self.go(Pages.HOME)
|
|
87
|
-
if self.page.url == Pages.LOGIN:
|
|
88
|
-
await self.login()
|
|
89
|
-
# elif self.page.url == Pages.OTP_LOGIN:
|
|
90
|
-
# await self.login_otp()
|
|
91
|
-
if self.page.url != Pages.HOME:
|
|
92
|
-
await self.bot.receive("Not logged in!", photo=await self.page.screenshot())
|
|
93
|
-
raise Exception(f"User {self.agent.user_id} has not logged in")
|
|
94
|
-
|
|
95
|
-
async def wait_for_code(self, typ: Literal["login", "send"]) -> str:
|
|
96
|
-
code = await self.bot.wait_from(243630567, f"otp_{typ}")
|
|
97
|
-
return code[-6:]
|
|
98
|
-
|
|
99
|
-
async def login(self):
|
|
100
|
-
await self.page.locator("input#j_username").fill("mixartemev@gmail.com")
|
|
117
|
+
ensure_future(self.gmail.start(pw, True))
|
|
118
|
+
return await super().start(pw, True, True)
|
|
119
|
+
|
|
120
|
+
async def wait_for_code(self, uid: int, topic: str, hg: tuple[MessageHandler, int]) -> str:
|
|
121
|
+
code = await self.bot.wait_from(uid, topic, hg)
|
|
122
|
+
return code and code[-6:]
|
|
123
|
+
|
|
124
|
+
async def _login(self):
|
|
125
|
+
ll = self.page.locator("input#j_username")
|
|
126
|
+
await ll.fill("mixartemev@gmail.com")
|
|
101
127
|
await self.page.locator("input#j_password").fill("mixfixX98")
|
|
128
|
+
await self.page.wait_for_timeout(200)
|
|
129
|
+
await ll.click()
|
|
130
|
+
volet_bot_id, topic = 243630567, "otp_login"
|
|
102
131
|
await self.page.locator("input#loginToAdvcashButton", has_text="log in").hover()
|
|
132
|
+
hg = self.bot.subscribe_for(volet_bot_id, topic) # 243630567 - is volet bot
|
|
103
133
|
await self.page.locator("input#loginToAdvcashButton:not([disabled])", has_text="log in").click()
|
|
104
|
-
await self.page.wait_for_url(
|
|
105
|
-
await self.
|
|
106
|
-
|
|
107
|
-
async def login_otp(self):
|
|
108
|
-
if not (code := await self.wait_for_code("login")):
|
|
134
|
+
await self.page.wait_for_url(self.pages.OTP_LOGIN)
|
|
135
|
+
if not (code := await self.wait_for_code(volet_bot_id, topic, hg)):
|
|
109
136
|
await self.bot.receive("no login code", photo=await self.page.screenshot())
|
|
110
137
|
raise NoCodeException(self.agent.user_id)
|
|
111
138
|
await self.page.locator("input#otpId").fill(code)
|
|
112
139
|
await self.page.click("input#checkOtpButton")
|
|
113
|
-
await self.page.wait_for_url(
|
|
140
|
+
await self.page.wait_for_url(self.pages.SEND)
|
|
114
141
|
|
|
115
|
-
async def send(self, dest: str, amount: float):
|
|
116
|
-
|
|
142
|
+
async def send(self, dest: str, amount: float, cur: str) -> tuple[int, bytes, float]:
|
|
143
|
+
curs_map = {"RUB": "Ruble"}
|
|
144
|
+
|
|
145
|
+
await self.go(self.pages.SEND)
|
|
117
146
|
await self.page.click("[class=combobox-account]")
|
|
118
|
-
await self.page.click('[class=rf-ulst-itm] b:has-text("
|
|
147
|
+
await self.page.click(f'[class=rf-ulst-itm] b:has-text("{curs_map[cur]}") ")')
|
|
119
148
|
await self.page.wait_for_timeout(200)
|
|
120
149
|
await self.page.fill("#srcAmount", str(amount))
|
|
121
150
|
await self.page.fill("#destWalletId", dest)
|
|
@@ -135,7 +164,7 @@ class Client:
|
|
|
135
164
|
raise OtpNotSetException(self.agent.user_id)
|
|
136
165
|
await self.page.fill("#securityValue", code)
|
|
137
166
|
await self.page.locator("input[type=submit]", has_text="confirm").click()
|
|
138
|
-
await self.page.wait_for_url(
|
|
167
|
+
await self.page.wait_for_url(self.pages.SEND)
|
|
139
168
|
await self.page.get_by_role("heading").click()
|
|
140
169
|
slip = await self.page.screenshot(clip={"x": 440, "y": 205, "width": 420, "height": 360})
|
|
141
170
|
await self.bot.receive(f"{amount} to {dest} sent", photo=slip)
|
|
@@ -223,7 +252,13 @@ async def _test():
|
|
|
223
252
|
logging.basicConfig(level=logging.DEBUG)
|
|
224
253
|
uid = 193017646
|
|
225
254
|
playwright: Playwright = await async_playwright().start()
|
|
226
|
-
|
|
255
|
+
agent = await PmAgent.get_or_none(pm__norm="volet", user__username_id=uid).prefetch_related(
|
|
256
|
+
"user__username__session"
|
|
257
|
+
)
|
|
258
|
+
if not agent:
|
|
259
|
+
raise Exception(f"No active user #{uid} with agent for volet!")
|
|
260
|
+
|
|
261
|
+
va = agent.client()
|
|
227
262
|
try:
|
|
228
263
|
await va.start(playwright)
|
|
229
264
|
await va.send("alena.artemeva25@gmail.com", 7.98)
|
xync_client/Pms/Volet/api.py
CHANGED
|
@@ -9,6 +9,8 @@ from zeep.client import Client
|
|
|
9
9
|
|
|
10
10
|
from xync_client.loader import TORM
|
|
11
11
|
|
|
12
|
+
period = 5
|
|
13
|
+
|
|
12
14
|
|
|
13
15
|
class APIClient:
|
|
14
16
|
wsdl = "https://wallet.advcash.com/wsm/merchantWebService?wsdl"
|
|
@@ -83,25 +85,26 @@ class APIClient:
|
|
|
83
85
|
params.update(walletId=to)
|
|
84
86
|
return self.make_request("sendMoney", params)
|
|
85
87
|
|
|
88
|
+
async def check_by_amount(self, amount: decimal, cur: str = "RUB", timeout: int = 5 * 60, past: int = 0):
|
|
89
|
+
hist: list = self.make_request("history", {"transactionDirection": "INCOMING", "count": 3, "from": 0})
|
|
90
|
+
if int(hist[0].amount) == int(amount):
|
|
91
|
+
return hist[0]
|
|
92
|
+
await sleep(period)
|
|
93
|
+
past += period
|
|
94
|
+
if past < timeout:
|
|
95
|
+
return await self.check_by_amount(amount, cur, timeout, past)
|
|
96
|
+
return False
|
|
86
97
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
async def check_payment(cl: APIClient, amount: decimal, cur: str = "RUB", timeout: int = 5 * 60, past: int = 0):
|
|
91
|
-
hist: list = cl.make_request("history", {"transactionDirection": "INCOMING", "count": 3, "from": 0})
|
|
92
|
-
if int(hist[0].amount) == int(amount):
|
|
93
|
-
return hist[0]
|
|
94
|
-
await sleep(period)
|
|
95
|
-
past += period
|
|
96
|
-
if past < timeout:
|
|
97
|
-
return await check_payment(cl, amount, cur, timeout, past)
|
|
98
|
-
return False
|
|
98
|
+
def check_by_id(self, tid: str):
|
|
99
|
+
t: dict = self.make_request("findTransaction", tid)
|
|
100
|
+
return t
|
|
99
101
|
|
|
100
102
|
|
|
101
103
|
async def main():
|
|
102
104
|
_ = await init_db(TORM, True)
|
|
103
105
|
cl = APIClient("main", "mixfixX98", "mixartemev@gmail.com")
|
|
104
|
-
b = cl.get_balances()
|
|
106
|
+
# b = cl.get_balances()
|
|
107
|
+
b = cl.check_by_id("ce9a52be-8085-431e-8e6e-b0be427c6c55")
|
|
105
108
|
cl.make_request("history", {"transactionDirection": "INCOMING", "count": 100, "from": 0})
|
|
106
109
|
print(b)
|
|
107
110
|
|
xync_client/TgWallet/ex.py
CHANGED
|
@@ -16,7 +16,7 @@ from xync_client.TgWallet.pyd import (
|
|
|
16
16
|
_PmsTrait,
|
|
17
17
|
_BaseAd,
|
|
18
18
|
)
|
|
19
|
-
from xync_client.loader import
|
|
19
|
+
from xync_client.loader import NET_TOKEN, TORM
|
|
20
20
|
from xync_client.Abc.Ex import BaseExClient
|
|
21
21
|
from xync_client.Abc.xtype import MapOfIdsList
|
|
22
22
|
from xync_client.TgWallet.auth import AuthClient
|
|
@@ -156,7 +156,7 @@ class ExClient(BaseExClient, AuthClient):
|
|
|
156
156
|
async def _test():
|
|
157
157
|
await init_db(TORM)
|
|
158
158
|
tgex = await models.Ex.get(name="TgWallet")
|
|
159
|
-
async with FileClient(
|
|
159
|
+
async with FileClient(NET_TOKEN) as b:
|
|
160
160
|
cl: ExClient = tgex.client(b)
|
|
161
161
|
|
|
162
162
|
await cl.set_coins()
|
xync_client/loader.py
CHANGED
|
@@ -4,7 +4,7 @@ from xync_schema import models
|
|
|
4
4
|
|
|
5
5
|
load_dotenv()
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
NET_TOKEN = env("NET_TOKEN")
|
|
8
8
|
PG_DSN = f"postgres://{env('POSTGRES_USER')}:{env('POSTGRES_PASSWORD')}@{env('POSTGRES_HOST', 'xyncdbs')}:{env('POSTGRES_PORT', 5432)}/{env('POSTGRES_DB', env('POSTGRES_USER'))}"
|
|
9
9
|
TORM = {
|
|
10
10
|
"connections": {"default": PG_DSN},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
xync_client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
2
|
xync_client/details.py,sha256=21itVPCgAtaYRR1H9J9oYudj95gafcFjExUN6QL17OI,1330
|
|
3
|
-
xync_client/loader.py,sha256=
|
|
3
|
+
xync_client/loader.py,sha256=zhslCMgtgp-xINPG4qQwhI1ee5Ap1vuoC8oK7GyhyMw,571
|
|
4
4
|
xync_client/pm_unifier.py,sha256=T2Xh-tvcu114P2YBI6RK_XDiaIhyq6ABMrXDuXPlx7A,6541
|
|
5
5
|
xync_client/Abc/Agent.py,sha256=OJaJ1RIMDYAS4xeefeXxVIVI0EKnMczQtrO35MLzqr4,5390
|
|
6
6
|
xync_client/Abc/Asset.py,sha256=hlgyFaU9byr2N2r8Heh-_ICx49SKuKxfRTUA4yQWmEw,454
|
|
@@ -10,12 +10,12 @@ xync_client/Abc/Ex.py,sha256=n41-XCjoIV-KpC_lK3jO049tQKbFmE0eDU3SDlgZTws,12986
|
|
|
10
10
|
xync_client/Abc/Exception.py,sha256=Sts7RpP370NBdjaH_cyXDdHtjge8zXNUGWCrKw49Zyk,482
|
|
11
11
|
xync_client/Abc/InAgent.py,sha256=svKGATUM0c9YIDDEVLc-NxpUNWqZoVr5PjxoxK64RKs,650
|
|
12
12
|
xync_client/Abc/Order.py,sha256=7-FGIJu5z9aYi0A_eJV4F-cp_6Mz_izNpefexDQZvHw,2428
|
|
13
|
-
xync_client/Abc/PmAgent.py,sha256=
|
|
13
|
+
xync_client/Abc/PmAgent.py,sha256=wS1ZQs-hcC8ICDLcc9EfyNBKrM_ZDpJolAg-l_5ro-8,4094
|
|
14
14
|
xync_client/Abc/xtype.py,sha256=o1JEzWmEXCPddtlqWZ6HRTZTKX6SAnvsztbASj21zOQ,2584
|
|
15
15
|
xync_client/Binance/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
16
|
xync_client/Binance/binance_async.py,sha256=LP2DZaHwkfsp_4Tjvetb-1ntjQtJfODF0OgZpoPx4KU,2688
|
|
17
17
|
xync_client/Binance/earn_api.py,sha256=hvk0MaVTLszIglQXVhbUjGcaHfbF9Ul7FFXmy94U2so,4411
|
|
18
|
-
xync_client/Binance/ex.py,sha256=
|
|
18
|
+
xync_client/Binance/ex.py,sha256=m9KvSS-FjPe0BH-npkoqaIZ2WyNUsddxEgrbUpFzGsw,5368
|
|
19
19
|
xync_client/Binance/exceptions.py,sha256=An-TK5_SKmGXMdGIs_K59u-0iBpqVgOPfkJqrEELcGQ,847
|
|
20
20
|
xync_client/Binance/sapi.py,sha256=_2eXFtcFIerjvyyyqqSnwZxCqQPiMUdqAXJj7hyOQDQ,9584
|
|
21
21
|
xync_client/Binance/web_c2c.py,sha256=WZ2BVq26ZcdOEcRvRsEKxvwe6x-XQ51b-nEFFAaRNOk,9249
|
|
@@ -24,19 +24,19 @@ xync_client/Binance/etype/pm.py,sha256=rorFX4HDjqDQwJ7Kqx41KOO1JJAi4yWbe4pkGAMmR
|
|
|
24
24
|
xync_client/BingX/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
25
25
|
xync_client/BingX/agent.py,sha256=F-QvzPCwwSvgFe5DafscT-puISbqCw23iTnvbfXlV-k,4318
|
|
26
26
|
xync_client/BingX/base.py,sha256=Zx2H21iZrF94cMOz3imz6djMMNzAaB_iJSzDSP6beXo,739
|
|
27
|
-
xync_client/BingX/ex.py,sha256=
|
|
27
|
+
xync_client/BingX/ex.py,sha256=QzHaEEB_mnOSdMSfvg3Odd9oHortj6wZeIC7fPPFFf4,4275
|
|
28
28
|
xync_client/BingX/req.mjs,sha256=JvLv1KBKsiIVVvRmAFC0RqpsxkBcwqbjk2_PGCubnX0,304
|
|
29
29
|
xync_client/BingX/sign.js,sha256=uTfbKV0Y7bKapOs1AtlT1FmduelwvH2pGqIxCK2z5NY,100086
|
|
30
30
|
xync_client/BingX/etype/ad.py,sha256=aUsZcvhk418d73SaOQlZYYYikHN1zFVYj49d5Xzb6qc,1360
|
|
31
31
|
xync_client/BingX/etype/pm.py,sha256=hKaUHwkZC2ioBv_mNfIIutDkNNhO_ljhsCtSy2uwLAY,128
|
|
32
32
|
xync_client/BitGet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
33
|
xync_client/BitGet/agent.py,sha256=YVs3bDY0OcEJGU7m2A8chzO6PFhWDnQQrA-E6MVkBBg,3030
|
|
34
|
-
xync_client/BitGet/ex.py,sha256=
|
|
34
|
+
xync_client/BitGet/ex.py,sha256=uEvvXuLaJv8o8BFi0bMA3XyBuTfVDWagAjLOHZl-xlE,3765
|
|
35
35
|
xync_client/BitGet/etype/ad.py,sha256=fysSW47wGYjSOPUqY864z857AJz4gjN-nOkI1Jxd27U,1838
|
|
36
36
|
xync_client/BitPapa/ex.py,sha256=U-RRB_RSOtErfRgxOZYWegZ_td_uZO37YKo3Jxchf_w,912
|
|
37
|
-
xync_client/Bybit/InAgent.py,sha256=
|
|
38
|
-
xync_client/Bybit/agent.py,sha256=
|
|
39
|
-
xync_client/Bybit/ex.py,sha256=
|
|
37
|
+
xync_client/Bybit/InAgent.py,sha256=QQTRWcZXhNO-AZi9wfCAA-x24FIRL00_f4T5xCVgC10,25324
|
|
38
|
+
xync_client/Bybit/agent.py,sha256=fz76f-6g81TnFoFqWX0AqMaKvnYzgYKfhpkckIOM0cM,61769
|
|
39
|
+
xync_client/Bybit/ex.py,sha256=3oARvReBoDs90FzQY31-L-q_YU-TIRbvWB7z4lwESsA,4715
|
|
40
40
|
xync_client/Bybit/order.py,sha256=H4UIb8hxFGnw1hZuSbr0yZ4qeaCOIZOMc6jEst0ycBs,1713
|
|
41
41
|
xync_client/Bybit/web_earn.py,sha256=qjqS10xlFc8r40IhDdPZ0LxA2dFEGbvBGXdsrUUJCMo,3019
|
|
42
42
|
xync_client/Bybit/web_p2p.py,sha256=sAXzK03t6jwDnz4rrvP2IzI0KxfKa7C_5GuzH1HwLuA,11768
|
|
@@ -44,26 +44,26 @@ xync_client/Bybit/ws.py,sha256=OQjZHo_MiAH1dlOs3c-aUZBKyqToNTmH560udh6RYDE,1431
|
|
|
44
44
|
xync_client/Bybit/etype/ad.py,sha256=HJOHi9KrbLQMpwEyd4oA8436QTNRqrd2HWFF-JNZGDo,8066
|
|
45
45
|
xync_client/Bybit/etype/cred.py,sha256=dgFExLB4e5Wf6SqfU9SOdeooHQa84DRbTGm_OJhNw_o,1354
|
|
46
46
|
xync_client/Bybit/etype/order.py,sha256=rPXw9eHJW3afVPQDRiooUkHfQhmqJ5fTdZ4vKdO6uHQ,8273
|
|
47
|
-
xync_client/Gate/ex.py,sha256=
|
|
47
|
+
xync_client/Gate/ex.py,sha256=QbhB3u7TWnvVGD-AknB2nay6KZjEXQ-1JT9UacX4sWI,3735
|
|
48
48
|
xync_client/Gate/premarket.py,sha256=IW-CgkmNJePJR2j_NRfULNKTePMX35XlhldqdiO76zY,2138
|
|
49
49
|
xync_client/Gate/etype/ad.py,sha256=-EwtFcOWWvtE6UjaOdsuXWDTCVjAIRK0kSEsqPP4Yls,1296
|
|
50
|
-
xync_client/Gmail/__init__.py,sha256=
|
|
50
|
+
xync_client/Gmail/__init__.py,sha256=98pRNlyx7e49QJMxzYPcbCROv2m2LGyGkSCGyrh0dow,4646
|
|
51
51
|
xync_client/Htx/agent.py,sha256=rOURgTeY9TsA-IzT78l5-Ze91i0x1PY683mrX38MSgs,7356
|
|
52
52
|
xync_client/Htx/earn.py,sha256=jL6eRwytZEMRom_3bFm1DYthi_GFg-E1Mm3ZDXENHSg,2386
|
|
53
|
-
xync_client/Htx/ex.py,sha256=
|
|
53
|
+
xync_client/Htx/ex.py,sha256=GuWK5lA_MvtSd-0DhKf2MAstKvZMHhc3BIiZSgdwZv4,6074
|
|
54
54
|
xync_client/Htx/etype/__init__.py,sha256=sZIhFOxj2dRQRmMe86-y9vlzOGAPo1qoOi6u1qVxWr0,123
|
|
55
55
|
xync_client/Htx/etype/ad.py,sha256=bShCGHRAvFJxt2io5rjQrEFMB0zZzkTww7sBxIcmLVM,2000
|
|
56
56
|
xync_client/Htx/etype/cred.py,sha256=sAOQTsk7BA8zBWUkkwM6vIQcq1LcSK5NLYGrkTdtkQ8,1129
|
|
57
57
|
xync_client/Htx/etype/pm.py,sha256=ILCP9reFRkfuzmtsJDYomJ3WBTU4s_KE-69JksTxwMk,375
|
|
58
58
|
xync_client/Htx/etype/test.py,sha256=uomFicPE1OoA3WXnXOxhsTtGJEpVCQ0CId9D0NI6vto,893
|
|
59
|
-
xync_client/KuCoin/ex.py,sha256=
|
|
59
|
+
xync_client/KuCoin/ex.py,sha256=w-6-aedlC1mYf8LShMv6pOrQzqMR9E6yIyXGUHQP888,3237
|
|
60
60
|
xync_client/KuCoin/web.py,sha256=--OHS0Z29xjfNUjdTL7K0EDmU4dwej95OJ8Sv4PsxLI,920
|
|
61
61
|
xync_client/KuCoin/etype/ad.py,sha256=MTx90Qo2xFKvfgIr4_qMowjwO23HVpFCD6J7INNFDuQ,1223
|
|
62
62
|
xync_client/KuCoin/etype/pm.py,sha256=S50S5fyY5YeWlcPwO66o-GsPcdqgoeXuxvmEIy6Zqvs,130
|
|
63
|
-
xync_client/Mexc/ex.py,sha256=
|
|
63
|
+
xync_client/Mexc/ex.py,sha256=jpITGa2GTeYayMVStQOomBW-P0YQoXjKExKZi_kS-2A,4295
|
|
64
64
|
xync_client/Mexc/etype/ad.py,sha256=GUgvylx_z64CXNcw0YejUQJHg9F59eRo5v0zU7DRrAM,1434
|
|
65
65
|
xync_client/Mexc/etype/pm.py,sha256=m5kCoMx9IEKUPB-z7YwwymQhASkv2npC4-Z_ePYeeRY,453
|
|
66
|
-
xync_client/Okx/ex.py,sha256=
|
|
66
|
+
xync_client/Okx/ex.py,sha256=WG1NSh7wFMNePV0eXDePWELUBD1ksxE_-Q87QaDXLvE,4542
|
|
67
67
|
xync_client/Okx/etype/ad.py,sha256=rTWMMmDwJK9chBByyihCZcgE5P6c5ti2yR1RbUtev3A,3773
|
|
68
68
|
xync_client/Okx/etype/pm.py,sha256=MaxeyltowP3ESdOjec2HvSfMBwV_mC6w56Xbw-puadc,251
|
|
69
69
|
xync_client/Pms/.gitignore,sha256=uGduC1_B8Wc0RiBzBS1YsrLPClFG2e42r1At9taidMI,6
|
|
@@ -72,14 +72,14 @@ xync_client/Pms/Alfa/state.json,sha256=MKE6vl-JsJO9PNCVqoQgBgYZTgYkHCas7USwl8QFt
|
|
|
72
72
|
xync_client/Pms/MTS/__init__.py,sha256=P_E7W46IZEk8RsEgl7H1xV3JplMT5l9vYQYTYyNbyQ8,2101
|
|
73
73
|
xync_client/Pms/Ozon/__init__.py,sha256=EvQZDSPv0fOT2hNCTP44nXHOIEQvP5bQf_7HVLiZc2I,4123
|
|
74
74
|
xync_client/Pms/Payeer/.gitignore,sha256=sWORdRp8ROppV2CsMEDJ3M_SokrNWCf8b1hlaNs64hg,12
|
|
75
|
-
xync_client/Pms/Payeer/__init__.py,sha256=
|
|
75
|
+
xync_client/Pms/Payeer/__init__.py,sha256=xN3L-IURWJ6oYXq85qu34u0OZEQOXkshgeEuMG29qg8,9584
|
|
76
76
|
xync_client/Pms/Payeer/api.py,sha256=bb8qrlPYyWafel1VR-2nate6xBeRZAVciFJblHygfAs,549
|
|
77
77
|
xync_client/Pms/Payeer/login.py,sha256=W5FAA0reW5x2hSh8sBIWmR38VcYhwvrn1R64IAtWHVw,2921
|
|
78
78
|
xync_client/Pms/Sber/__init__.py,sha256=dxQfd9ZPhFTc_C4xrwaxrV6p0SijDCLNzBeUv3oQG38,4926
|
|
79
79
|
xync_client/Pms/Sber/utils.py,sha256=gIeJspwvoBbOBt-fjxwW4WDHPoL2Evs8LVufsjrFOfo,1870
|
|
80
80
|
xync_client/Pms/Tinkoff/__init__.py,sha256=ZyLvBEUn-vh-85oPUUDS586AHgvx3c-mkQE3yBQtbw8,5580
|
|
81
|
-
xync_client/Pms/Volet/__init__.py,sha256=
|
|
82
|
-
xync_client/Pms/Volet/api.py,sha256=
|
|
81
|
+
xync_client/Pms/Volet/__init__.py,sha256=h1bRO4x58-_-Yf9g3noYow0DDu8P4NFLwx83FnDZptM,10719
|
|
82
|
+
xync_client/Pms/Volet/api.py,sha256=okqppqT7M5E6sswu-xz3L4Y9-ngefBPbFtywRi6A7Xo,3595
|
|
83
83
|
xync_client/Pms/Volet/pl.py,sha256=l7lvUrpjFoObXPHaseOIAcSbkNqJdpy6OLDutxYJH3U,2451
|
|
84
84
|
xync_client/Pms/Volet/_todo_req/req.mjs,sha256=ut3Jw37rL5lY7SskjZ9f1l0VE33tuP-PZEYUTcJMc2I,817
|
|
85
85
|
xync_client/Pms/Volet/_todo_req/req.py,sha256=mKvdPrb-lkQ98Ws92_oBKu5yqyU8Krxy9XwuIhdsBao,1570
|
|
@@ -89,13 +89,13 @@ xync_client/Pms/Yandex/__init__.py,sha256=2Fu77vDlnGnhesu-OTSsn8lYsnMGO2eDBxWW57
|
|
|
89
89
|
xync_client/TgWallet/agent.py,sha256=2fCB8ea8kEAbMqqcflpZUoHTK6_dQZrxmZbrhXci7nk,22066
|
|
90
90
|
xync_client/TgWallet/asset.py,sha256=pNauwSE7tp5mKQVxH3W-B1yyEV6ZCefttVElOhyqJ1c,433
|
|
91
91
|
xync_client/TgWallet/auth.py,sha256=pfoEiOW3bg8oJqD4hFBlSNnxTTVTzr305YrAREqqfFY,1284
|
|
92
|
-
xync_client/TgWallet/ex.py,sha256=
|
|
92
|
+
xync_client/TgWallet/ex.py,sha256=N6z9Ht_wZXRR_6qSj8HMYg4URGiLvSjkUZZaJlgvt8k,8206
|
|
93
93
|
xync_client/TgWallet/inAgent.py,sha256=vJUQNlQviSnDnhSfEubqwz-DnrYtMnS4qZ2gDjnK3Tc,5441
|
|
94
94
|
xync_client/TgWallet/order.py,sha256=BOmBx5WWfJv0-_-A8DcR-Xd8utqO_VTmSqSegm0cteQ,3818
|
|
95
95
|
xync_client/TgWallet/pyd.py,sha256=Ys3E8b3RLuyQ26frWT0F0BorkNxVpxnd18tY4Gp9dik,5636
|
|
96
96
|
xync_client/TgWallet/pyro.py,sha256=2K7QWdo48k4MbbgQt90gdz_HiPck69Njm4xaMjIVgoo,1440
|
|
97
97
|
xync_client/TgWallet/web.py,sha256=kDcv9SKKQPe91mw1qJBpbuyKYCAmZdfdHJylHumLBVU,1608
|
|
98
|
-
xync_client-0.0.
|
|
99
|
-
xync_client-0.0.
|
|
100
|
-
xync_client-0.0.
|
|
101
|
-
xync_client-0.0.
|
|
98
|
+
xync_client-0.0.141.dist-info/METADATA,sha256=Evn_XBCNvwhXH0mxMhCRRkwc7cMk8ux285aJ9NdRyyI,1037
|
|
99
|
+
xync_client-0.0.141.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
100
|
+
xync_client-0.0.141.dist-info/top_level.txt,sha256=bmYEVIIrD3v7yFwH-X15pEfRvzhuAdfsAZ2igvNI4O8,12
|
|
101
|
+
xync_client-0.0.141.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|