@hot-labs/kit 1.0.40 → 1.0.43

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 (249) hide show
  1. package/README.md +23 -10
  2. package/build/HotConnector.d.ts +42 -30
  3. package/build/HotConnector.js +50 -36
  4. package/build/HotConnector.js.map +1 -1
  5. package/build/OmniConnector.d.ts +3 -13
  6. package/build/OmniConnector.js +5 -7
  7. package/build/OmniConnector.js.map +1 -1
  8. package/build/OmniWallet.d.ts +4 -4
  9. package/build/OmniWallet.js +1 -1
  10. package/build/{omni → core}/Intents.d.ts +3 -1
  11. package/build/{omni → core}/Intents.js +4 -1
  12. package/build/core/Intents.js.map +1 -0
  13. package/build/core/bridge.d.ts +3 -0
  14. package/build/core/bridge.js +36 -0
  15. package/build/core/bridge.js.map +1 -0
  16. package/build/{omni/config.d.ts → core/chains.d.ts} +21 -5
  17. package/build/core/chains.js +372 -0
  18. package/build/core/chains.js.map +1 -0
  19. package/build/{omni → core}/defaultTokens.js.map +1 -1
  20. package/build/core/events.js.map +1 -0
  21. package/build/core/index.d.ts +10 -0
  22. package/build/core/index.js +11 -0
  23. package/build/core/index.js.map +1 -0
  24. package/build/{omni → core}/nearRpc.js.map +1 -1
  25. package/build/{omni → core}/recipient.d.ts +1 -1
  26. package/build/{omni → core}/recipient.js +1 -1
  27. package/build/{omni → core}/recipient.js.map +1 -1
  28. package/build/{omni → core}/token.d.ts +1 -1
  29. package/build/{omni → core}/token.js +7 -45
  30. package/build/core/token.js.map +1 -0
  31. package/build/{omni → core}/tokens.d.ts +1 -1
  32. package/build/{omni → core}/tokens.js +1 -1
  33. package/build/{omni → core}/tokens.js.map +1 -1
  34. package/build/{omni → core}/types.d.ts +1 -0
  35. package/build/{omni → core}/types.js.map +1 -1
  36. package/build/{omni → core}/utils.js.map +1 -1
  37. package/build/cosmos/connector.d.ts +5 -24
  38. package/build/cosmos/connector.js +35 -25
  39. package/build/cosmos/connector.js.map +1 -1
  40. package/build/cosmos/index.d.ts +6 -0
  41. package/build/cosmos/index.js +5 -0
  42. package/build/cosmos/index.js.map +1 -0
  43. package/build/cosmos/wallet.d.ts +2 -2
  44. package/build/cosmos/wallet.js +2 -2
  45. package/build/cosmos/wallet.js.map +1 -1
  46. package/build/defaults.d.ts +1 -0
  47. package/build/defaults.js +7 -0
  48. package/build/defaults.js.map +1 -0
  49. package/build/evm/connector.d.ts +3 -8
  50. package/build/evm/connector.js +13 -15
  51. package/build/evm/connector.js.map +1 -1
  52. package/build/evm/index.d.ts +6 -0
  53. package/build/evm/index.js +5 -0
  54. package/build/evm/index.js.map +1 -0
  55. package/build/{hot-wallet/evm.js → evm/injected.js} +2 -2
  56. package/build/evm/injected.js.map +1 -0
  57. package/build/evm/wallet.d.ts +3 -3
  58. package/build/evm/wallet.js +8 -4
  59. package/build/evm/wallet.js.map +1 -1
  60. package/build/exchange.d.ts +3 -3
  61. package/build/exchange.js +18 -21
  62. package/build/exchange.js.map +1 -1
  63. package/build/hot-wallet/google.d.ts +25 -0
  64. package/build/{GoogleConnector.js → hot-wallet/google.js} +51 -15
  65. package/build/hot-wallet/google.js.map +1 -0
  66. package/build/hot-wallet/{hot.js → iframe.js} +2 -9
  67. package/build/hot-wallet/{hot.js.map → iframe.js.map} +1 -1
  68. package/build/hot-wallet/index.d.ts +5 -4
  69. package/build/hot-wallet/index.js +3 -4
  70. package/build/hot-wallet/index.js.map +1 -1
  71. package/build/index.d.ts +1 -20
  72. package/build/index.js +1 -20
  73. package/build/index.js.map +1 -1
  74. package/build/near/connector.d.ts +2 -12
  75. package/build/near/connector.js +4 -4
  76. package/build/near/connector.js.map +1 -1
  77. package/build/near/index.d.ts +7 -0
  78. package/build/near/index.js +5 -0
  79. package/build/near/index.js.map +1 -0
  80. package/build/near/wallet.d.ts +3 -3
  81. package/build/near/wallet.js +3 -3
  82. package/build/solana/connector.d.ts +3 -4
  83. package/build/solana/connector.js +8 -8
  84. package/build/solana/connector.js.map +1 -1
  85. package/build/solana/index.d.ts +6 -0
  86. package/build/solana/index.js +5 -0
  87. package/build/solana/index.js.map +1 -0
  88. package/build/solana/injected/account.js.map +1 -0
  89. package/build/{hot-wallet/solana → solana/injected}/index.js +1 -1
  90. package/build/{hot-wallet/solana → solana/injected}/index.js.map +1 -1
  91. package/build/solana/injected/register.js.map +1 -0
  92. package/build/solana/injected/solana-wallet.js.map +1 -0
  93. package/build/solana/injected/utils.js.map +1 -0
  94. package/build/solana/wallet.d.ts +3 -3
  95. package/build/solana/wallet.js +3 -3
  96. package/build/stellar/connector.d.ts +1 -1
  97. package/build/stellar/connector.js +2 -2
  98. package/build/stellar/connector.js.map +1 -1
  99. package/build/stellar/index.d.ts +6 -0
  100. package/build/stellar/index.js +5 -0
  101. package/build/stellar/index.js.map +1 -0
  102. package/build/{hot-wallet/stellar.js → stellar/injected.js} +2 -2
  103. package/build/stellar/injected.js.map +1 -0
  104. package/build/stellar/wallet.d.ts +5 -4
  105. package/build/stellar/wallet.js +17 -14
  106. package/build/stellar/wallet.js.map +1 -1
  107. package/build/ton/connector.d.ts +1 -1
  108. package/build/ton/connector.js +2 -2
  109. package/build/ton/connector.js.map +1 -1
  110. package/build/ton/index.d.ts +7 -0
  111. package/build/ton/index.js +5 -0
  112. package/build/ton/index.js.map +1 -0
  113. package/build/{hot-wallet/ton.js → ton/injected.js} +2 -2
  114. package/build/ton/injected.js.map +1 -0
  115. package/build/ton/utils.js +1 -2
  116. package/build/ton/utils.js.map +1 -1
  117. package/build/ton/wallet.d.ts +3 -3
  118. package/build/ton/wallet.js +2 -2
  119. package/build/ui/connect/ConnectWallet.js +1 -1
  120. package/build/ui/payment/Bridge.d.ts +2 -2
  121. package/build/ui/payment/Bridge.js +5 -5
  122. package/build/ui/payment/Payment.d.ts +2 -2
  123. package/build/ui/payment/Payment.js +2 -2
  124. package/build/ui/payment/Profile.js +2 -2
  125. package/build/ui/payment/SelectRecipient.d.ts +2 -2
  126. package/build/ui/payment/SelectRecipient.js +3 -3
  127. package/build/ui/payment/SelectSender.d.ts +1 -1
  128. package/build/ui/payment/SelectSender.js +2 -2
  129. package/build/ui/payment/SelectToken.d.ts +1 -1
  130. package/build/ui/payment/SelectToken.js +3 -3
  131. package/build/ui/payment/TokenCard.d.ts +1 -1
  132. package/build/ui/payment/TokenCard.js +3 -3
  133. package/build/ui/payment/TokenCard.js.map +1 -1
  134. package/build/ui/router.d.ts +3 -3
  135. package/build/ui/styles.js +4 -0
  136. package/build/ui/styles.js.map +1 -1
  137. package/package.json +10 -2
  138. package/skill.md +174 -72
  139. package/src/HotConnector.ts +91 -56
  140. package/src/OmniConnector.ts +6 -11
  141. package/src/OmniWallet.ts +4 -4
  142. package/src/{omni → core}/Intents.ts +6 -3
  143. package/src/core/bridge.ts +39 -0
  144. package/src/core/chains.ts +391 -0
  145. package/src/core/index.ts +10 -0
  146. package/src/{omni → core}/recipient.ts +1 -1
  147. package/src/{omni → core}/token.ts +7 -26
  148. package/src/{omni → core}/tokens.ts +2 -2
  149. package/src/{omni → core}/types.ts +1 -0
  150. package/src/cosmos/connector.ts +46 -41
  151. package/src/cosmos/index.ts +8 -0
  152. package/src/cosmos/wallet.ts +3 -3
  153. package/src/defaults.ts +7 -0
  154. package/src/evm/connector.ts +18 -23
  155. package/src/evm/index.ts +7 -0
  156. package/src/{hot-wallet/evm.ts → evm/injected.ts} +1 -1
  157. package/src/evm/wallet.ts +10 -5
  158. package/src/exchange.ts +22 -25
  159. package/src/{GoogleConnector.ts → hot-wallet/google.ts} +60 -17
  160. package/src/hot-wallet/{hot.ts → iframe.ts} +1 -8
  161. package/src/hot-wallet/index.ts +6 -4
  162. package/src/index.ts +2 -25
  163. package/src/near/connector.ts +4 -15
  164. package/src/near/index.ts +9 -0
  165. package/src/near/wallet.ts +4 -4
  166. package/src/solana/connector.ts +13 -11
  167. package/src/solana/index.ts +7 -0
  168. package/src/{hot-wallet/solana → solana/injected}/index.ts +1 -1
  169. package/src/solana/wallet.ts +4 -4
  170. package/src/stellar/connector.ts +2 -2
  171. package/src/stellar/index.ts +7 -0
  172. package/src/{hot-wallet/stellar.ts → stellar/injected.ts} +1 -1
  173. package/src/stellar/wallet.ts +19 -15
  174. package/src/ton/connector.ts +2 -2
  175. package/src/ton/index.ts +9 -0
  176. package/src/{hot-wallet/ton.ts → ton/injected.ts} +1 -1
  177. package/src/ton/utils.ts +1 -3
  178. package/src/ton/wallet.ts +3 -3
  179. package/src/ui/connect/ConnectWallet.tsx +1 -1
  180. package/src/ui/payment/Bridge.tsx +6 -6
  181. package/src/ui/payment/Payment.tsx +3 -3
  182. package/src/ui/payment/Profile.tsx +3 -3
  183. package/src/ui/payment/SelectRecipient.tsx +3 -3
  184. package/src/ui/payment/SelectSender.tsx +2 -2
  185. package/src/ui/payment/SelectToken.tsx +4 -4
  186. package/src/ui/payment/TokenCard.tsx +5 -4
  187. package/src/ui/router.tsx +3 -3
  188. package/src/ui/styles.ts +4 -0
  189. package/build/GoogleConnector.d.ts +0 -20
  190. package/build/GoogleConnector.js.map +0 -1
  191. package/build/events.js.map +0 -1
  192. package/build/hot-wallet/evm.js.map +0 -1
  193. package/build/hot-wallet/solana/account.js.map +0 -1
  194. package/build/hot-wallet/solana/register.js.map +0 -1
  195. package/build/hot-wallet/solana/solana-wallet.js.map +0 -1
  196. package/build/hot-wallet/solana/utils.js.map +0 -1
  197. package/build/hot-wallet/stellar.js.map +0 -1
  198. package/build/hot-wallet/ton.js.map +0 -1
  199. package/build/hot-wallet/wallet.d.ts +0 -1
  200. package/build/hot-wallet/wallet.js +0 -40
  201. package/build/hot-wallet/wallet.js.map +0 -1
  202. package/build/omni/Intents.js.map +0 -1
  203. package/build/omni/bridge.d.ts +0 -3
  204. package/build/omni/bridge.js +0 -34
  205. package/build/omni/bridge.js.map +0 -1
  206. package/build/omni/config.js +0 -126
  207. package/build/omni/config.js.map +0 -1
  208. package/build/omni/index.d.ts +0 -8
  209. package/build/omni/index.js +0 -9
  210. package/build/omni/index.js.map +0 -1
  211. package/build/omni/token.js.map +0 -1
  212. package/build/settings.d.ts +0 -5
  213. package/build/settings.js +0 -6
  214. package/build/settings.js.map +0 -1
  215. package/src/hot-wallet/wallet.ts +0 -44
  216. package/src/omni/bridge.ts +0 -38
  217. package/src/omni/config.ts +0 -130
  218. package/src/omni/index.ts +0 -8
  219. package/src/settings.ts +0 -5
  220. /package/build/{omni → core}/defaultTokens.d.ts +0 -0
  221. /package/build/{omni → core}/defaultTokens.js +0 -0
  222. /package/build/{events.d.ts → core/events.d.ts} +0 -0
  223. /package/build/{events.js → core/events.js} +0 -0
  224. /package/build/{omni → core}/nearRpc.d.ts +0 -0
  225. /package/build/{omni → core}/nearRpc.js +0 -0
  226. /package/build/{omni → core}/types.js +0 -0
  227. /package/build/{omni → core}/utils.d.ts +0 -0
  228. /package/build/{omni → core}/utils.js +0 -0
  229. /package/build/{hot-wallet/evm.d.ts → evm/injected.d.ts} +0 -0
  230. /package/build/hot-wallet/{hot.d.ts → iframe.d.ts} +0 -0
  231. /package/build/{hot-wallet/solana → solana/injected}/account.d.ts +0 -0
  232. /package/build/{hot-wallet/solana → solana/injected}/account.js +0 -0
  233. /package/build/{hot-wallet/solana → solana/injected}/index.d.ts +0 -0
  234. /package/build/{hot-wallet/solana → solana/injected}/register.d.ts +0 -0
  235. /package/build/{hot-wallet/solana → solana/injected}/register.js +0 -0
  236. /package/build/{hot-wallet/solana → solana/injected}/solana-wallet.d.ts +0 -0
  237. /package/build/{hot-wallet/solana → solana/injected}/solana-wallet.js +0 -0
  238. /package/build/{hot-wallet/solana → solana/injected}/utils.d.ts +0 -0
  239. /package/build/{hot-wallet/solana → solana/injected}/utils.js +0 -0
  240. /package/build/{hot-wallet/stellar.d.ts → stellar/injected.d.ts} +0 -0
  241. /package/build/{hot-wallet/ton.d.ts → ton/injected.d.ts} +0 -0
  242. /package/src/{omni → core}/defaultTokens.ts +0 -0
  243. /package/src/{events.ts → core/events.ts} +0 -0
  244. /package/src/{omni → core}/nearRpc.ts +0 -0
  245. /package/src/{omni → core}/utils.ts +0 -0
  246. /package/src/{hot-wallet/solana → solana/injected}/account.ts +0 -0
  247. /package/src/{hot-wallet/solana → solana/injected}/register.ts +0 -0
  248. /package/src/{hot-wallet/solana → solana/injected}/solana-wallet.ts +0 -0
  249. /package/src/{hot-wallet/solana → solana/injected}/utils.ts +0 -0
