@ledgerhq/live-common 34.55.0-nightly.20251211024123 → 34.55.0-nightly.20251213023821

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 (196) hide show
  1. package/lib/bridge/generic-alpaca/accountBridge.d.ts.map +1 -1
  2. package/lib/bridge/generic-alpaca/accountBridge.js +2 -1
  3. package/lib/bridge/generic-alpaca/accountBridge.js.map +1 -1
  4. package/lib/bridge/generic-alpaca/signer/index.d.ts +4 -0
  5. package/lib/bridge/generic-alpaca/signer/index.d.ts.map +1 -1
  6. package/lib/bridge/generic-alpaca/signer/index.js +22 -1
  7. package/lib/bridge/generic-alpaca/signer/index.js.map +1 -1
  8. package/lib/bridge/mockHelpers.d.ts +1 -1
  9. package/lib/bridge/mockHelpers.d.ts.map +1 -1
  10. package/lib/bridge/mockHelpers.js +2 -6
  11. package/lib/bridge/mockHelpers.js.map +1 -1
  12. package/lib/bridge/validateAddress.d.ts +4 -0
  13. package/lib/bridge/validateAddress.d.ts.map +1 -0
  14. package/lib/bridge/validateAddress.js +14 -0
  15. package/lib/bridge/validateAddress.js.map +1 -0
  16. package/lib/e2e/speculos.d.ts.map +1 -1
  17. package/lib/e2e/speculos.js +0 -1
  18. package/lib/e2e/speculos.js.map +1 -1
  19. package/lib/e2e/speculosAppVersion.d.ts +1 -0
  20. package/lib/e2e/speculosAppVersion.d.ts.map +1 -1
  21. package/lib/e2e/speculosAppVersion.js +38 -14
  22. package/lib/e2e/speculosAppVersion.js.map +1 -1
  23. package/lib/e2e/speculosCI.d.ts.map +1 -1
  24. package/lib/e2e/speculosCI.js +1 -6
  25. package/lib/e2e/speculosCI.js.map +1 -1
  26. package/lib/families/algorand/bridge/mock.d.ts.map +1 -1
  27. package/lib/families/algorand/bridge/mock.js +2 -0
  28. package/lib/families/algorand/bridge/mock.js.map +1 -1
  29. package/lib/families/bitcoin/bridge/mock.d.ts.map +1 -1
  30. package/lib/families/bitcoin/bridge/mock.js +2 -0
  31. package/lib/families/bitcoin/bridge/mock.js.map +1 -1
  32. package/lib/families/canton/bridge/mock.d.ts.map +1 -1
  33. package/lib/families/canton/bridge/mock.js +2 -0
  34. package/lib/families/canton/bridge/mock.js.map +1 -1
  35. package/lib/families/canton/react.d.ts +7 -1
  36. package/lib/families/canton/react.d.ts.map +1 -1
  37. package/lib/families/canton/react.js +38 -1
  38. package/lib/families/canton/react.js.map +1 -1
  39. package/lib/families/cardano/bridge/mock.d.ts.map +1 -1
  40. package/lib/families/cardano/bridge/mock.js +2 -0
  41. package/lib/families/cardano/bridge/mock.js.map +1 -1
  42. package/lib/families/casper/bridge/mock.d.ts.map +1 -1
  43. package/lib/families/casper/bridge/mock.js +2 -0
  44. package/lib/families/casper/bridge/mock.js.map +1 -1
  45. package/lib/families/cosmos/bridge/mock.d.ts.map +1 -1
  46. package/lib/families/cosmos/bridge/mock.js +2 -0
  47. package/lib/families/cosmos/bridge/mock.js.map +1 -1
  48. package/lib/families/evm/bridge/mock.d.ts.map +1 -1
  49. package/lib/families/evm/bridge/mock.js +2 -0
  50. package/lib/families/evm/bridge/mock.js.map +1 -1
  51. package/lib/families/evm/setup.d.ts +1 -1
  52. package/lib/families/evm/setup.d.ts.map +1 -1
  53. package/lib/families/icon/bridge/mock.d.ts.map +1 -1
  54. package/lib/families/icon/bridge/mock.js +2 -0
  55. package/lib/families/icon/bridge/mock.js.map +1 -1
  56. package/lib/families/multiversx/bridge/mock.d.ts.map +1 -1
  57. package/lib/families/multiversx/bridge/mock.js +2 -0
  58. package/lib/families/multiversx/bridge/mock.js.map +1 -1
  59. package/lib/families/polkadot/bridge/mock.d.ts.map +1 -1
  60. package/lib/families/polkadot/bridge/mock.js +2 -0
  61. package/lib/families/polkadot/bridge/mock.js.map +1 -1
  62. package/lib/families/solana/bridge/mock.d.ts +1 -0
  63. package/lib/families/solana/bridge/mock.d.ts.map +1 -1
  64. package/lib/families/stellar/bridge/mock.d.ts.map +1 -1
  65. package/lib/families/stellar/bridge/mock.js +2 -0
  66. package/lib/families/stellar/bridge/mock.js.map +1 -1
  67. package/lib/families/tezos/bridge/mock.d.ts.map +1 -1
  68. package/lib/families/tezos/bridge/mock.js +2 -0
  69. package/lib/families/tezos/bridge/mock.js.map +1 -1
  70. package/lib/families/tron/bridge/mock.d.ts.map +1 -1
  71. package/lib/families/tron/bridge/mock.js +2 -0
  72. package/lib/families/tron/bridge/mock.js.map +1 -1
  73. package/lib/families/xrp/bridge/mock.d.ts.map +1 -1
  74. package/lib/families/xrp/bridge/mock.js +2 -0
  75. package/lib/families/xrp/bridge/mock.js.map +1 -1
  76. package/lib/featureFlags/firebaseFeatureFlags.js +1 -1
  77. package/lib/featureFlags/firebaseFeatureFlags.js.map +1 -1
  78. package/lib/generated/bridge/mock.d.ts +1 -0
  79. package/lib/generated/bridge/mock.d.ts.map +1 -1
  80. package/lib/generated/cli-transaction.d.ts +1 -1
  81. package/lib/generated/mock.d.ts +3 -3
  82. package/lib/hw/connectAppEventMapper.d.ts.map +1 -1
  83. package/lib/hw/connectAppEventMapper.js +21 -2
  84. package/lib/hw/connectAppEventMapper.js.map +1 -1
  85. package/lib-es/bridge/generic-alpaca/accountBridge.d.ts.map +1 -1
  86. package/lib-es/bridge/generic-alpaca/accountBridge.js +3 -2
  87. package/lib-es/bridge/generic-alpaca/accountBridge.js.map +1 -1
  88. package/lib-es/bridge/generic-alpaca/signer/index.d.ts +4 -0
  89. package/lib-es/bridge/generic-alpaca/signer/index.d.ts.map +1 -1
  90. package/lib-es/bridge/generic-alpaca/signer/index.js +20 -0
  91. package/lib-es/bridge/generic-alpaca/signer/index.js.map +1 -1
  92. package/lib-es/bridge/mockHelpers.d.ts +1 -1
  93. package/lib-es/bridge/mockHelpers.d.ts.map +1 -1
  94. package/lib-es/bridge/mockHelpers.js +1 -5
  95. package/lib-es/bridge/mockHelpers.js.map +1 -1
  96. package/lib-es/bridge/validateAddress.d.ts +4 -0
  97. package/lib-es/bridge/validateAddress.d.ts.map +1 -0
  98. package/lib-es/bridge/validateAddress.js +9 -0
  99. package/lib-es/bridge/validateAddress.js.map +1 -0
  100. package/lib-es/e2e/speculos.d.ts.map +1 -1
  101. package/lib-es/e2e/speculos.js +0 -1
  102. package/lib-es/e2e/speculos.js.map +1 -1
  103. package/lib-es/e2e/speculosAppVersion.d.ts +1 -0
  104. package/lib-es/e2e/speculosAppVersion.d.ts.map +1 -1
  105. package/lib-es/e2e/speculosAppVersion.js +36 -13
  106. package/lib-es/e2e/speculosAppVersion.js.map +1 -1
  107. package/lib-es/e2e/speculosCI.d.ts.map +1 -1
  108. package/lib-es/e2e/speculosCI.js +1 -6
  109. package/lib-es/e2e/speculosCI.js.map +1 -1
  110. package/lib-es/families/algorand/bridge/mock.d.ts.map +1 -1
  111. package/lib-es/families/algorand/bridge/mock.js +2 -0
  112. package/lib-es/families/algorand/bridge/mock.js.map +1 -1
  113. package/lib-es/families/bitcoin/bridge/mock.d.ts.map +1 -1
  114. package/lib-es/families/bitcoin/bridge/mock.js +2 -0
  115. package/lib-es/families/bitcoin/bridge/mock.js.map +1 -1
  116. package/lib-es/families/canton/bridge/mock.d.ts.map +1 -1
  117. package/lib-es/families/canton/bridge/mock.js +2 -0
  118. package/lib-es/families/canton/bridge/mock.js.map +1 -1
  119. package/lib-es/families/canton/react.d.ts +7 -1
  120. package/lib-es/families/canton/react.d.ts.map +1 -1
  121. package/lib-es/families/canton/react.js +34 -1
  122. package/lib-es/families/canton/react.js.map +1 -1
  123. package/lib-es/families/cardano/bridge/mock.d.ts.map +1 -1
  124. package/lib-es/families/cardano/bridge/mock.js +2 -0
  125. package/lib-es/families/cardano/bridge/mock.js.map +1 -1
  126. package/lib-es/families/casper/bridge/mock.d.ts.map +1 -1
  127. package/lib-es/families/casper/bridge/mock.js +2 -0
  128. package/lib-es/families/casper/bridge/mock.js.map +1 -1
  129. package/lib-es/families/cosmos/bridge/mock.d.ts.map +1 -1
  130. package/lib-es/families/cosmos/bridge/mock.js +2 -0
  131. package/lib-es/families/cosmos/bridge/mock.js.map +1 -1
  132. package/lib-es/families/evm/bridge/mock.d.ts.map +1 -1
  133. package/lib-es/families/evm/bridge/mock.js +2 -0
  134. package/lib-es/families/evm/bridge/mock.js.map +1 -1
  135. package/lib-es/families/evm/setup.d.ts +1 -1
  136. package/lib-es/families/evm/setup.d.ts.map +1 -1
  137. package/lib-es/families/icon/bridge/mock.d.ts.map +1 -1
  138. package/lib-es/families/icon/bridge/mock.js +2 -0
  139. package/lib-es/families/icon/bridge/mock.js.map +1 -1
  140. package/lib-es/families/multiversx/bridge/mock.d.ts.map +1 -1
  141. package/lib-es/families/multiversx/bridge/mock.js +2 -0
  142. package/lib-es/families/multiversx/bridge/mock.js.map +1 -1
  143. package/lib-es/families/polkadot/bridge/mock.d.ts.map +1 -1
  144. package/lib-es/families/polkadot/bridge/mock.js +2 -0
  145. package/lib-es/families/polkadot/bridge/mock.js.map +1 -1
  146. package/lib-es/families/solana/bridge/mock.d.ts +1 -0
  147. package/lib-es/families/solana/bridge/mock.d.ts.map +1 -1
  148. package/lib-es/families/stellar/bridge/mock.d.ts.map +1 -1
  149. package/lib-es/families/stellar/bridge/mock.js +2 -0
  150. package/lib-es/families/stellar/bridge/mock.js.map +1 -1
  151. package/lib-es/families/tezos/bridge/mock.d.ts.map +1 -1
  152. package/lib-es/families/tezos/bridge/mock.js +2 -0
  153. package/lib-es/families/tezos/bridge/mock.js.map +1 -1
  154. package/lib-es/families/tron/bridge/mock.d.ts.map +1 -1
  155. package/lib-es/families/tron/bridge/mock.js +2 -0
  156. package/lib-es/families/tron/bridge/mock.js.map +1 -1
  157. package/lib-es/families/xrp/bridge/mock.d.ts.map +1 -1
  158. package/lib-es/families/xrp/bridge/mock.js +2 -0
  159. package/lib-es/families/xrp/bridge/mock.js.map +1 -1
  160. package/lib-es/featureFlags/firebaseFeatureFlags.js +1 -1
  161. package/lib-es/featureFlags/firebaseFeatureFlags.js.map +1 -1
  162. package/lib-es/generated/bridge/mock.d.ts +1 -0
  163. package/lib-es/generated/bridge/mock.d.ts.map +1 -1
  164. package/lib-es/generated/cli-transaction.d.ts +1 -1
  165. package/lib-es/generated/mock.d.ts +3 -3
  166. package/lib-es/hw/connectAppEventMapper.d.ts.map +1 -1
  167. package/lib-es/hw/connectAppEventMapper.js +23 -4
  168. package/lib-es/hw/connectAppEventMapper.js.map +1 -1
  169. package/package.json +74 -74
  170. package/src/bridge/generic-alpaca/accountBridge.ts +2 -1
  171. package/src/bridge/generic-alpaca/signer/index.ts +29 -0
  172. package/src/bridge/mockHelpers.ts +2 -4
  173. package/src/bridge/validateAddress.test.ts +24 -0
  174. package/src/bridge/validateAddress.ts +13 -0
  175. package/src/e2e/speculos.ts +0 -1
  176. package/src/e2e/speculosAppVersion.ts +58 -13
  177. package/src/e2e/speculosCI.ts +1 -6
  178. package/src/families/algorand/bridge/mock.ts +2 -0
  179. package/src/families/bitcoin/bridge/mock.ts +2 -0
  180. package/src/families/canton/bridge/mock.ts +2 -0
  181. package/src/families/canton/react.ts +53 -3
  182. package/src/families/cardano/bridge/mock.ts +2 -0
  183. package/src/families/casper/bridge/mock.ts +2 -0
  184. package/src/families/cosmos/bridge/mock.ts +2 -0
  185. package/src/families/evm/bridge/mock.ts +3 -0
  186. package/src/families/hedera/__snapshots__/bridge.integration.test.ts.snap +489 -35
  187. package/src/families/hedera/react.test.ts +35 -32
  188. package/src/families/icon/bridge/mock.ts +2 -0
  189. package/src/families/multiversx/bridge/mock.ts +2 -0
  190. package/src/families/polkadot/bridge/mock.ts +2 -0
  191. package/src/families/stellar/bridge/mock.ts +2 -0
  192. package/src/families/tezos/bridge/mock.ts +2 -0
  193. package/src/families/tron/bridge/mock.ts +2 -0
  194. package/src/families/xrp/bridge/mock.ts +2 -0
  195. package/src/featureFlags/firebaseFeatureFlags.ts +1 -1
  196. package/src/hw/connectAppEventMapper.ts +28 -4
