xync-client 0.0.25.dev110__tar.gz → 0.0.25.dev112__tar.gz

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.
Files changed (96) hide show
  1. {xync_client-0.0.25.dev110/xync_client.egg-info → xync_client-0.0.25.dev112}/PKG-INFO +1 -1
  2. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Abc/Agent.py +2 -2
  3. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Abc/Base.py +2 -2
  4. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Abc/Ex.py +25 -22
  5. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Binance/ex.py +4 -1
  6. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BingX/ex.py +2 -2
  7. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BitGet/ex.py +3 -0
  8. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Bybit/agent.py +36 -9
  9. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Bybit/ex.py +2 -0
  10. xync_client-0.0.25.dev112/xync_client/Bybit/ws.py +37 -0
  11. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Mexc/ex.py +2 -1
  12. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Okx/ex.py +5 -1
  13. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/TgWallet/agent.py +1 -0
  14. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112/xync_client.egg-info}/PKG-INFO +1 -1
  15. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client.egg-info/SOURCES.txt +1 -0
  16. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/.env.sample +0 -0
  17. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/.gitignore +0 -0
  18. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/.pre-commit-config.yaml +0 -0
  19. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/README.md +0 -0
  20. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/makefile +0 -0
  21. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/pyproject.toml +0 -0
  22. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/setup.cfg +0 -0
  23. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/TestAgent.py +0 -0
  24. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/TestAsset.py +0 -0
  25. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/TestEx.py +0 -0
  26. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/TestOrder.py +0 -0
  27. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/_todo_refact/Binance/test_binance.py +0 -0
  28. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/_todo_refact/Bybit/test_bybit.py +0 -0
  29. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/_todo_refact/Bybit/test_bybit_p2p.py +0 -0
  30. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/_todo_refact/Gate/test_gate.py +0 -0
  31. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/_todo_refact/Htx/test_htx_p2p.py +0 -0
  32. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/_todo_refact/Wallet/test_agent.py +0 -0
  33. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/_todo_refact/Wallet/test_ex.py +0 -0
  34. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/_todo_refact/__init__.py +0 -0
  35. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/_todo_refact/_test_ex.py +0 -0
  36. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Abc/Asset.py +0 -0
  37. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Abc/AuthTrait.py +0 -0
  38. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Abc/BaseTest.py +0 -0
  39. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Abc/InAgent.py +0 -0
  40. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Abc/Order.py +0 -0
  41. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Abc/types.py +0 -0
  42. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Binance/__init__.py +0 -0
  43. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Binance/binance_async.py +0 -0
  44. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Binance/earn_api.py +0 -0
  45. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Binance/etype/ad.py +0 -0
  46. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Binance/etype/pm.py +0 -0
  47. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Binance/exceptions.py +0 -0
  48. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Binance/sapi.py +0 -0
  49. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Binance/web_c2c.py +0 -0
  50. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BingX/__init__.py +0 -0
  51. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BingX/agent.py +0 -0
  52. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BingX/base.py +0 -0
  53. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BingX/etype/ad.py +0 -0
  54. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BingX/etype/pm.py +0 -0
  55. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BingX/req.mjs +0 -0
  56. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BingX/sign.js +0 -0
  57. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BitGet/__init__.py +0 -0
  58. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BitGet/agent.py +0 -0
  59. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BitGet/etype/ad.py +0 -0
  60. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BitGet/req.mjs +0 -0
  61. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BitPapa/ex.py +0 -0
  62. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Bybit/etype/ad.py +0 -0
  63. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Bybit/web_earn.py +0 -0
  64. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Bybit/web_p2p.py +0 -0
  65. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Gate/etype/ad.py +0 -0
  66. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Gate/ex.py +0 -0
  67. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Gate/premarket.py +0 -0
  68. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Htx/agent.py +0 -0
  69. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Htx/earn.py +0 -0
  70. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Htx/etype/__init__.py +0 -0
  71. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Htx/etype/ad.py +0 -0
  72. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Htx/etype/cred.py +0 -0
  73. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Htx/etype/pm.py +0 -0
  74. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Htx/ex.py +0 -0
  75. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/KuCoin/etype/ad.py +0 -0
  76. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/KuCoin/etype/pm.py +0 -0
  77. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/KuCoin/ex.py +0 -0
  78. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/KuCoin/web.py +0 -0
  79. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Mexc/etype/ad.py +0 -0
  80. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Mexc/etype/pm.py +0 -0
  81. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Okx/etype/ad.py +0 -0
  82. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Okx/etype/pm.py +0 -0
  83. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/TgWallet/asset.py +0 -0
  84. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/TgWallet/auth.py +0 -0
  85. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/TgWallet/ex.py +0 -0
  86. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/TgWallet/inAgent.py +0 -0
  87. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/TgWallet/order.py +0 -0
  88. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/TgWallet/pyd.py +0 -0
  89. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/TgWallet/pyro.py +0 -0
  90. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/TgWallet/web.py +0 -0
  91. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/__init__.py +0 -0
  92. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/loader.py +0 -0
  93. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/pm_unifier.py +0 -0
  94. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client.egg-info/dependency_links.txt +0 -0
  95. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client.egg-info/requires.txt +0 -0
  96. {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xync-client
3
- Version: 0.0.25.dev110
3
+ Version: 0.0.25.dev112
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
@@ -11,9 +11,9 @@ from xync_client.Abc.types import CredExOut
11
11
 
12
12
 
13
13
  class BaseAgentClient(BaseClient):
14
- def __init__(self, agent: Agent):
14
+ def __init__(self, agent: Agent, headers: dict[str, str] = None, cookies: dict[str, str] = None):
15
15
  self.agent: Agent = agent
16
- super().__init__(self.agent.actor.ex) # , "host_p2p"
16
+ super().__init__(self.agent.actor.ex, "host_p2p", headers, cookies)
17
17
  self.ex_client: BaseExClient = self.ex.client()
18
18
 
19
19
  # 0: Получшение ордеров в статусе status, по монете coin, в валюте coin, в направлении is_sell: bool
@@ -10,6 +10,6 @@ MapOfIdsList = dict[int | str, list[int | str]]
10
10
  class BaseClient(Client):
11
11
  ex: Ex
12
12
 
13
- def __init__(self, ex: Ex, attr: str = "host_p2p"):
13
+ def __init__(self, ex: Ex, attr: str = "host_p2p", headers: dict[str, str] = None, cookies: dict[str, str] = None):
14
14
  self.ex = ex
15
- super().__init__(getattr(ex, attr))
15
+ super().__init__(getattr(ex, attr), headers, cookies)
@@ -1,10 +1,13 @@
1
1
  import logging
2
2
  from abc import abstractmethod
3
+ from asyncio import sleep
3
4
 
4
5
  import msgspec
6
+ from aiohttp import ClientSession
5
7
  from msgspec import Struct
6
8
  from tortoise.exceptions import MultipleObjectsReturned, IntegrityError
7
9
  from xync_schema import models
10
+ from xync_schema.enums import FileType
8
11
  from xync_schema.types import CurEx, CoinEx, BaseAd, BaseAdIn
9
12
 
10
13
  from xync_client.Abc.Base import BaseClient, MapOfIdsList
@@ -66,7 +69,7 @@ class BaseExClient(BaseClient):
66
69
 
67
70
  # Импорт Pm-ов (с Pmcur-, Pmex- и Pmcurex-ами) и валют (с Curex-ами) с биржи в бд
68
71
  async def set_pmcurexs(self):
69
- PyroClient(bot)
72
+ pbot = PyroClient(bot)
70
73
  # Curs
71
74
  cur_pyds: dict[str, CurEx] = await self.curs()
72
75
  curs: dict[int | str, models.Cur] = {
@@ -154,33 +157,33 @@ class BaseExClient(BaseClient):
154
157
  await models.Pmex.update_or_create({"pm": pm_}, ex=self.ex, exid=k, name=pm.name)
155
158
  else:
156
159
  pmin = models.Pm.validate({**pmu.model_dump(), "country_id": country_id, "typ": pm.typ})
157
- # # logo
158
- # if pm.logo and not await models.File.exists(name=pm.logo):
159
- # if not pm.logo.startswith("https:"):
160
- # if not pm.logo.startswith("/"):
161
- # pm.logo = "/" + pm.logo
162
- # pm.logo = "https://" + pm.logo
163
- # async with ClientSession() as ss:
164
- # resp = await ss.get(pm.logo)
165
- # if resp.ok:
166
- # byts = await resp.read()
167
- # upf, ref = await pyro.save_file(byts, resp.content_type)
168
- # await sleep(1)
169
- # typ = FileType[resp.content_type.split("/")[-1]]
170
- # file, _ = await models.File.update_or_create(
171
- # {"ref": ref, "size": len(byts), "typ": typ}, name=pm.logo
172
- # )
173
- # # fil = await pyro.get_file(file.ref) # check
174
- # pmin.logo_id = file.id
175
- # # /logo
160
+ # logo
161
+ if pm.logo or (file := None):
162
+ if not (file := await models.File.get_or_none(name=pm.logo)):
163
+ if not pm.logo.startswith("https:"):
164
+ if not pm.logo.startswith("/"):
165
+ pm.logo = "/" + pm.logo
166
+ pm.logo = "https://" + pm.logo
167
+ async with ClientSession() as ss:
168
+ resp = await ss.get(pm.logo)
169
+ if resp.ok:
170
+ byts = await resp.read()
171
+ upf, ref = await pbot.save_file(byts, resp.content_type)
172
+ await sleep(1)
173
+ typ = FileType[resp.content_type.split("/")[-1]]
174
+ file, _ = await models.File.update_or_create(
175
+ {"ref": ref, "size": len(byts), "typ": typ}, name=pm.logo
176
+ )
177
+ await pbot.get_file(file.ref) # check
178
+ # /logo
176
179
  try:
177
180
  pms[k], _ = await models.Pm.update_or_create(**pmin.df_unq())
178
181
  except (MultipleObjectsReturned, IntegrityError) as e:
179
182
  raise e
180
183
  prev = k, pmu.norm, pm.name, pmu.country
181
184
  # Pmexs
182
- pmexs = [models.Pmex(exid=k, ex=self.ex, pm=pm, name=pms_epyds[k].name) for k, pm in pms.items()]
183
- await models.Pmex.bulk_create(pmexs, on_conflict=["ex_id", "exid"], update_fields=["pm_id", "name", "name_"])
185
+ pmexs = [models.Pmex(exid=k, ex=self.ex, pm=pm, name=pms_epyds[k].name, logo=file) for k, pm in pms.items()]
186
+ await models.Pmex.bulk_create(pmexs, on_conflict=["ex_id", "exid"], update_fields=["pm_id", "logo_id", "name"])
184
187
  # Pmex banks
185
188
  for k, pm in pms_epyds.items():
186
189
  if banks := pm.banks:
@@ -20,7 +20,10 @@ class ExClient(BaseExClient):
20
20
  super().__init__(ex)
21
21
 
22
22
  class BinanceUnifier(PmUnifier):
23
- pm_map = {"Banque de développement local (BDL)": "Banque de développement local (BDL)"}
23
+ pm_map = {
24
+ "Banque de développement local (BDL)": "Banque de développement local (BDL)",
25
+ "Viettel Money": "ViettelPay"
26
+ }
24
27
 
25
28
  unifier_class = BinanceUnifier
26
29
 
@@ -18,8 +18,8 @@ class ExClient(BaseExClient, BaseBingXClient):
18
18
  class BingUnifier(PmUnifier):
19
19
  pm_map = {
20
20
  "СБП": "SBP",
21
- "Touch n Go": "Touch 'n Go",
22
- "Transfer with Specific Bank": "Transfers with specific bank"
21
+ "Transfer with Specific Bank": "Transfers with specific bank",
22
+ "Al-Rafidain Qi Services": "Al-Rafidain QiServices",
23
23
  }
24
24
 
25
25
  unifier_class = BingUnifier
@@ -21,6 +21,9 @@ class ExClient(BaseExClient):
21
21
  pm_map = {
22
22
  "Philippine National Bank": "Philippines National Bank",
23
23
  "Banque du Developpement Local BDL": "Banque de développement local (BDL)",
24
+ "ADCB Abu Dhabi Commercial Bank": "ADCB",
25
+ "BDO": "Banco De Oro (BDO)",
26
+ "Touch 'n Go": "Touch n Go"
24
27
  }
25
28
 
26
29
  unifier_class = BitGetUnifier
@@ -1,12 +1,17 @@
1
+ from asyncio import run
1
2
  from enum import IntEnum
2
3
  from time import sleep
3
4
 
4
5
  import pyotp
6
+ from x_model import init_db
7
+ from xync_schema import models
8
+
5
9
  from xync_client.Abc.Base import FlatDict
6
10
  from xync_schema.models import Cur
7
11
 
8
12
  from xync_client.Abc.Agent import BaseAgentClient
9
- from xync_client.loader import BYT2FA
13
+ from xync_client.Bybit.ws import prv
14
+ from xync_client.loader import BYT2FA, PG_DSN
10
15
 
11
16
 
12
17
  class NoMakerException(Exception):
@@ -18,7 +23,7 @@ class AdsStatus(IntEnum):
18
23
  WORKING = 1
19
24
 
20
25
 
21
- class ExClient(BaseAgentClient): # Bybit client
26
+ class AgentClient(BaseAgentClient): # Bybit client
22
27
  host = "api2.bybit.com"
23
28
  headers = {"cookie": ";"} # rewrite token for public methods
24
29
 
@@ -109,31 +114,35 @@ class ExClient(BaseAgentClient): # Bybit client
109
114
  return fiat
110
115
  return list_methods[1]
111
116
 
117
+ async def ott(self):
118
+ t = await self._post("/user/private/ott")
119
+ return t
120
+
112
121
  # 27
113
- def fiat_upd(self, fiat_id: int, detail: str, name: str = None) -> dict:
122
+ async def fiat_upd(self, fiat_id: int, detail: str, name: str = None) -> dict:
114
123
  fiat = self.get_payment_method(fiat_id)
115
124
  fiat["realName"] = name
116
125
  fiat["accountNo"] = detail
117
126
  result = await self._post("/fiat/otc/user/payment/new_update", fiat)
118
127
  srt = result["result"]["securityRiskToken"]
119
- self._check_2fa(srt)
128
+ await self._check_2fa(srt)
120
129
  fiat["securityRiskToken"] = srt
121
130
  result2 = await self._post("/fiat/otc/user/payment/new_update", fiat)
122
131
  return result2
123
132
 
124
133
  # 28
125
- def fiat_del(self, fiat_id: int) -> dict:
134
+ async def fiat_del(self, fiat_id: int) -> dict | str:
126
135
  data = {"id": fiat_id, "securityRiskToken": ""}
127
136
  method = await self._post("/fiat/otc/user/payment/new_delete", data)
128
137
  srt = method["result"]["securityRiskToken"]
129
- self._check_2fa(srt)
138
+ await self._check_2fa(srt)
130
139
  data["securityRiskToken"] = srt
131
140
  delete = await self._post("/fiat/otc/user/payment/new_delete", data)
132
141
  return delete
133
142
 
134
- def switch_ads(self, new_status: AdsStatus) -> dict:
143
+ async def switch_ads(self, new_status: AdsStatus) -> dict:
135
144
  data = {"workStatus": new_status.name}
136
- res = self._post("/fiat/otc/maker/work-config/switch", data)
145
+ res = await self._post("/fiat/otc/maker/work-config/switch", data)
137
146
  return res
138
147
 
139
148
  def online_ads(self) -> str:
@@ -145,7 +154,7 @@ class ExClient(BaseAgentClient): # Bybit client
145
154
  ads = [ad for ad in list_ads if set(ad["payments"]) - {"5", "51"}]
146
155
  return float(ads[0]["price"])
147
156
 
148
- def my_fiats(self, cur: Cur = None):
157
+ async def my_fiats(self, cur: Cur = None):
149
158
  upm = await self._post("/fiat/otc/user/payment/list")
150
159
  return upm["result"]
151
160
 
@@ -296,3 +305,21 @@ class ExClient(BaseAgentClient): # Bybit client
296
305
  "size": 10,
297
306
  },
298
307
  )
