@uswap/toolboxes 4.3.6

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 (275) hide show
  1. package/dist/src/cardano/index.cjs +4 -0
  2. package/dist/src/cardano/index.cjs.map +11 -0
  3. package/dist/src/cardano/index.js +4 -0
  4. package/dist/src/cardano/index.js.map +11 -0
  5. package/dist/src/cosmos/index.cjs +4 -0
  6. package/dist/src/cosmos/index.cjs.map +20 -0
  7. package/dist/src/cosmos/index.js +4 -0
  8. package/dist/src/cosmos/index.js.map +20 -0
  9. package/dist/src/evm/index.cjs +4 -0
  10. package/dist/src/evm/index.cjs.map +20 -0
  11. package/dist/src/evm/index.js +4 -0
  12. package/dist/src/evm/index.js.map +20 -0
  13. package/dist/src/index.cjs +5 -0
  14. package/dist/src/index.cjs.map +67 -0
  15. package/dist/src/index.js +5 -0
  16. package/dist/src/index.js.map +67 -0
  17. package/dist/src/near/index.cjs +4 -0
  18. package/dist/src/near/index.cjs.map +16 -0
  19. package/dist/src/near/index.js +4 -0
  20. package/dist/src/near/index.js.map +16 -0
  21. package/dist/src/radix/index.cjs +4 -0
  22. package/dist/src/radix/index.cjs.map +10 -0
  23. package/dist/src/radix/index.js +4 -0
  24. package/dist/src/radix/index.js.map +10 -0
  25. package/dist/src/ripple/index.cjs +4 -0
  26. package/dist/src/ripple/index.cjs.map +10 -0
  27. package/dist/src/ripple/index.js +4 -0
  28. package/dist/src/ripple/index.js.map +10 -0
  29. package/dist/src/solana/index.cjs +4 -0
  30. package/dist/src/solana/index.cjs.map +11 -0
  31. package/dist/src/solana/index.js +4 -0
  32. package/dist/src/solana/index.js.map +11 -0
  33. package/dist/src/substrate/index.cjs +4 -0
  34. package/dist/src/substrate/index.cjs.map +13 -0
  35. package/dist/src/substrate/index.js +4 -0
  36. package/dist/src/substrate/index.js.map +13 -0
  37. package/dist/src/sui/index.cjs +4 -0
  38. package/dist/src/sui/index.cjs.map +11 -0
  39. package/dist/src/sui/index.js +4 -0
  40. package/dist/src/sui/index.js.map +11 -0
  41. package/dist/src/ton/index.cjs +4 -0
  42. package/dist/src/ton/index.cjs.map +11 -0
  43. package/dist/src/ton/index.js +4 -0
  44. package/dist/src/ton/index.js.map +11 -0
  45. package/dist/src/tron/index.cjs +4 -0
  46. package/dist/src/tron/index.cjs.map +13 -0
  47. package/dist/src/tron/index.js +4 -0
  48. package/dist/src/tron/index.js.map +13 -0
  49. package/dist/src/utxo/index.cjs +5 -0
  50. package/dist/src/utxo/index.cjs.map +21 -0
  51. package/dist/src/utxo/index.js +5 -0
  52. package/dist/src/utxo/index.js.map +21 -0
  53. package/dist/types/cardano/index.d.ts +3 -0
  54. package/dist/types/cardano/index.d.ts.map +1 -0
  55. package/dist/types/cardano/toolbox.d.ts +34 -0
  56. package/dist/types/cardano/toolbox.d.ts.map +1 -0
  57. package/dist/types/cardano/types.d.ts +11 -0
  58. package/dist/types/cardano/types.d.ts.map +1 -0
  59. package/dist/types/cosmos/index.d.ts +5 -0
  60. package/dist/types/cosmos/index.d.ts.map +1 -0
  61. package/dist/types/cosmos/thorchainUtils/addressFormat.d.ts +5 -0
  62. package/dist/types/cosmos/thorchainUtils/addressFormat.d.ts.map +1 -0
  63. package/dist/types/cosmos/thorchainUtils/index.d.ts +5 -0
  64. package/dist/types/cosmos/thorchainUtils/index.d.ts.map +1 -0
  65. package/dist/types/cosmos/thorchainUtils/messages.d.ts +208 -0
  66. package/dist/types/cosmos/thorchainUtils/messages.d.ts.map +1 -0
  67. package/dist/types/cosmos/thorchainUtils/registry.d.ts +4 -0
  68. package/dist/types/cosmos/thorchainUtils/registry.d.ts.map +1 -0
  69. package/dist/types/cosmos/thorchainUtils/types/MsgCompiled.d.ts +2 -0
  70. package/dist/types/cosmos/thorchainUtils/types/MsgCompiled.d.ts.map +1 -0
  71. package/dist/types/cosmos/thorchainUtils/types/client-types.d.ts +63 -0
  72. package/dist/types/cosmos/thorchainUtils/types/client-types.d.ts.map +1 -0
  73. package/dist/types/cosmos/thorchainUtils/types/index.d.ts +2 -0
  74. package/dist/types/cosmos/thorchainUtils/types/index.d.ts.map +1 -0
  75. package/dist/types/cosmos/toolbox/cosmos.d.ts +62 -0
  76. package/dist/types/cosmos/toolbox/cosmos.d.ts.map +1 -0
  77. package/dist/types/cosmos/toolbox/index.d.ts +15 -0
  78. package/dist/types/cosmos/toolbox/index.d.ts.map +1 -0
  79. package/dist/types/cosmos/toolbox/thorchain.d.ts +158 -0
  80. package/dist/types/cosmos/toolbox/thorchain.d.ts.map +1 -0
  81. package/dist/types/cosmos/types.d.ts +49 -0
  82. package/dist/types/cosmos/types.d.ts.map +1 -0
  83. package/dist/types/cosmos/util.d.ts +74 -0
  84. package/dist/types/cosmos/util.d.ts.map +1 -0
  85. package/dist/types/evm/api.d.ts +8 -0
  86. package/dist/types/evm/api.d.ts.map +1 -0
  87. package/dist/types/evm/contracts/eth/multicall.d.ts +36 -0
  88. package/dist/types/evm/contracts/eth/multicall.d.ts.map +1 -0
  89. package/dist/types/evm/contracts/op/gasOracle.d.ts +40 -0
  90. package/dist/types/evm/contracts/op/gasOracle.d.ts.map +1 -0
  91. package/dist/types/evm/helpers.d.ts +6 -0
  92. package/dist/types/evm/helpers.d.ts.map +1 -0
  93. package/dist/types/evm/index.d.ts +5 -0
  94. package/dist/types/evm/index.d.ts.map +1 -0
  95. package/dist/types/evm/toolbox/baseEVMToolbox.d.ts +83 -0
  96. package/dist/types/evm/toolbox/baseEVMToolbox.d.ts.map +1 -0
  97. package/dist/types/evm/toolbox/evm.d.ts +767 -0
  98. package/dist/types/evm/toolbox/evm.d.ts.map +1 -0
  99. package/dist/types/evm/toolbox/index.d.ts +7 -0
  100. package/dist/types/evm/toolbox/index.d.ts.map +1 -0
  101. package/dist/types/evm/toolbox/op.d.ts +76 -0
  102. package/dist/types/evm/toolbox/op.d.ts.map +1 -0
  103. package/dist/types/evm/types.d.ts +108 -0
  104. package/dist/types/evm/types.d.ts.map +1 -0
  105. package/dist/types/index.d.ts +75 -0
  106. package/dist/types/index.d.ts.map +1 -0
  107. package/dist/types/near/helpers/core.d.ts +15 -0
  108. package/dist/types/near/helpers/core.d.ts.map +1 -0
  109. package/dist/types/near/helpers/gasEstimation.d.ts +41 -0
  110. package/dist/types/near/helpers/gasEstimation.d.ts.map +1 -0
  111. package/dist/types/near/helpers/nep141.d.ts +36 -0
  112. package/dist/types/near/helpers/nep141.d.ts.map +1 -0
  113. package/dist/types/near/index.d.ts +10 -0
  114. package/dist/types/near/index.d.ts.map +1 -0
  115. package/dist/types/near/toolbox.d.ts +32 -0
  116. package/dist/types/near/toolbox.d.ts.map +1 -0
  117. package/dist/types/near/types/contract.d.ts +38 -0
  118. package/dist/types/near/types/contract.d.ts.map +1 -0
  119. package/dist/types/near/types/nep141.d.ts +29 -0
  120. package/dist/types/near/types/nep141.d.ts.map +1 -0
  121. package/dist/types/near/types/toolbox.d.ts +51 -0
  122. package/dist/types/near/types/toolbox.d.ts.map +1 -0
  123. package/dist/types/near/types.d.ts +47 -0
  124. package/dist/types/near/types.d.ts.map +1 -0
  125. package/dist/types/radix/index.d.ts +14 -0
  126. package/dist/types/radix/index.d.ts.map +1 -0
  127. package/dist/types/ripple/index.d.ts +46 -0
  128. package/dist/types/ripple/index.d.ts.map +1 -0
  129. package/dist/types/solana/index.d.ts +23 -0
  130. package/dist/types/solana/index.d.ts.map +1 -0
  131. package/dist/types/solana/toolbox.d.ts +51 -0
  132. package/dist/types/solana/toolbox.d.ts.map +1 -0
  133. package/dist/types/substrate/balance.d.ts +17 -0
  134. package/dist/types/substrate/balance.d.ts.map +1 -0
  135. package/dist/types/substrate/index.d.ts +3 -0
  136. package/dist/types/substrate/index.d.ts.map +1 -0
  137. package/dist/types/substrate/substrate.d.ts +148 -0
  138. package/dist/types/substrate/substrate.d.ts.map +1 -0
  139. package/dist/types/substrate/types.d.ts +100 -0
  140. package/dist/types/substrate/types.d.ts.map +1 -0
  141. package/dist/types/sui/index.d.ts +3 -0
  142. package/dist/types/sui/index.d.ts.map +1 -0
  143. package/dist/types/sui/toolbox.d.ts +19 -0
  144. package/dist/types/sui/toolbox.d.ts.map +1 -0
  145. package/dist/types/sui/types.d.ts +16 -0
  146. package/dist/types/sui/types.d.ts.map +1 -0
  147. package/dist/types/ton/index.d.ts +3 -0
  148. package/dist/types/ton/index.d.ts.map +1 -0
  149. package/dist/types/ton/toolbox.d.ts +14 -0
  150. package/dist/types/ton/toolbox.d.ts.map +1 -0
  151. package/dist/types/ton/types.d.ts +22 -0
  152. package/dist/types/ton/types.d.ts.map +1 -0
  153. package/dist/types/tron/helpers/trc20.abi.d.ts +156 -0
  154. package/dist/types/tron/helpers/trc20.abi.d.ts.map +1 -0
  155. package/dist/types/tron/helpers/trongrid.d.ts +8 -0
  156. package/dist/types/tron/helpers/trongrid.d.ts.map +1 -0
  157. package/dist/types/tron/index.d.ts +6 -0
  158. package/dist/types/tron/index.d.ts.map +1 -0
  159. package/dist/types/tron/toolbox.d.ts +26 -0
  160. package/dist/types/tron/toolbox.d.ts.map +1 -0
  161. package/dist/types/tron/types.d.ts +103 -0
  162. package/dist/types/tron/types.d.ts.map +1 -0
  163. package/dist/types/types.d.ts +26 -0
  164. package/dist/types/types.d.ts.map +1 -0
  165. package/dist/types/utils.d.ts +4 -0
  166. package/dist/types/utils.d.ts.map +1 -0
  167. package/dist/types/utxo/helpers/api.d.ts +101 -0
  168. package/dist/types/utxo/helpers/api.d.ts.map +1 -0
  169. package/dist/types/utxo/helpers/bchaddrjs.d.ts +10 -0
  170. package/dist/types/utxo/helpers/bchaddrjs.d.ts.map +1 -0
  171. package/dist/types/utxo/helpers/coinselect.d.ts +17 -0
  172. package/dist/types/utxo/helpers/coinselect.d.ts.map +1 -0
  173. package/dist/types/utxo/helpers/index.d.ts +5 -0
  174. package/dist/types/utxo/helpers/index.d.ts.map +1 -0
  175. package/dist/types/utxo/helpers/txSize.d.ts +21 -0
  176. package/dist/types/utxo/helpers/txSize.d.ts.map +1 -0
  177. package/dist/types/utxo/index.d.ts +7 -0
  178. package/dist/types/utxo/index.d.ts.map +1 -0
  179. package/dist/types/utxo/toolbox/bitcoinCash.d.ts +93 -0
  180. package/dist/types/utxo/toolbox/bitcoinCash.d.ts.map +1 -0
  181. package/dist/types/utxo/toolbox/index.d.ts +28 -0
  182. package/dist/types/utxo/toolbox/index.d.ts.map +1 -0
  183. package/dist/types/utxo/toolbox/params.d.ts +32 -0
  184. package/dist/types/utxo/toolbox/params.d.ts.map +1 -0
  185. package/dist/types/utxo/toolbox/utxo.d.ts +103 -0
  186. package/dist/types/utxo/toolbox/utxo.d.ts.map +1 -0
  187. package/dist/types/utxo/toolbox/validators.d.ts +4 -0
  188. package/dist/types/utxo/toolbox/validators.d.ts.map +1 -0
  189. package/dist/types/utxo/toolbox/zcash.d.ts +72 -0
  190. package/dist/types/utxo/toolbox/zcash.d.ts.map +1 -0
  191. package/dist/types/utxo/types.d.ts +46 -0
  192. package/dist/types/utxo/types.d.ts.map +1 -0
  193. package/package.json +205 -0
  194. package/src/__tests__/address-validation-all-chains.test.ts +162 -0
  195. package/src/__tests__/addressValidator.test.ts +162 -0
  196. package/src/cardano/__tests__/toolbox.test.ts +48 -0
  197. package/src/cardano/index.ts +2 -0
  198. package/src/cardano/toolbox.ts +168 -0
  199. package/src/cardano/types.ts +10 -0
  200. package/src/cosmos/__tests__/toolbox.test.ts +91 -0
  201. package/src/cosmos/index.ts +4 -0
  202. package/src/cosmos/thorchainUtils/addressFormat.ts +22 -0
  203. package/src/cosmos/thorchainUtils/index.ts +4 -0
  204. package/src/cosmos/thorchainUtils/messages.ts +212 -0
  205. package/src/cosmos/thorchainUtils/registry.ts +43 -0
  206. package/src/cosmos/thorchainUtils/types/MsgCompiled.ts +2800 -0
  207. package/src/cosmos/thorchainUtils/types/client-types.ts +54 -0
  208. package/src/cosmos/thorchainUtils/types/index.ts +1 -0
  209. package/src/cosmos/toolbox/cosmos.ts +345 -0
  210. package/src/cosmos/toolbox/index.ts +35 -0
  211. package/src/cosmos/toolbox/thorchain.ts +249 -0
  212. package/src/cosmos/types.ts +48 -0
  213. package/src/cosmos/util.ts +214 -0
  214. package/src/evm/__tests__/address-validation.test.ts +84 -0
  215. package/src/evm/__tests__/ethereum.test.ts +137 -0
  216. package/src/evm/__tests__/signMessage.test.ts +60 -0
  217. package/src/evm/api.ts +10 -0
  218. package/src/evm/contracts/eth/multicall.ts +165 -0
  219. package/src/evm/contracts/op/gasOracle.ts +145 -0
  220. package/src/evm/helpers.ts +73 -0
  221. package/src/evm/index.ts +4 -0
  222. package/src/evm/toolbox/baseEVMToolbox.ts +695 -0
  223. package/src/evm/toolbox/evm.ts +67 -0
  224. package/src/evm/toolbox/index.ts +44 -0
  225. package/src/evm/toolbox/op.ts +156 -0
  226. package/src/evm/types.ts +146 -0
  227. package/src/index.ts +260 -0
  228. package/src/near/__tests__/core.test.ts +70 -0
  229. package/src/near/helpers/core.ts +85 -0
  230. package/src/near/helpers/gasEstimation.ts +96 -0
  231. package/src/near/helpers/nep141.ts +50 -0
  232. package/src/near/index.ts +21 -0
  233. package/src/near/toolbox.ts +421 -0
  234. package/src/near/types/contract.ts +32 -0
  235. package/src/near/types/nep141.ts +34 -0
  236. package/src/near/types/toolbox.ts +55 -0
  237. package/src/near/types.ts +44 -0
  238. package/src/radix/index.ts +132 -0
  239. package/src/ripple/index.ts +179 -0
  240. package/src/solana/index.ts +36 -0
  241. package/src/solana/toolbox.ts +415 -0
  242. package/src/substrate/balance.ts +88 -0
  243. package/src/substrate/index.ts +2 -0
  244. package/src/substrate/substrate.ts +281 -0
  245. package/src/substrate/types.ts +115 -0
  246. package/src/sui/__tests__/toolbox.test.ts +82 -0
  247. package/src/sui/index.ts +2 -0
  248. package/src/sui/toolbox.ts +165 -0
  249. package/src/sui/types.ts +11 -0
  250. package/src/ton/__tests__/toolbox.test.ts +63 -0
  251. package/src/ton/index.ts +2 -0
  252. package/src/ton/toolbox.ts +136 -0
  253. package/src/ton/types.ts +13 -0
  254. package/src/tron/__tests__/toolbox.test.ts +221 -0
  255. package/src/tron/helpers/trc20.abi.ts +107 -0
  256. package/src/tron/helpers/trongrid.ts +53 -0
  257. package/src/tron/index.ts +21 -0
  258. package/src/tron/toolbox.ts +585 -0
  259. package/src/tron/types.ts +83 -0
  260. package/src/types.ts +28 -0
  261. package/src/utils.ts +27 -0
  262. package/src/utxo/__tests__/zcash-integration.test.ts +97 -0
  263. package/src/utxo/helpers/api.ts +471 -0
  264. package/src/utxo/helpers/bchaddrjs.ts +166 -0
  265. package/src/utxo/helpers/coinselect.ts +92 -0
  266. package/src/utxo/helpers/index.ts +4 -0
  267. package/src/utxo/helpers/txSize.ts +137 -0
  268. package/src/utxo/index.ts +6 -0
  269. package/src/utxo/toolbox/bitcoinCash.ts +243 -0
  270. package/src/utxo/toolbox/index.ts +59 -0
  271. package/src/utxo/toolbox/params.ts +18 -0
  272. package/src/utxo/toolbox/utxo.ts +439 -0
  273. package/src/utxo/toolbox/validators.ts +36 -0
  274. package/src/utxo/toolbox/zcash.ts +245 -0
  275. package/src/utxo/types.ts +39 -0