@@ -1,8 +1,11 @@
1
- import { useCallback, useState, useEffect } from "react";
1
+ import { useCallback, useState, useEffect, useMemo } from "react";
2
2
  import { getCurrencyBridge } from "../../bridge";
3
- import { CantonCurrencyBridge } from "@ledgerhq/coin-canton/types";
3
+ import { CantonCurrencyBridge, CantonAccount } from "@ledgerhq/coin-canton/types";
4
+ import { isCantonAccount } from "@ledgerhq/coin-canton";
4
5
  import { CryptoCurrency } from "@ledgerhq/types-cryptoassets";
5
- import { Account } from "@ledgerhq/types-live";
6
+ import { Account, AccountLike } from "@ledgerhq/types-live";
7
+ import { getParentAccount } from "@ledgerhq/coin-framework/account/helpers";
8
+ import BigNumber from "bignumber.js";
6
9
 
7
10
  export type UseCantonAcceptOrRejectOfferOptions = {
8
11
  currency: CryptoCurrency;
@@ -92,3 +95,50 @@ export const useTimeRemaining = (expiresAtMicros = 0, isExpired = false): string
92
95
 
93
96
  return timeRemaining;
94
97
  };
98
+
99
+ type TransferProposal = {
100
+ sender: string;
101
+ amount: string;
102
+ expires_at_micros: number;
103
+ };
104
+
105
+ type CantonTokenAccountLike = AccountLike & {
106
+ cantonResources?: { pendingTransferProposals?: TransferProposal[] };
107
+ };
108
+
109
+ const hasCantonResources = (
110
+ account: AccountLike,
111
+ ): account is CantonAccount | CantonTokenAccountLike => {
112
+ if (account.type === "Account") {
113
+ return isCantonAccount(account);
114
+ }
115
+
116
+ return "cantonResources" in account && !!account.cantonResources;
117
+ };
118
+
119
+ /**
120
+ * Hook to calculate withdrawable balance from expired outgoing offers.
121
+ * Withdrawable balance is the sum of amounts from offers the user sent that have expired.
122
+ */
123
+ export const useWithdrawableBalance = (account: AccountLike, accounts: Account[]): BigNumber => {
124
+ return useMemo(() => {
125
+ if (!hasCantonResources(account)) return new BigNumber(0);
126
+
127
+ const proposals = account.cantonResources?.pendingTransferProposals ?? [];
128
+
129
+ // For token accounts, use parent account's xpub; for main accounts, use account's xpub
130
+ const parentAccount = getParentAccount(account, accounts);
131
+ const mainAccount = parentAccount ?? account;
132
+ const accountXpub = "xpub" in mainAccount ? (mainAccount.xpub as string) ?? "" : "";
133
+ const currentTime = Date.now();
134
+
135
+ return proposals.reduce((sum, proposal) => {
136
+ const isOutgoing = proposal.sender === accountXpub;
137
+ const isExpired = currentTime > proposal.expires_at_micros / 1000;
138
+ if (isOutgoing && isExpired) {
139
+ return sum.plus(new BigNumber(proposal.amount));
140
+ }
141
+ return sum;
142
+ }, new BigNumber(0));
143
+ }, [account, accounts]);
144
+ };
@@ -30,6 +30,7 @@ import {
30
30
  sync,
31
31
  makeAccountBridgeReceive,
32
32
  } from "../../../bridge/mockHelpers";