308
+
309
+
310
+ def listen(data: dict):
311
+ print(data)
312
+
313
+
314
+ async def main():
315
+ _ = await init_db(PG_DSN, models, True)
316
+ agent = await models.Agent.filter(actor__ex_id=9, auth__isnull=False).prefetch_related("actor__ex").first()
317
+ cl: AgentClient = agent.client()
318
+ t = await cl.ott()
319
+ ts = int(float(t["time_now"]) * 1000)
320
+ await prv(agent.auth["deviceId"], t["result"], ts, listen)
321
+ await cl.close()
322
+
323
+
324
+ if __name__ == "__main__":
325
+ run(main())
@@ -24,6 +24,8 @@ class ExClient(BaseExClient): # Bybit client
24
24
  "Local Card-Green": "Sberbank",
25
25
  "Local Card-Yellow": "T-Bank",
26
26
  "Banque de développement local (BDL)": "Banque de développement local (BDL)",
27
+ "Al-Rajhi Bank": "Al Rajhi Bank",
28
+ "BDO": "Banco De Oro (BDO)"
27
29
  }
28
30
 
29
31
  host = "api2.bybit.com"
@@ -0,0 +1,37 @@
1
+ import json
2
+
3
+ import websockets
4
+
5
+
6
+ async def prv(did: str, tok: str, ts: int, cb: callable):
7
+ u = f"wss://ws2.bybit.com/private?appid=bybit&os=web&deviceid={did}&timestamp={ts}"
8
+ async with websockets.connect(u) as websocket:
9
+ auth_msg = json.dumps({"req_id": did, "op": "login", "args": [tok]})
10
+ await websocket.send(auth_msg)
11
+
12
+ sub_msg = json.dumps({"op": "subscribe", "args": ["FIAT_OTC_TOPIC", "FIAT_OTC_ONLINE_TOPIC"]})
13
+ await websocket.send(sub_msg)
14
+ sub_msg = json.dumps({"op": "input", "args": ["FIAT_OTC_TOPIC", '{"topic":"SUPER_DEAL"}']})
15
+ await websocket.send(sub_msg)
16
+ sub_msg = json.dumps({"op": "input", "args": ["FIAT_OTC_TOPIC", '{"topic":"OTC_ORDER_STATUS"}']})
17
+ await websocket.send(sub_msg)
18
+ sub_msg = json.dumps({"op": "input", "args": ["FIAT_OTC_TOPIC", '{"topic":"WEB_THREE_SELL"}']})
19
+ await websocket.send(sub_msg)
20
+ sub_msg = json.dumps({"op": "input", "args": ["FIAT_OTC_TOPIC", '{"topic":"APPEALED_CHANGE"}']})
21
+ await websocket.send(sub_msg)
22
+
23
+ sub_msg = json.dumps({"op": "subscribe", "args": ["fiat.cashier.order"]})
24
+ await websocket.send(sub_msg)
25
+ sub_msg = json.dumps({"op": "subscribe", "args": ["fiat.cashier.order-eftd-complete-privilege-event"]})
26
+ await websocket.send(sub_msg)
27
+ sub_msg = json.dumps({"op": "subscribe", "args": ["fiat.cashier.order-savings-product-event"]})
28
+ await websocket.send(sub_msg)
29
+ sub_msg = json.dumps({"op": "subscribe", "args": ["fiat.deal-core.order-savings-complete-event"]})
30
+ await websocket.send(sub_msg)
31
+
32
+ sub_msg = json.dumps({"op": "subscribe", "args": ["FIAT_OTC_TOPIC", "FIAT_OTC_ONLINE_TOPIC"]})
33
+ await websocket.send(sub_msg)
34
+
35
+ while resp := await websocket.recv():
36
+ if data := json.loads(resp).get("data"):
37
+ cb(data)
@@ -18,7 +18,8 @@ class ExClient(BaseExClient):
18
18
  pm_map = {
19
19
  "Philippine National Bank (PNB)": "Philippines National Bank (PNB)",
20
20
  "Al-Rajhi Bank": "Al Rajhi Bank",
21
- "SBP - Fast Bank Transfer": "SBP"
21
+ "SBP - Fast Bank Transfer": "SBP",
22
+ "Touch 'n Go": "Touch n Go"
22
23
  }
