@ledgerhq/coin-aptos 1.10.0-nightly.2 → 1.10.0-nightly.3

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 (72) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +8 -0
  3. package/lib/__tests__/api/craftTransaction.unit.test.js +147 -10
  4. package/lib/__tests__/api/craftTransaction.unit.test.js.map +1 -1
  5. package/lib/__tests__/api/index.integ.test.js +175 -2
  6. package/lib/__tests__/api/index.integ.test.js.map +1 -1
  7. package/lib/__tests__/logic/buildTransaction.test.js +8 -6
  8. package/lib/__tests__/logic/buildTransaction.test.js.map +1 -1
  9. package/lib/__tests__/network/client.test.js +1 -1
  10. package/lib/__tests__/network/client.test.js.map +1 -1
  11. package/lib/constants.d.ts +4 -1
  12. package/lib/constants.d.ts.map +1 -1
  13. package/lib/constants.js +6 -2
  14. package/lib/constants.js.map +1 -1
  15. package/lib/logic/buildTransaction.d.ts +4 -2
  16. package/lib/logic/buildTransaction.d.ts.map +1 -1
  17. package/lib/logic/buildTransaction.js +30 -28
  18. package/lib/logic/buildTransaction.js.map +1 -1
  19. package/lib/logic/craftTransaction.d.ts.map +1 -1
  20. package/lib/logic/craftTransaction.js +51 -6
  21. package/lib/logic/craftTransaction.js.map +1 -1
  22. package/lib/logic/transactionsToOperations.d.ts +1 -1
  23. package/lib/logic/transactionsToOperations.d.ts.map +1 -1
  24. package/lib/logic/transactionsToOperations.js +8 -10
  25. package/lib/logic/transactionsToOperations.js.map +1 -1
  26. package/lib/network/client.js +2 -2
  27. package/lib/network/client.js.map +1 -1
  28. package/lib/types/assets.d.ts +5 -1
  29. package/lib/types/assets.d.ts.map +1 -1
  30. package/lib/types/index.d.ts +1 -1
  31. package/lib/types/index.d.ts.map +1 -1
  32. package/lib-es/__tests__/api/craftTransaction.unit.test.js +147 -10
  33. package/lib-es/__tests__/api/craftTransaction.unit.test.js.map +1 -1
  34. package/lib-es/__tests__/api/index.integ.test.js +175 -2
  35. package/lib-es/__tests__/api/index.integ.test.js.map +1 -1
  36. package/lib-es/__tests__/logic/buildTransaction.test.js +8 -6
  37. package/lib-es/__tests__/logic/buildTransaction.test.js.map +1 -1
  38. package/lib-es/__tests__/network/client.test.js +1 -1
  39. package/lib-es/__tests__/network/client.test.js.map +1 -1
  40. package/lib-es/constants.d.ts +4 -1
  41. package/lib-es/constants.d.ts.map +1 -1
  42. package/lib-es/constants.js +5 -1
  43. package/lib-es/constants.js.map +1 -1
  44. package/lib-es/logic/buildTransaction.d.ts +4 -2
  45. package/lib-es/logic/buildTransaction.d.ts.map +1 -1
  46. package/lib-es/logic/buildTransaction.js +30 -30
  47. package/lib-es/logic/buildTransaction.js.map +1 -1
  48. package/lib-es/logic/craftTransaction.d.ts.map +1 -1
  49. package/lib-es/logic/craftTransaction.js +28 -6
  50. package/lib-es/logic/craftTransaction.js.map +1 -1
  51. package/lib-es/logic/transactionsToOperations.d.ts +1 -1
  52. package/lib-es/logic/transactionsToOperations.d.ts.map +1 -1
  53. package/lib-es/logic/transactionsToOperations.js +8 -10
  54. package/lib-es/logic/transactionsToOperations.js.map +1 -1
  55. package/lib-es/network/client.js +2 -2
  56. package/lib-es/network/client.js.map +1 -1
  57. package/lib-es/types/assets.d.ts +5 -1
  58. package/lib-es/types/assets.d.ts.map +1 -1
  59. package/lib-es/types/index.d.ts +1 -1
  60. package/lib-es/types/index.d.ts.map +1 -1
  61. package/package.json +5 -5
  62. package/src/__tests__/api/craftTransaction.unit.test.ts +193 -20
  63. package/src/__tests__/api/index.integ.test.ts +226 -2
  64. package/src/__tests__/logic/buildTransaction.test.ts +8 -6
  65. package/src/__tests__/network/client.test.ts +1 -1
  66. package/src/constants.ts +5 -1
  67. package/src/logic/buildTransaction.ts +45 -37
  68. package/src/logic/craftTransaction.ts +46 -7
  69. package/src/logic/transactionsToOperations.ts +9 -12
  70. package/src/network/client.ts +2 -2
  71. package/src/types/assets.ts +3 -1
  72. package/src/types/index.ts +1 -1
@@ -1,26 +1,65 @@
1
1
  import type { TransactionIntent } from "@ledgerhq/coin-framework/lib/api/types";
2
2
  import type { AptosAsset, AptosExtra, AptosSender } from "../types/assets";
3
- import type { Account } from "@ledgerhq/types-live";
3
+ import type { Account, TokenAccount } from "@ledgerhq/types-live";
4
4
  import type { AptosAPI } from "../network";
5
- import buildTransaction from "./buildTransaction";
5
+ import buildTransaction, { isTokenType } from "./buildTransaction";
6
6
  import createTransaction from "./createTransaction";
7
7
  import BigNumber from "bignumber.js";
8
+ import { APTOS_ASSET_ID, type TOKEN_TYPE } from "../constants";
9
+ import type { AptosBalance } from "../types";
8
10
 