@@ -1,20 +1,17 @@
1
- import type { Keplr } from "@keplr-wallet/provider-extension";
1
+ import { Keplr } from "@keplr-wallet/provider-extension";
2
2
  import { TxRaw } from "@keplr-wallet/proto-types/cosmos/tx/v1beta1/tx";
3
3
  import { StargateClient } from "@cosmjs/stargate";
4
+ import { runInAction } from "mobx";
4
5
  import { hex } from "@scure/base";
5
6
 
6
- import { WalletType } from "../omni/config";
7
+ import { chains, WalletType } from "../core/chains";
7
8
  import { HotConnector } from "../HotConnector";
8
- import { ConnectorType, OmniConnector, OmniConnectorOptions, WC_ICON } from "../OmniConnector";
9
+ import { ConnectorType, OmniConnector, WC_ICON } from "../OmniConnector";
9
10
  import { OmniWallet } from "../OmniWallet";
10
11
 
11
12
  import { signAndSendTx } from "./helpers";
12
13
  import CosmosWallet from "./wallet";
13
14
 
14
- export interface CosmosConnectorOptions extends OmniConnectorOptions {
15
- cosmosChains?: Record<string, { chain: string; rpc: string; denom: string; prefix: string }>;
16
- }
17
-
18
15
  declare global {
19
16
  interface Window {
20
17
  keplr?: Keplr;
@@ -42,8 +39,6 @@ const wallets = {
42
39
  };
43
40
 
44
41
  export default class CosmosConnector extends OmniConnector<CosmosWallet> {
45
- cosmosChains: Record<string, { chain: string; rpc: string; denom: string; prefix: string }>;
46
-
47
42
  type = ConnectorType.WALLET;
48
43
  walletTypes = [WalletType.COSMOS];
49
44
  icon = "https://legacy.cosmos.network/presskit/cosmos-brandmark-dynamic-dark.svg";
@@ -51,12 +46,12 @@ export default class CosmosConnector extends OmniConnector<CosmosWallet> {
51
46
  isSupported = true;
52
47
  id = "cosmos";
53
48
 
54
- constructor(wibe3: HotConnector, options?: CosmosConnectorOptions) {
55
- super(wibe3, options);
49
+ constructor(wibe3: HotConnector) {
50
+ super(wibe3);
56
51
 
57
52
  this.options = [
58
53
  {
59
- name: "keplr" in window ? "Keplr" : "Keplr Mobile",
54
+ name: "Keplr",
60
55
  download: "https://www.keplr.app/get",
61
56
  icon: "https://cdn.prod.website-files.com/667dc891bc7b863b5397495b/68a4ca95f93a9ab64dc67ab4_keplr-symbol.svg",
62
57
  type: "keplr" in window ? "extension" : "external",
@@ -71,36 +66,45 @@ export default class CosmosConnector extends OmniConnector<CosmosWallet> {
71
66
  },
72
67
  ];
73
68
 
74
- this.cosmosChains = {
75
- "juno-1": { chain: "juno-1", rpc: "https://juno-rpc.publicnode.com", denom: "ujuno", prefix: "juno" },
76
- "gonka-mainnet": { chain: "gonka-mainnet", rpc: "https://dev.herewallet.app/api/v1/evm/rpc/4444119", denom: "ngonka", prefix: "gonka" },
77
- "cosmoshub-4": { chain: "cosmoshub-4", rpc: "https://rpc.cosmoshub.certus.one", denom: "uatom", prefix: "cosmos" },
78
- ...options?.cosmosChains,
79
- };
69
+ Keplr.getKeplr().then((keplr) => {
70
+ const option = this.options.find((option) => option.id === "keplr")!;
71
+ runInAction(() => {
72
+ option.type = keplr ? "extension" : "external";
73
+ option.name = keplr ? "Keplr" : "Keplr Mobile";
74
+ });
75
+ });
80
76
 
81
- this.getStorage().then(({ type, address, publicKey }) => {
77
+ this.getStorage().then(async ({ type, address, publicKey }) => {
82
78
  if (!address || !publicKey) return;
83
- if (type === "keplr" && window.keplr) this.setKeplrWallet(window.keplr, address, publicKey);
79
+
80
+ if (type === "keplr") {
81
+ const keplr = await Keplr.getKeplr();
82
+ if (keplr) this.setKeplrWallet(keplr, address, publicKey);
83
+ else this.disconnect();
84
+ }
85
+
84
86
  if (type === "leap" && window.leap) this.setKeplrWallet(window.leap, address, publicKey);
85
87
  });
86
88
 
87
- this.initWalletConnect().then(async (wc) => {
88
- this.options.unshift({
89
- download: "https://www.walletconnect.com/get",
90
- name: "WalletConnect",
91
- id: "walletconnect",
92
- type: "external",
93
- icon: WC_ICON,
94
- });
89
+ this.initWalletConnect()
90
+ .then(async (wc) => {
91
+ this.options.unshift({
92
+ download: "https://www.walletconnect.com/get",
93
+ name: "WalletConnect",
94
+ id: "walletconnect",
95
+ type: "external",
96
+ icon: WC_ICON,
97
+ });
95
98
 
96
- const selected = await this.getStorage();
97
- if (selected.type !== "walletconnect") return;
98
- this.setupWalletConnect(selected.id as "keplr" | "leap");
99
- });
99
+ const selected = await this.getStorage();
100
+ if (selected.type !== "walletconnect") return;
101
+ this.setupWalletConnect(selected.id as "keplr" | "leap");
102
+ })
103
+ .catch(() => {});
100
104
  }
101
105
 
102
- getConfig(chain: string) {
103
- return this.cosmosChains[chain];
106
+ get chains() {
107
+ return chains.getByType(WalletType.COSMOS).map((t) => t.key);
104
108
  }
105
109
 
106
110
  async setupWalletConnect(id?: "keplr" | "leap"): Promise<CosmosWallet> {
@@ -139,7 +143,7 @@ export default class CosmosConnector extends OmniConnector<CosmosWallet> {
139
143
  },
140
144
  });
141
145
 
142
- const client = await StargateClient.connect(this.getConfig(signDoc.chainId)?.rpc || "");
146
+ const client = await StargateClient.connect(chains.getByKey(signDoc.chainId).rpc || "");
143
147
  const protobufTx = TxRaw.encode({
144
148
  bodyBytes: signed.bodyBytes,
145
149
  authInfoBytes: signed.authInfoBytes,
@@ -162,8 +166,8 @@ export default class CosmosConnector extends OmniConnector<CosmosWallet> {
162
166
  publicKeyHex: publicKey,
163
167
  disconnect: () => keplr.disable(),
164
168
  sendTransaction: async (signDoc: any) => {
165
- await keplr.enable(Object.keys(this.cosmosChains));
166
- const rpcEndpoint = this.getConfig(signDoc.chainId)?.rpc || "";
169
+ await keplr.enable(this.chains);
170
+ const rpcEndpoint = chains.get(signDoc.chainId)?.rpc || "";
167
171
  return await signAndSendTx(keplr, rpcEndpoint, signDoc);
168
172
  },
169
173
  })
@@ -179,7 +183,7 @@ export default class CosmosConnector extends OmniConnector<CosmosWallet> {
179
183
  cosmos: {
180
184
  methods: ["cosmos_getAccounts", "cosmos_signDirect"],
181
185
  events: ["chainChanged", "accountsChanged"],
182
- chains: Object.keys(this.cosmosChains).map((chain) => `cosmos:${chain}`),
186
+ chains: this.chains.map((chain) => `cosmos:${chain}`),
183
187
  rpcMap: {},
184
188
  },
185
189
  },
@@ -198,7 +202,7 @@ export default class CosmosConnector extends OmniConnector<CosmosWallet> {
198
202
  chainName: "Gonka",
199
203
  });
200
204
 
201
- await extension.enable(Object.keys(this.cosmosChains));
205
+ await extension.enable(this.chains);
202
206
  const account = await extension.getKey("gonka-mainnet");
203
207
  await this.setStorage({ type, address: account.bech32Address, publicKey: hex.encode(account.pubKey) });
204
208
  return await this.setKeplrWallet(extension, account.bech32Address, hex.encode(account.pubKey));
@@ -212,7 +216,7 @@ export default class CosmosConnector extends OmniConnector<CosmosWallet> {
212
216
  cosmos: {
213
217
  methods: ["cosmos_getAccounts", "cosmos_signDirect"],
214
218
  events: ["chainChanged", "accountsChanged"],
215
- chains: Object.keys(this.cosmosChains).map((chain) => `cosmos:${chain}`),
219
+ chains: this.chains.map((chain) => `cosmos:${chain}`),
216
220
  rpcMap: {},
217
221
  },
218
222
  },
@@ -220,7 +224,8 @@ export default class CosmosConnector extends OmniConnector<CosmosWallet> {
220
224
  }
221
225
 
222
226
  if (id === "keplr") {
223
- return await this.connectKeplr("keplr", window.keplr);
227
+ const keplr = await Keplr.getKeplr();
228
+ return await this.connectKeplr("keplr", keplr);
224
229
  }
225
230
 
226
231
  if (id === "leap") {
@@ -0,0 +1,8 @@
1
+ import CosmosConnector from "./connector";
2
+ import CosmosWallet from "./wallet";
3
+
4
+ import { HotConnector } from "../HotConnector";
5
+
6
+ export { CosmosConnector, CosmosWallet };
7
+
8
+ export default () => async (wibe3: HotConnector) => new CosmosConnector(wibe3);
@@ -1,8 +1,8 @@
1
1
  import { StargateClient } from "@cosmjs/stargate";
2
2
 
3
3
  import { OmniWallet, SignedAuth } from "../OmniWallet";
4
- import { chainsMap, WalletType } from "../omni/config";
5
- import { ReviewFee } from "../omni/bridge";
4
+ import { chains, WalletType } from "../core/chains";
5
+ import { ReviewFee } from "../core/bridge";
6
6
  import CosmosConnector from "./connector";
7
7
 
8
8
  interface ProtocolWallet {
@@ -68,7 +68,7 @@ export default class CosmosWallet extends OmniWallet {
68
68
  }
69
69
 
70
70
  async fetchBalance(chain: number, token: string): Promise<bigint> {
71
- const config = this.connector.getConfig(chainsMap[chain].id);
71
+ const config = chains.get(chain);
72
72
  if (!config) throw new Error("Config not found");
73
73
  const client = await StargateClient.connect(config.rpc);
74
74
  const balance = await client.getBalance(this.address, token);
@@ -0,0 +1,7 @@
1
+ import near from "./near";
2
+ import stellar from "./stellar";
3
+ import ton from "./ton";
4
+ import solana from "./solana";
5
+ import evm from "./evm";
6
+
7
+ export const defaultConnectors = [near(), evm(), solana(), ton(), stellar()];
@@ -1,24 +1,17 @@
1
1
  import MetaMaskSDK from "@metamask/sdk";
2
2
  import { runInAction } from "mobx";
3
3
 
4
- import { ConnectorType, OmniConnector, OmniConnectorOptions, WC_ICON } from "../OmniConnector";
5
- import { WalletType } from "../omni/config";
6
- import { isInjected } from "../hot-wallet/hot";
4
+ import { ConnectorType, OmniConnector, WC_ICON } from "../OmniConnector";
5
+ import { Network, WalletType } from "../core/chains";
6
+ import { isInjected } from "../hot-wallet/iframe";
7
7
  import { HotConnector } from "../HotConnector";
8
8
  import EvmWallet, { EvmProvider } from "./wallet";
9
9
 
10
- const chains = [1, 10, 56, 137, 8453, 42161, 421613, 80001];
11
-
12
- export interface EvmConnectorOptions extends OmniConnectorOptions {
13
- chains?: number[];
14
- }
15
-
16
10
  class EvmConnector extends OmniConnector<EvmWallet, { provider: EvmProvider }> {
17
11
  icon = "https://storage.herewallet.app/upload/06b43b164683c2cbfe9a9c0699f0953fd56f1f802035e7701ea10501d9e091c6.png";
18
12
  walletTypes = [WalletType.EVM, WalletType.OMNI];
19
13
  type = ConnectorType.WALLET;
20
14
  name = "EVM Wallet";
21
- chains = chains;
22
15
  id = "evm";
23
16
 
24
17
  MMSDK = new MetaMaskSDK({
@@ -29,10 +22,8 @@ class EvmConnector extends OmniConnector<EvmWallet, { provider: EvmProvider }> {
29
22
  },
30
23
  });
31
24
 
32
- constructor(wibe3: HotConnector, readonly settings: EvmConnectorOptions = {}) {
33
- super(wibe3, settings);
34
-
35
- if (settings.chains) this.chains.push(...settings.chains);
25
+ constructor(wibe3: HotConnector) {
26
+ super(wibe3);
36
27
 
37
28
  window.addEventListener<any>("eip6963:announceProvider", async (provider) => {
38
29
  if (this.options.find((t) => t.name === provider.detail.info.name || t.id === provider.detail.info.uuid)) return;
@@ -60,15 +51,19 @@ class EvmConnector extends OmniConnector<EvmWallet, { provider: EvmProvider }> {
60
51
 
61
52
  window.dispatchEvent(new Event("eip6963:requestProvider"));
62
53
 
63
- this.initWalletConnect().then((wc) => {
64
- this.options.unshift({ id: "walletconnect", name: "WalletConnect", icon: WC_ICON, provider: {} as any, type: "external" });
65
- });
54
+ this.initWalletConnect()
55
+ .then((wc) => {
56
+ this.options.unshift({ id: "walletconnect", name: "WalletConnect", icon: WC_ICON, provider: {} as any, type: "external" });
57
+ })
58
+ .catch(() => {});
66
59
 
67
- this.wc?.then(async (wc) => {
68
- const selected = await this.getConnectedWallet();
69
- if (selected.id !== "walletconnect") return;
70
- this.setupWalletConnect();
71
- });
60
+ this.wc
61
+ ?.then(async (wc) => {
62
+ const selected = await this.getConnectedWallet();
63
+ if (selected.id !== "walletconnect") return;
64
+ this.setupWalletConnect();
65
+ })
66
+ .catch(() => {});
72
67
  }
73
68
 
74
69
  async setupWalletConnect(): Promise<EvmWallet> {
@@ -120,7 +115,7 @@ class EvmConnector extends OmniConnector<EvmWallet, { provider: EvmProvider }> {
120
115
  namespaces: {
121
116
  eip155: {
122
117
  methods: ["eth_sendTransaction", "eth_signTransaction", "eth_sign", "personal_sign", "eth_signTypedData"],
123
- chains: chains.map((chain) => `eip155:${chain}`),
118
+ chains: Object.values(Network).map((chain) => `eip155:${chain}`),
124
119
  events: ["chainChanged", "accountsChanged"],
125
120
  rpcMap: {},
126
121
  },
@@ -0,0 +1,7 @@
1
+ import EvmConnector from "./connector";
2
+ import { HotConnector } from "../HotConnector";
3
+
4
+ export { default as EvmConnector } from "./connector";
5
+ export { default as EvmWallet } from "./wallet";
6
+
7
+ export default () => async (wibe3: HotConnector) => new EvmConnector(wibe3);
@@ -1,4 +1,4 @@
1
- import { isInjected, requestHot } from "./hot";
1
+ import { isInjected, requestHot } from "../hot-wallet/iframe";
2
2
 
3
3
  class HotEvmProvider {
4
4
  _events = new Map<string, Set<any>>();
package/src/evm/wallet.ts CHANGED
@@ -1,11 +1,12 @@
1
1
  import { base64, base58, hex } from "@scure/base";
2
- import { BrowserProvider, ethers, JsonRpcProvider, JsonRpcSigner, TransactionRequest } from "ethers";
2
+ import { BrowserProvider, ethers, JsonRpcProvider, TransactionRequest } from "ethers";
3
+ import { JsonRpcSigner } from "ethers";
3
4
 
4
5
  import { OmniConnector } from "../OmniConnector";
5
6
  import { OmniWallet } from "../OmniWallet";
6
- import { WalletType } from "../omni/config";
7
- import { ReviewFee } from "../omni/bridge";
8
- import { Token } from "../omni/token";
7
+ import { WalletType } from "../core/chains";
8
+ import { ReviewFee } from "../core/bridge";
9
+ import { Token } from "../core/token";
9
10
  import { erc20abi } from "./abi";
10
11
 
11
12
  export interface EvmProvider {
@@ -110,8 +111,12 @@ class EvmWallet extends OmniWallet {
110
111
 
111
112
  async sendTransaction(chain: number, request: TransactionRequest): Promise<string> {
112
113
  if (!this.provider.request) throw "not impl";
114
+ const provider = new BrowserProvider(this.provider as any);
115
+ const signer = new JsonRpcSigner(provider, this.address);
116
+
113
117
  await this.provider.request({ method: "wallet_switchEthereumChain", params: [{ chainId: `0x${chain.toString(16)}` }] });
114
- return await this.provider.request({ method: "eth_sendTransaction", params: [request] });
118
+ const tx = await signer.sendTransaction(request);
119
+ return tx.hash;
115
120
  }
116
121
 
117
122
  async transfer(args: { token: Token; receiver: string; amount: bigint; comment?: string; gasFee?: ReviewFee }): Promise<string> {
package/src/exchange.ts CHANGED
@@ -2,18 +2,15 @@ import { GetExecutionStatusResponse, OneClickService, ApiError, OpenAPI, QuoteRe
2
2
  import { utils } from "@hot-labs/omni-sdk";
3
3
  import { hex } from "@scure/base";
4
4
 
5
- import CosmosWallet from "./cosmos/wallet";
6
- import StellarWallet from "./stellar/wallet";
7
- import NearWallet from "./near/wallet";
8
- import EvmWallet from "./evm/wallet";
5
+ import { Network, OmniToken, WalletType } from "./core/chains";
6
+ import { ReviewFee } from "./core/bridge";
7
+ import { Recipient } from "./core/recipient";
8
+ import { tokens } from "./core/tokens";
9
+ import { Token } from "./core/token";
9
10
 
11
+ import StellarWallet from "./stellar/wallet";
10
12
  import { HotConnector } from "./HotConnector";
11
- import { Network, OmniToken, WalletType } from "./omni/config";
12
- import { bridge, ReviewFee } from "./omni/bridge";
13
- import { Recipient } from "./omni/recipient";
14
13
  import { OmniWallet } from "./OmniWallet";
15
- import { tokens } from "./omni/tokens";
16
- import { Token } from "./omni/token";
17
14
 
18
15
  OpenAPI.BASE = "https://1click.chaindefuser.com";
19
16
  OpenAPI.TOKEN = "";
@@ -78,11 +75,11 @@ export class Exchange {
78
75
  const { sender, token, amount, recipient, onMessage } = args;
79
76
  onMessage("Sending deposit transaction");
80
77
 
81
- if (token.type === WalletType.COSMOS && sender instanceof CosmosWallet) {
82
- const cosmosBridge = await bridge.cosmos();
78
+ if (token.type === WalletType.COSMOS && this.wibe3.isCosmosWallet(sender)) {
79
+ const cosmosBridge = await this.wibe3.hotBridge.cosmos();
83
80
  const hash = await cosmosBridge.deposit({
84
81
  sendTransaction: async (tx) => sender.sendTransaction(tx),
85
- senderPublicKey: hex.decode(sender.publicKey),
82
+ senderPublicKey: hex.decode(sender.publicKey!),
86
83
  intentAccount: recipient.omniAddress,
87
84
  sender: sender.address,
88
85
  token: token.address,
@@ -91,15 +88,15 @@ export class Exchange {
91
88
  });
92
89
 
93
90
  onMessage("Waiting for deposit");
94
- const deposit = await bridge.waitPendingDeposit(token.chain, hash, recipient.omniAddress);
91
+ const deposit = await this.wibe3.hotBridge.waitPendingDeposit(token.chain, hash, recipient.omniAddress);
95
92
  onMessage("Finishing deposit");
96
- await bridge.finishDeposit(deposit);
93
+ await this.wibe3.hotBridge.finishDeposit(deposit);
97
94
  onMessage("Deposit finished");
98
95
  return;
99
96
  }
100
97
 
101
- if (token.type === WalletType.EVM && sender instanceof EvmWallet) {
102
- const hash = await bridge.evm.deposit({
98
+ if (token.type === WalletType.EVM && this.wibe3.isEvmWallet(sender)) {
99
+ const hash = await this.wibe3.hotBridge.evm.deposit({
103
100
  sendTransaction: async (tx) => sender.sendTransaction(token.chain, tx),
104
101
  intentAccount: recipient.omniAddress,
105
102
  sender: sender.address,
@@ -110,15 +107,15 @@ export class Exchange {
110
107
 
111
108
  if (!hash) throw new Error("Failed to deposit");
112
109
  onMessage("Waiting for deposit");
113
- const deposit = await bridge.waitPendingDeposit(token.chain, hash, recipient.omniAddress);
110
+ const deposit = await this.wibe3.hotBridge.waitPendingDeposit(token.chain, hash, recipient.omniAddress);
114
111
  onMessage("Finishing deposit");
115
- await bridge.finishDeposit(deposit);
112
+ await this.wibe3.hotBridge.finishDeposit(deposit);
116
113
  onMessage("Deposit finished");
117
114
  return;
118
115
  }
119
116
 
120
- if (token.type === WalletType.NEAR && sender instanceof NearWallet) {
121
- return await bridge.near.deposit({
117
+ if (token.type === WalletType.NEAR && this.wibe3.isNearWallet(sender)) {
118
+ return await this.wibe3.hotBridge.near.deposit({
122
119
  sendTransaction: async (tx: any) => sender.sendTransaction(tx),
123
120
  intentAccount: recipient.omniAddress,
124
121
  sender: sender.address,
@@ -134,11 +131,11 @@ export class Exchange {
134
131
  const { sender, token, amount, recipient } = args;
135
132
 
136
133
  const receipientWallet = this.wibe3.wallets.find((w) => w.address === recipient.address);
137
- if (receipientWallet instanceof NearWallet && token.type === WalletType.NEAR) {
134
+ if (this.wibe3.isNearWallet(receipientWallet) && token.type === WalletType.NEAR) {
138
135
  await receipientWallet.registerToken(token.originalAddress);
139
136
  }
140
137
 
141
- await bridge.withdrawToken({
138
+ await this.wibe3.hotBridge.withdrawToken({
142
139
  signIntents: async (intents) => sender.signIntents(intents),
143
140
  intentAccount: sender.omniAddress,
144
141
  receiver: recipient.address,
@@ -152,7 +149,7 @@ export class Exchange {
152
149
  async withdrawFee(request: BridgeRequest) {
153
150
  if (request.sender === "qr") throw new Error("Sender is QR");
154
151
  if (request.to.chain === Network.Near || request.to.chain === Network.Hot) return 0n;
155
- const gaslessFee = await bridge.getGaslessWithdrawFee({
152
+ const gaslessFee = await this.wibe3.hotBridge.getGaslessWithdrawFee({
156
153
  receiver: request.recipient.address,
157
154
  token: request.to.address,
158
155
  chain: request.to.chain,
@@ -162,7 +159,7 @@ export class Exchange {
162
159
  if (request.to.address === "native") return 0n;
163
160
 
164
161
  // if withdraw token is not native, we need to swap a bit of it to native to cover the withdraw fee
165
- const swap = await bridge.buildSwapExectOutIntent({
162
+ const swap = await this.wibe3.hotBridge.buildSwapExectOutIntent({
166
163
  intentFrom: utils.toOmniIntent(request.to.chain, request.to.address),
167
164
  intentTo: utils.toOmniIntent(request.to.chain, "native"),
168
165
  amountOut: gaslessFee.gasPrice,
@@ -186,7 +183,7 @@ export class Exchange {
186
183
  const noFee = from.symbol === to.symbol;
187
184
 
188
185
  if (sender !== "qr" && directChains.includes(from.chain) && to.chain === Network.Hot && from.omniAddress === to.omniAddress) {
189
- const fee = await bridge.getDepositFee({
186
+ const fee = await this.wibe3.hotBridge.getDepositFee({
190
187
  intentAccount: sender.omniAddress,
191
188
  sender: sender.address,
192
189
  token: from.address,
@@ -1,18 +1,22 @@
1
1
  import { WalletManifest, SignAndSendTransactionParams, SignAndSendTransactionsParams, SignMessageParams } from "@hot-labs/near-connect";
2
2
  import { Transaction } from "@stellar/stellar-base";
3
3
  import { action, makeObservable } from "mobx";
4
+ import uuid4 from "uuid4";
4
5
 
5
- import { requestWebWallet } from "./hot-wallet/wallet";
6
- import { ConnectorType, OmniConnector } from "./OmniConnector";
7
- import { OmniWallet } from "./OmniWallet";
8
- import { WalletType } from "./omni/config";
6
+ import { ConnectorType, OmniConnector } from "../OmniConnector";
7
+ import { OmniWallet } from "../OmniWallet";
8
+ import { WalletType } from "../core/chains";
9
9
 
10
- import EvmWallet from "./evm/wallet";
11
- import NearWallet from "./near/wallet";
12
- import SolanaWallet from "./solana/wallet";
13
- import TonWallet from "./ton/wallet";
14
- import StellarWallet from "./stellar/wallet";
15
- import { HotConnector } from "./HotConnector";
10
+ import EvmWallet from "../evm/wallet";
11
+ import NearWallet from "../near/wallet";
12
+ import SolanaWallet from "../solana/wallet";
13
+ import TonWallet from "../ton/wallet";
14
+ import StellarWallet from "../stellar/wallet";
15
+ import { HotConnector } from "../HotConnector";
16
+
17
+ export interface GoogleConnectorOptions {
18
+ webWallet?: string;
19
+ }
16
20
 
17
21
  class GoogleConnector extends OmniConnector<OmniWallet> {
18
22
  walletTypes = [WalletType.EVM, WalletType.STELLAR, WalletType.TON, WalletType.NEAR, WalletType.SOLANA];
@@ -20,21 +24,20 @@ class GoogleConnector extends OmniConnector<OmniWallet> {
20
24
  type = ConnectorType.SOCIAL;
21
25
  name = "Google Wallet";
22
26
  id = "google";
27
+ webWallet: string;
23
28
 
24
- constructor(wibe3: HotConnector) {
29
+ constructor(wibe3: HotConnector, options?: GoogleConnectorOptions) {
25
30
  super(wibe3);
26
31
 
27
- makeObservable(this, {
28
- connectWallet: action,
29
- });
30
-
32
+ this.webWallet = options?.webWallet ?? "https://wallet.google.com";
33
+ makeObservable(this, { connectWallet: action });
31
34
  this.getStorage().then((accounts: any) => {
32
35
  accounts.forEach((account: any) => this.connectWallet(account));
33
36
  });
34
37
  }
35
38
 
36
39
  connectWallet(account: { type: number; address: string; publicKey: string }) {
37
- const request = requestWebWallet(account.type, account.address);
40
+ const request = this.requestWebWallet(account.type, account.address);
38
41
 
39
42
  if (account.type === WalletType.EVM) {
40
43
  this.setWallet(
@@ -87,7 +90,7 @@ class GoogleConnector extends OmniConnector<OmniWallet> {
87
90
  }
88
91
 
89
92
  async connect() {
90
- const accounts = await requestWebWallet()("connect:google", {});
93
+ const accounts = await this.requestWebWallet()("connect:google", {});
91
94
  accounts.forEach((account: { type: number; address: string; publicKey: string }) => this.connectWallet(account));
92
95
  this.setStorage(accounts);
93
96
  return this.wallets[0];
@@ -97,6 +100,46 @@ class GoogleConnector extends OmniConnector<OmniWallet> {
97
100
  this.removeAllWallets();
98
101
  this.removeStorage();
99
102
  }
103
+
104
+ requestWebWallet = (chain?: number, address?: string) => (method: string, request: any) => {
105
+ const width = 480;
106
+ const height = 640;
107
+ const x = (window.screen.width - width) / 2;
108
+ const y = (window.screen.height - height) / 2;
109
+ const popup = window.open(`${this.wibe3.settings.webWallet}`, "_blank", `popup=1,width=${width},height=${height},top=${y},left=${x}`);
110
+
111
+ return new Promise<any>(async (resolve, reject) => {
112
+ const interval = setInterval(() => {
113
+ if (!popup?.closed) return;
114
+ clearInterval(interval);
115
+ reject(new Error("User rejected"));
116
+ }, 100);
117
+
118
+ const id = uuid4();
119
+ const handler = (event: MessageEvent) => {
120
+ if (event.origin !== this.wibe3.settings.webWallet) return;
121
+
122
+ if (event.data === "hot:ready") {
123
+ popup?.postMessage({ chain, address, method, request, id }, "*");
124
+ return;
125
+ }
126
+
127
+ if (event.data.id !== id) return;
128
+ if (event.data.success === false) {
129
+ clearInterval(interval);
130
+ reject(new Error(event.data.payload));
131
+ window.removeEventListener("message", handler);
132
+ }
133
+
134
+ window.removeEventListener("message", handler);
135
+ resolve(event.data.payload);
136
+ clearInterval(interval);
137
+ popup?.close();
138
+ };
139
+
140
+ window.addEventListener("message", handler);
141
+ });
142
+ };
100
143
  }
101
144
 
102
145
  export default GoogleConnector;
@@ -1,11 +1,4 @@
1
- const ancestorOrigins = new Set([
2
- "http://localhost:1234",
3
- "https://my.herewallet.app",
4
- "https://tgapp-dev.herewallet.app",
5
- "https://tgapp.herewallet.app",
6
- "https://beta.herewallet.app",
7
- "https://app.hot-labs.org",
8
- ]);
1
+ const ancestorOrigins = new Set(["http://localhost:1234", "https://my.herewallet.app", "https://tgapp-dev.herewallet.app", "https://tgapp.herewallet.app", "https://beta.herewallet.app", "https://app.hot-labs.org"]);
9
2
 
10
3
  export const isInjected = () => {
11
4
  if (typeof window === "undefined") return false;
@@ -1,4 +1,6 @@
1
- import "./evm";
2
- import "./solana";
3
- import "./ton";
4
- import "./solana";
1
+ import GoogleConnector, { GoogleConnectorOptions } from "./google";
2
+ import { HotConnector } from "../HotConnector";
3
+
4
+ export { GoogleConnector, GoogleConnectorOptions };
5
+
6
+ export default (options?: GoogleConnectorOptions) => async (wibe3: HotConnector) => new GoogleConnector(wibe3, options);
package/src/index.ts CHANGED
@@ -1,30 +1,7 @@
1
- export { Network, OmniToken, WalletType } from "./omni/config";
2
- export { formatter } from "./omni/utils";
3
- export { EventEmitter } from "./events";
4
-
5
1
  export { OmniWallet } from "./OmniWallet";
6
2
  export { OmniConnector } from "./OmniConnector";
7
- export { Intents } from "./omni/Intents";
8
- export { Token } from "./omni/token";
9
- export { TGAS } from "./omni/nearRpc";
10
-
11
- export { default as EvmConnector } from "./evm/connector";
12
- export { default as SolanaConnector } from "./solana/connector";
13
- export { default as StellarConnector } from "./stellar/connector";
14
- export { default as TonConnector } from "./ton/connector";
15
- export { default as NearConnector } from "./near/connector";
16
- export { default as CosmosConnector } from "./cosmos/connector";
17
-
18
- export { default as EvmWallet } from "./evm/wallet";
19
- export { default as SolanaWallet } from "./solana/wallet";
20
- export { default as StellarWallet } from "./stellar/wallet";
21
- export { default as TonWallet } from "./ton/wallet";
22
- export { default as NearWallet } from "./near/wallet";
23
- export { default as CosmosWallet } from "./cosmos/wallet";
24
-
25
- export { near, evm, solana, stellar, ton, google } from "./HotConnector";
26
3
  export { HotConnector } from "./HotConnector";
27
4
 
28
- import "./hot-wallet";
29
-
30
5
  export { Bridge as BridgeWidget } from "./ui/payment/Bridge";
6
+
7
+ export * from "./core";