23
24
  unifier_class = MexcUnifier
24
25
 
@@ -15,7 +15,11 @@ from xync_client.pm_unifier import PmUnifier
15
15
  class ExClient(BaseExClient):
16
16
  class OkxUnifier(PmUnifier):
17
17
  pm_map = {
18
- "SBP Fast Bank Transfer": "SBP"
18
+ "SBP Fast Bank Transfer": "SBP",
19
+ "ADCB": "Abu Dhabi Commercial Bank ADCB",
20
+ "Al-Rafdin QiServices": "Al-Rafidain QiServices",
21
+ "Viettel Pay": "ViettelPay",
22
+ "Zain Cash - Business": "ZainCash - Business"
19
23
  }
20
24
 
21
25
  unifier_class = OkxUnifier
@@ -44,6 +44,7 @@ class Exceptions(StrEnum):
44
44
  CUR = "CURRENCY_IS_NOT_SUPPORTED_BY_PAYMENT_METHOD"
45
45
  MAX_ADS = "ACTIVE_OFFER_COUNT_LIMIT_REACHED"
46
46
  INACTIVE_AD = "OFFER_ILLEGAL_STATE"
47
+ FF = "CANNOT_DELETE_WHEN_USED_IN_OFFER"
47
48
 
48
49
 
49
50
  # class Status(IntEnum):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xync-client
3
- Version: 0.0.25.dev110
3
+ Version: 0.0.25.dev112
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
@@ -61,6 +61,7 @@ xync_client/Bybit/agent.py
61
61
  xync_client/Bybit/ex.py
62
62
  xync_client/Bybit/web_earn.py
63
63
  xync_client/Bybit/web_p2p.py
64
+ xync_client/Bybit/ws.py
64
65
  xync_client/Bybit/etype/ad.py
65
66
  xync_client/Gate/ex.py
66
67
  xync_client/Gate/premarket.py