@@ -0,0 +1,70 @@
1
+ import { beforeAll, beforeEach, describe, expect, test } from "bun:test";
2
+ import { JsonRpcProvider } from "@near-js/providers";
3
+ import { AssetValue, Chain, getRPCUrl } from "@uswap/helpers";
4
+ import { getFullAccessPublicKey } from "../helpers/core";
5
+ import { getNearToolbox } from "../toolbox";
6
+
7
+ const accountId = "ea03292d08136cca439513a33c76af083e5204eceb4ce720320fff84071a447f";
8
+
9
+ const context: { provider: JsonRpcProvider; toolbox: Awaited<ReturnType<typeof getNearToolbox>> } = {} as any;
10
+
11
+ beforeAll(async () => {
12
+ const rpcUrl = await getRPCUrl(Chain.Near);
13
+ context.provider = new JsonRpcProvider({ url: rpcUrl });
14
+ });
15
+
16
+ beforeEach(async () => {
17
+ context.toolbox = await getNearToolbox();
18
+ });
19
+
20
+ describe("NEAR createTransaction", () => {
21
+ test("should retrieve full access public key for valid account", async () => {
22
+ const toolbox = context.toolbox;
23
+
24
+ const transaction = await toolbox.createTransaction({
25
+ assetValue: AssetValue.from({ chain: Chain.Near, value: "0.001" }),
26
+ recipient: accountId,
27
+ sender: accountId,
28
+ });
29
+
30
+ expect(transaction).toBeDefined();
31
+ expect(transaction.publicKey).toBeDefined();
32
+ }, 30000);
33
+
34
+ test("should throw error for invalid account", async () => {
35
+ const provider = context.provider;
36
+ const invalidAccountId = "non-existent-account-12345.testnet";
37
+
38
+ await expect(async () => {
39
+ await getFullAccessPublicKey(provider, invalidAccountId);
40
+ }).toThrow();
41
+ }, 10000);
42
+
43
+ test("should handle network errors gracefully", async () => {
44
+ const invalidProvider = new JsonRpcProvider({ url: "https://invalid-rpc-url.test" });
45
+
46
+ await expect(async () => {
47
+ await getFullAccessPublicKey(invalidProvider, "any-account.testnet");
48
+ }).toThrow();
49
+ }, 10000);
50
+
51
+ test("should work with contract function call transaction", async () => {
52
+ const toolbox = context.toolbox;
53
+ const provider = context.provider;
54
+
55
+ const contractTransaction = await toolbox.createContractFunctionCall({
56
+ args: { account_id: accountId },
57
+ attachedDeposit: "1250000000000000000000",
58
+ contractId: "wrap.testnet",
59
+ gas: "300000000000000",
60
+ methodName: "storage_deposit",
61
+ sender: accountId,
62
+ });
63
+
64
+ expect(contractTransaction).toBeDefined();
65
+ expect(contractTransaction.publicKey).toBeDefined();
66
+
67
+ const { publicKey } = await getFullAccessPublicKey(provider, accountId);
68
+ expect(publicKey.toString()).toBe(contractTransaction.publicKey.toString());
69
+ }, 30000);
70
+ });
@@ -0,0 +1,85 @@
1
+ import type { KeyPair } from "@near-js/crypto";
2
+ import type { Provider } from "@near-js/providers";
3
+ import { KeyPairSigner } from "@near-js/signers";
4
+ import { type DerivationPathArray, derivationPathToString, SwapKitError } from "@uswap/helpers";
5
+ import type { NearSigner } from "../types";
6
+
7
+ export async function getValidateNearAddress() {
8
+ const { validateAccountId } = await import("near-sdk-js");
9
+ return (address: string) => {
10
+ // Use the official NEAR SDK validation function if available
11
+ try {
12
+ return validateAccountId(address);
13
+ } catch {
14
+ const ACCOUNT_ID_REGEX = /^(([a-z\d]+[-_])*[a-z\d]+\.)*([a-z\d]+[-_])*[a-z\d]+$/;
15
+
16
+ return address.length >= 2 && address.length <= 64 && ACCOUNT_ID_REGEX.test(address);
17
+ }
18
+ };
19
+ }
20
+
21
+ export async function getNearSignerFromPhrase(params: {
22
+ phrase: string;
23
+ derivationPath?: DerivationPathArray;
24
+ index?: number;
25
+ }) {
26
+ const { parseSeedPhrase } = await import("near-seed-phrase");
27
+ const { KeyPair } = await import("@near-js/crypto");
28
+
29
+ const index = params.index || 0;
30
+ const derivationPath = params.derivationPath
31
+ ? derivationPathToString(params.derivationPath.slice(0, 3) as [number, number, number])
32
+ : `m/44'/397'/${index}'`;
33
+
34
+ const { secretKey } = parseSeedPhrase(params.phrase, derivationPath);
35
+ const keyPair = KeyPair.fromString(secretKey as any);
36
+
37
+ return createNearSignerFromKeyPair(keyPair);
38
+ }
39
+
40
+ export async function getNearSignerFromPrivateKey(privateKey: string) {
41
+ const { KeyPair } = await import("@near-js/crypto");
42
+ const keyPair = KeyPair.fromString(privateKey as any);
43
+ return createNearSignerFromKeyPair(keyPair);
44
+ }
45
+
46
+ class SKKeyPairSigner extends KeyPairSigner {
47
+ #keyPair: KeyPair;
48
+
49
+ constructor(keyPair: KeyPair) {
50
+ super(keyPair);
51
+ this.#keyPair = keyPair;
52
+ }
53
+
54
+ getAddress(): Promise<string> {
55
+ const publicKey = this.#keyPair.getPublicKey();
56
+ const hexAddress = Buffer.from(publicKey.data).toString("hex");
57
+ return Promise.resolve(hexAddress);
58
+ }
59
+ }
60
+
61
+ function createNearSignerFromKeyPair(keyPair: KeyPair): NearSigner {
62
+ const keyPairSigner = new SKKeyPairSigner(keyPair);
63
+
64
+ return keyPairSigner;
65
+ }
66
+
67
+ export async function getFullAccessPublicKey(provider: Provider, accountId: string) {
68
+ const response = await provider.query({
69
+ account_id: accountId,
70
+ finality: "final",
71
+ request_type: "view_access_key_list",
72
+ });
73
+
74
+ const fullAccessKey = (response as any).keys.find((key: any) => key.access_key.permission === "FullAccess");
75
+
76
+ if (!fullAccessKey) {
77
+ throw new SwapKitError("toolbox_near_no_public_key_found");
78
+ }
79
+ const { PublicKey } = await import("@near-js/crypto");
80
+
81
+ const publicKey = PublicKey.fromString(fullAccessKey.public_key);
82
+ const nonce = (fullAccessKey.access_key.nonce as number) || 0;
83
+
84
+ return { nonce, publicKey };
85
+ }
@@ -0,0 +1,96 @@
1
+ import type { Account } from "@near-js/accounts";
2
+ import type { NearGasEstimateParams } from "../types/contract";
3
+
4
+ export const GAS_COSTS = {
5
+ ACCESS_KEY_ADDITION: "5",
6
+ ACCESS_KEY_DELETION: "5",
7
+ ACCOUNT_CREATION: "30",
8
+ CONTRACT_CALL: "150",
9
+ CONTRACT_DEPLOYMENT: "200",
10
+ SIMPLE_TRANSFER: "1",
11
+ STAKE: "10",
12
+ STORAGE_DEPOSIT: "150",
13
+ TOKEN_TRANSFER: "150",
14
+ } as const;
15
+
16
+ export function isSimpleTransfer(params: NearGasEstimateParams): params is { recipient: string; amount: string } {
17
+ return "recipient" in params && "amount" in params && !("contractId" in params);
18
+ }
19
+
20
+ export function isContractCall(
21
+ params: NearGasEstimateParams,
22
+ ): params is { contractId: string; methodName: string; args?: Record<string, any>; attachedDeposit?: string } {
23
+ return "contractId" in params && "methodName" in params;
24
+ }
25
+
26
+ export function isBatchTransaction(params: NearGasEstimateParams): params is { actions: any[] } {
27
+ return "actions" in params;
28
+ }
29
+
30
+ export function isAccountCreation(
31
+ params: NearGasEstimateParams,
32
+ ): params is { newAccountId: string; publicKey?: string } {
33
+ return "newAccountId" in params;
34
+ }
35
+
36
+ export function isContractDeployment(params: NearGasEstimateParams): params is { contractCode: Uint8Array } {
37
+ return "contractCode" in params;
38
+ }
39
+
40
+ export function isCustomEstimator(
41
+ params: NearGasEstimateParams,
42
+ ): params is { customEstimator: (account: Account) => Promise<string> } {
43
+ return "customEstimator" in params;
44
+ }
45
+
46
+ export function estimateBatchGas(actions: any[]) {
47
+ let totalGas = 0;
48
+
49
+ for (const action of actions) {
50
+ switch (action.enum) {
51
+ case "transfer":
52
+ totalGas += Number(GAS_COSTS.SIMPLE_TRANSFER);
53
+ break;
54
+ case "functionCall":
55
+ totalGas += Number(GAS_COSTS.CONTRACT_CALL);
56
+ break;
57
+ case "createAccount":
58
+ totalGas += Number(GAS_COSTS.ACCOUNT_CREATION);
59
+ break;
60
+ case "deployContract":
61
+ totalGas += Number(GAS_COSTS.CONTRACT_DEPLOYMENT);
62
+ break;
63
+ case "addKey":
64
+ totalGas += Number(GAS_COSTS.ACCESS_KEY_ADDITION);
65
+ break;
66
+ case "deleteKey":
67
+ totalGas += Number(GAS_COSTS.ACCESS_KEY_DELETION);
68
+ break;
69
+ case "stake":
70
+ totalGas += Number(GAS_COSTS.STAKE);
71
+ break;
72
+ default:
73
+ totalGas += Number(GAS_COSTS.CONTRACT_CALL);
74
+ }
75
+ }
76
+
77
+ return totalGas.toString();
78
+ }
79
+
80
+ export function getContractMethodGas(methodName: string) {
81
+ if (methodName === "ft_transfer" || methodName === "ft_transfer_call") {
82
+ return GAS_COSTS.TOKEN_TRANSFER;
83
+ }
84
+ if (methodName === "storage_deposit") {
85
+ return GAS_COSTS.STORAGE_DEPOSIT;
86
+ }
87
+ return GAS_COSTS.CONTRACT_CALL;
88
+ }
89
+
90
+ export function tgasToGas(tgas: string): string {
91
+ return (BigInt(tgas) * BigInt(10 ** 12)).toString();
92
+ }
93
+
94
+ export function gasToTGas(gas: string): string {
95
+ return (BigInt(gas) / BigInt(10 ** 12)).toString();
96
+ }
@@ -0,0 +1,50 @@
1
+ import type { Account, Contract } from "@near-js/accounts";
2
+
3
+ export interface NEP141Metadata {
4
+ spec: string;
5
+ name: string;
6
+ symbol: string;
7
+ icon?: string;
8
+ reference?: string;
9
+ reference_hash?: string;
10
+ decimals: number;
11
+ }
12
+
13
+ export interface StorageBalance {
14
+ total: string;
15
+ available: string;
16
+ }
17
+
18
+ export interface StorageBalanceBounds {
19
+ min: string;
20
+ max?: string;
21
+ }
22
+
23
+ export type NEP141Token = {
24
+ transfer: (receiverId: string, amount: string, memo?: string) => Promise<void>;
25
+ transferCall: (receiverId: string, amount: string, msg: string, memo?: string) => Promise<void>;
26
+ balanceOf: (accountId: string) => Promise<string>;
27
+ totalSupply: () => Promise<string>;
28
+ metadata: () => Promise<NEP141Metadata>;
29
+ storageBalanceOf: (accountId: string) => Promise<StorageBalance | null>;
30
+ storageDeposit: (accountId?: string, amount?: string) => Promise<StorageBalance>;
31
+ ensureStorage: (accountId: string) => Promise<void>;
32
+ contract: Contract;
33
+ };
34
+
35
+ // Create a Near contract instance
36
+ export async function createNearContract<T extends Contract>({
37
+ account,
38
+ contractId,
39
+ viewMethods,
40
+ changeMethods,
41
+ }: {
42
+ account: Account;
43
+ contractId: string;
44
+ viewMethods: string[];
45
+ changeMethods: string[];
46
+ }) {
47
+ const { Contract } = await import("@near-js/accounts");
48
+
49
+ return new Contract(account, contractId, { changeMethods, useLocalViewExecution: true, viewMethods }) as T;
50
+ }
@@ -0,0 +1,21 @@
1
+ import type { getNearToolbox } from "./toolbox";
2
+
3
+ export * from "./helpers/core";
4
+ export * from "./helpers/gasEstimation";
5
+ export * from "./helpers/nep141";
6
+ export * from "./toolbox";
7
+ export * from "./types";
8
+
9
+ export type NearWallet = Awaited<ReturnType<typeof getNearToolbox>>;
10
+
11
+ export type {
12
+ NearCallParams,
13
+ NearContractInterface,
14
+ NearGasEstimateParams,
15
+ } from "./types/contract";
16
+ export type {
17
+ FungibleTokenMetadata,
18
+ StorageBalance,
19
+ StorageBalanceBounds,
20
+ TokenTransferParams,
21
+ } from "./types/nep141";