9
11
  export async function craftTransaction(
10
12
  aptosClient: AptosAPI,
11
13
  transactionIntent: TransactionIntent<AptosAsset, AptosExtra, AptosSender>,
12
14
  ): Promise<string> {
15
+ const newTx = createTransaction();
16
+ newTx.amount = BigNumber(transactionIntent.amount.toString());
17
+ newTx.recipient = transactionIntent.recipient;
18
+ newTx.mode = transactionIntent.type;
19
+ newTx.useAllAmount = transactionIntent.amount === BigInt(0);
20
+
13
21
  const account = {
14
22
  freshAddress: transactionIntent.sender.freshAddress,
15
23
  xpub: transactionIntent.sender.xpub,
24
+ subAccounts: new Array<TokenAccount>(),
16
25
  } as Account;
17
26
 
18
- const newTx = createTransaction();
19
- newTx.amount = BigNumber(transactionIntent.amount.toString());
20
- newTx.recipient = transactionIntent.recipient;
21
- newTx.mode = transactionIntent.type;
27
+ let tokenType: TOKEN_TYPE | undefined;
28
+ const contractAddress = getContractAddress(transactionIntent);
29
+ let balance: AptosBalance | undefined;
30
+
31
+ if (newTx.useAllAmount === true) {
32
+ const balances = await aptosClient.getBalances(transactionIntent.sender.freshAddress);
33
+ balance = balances?.find(
34
+ b => b.contractAddress.toLowerCase() === contractAddress?.toLowerCase(),
35
+ );
36
+
37
+ if (balance !== undefined) {
38
+ newTx.amount = BigNumber(balance.amount.toString());
39
+ }
40
+ }
41
+
42
+ if (transactionIntent.asset.type === "token") {
43
+ tokenType = transactionIntent.asset.standard as TOKEN_TYPE;
44
+ }
22
45
 
23
- const aptosTx = await buildTransaction(account, newTx, aptosClient);
46
+ const aptosTx = await buildTransaction(
47
+ account,
48
+ newTx,
49
+ aptosClient,
50
+ contractAddress,
51
+ tokenType ?? undefined,
52
+ );
24
53
 
25
54
  return aptosTx.bcsToHex().toString();
26
55
  }
56
+
57
+ function getContractAddress(
58
+ txIntent: TransactionIntent<AptosAsset, AptosExtra, AptosSender>,
59
+ ): string {
60
+ if (txIntent.asset.type === "token" && isTokenType(txIntent.asset.standard)) {
61
+ return txIntent.asset.contractAddress;
62
+ }
63
+
64
+ return APTOS_ASSET_ID;
65
+ }
@@ -32,8 +32,8 @@ const detectType = (address: string, tx: AptosTransaction, value: BigNumber): DI
32
32
  export function transactionsToOperations(
33
33
  address: string,
34
34
  txs: (AptosTransaction | null)[],
35
- ): [Operation<AptosAsset>[], Operation<AptosAsset>[]] {
36
- const operations: [Operation<AptosAsset>[], Operation<AptosAsset>[]] = [[], []];
35
+ ): Operation<AptosAsset>[] {
36
+ const operations: Operation<AptosAsset>[] = [];
37
37
 
38
38
  return txs.reduce((acc, tx) => {
39
39
  if (tx === null) {
@@ -82,22 +82,19 @@ export function transactionsToOperations(
82
82
 
83
83
  if (op.type !== DIRECTION.UNKNOWN && coin_id !== null) {
84
84
  if (coin_id === APTOS_ASSET_ID) {
85
- acc[0].push(op);
85
+ acc.push(op);
86
86
  return acc;
87
87
  }
88
88
 
89
89
  const token = findTokenByAddressInCurrency(coin_id.toLowerCase(), "aptos");
90
90
 
91
91
  if (token !== undefined) {
92
- acc[1].push(op);
93
-
94
- if (op.type === DIRECTION.OUT) {
95
- acc[0].push({
96
- ...op,
97
- value: op.tx.fees,
98
- type: "FEES",
99
- });
100
- }
92
+ op.asset = {
93
+ type: "token",
94
+ standard: token.tokenType,
95
+ contractAddress: token.contractAddress,
96
+ };
97
+ acc.push(op);
101
98
  }
102
99
  }
103
100
  return acc;
@@ -262,7 +262,7 @@ export class AptosAPI {
262
262
  pagination: Pagination,
263
263
  ): Promise<[Operation<AptosAsset>[], string]> {
264
264
  const transactions = await this.getAccountInfo(address, pagination.minHeight.toString());
265
- const [newOperations, _] = transactionsToOperations(address, transactions.transactions);
265
+ const newOperations = transactionsToOperations(address, transactions.transactions);
266
266
 
267
267
  return [newOperations, ""];
268
268
  }
@@ -344,7 +344,7 @@ export class AptosAPI {
344
344
  });
345
345
 
346
346
  return response.map(x => ({
347
- asset_type: x.asset_type ?? "-",
347
+ contractAddress: x.asset_type ?? "-",
348
348
  amount: BigNumber(x.amount),
349
349
  }));
350
350
  }
@@ -1,6 +1,8 @@
1
1
  import type { Asset } from "@ledgerhq/coin-framework/api/types";
2
2
 
3
- export type AptosAsset = Asset;
3
+ export type AptosAsset = Asset<AptosTokenInformation>;
4
+
5
+ export type AptosTokenInformation = { standard: string; contractAddress: string };
4
6
 
5
7
  export type AptosExtra = Record<string, unknown>;
6
8
 
@@ -88,6 +88,6 @@ export type AptosMoveResource = {
88
88
  };
89
89
 
90
90
  export type AptosBalance = {
91
- asset_type: string;
91
+ contractAddress: string;
92
92
  amount: BigNumber;
93
93
  };