33
+ import { validateAddress } from "../../../bridge/validateAddress";
33
34
 
34
35
  const receive = makeAccountBridgeReceive();
35
36
 
@@ -172,6 +173,7 @@ const accountBridge: AccountBridge<CardanoTransaction> = {
172
173
  signRawOperation,
173
174
  broadcast,
174
175
  getSerializedAddressParameters,
176
+ validateAddress,
175
177
  };
176
178
 
177
179
  const currencyBridge: CurrencyBridge = {
@@ -35,6 +35,7 @@ import {
35
35
  CASPER_MINIMUM_VALID_AMOUNT_MOTES,
36
36
  } from "../consts";
37
37
  import { getMainAccount } from "../../../account";
38
+ import { validateAddress } from "../../../bridge/validateAddress";
38
39
 
39
40
  const receive = makeAccountBridgeReceive();
40
41
 
@@ -172,6 +173,7 @@ const accountBridge: AccountBridge<Transaction> = {
172
173
  broadcast,
173
174
  estimateMaxSpendable,
174
175
  getSerializedAddressParameters,
176
+ validateAddress,
175
177
  };
176
178
  export default {
177
179
  currencyBridge,
@@ -36,6 +36,7 @@ import {
36
36
  sync,
37
37
  } from "../../../bridge/mockHelpers";
38
38
  import { getCurrencyConfiguration } from "../../../config";
39
+ import { validateAddress } from "../../../bridge/validateAddress";
39
40
 
40
41
  const receive = makeAccountBridgeReceive();
41
42
 
@@ -132,6 +133,7 @@ const accountBridge: AccountBridge<Transaction> = {
132
133
  assignFromAccountRaw,
133
134
  assignToAccountRaw,
134
135
  getSerializedAddressParameters,
136
+ validateAddress,
135
137
  };
136
138
  const currencyBridge: CurrencyBridge = {
137
139
  scanAccounts,
@@ -20,6 +20,8 @@ import { getTypedTransaction } from "@ledgerhq/coin-evm/transaction";
20
20
  import { CryptoCurrency } from "@ledgerhq/types-cryptoassets";
21
21
  import { getCurrencyConfiguration } from "../../../config";
22
22
  import { EvmConfigInfo, setCoinConfig } from "@ledgerhq/coin-evm/config";
23
+ import { validateAddress } from "../../../bridge/validateAddress";
24
+
23
25
  const receive = makeAccountBridgeReceive();
24
26
  const defaultGetFees = (_a, t: any) => (t.gasPrice || new BigNumber(0)).times(getGasLimit(t));
25
27
 
@@ -135,6 +137,7 @@ const accountBridge: AccountBridge<Transaction> = {
135
137
  signRawOperation,
136
138
  broadcast,
137
139
  getSerializedAddressParameters,
140
+ validateAddress,
138
141
  };
139
142
  const currencyBridge: CurrencyBridge = {
140
143
  preload: () => Promise.resolve({}),