@ledgerhq/live-common 27.0.0 → 27.0.1-next.0
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.
- package/lib/__tests__/families/bitcoin/wallet-btc/xpub.syncing.integration.test.js +2 -2
- package/lib/__tests__/test-helpers/environment.d.ts +2 -0
- package/lib/__tests__/test-helpers/environment.d.ts.map +1 -0
- package/lib/__tests__/test-helpers/environment.js +107 -0
- package/lib/__tests__/test-helpers/environment.js.map +1 -0
- package/lib/__tests__/test-helpers/setup.d.ts +1 -1
- package/lib/__tests__/test-helpers/setup.d.ts.map +1 -1
- package/lib/__tests__/test-helpers/setup.js +1 -101
- package/lib/__tests__/test-helpers/setup.js.map +1 -1
- package/lib/account/serialization.d.ts.map +1 -1
- package/lib/account/serialization.js +83 -40
- package/lib/account/serialization.js.map +1 -1
- package/lib/bot/bot-test-context.d.ts +3 -0
- package/lib/bot/bot-test-context.d.ts.map +1 -0
- package/lib/bot/bot-test-context.js +26 -0
- package/lib/bot/bot-test-context.js.map +1 -0
- package/lib/bot/bot-test-context.test.d.ts +2 -0
- package/lib/bot/bot-test-context.test.d.ts.map +1 -0
- package/lib/bot/bot-test-context.test.js +41 -0
- package/lib/bot/bot-test-context.test.js.map +1 -0
- package/lib/bot/cli.d.ts +2 -0
- package/lib/bot/cli.d.ts.map +1 -0
- package/lib/bot/cli.js +14 -0
- package/lib/bot/cli.js.map +1 -0
- package/lib/bot/engine.d.ts +5 -5
- package/lib/bot/engine.d.ts.map +1 -1
- package/lib/bot/engine.js +161 -112
- package/lib/bot/engine.js.map +1 -1
- package/lib/bot/formatters.d.ts +2 -2
- package/lib/bot/formatters.d.ts.map +1 -1
- package/lib/bot/formatters.js +41 -15
- package/lib/bot/formatters.js.map +1 -1
- package/lib/bot/index.d.ts +1 -1
- package/lib/bot/index.d.ts.map +1 -1
- package/lib/bot/index.js +90 -15
- package/lib/bot/index.js.map +1 -1
- package/lib/bot/specs.d.ts +2 -1
- package/lib/bot/specs.d.ts.map +1 -1
- package/lib/bot/specs.js +13 -9
- package/lib/bot/specs.js.map +1 -1
- package/lib/bot/types.d.ts +5 -2
- package/lib/bot/types.d.ts.map +1 -1
- package/lib/countervalues/logic.integration.test.js +65 -0
- package/lib/countervalues/logic.integration.test.js.map +1 -1
- package/lib/countervalues/modules/weth.d.ts.map +1 -1
- package/lib/countervalues/modules/weth.js +5 -10
- package/lib/countervalues/modules/weth.js.map +1 -1
- package/lib/currencies/sortByMarketcap.d.ts +0 -2
- package/lib/currencies/sortByMarketcap.d.ts.map +1 -1
- package/lib/currencies/sortByMarketcap.js +3 -17
- package/lib/currencies/sortByMarketcap.js.map +1 -1
- package/lib/currencies/sortByMarketcap.test.js +0 -5
- package/lib/currencies/sortByMarketcap.test.js.map +1 -1
- package/lib/env.js +1 -1
- package/lib/families/algorand/specs.d.ts.map +1 -1
- package/lib/families/algorand/specs.js +18 -10
- package/lib/families/algorand/specs.js.map +1 -1
- package/lib/families/algorand/speculos-deviceActions.d.ts +1 -4
- package/lib/families/algorand/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/algorand/speculos-deviceActions.js +25 -8
- package/lib/families/algorand/speculos-deviceActions.js.map +1 -1
- package/lib/families/bitcoin/bridge/mock.d.ts.map +1 -1
- package/lib/families/bitcoin/bridge/mock.js +6 -1
- package/lib/families/bitcoin/bridge/mock.js.map +1 -1
- package/lib/families/bitcoin/datasets/bitcoin_cash.d.ts.map +1 -1
- package/lib/families/bitcoin/datasets/bitcoin_cash.js +1 -1
- package/lib/families/bitcoin/datasets/bitcoin_cash.js.map +1 -1
- package/lib/families/bitcoin/datasets/dash.d.ts.map +1 -1
- package/lib/families/bitcoin/datasets/dash.js +1 -1
- package/lib/families/bitcoin/datasets/dash.js.map +1 -1
- package/lib/families/bitcoin/datasets/decred.d.ts.map +1 -1
- package/lib/families/bitcoin/datasets/decred.js +1 -1
- package/lib/families/bitcoin/datasets/decred.js.map +1 -1
- package/lib/families/bitcoin/datasets/digibyte.d.ts.map +1 -1
- package/lib/families/bitcoin/datasets/digibyte.js +8 -2
- package/lib/families/bitcoin/datasets/digibyte.js.map +1 -1
- package/lib/families/bitcoin/datasets/dogecoin.d.ts.map +1 -1
- package/lib/families/bitcoin/datasets/dogecoin.js +1 -1
- package/lib/families/bitcoin/datasets/dogecoin.js.map +1 -1
- package/lib/families/bitcoin/datasets/komodo.js +1 -1
- package/lib/families/bitcoin/datasets/komodo.js.map +1 -1
- package/lib/families/bitcoin/datasets/litecoin.d.ts.map +1 -1
- package/lib/families/bitcoin/datasets/litecoin.js +8 -2
- package/lib/families/bitcoin/datasets/litecoin.js.map +1 -1
- package/lib/families/bitcoin/datasets/peercoin.js +1 -1
- package/lib/families/bitcoin/datasets/peercoin.js.map +1 -1
- package/lib/families/bitcoin/datasets/pivx.js +1 -1
- package/lib/families/bitcoin/datasets/pivx.js.map +1 -1
- package/lib/families/bitcoin/datasets/qtum.js +1 -1
- package/lib/families/bitcoin/datasets/qtum.js.map +1 -1
- package/lib/families/bitcoin/datasets/stakenet.d.ts.map +1 -1
- package/lib/families/bitcoin/datasets/stakenet.js +1 -1
- package/lib/families/bitcoin/datasets/stakenet.js.map +1 -1
- package/lib/families/bitcoin/datasets/vertcoin.d.ts.map +1 -1
- package/lib/families/bitcoin/datasets/vertcoin.js +1 -1
- package/lib/families/bitcoin/datasets/vertcoin.js.map +1 -1
- package/lib/families/bitcoin/datasets/viacoin.d.ts.map +1 -1
- package/lib/families/bitcoin/datasets/viacoin.js +1 -1
- package/lib/families/bitcoin/datasets/viacoin.js.map +1 -1
- package/lib/families/bitcoin/datasets/zcash.d.ts.map +1 -1
- package/lib/families/bitcoin/datasets/zcash.js +1 -1
- package/lib/families/bitcoin/datasets/zcash.js.map +1 -1
- package/lib/families/bitcoin/datasets/zencash.d.ts.map +1 -1
- package/lib/families/bitcoin/datasets/zencash.js +1 -1
- package/lib/families/bitcoin/datasets/zencash.js.map +1 -1
- package/lib/families/bitcoin/platformAdapter.test.d.ts +2 -0
- package/lib/families/bitcoin/platformAdapter.test.d.ts.map +1 -0
- package/lib/families/bitcoin/platformAdapter.test.js +48 -0
- package/lib/families/bitcoin/platformAdapter.test.js.map +1 -0
- package/lib/families/bitcoin/specs.d.ts.map +1 -1
- package/lib/families/bitcoin/specs.js +62 -24
- package/lib/families/bitcoin/specs.js.map +1 -1
- package/lib/families/bitcoin/speculos-deviceActions.d.ts +1 -4
- package/lib/families/bitcoin/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/bitcoin/speculos-deviceActions.js +2 -4
- package/lib/families/bitcoin/speculos-deviceActions.js.map +1 -1
- package/lib/families/cardano/js-estimateMaxSpendable.js +1 -1
- package/lib/families/cardano/js-estimateMaxSpendable.js.map +1 -1
- package/lib/families/cardano/specs.d.ts.map +1 -1
- package/lib/families/cardano/specs.js +19 -8
- package/lib/families/cardano/specs.js.map +1 -1
- package/lib/families/cardano/speculos-deviceActions.d.ts +1 -4
- package/lib/families/cardano/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/cardano/speculos-deviceActions.js +2 -2
- package/lib/families/cardano/speculos-deviceActions.js.map +1 -1
- package/lib/families/celo/specs.d.ts.map +1 -1
- package/lib/families/celo/specs.js +2 -0
- package/lib/families/celo/specs.js.map +1 -1
- package/lib/families/celo/speculos-deviceActions.d.ts +1 -4
- package/lib/families/celo/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/celo/speculos-deviceActions.js +2 -4
- package/lib/families/celo/speculos-deviceActions.js.map +1 -1
- package/lib/families/cosmos/specs.d.ts.map +1 -1
- package/lib/families/cosmos/specs.js +41 -25
- package/lib/families/cosmos/specs.js.map +1 -1
- package/lib/families/cosmos/speculos-deviceActions.d.ts +1 -4
- package/lib/families/cosmos/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/cosmos/speculos-deviceActions.js +2 -4
- package/lib/families/cosmos/speculos-deviceActions.js.map +1 -1
- package/lib/families/crypto_org/specs.d.ts.map +1 -1
- package/lib/families/crypto_org/specs.js +3 -0
- package/lib/families/crypto_org/specs.js.map +1 -1
- package/lib/families/crypto_org/speculos-deviceActions.d.ts +1 -4
- package/lib/families/crypto_org/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/crypto_org/speculos-deviceActions.js +2 -2
- package/lib/families/crypto_org/speculos-deviceActions.js.map +1 -1
- package/lib/families/elrond/specs.d.ts.map +1 -1
- package/lib/families/elrond/specs.js +15 -2
- package/lib/families/elrond/specs.js.map +1 -1
- package/lib/families/elrond/speculos-deviceActions.d.ts +1 -4
- package/lib/families/elrond/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/elrond/speculos-deviceActions.js +2 -4
- package/lib/families/elrond/speculos-deviceActions.js.map +1 -1
- package/lib/families/ethereum/platformAdapter.test.d.ts +2 -0
- package/lib/families/ethereum/platformAdapter.test.d.ts.map +1 -0
- package/lib/families/ethereum/platformAdapter.test.js +88 -0
- package/lib/families/ethereum/platformAdapter.test.js.map +1 -0
- package/lib/families/ethereum/specs.d.ts.map +1 -1
- package/lib/families/ethereum/specs.js +36 -12
- package/lib/families/ethereum/specs.js.map +1 -1
- package/lib/families/ethereum/speculos-deviceActions.d.ts +1 -4
- package/lib/families/ethereum/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/ethereum/speculos-deviceActions.js +2 -4
- package/lib/families/ethereum/speculos-deviceActions.js.map +1 -1
- package/lib/families/filecoin/specs.d.ts.map +1 -1
- package/lib/families/filecoin/specs.js +2 -0
- package/lib/families/filecoin/specs.js.map +1 -1
- package/lib/families/filecoin/speculos-deviceActions.d.ts +1 -4
- package/lib/families/filecoin/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/filecoin/speculos-deviceActions.js +2 -2
- package/lib/families/filecoin/speculos-deviceActions.js.map +1 -1
- package/lib/families/hedera/specs.d.ts.map +1 -1
- package/lib/families/hedera/specs.js +11 -3
- package/lib/families/hedera/specs.js.map +1 -1
- package/lib/families/hedera/speculos-deviceActions.d.ts +1 -4
- package/lib/families/hedera/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/hedera/speculos-deviceActions.js +4 -4
- package/lib/families/hedera/speculos-deviceActions.js.map +1 -1
- package/lib/families/osmosis/specs.d.ts.map +1 -1
- package/lib/families/osmosis/specs.js +13 -5
- package/lib/families/osmosis/specs.js.map +1 -1
- package/lib/families/osmosis/speculos-deviceActions.d.ts +1 -4
- package/lib/families/osmosis/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/osmosis/speculos-deviceActions.js +2 -4
- package/lib/families/osmosis/speculos-deviceActions.js.map +1 -1
- package/lib/families/polkadot/platformAdapter.test.d.ts +2 -0
- package/lib/families/polkadot/platformAdapter.test.d.ts.map +1 -0
- package/lib/families/polkadot/platformAdapter.test.js +51 -0
- package/lib/families/polkadot/platformAdapter.test.js.map +1 -0
- package/lib/families/polkadot/specs.d.ts.map +1 -1
- package/lib/families/polkadot/specs.js +12 -1
- package/lib/families/polkadot/specs.js.map +1 -1
- package/lib/families/polkadot/speculos-deviceActions.d.ts +1 -4
- package/lib/families/polkadot/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/polkadot/speculos-deviceActions.js +2 -4
- package/lib/families/polkadot/speculos-deviceActions.js.map +1 -1
- package/lib/families/ripple/platformAdapter.test.d.ts +2 -0
- package/lib/families/ripple/platformAdapter.test.d.ts.map +1 -0
- package/lib/families/ripple/platformAdapter.test.js +51 -0
- package/lib/families/ripple/platformAdapter.test.js.map +1 -0
- package/lib/families/ripple/specs.d.ts.map +1 -1
- package/lib/families/ripple/specs.js +9 -4
- package/lib/families/ripple/specs.js.map +1 -1
- package/lib/families/ripple/speculos-deviceActions.d.ts +1 -4
- package/lib/families/ripple/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/ripple/speculos-deviceActions.js +2 -4
- package/lib/families/ripple/speculos-deviceActions.js.map +1 -1
- package/lib/families/solana/specs.d.ts.map +1 -1
- package/lib/families/solana/specs.js +29 -11
- package/lib/families/solana/specs.js.map +1 -1
- package/lib/families/solana/speculos-deviceActions.d.ts +0 -5
- package/lib/families/solana/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/solana/speculos-deviceActions.js +0 -4
- package/lib/families/solana/speculos-deviceActions.js.map +1 -1
- package/lib/families/stellar/api/horizon.d.ts.map +1 -1
- package/lib/families/stellar/api/horizon.js +15 -10
- package/lib/families/stellar/api/horizon.js.map +1 -1
- package/lib/families/stellar/specs.d.ts.map +1 -1
- package/lib/families/stellar/specs.js +30 -12
- package/lib/families/stellar/specs.js.map +1 -1
- package/lib/families/stellar/speculos-deviceActions.d.ts +1 -4
- package/lib/families/stellar/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/stellar/speculos-deviceActions.js +2 -4
- package/lib/families/stellar/speculos-deviceActions.js.map +1 -1
- package/lib/families/tezos/bakers.whitelist-default.d.ts.map +1 -1
- package/lib/families/tezos/bakers.whitelist-default.js +1 -1
- package/lib/families/tezos/bakers.whitelist-default.js.map +1 -1
- package/lib/families/tezos/specs.d.ts.map +1 -1
- package/lib/families/tezos/specs.js +2 -0
- package/lib/families/tezos/specs.js.map +1 -1
- package/lib/families/tezos/speculos-deviceActions.d.ts +1 -4
- package/lib/families/tezos/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/tezos/speculos-deviceActions.js +2 -2
- package/lib/families/tezos/speculos-deviceActions.js.map +1 -1
- package/lib/families/tron/specs.d.ts.map +1 -1
- package/lib/families/tron/specs.js +49 -17
- package/lib/families/tron/specs.js.map +1 -1
- package/lib/families/tron/speculos-deviceActions.d.ts +1 -4
- package/lib/families/tron/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/tron/speculos-deviceActions.js +2 -4
- package/lib/families/tron/speculos-deviceActions.js.map +1 -1
- package/lib/hw/getGenuineCheckFromDeviceId.d.ts +22 -0
- package/lib/hw/getGenuineCheckFromDeviceId.d.ts.map +1 -0
- package/lib/hw/getGenuineCheckFromDeviceId.js +49 -0
- package/lib/hw/getGenuineCheckFromDeviceId.js.map +1 -0
- package/lib/hw/getGenuineCheckFromDeviceId.test.d.ts +2 -0
- package/lib/hw/getGenuineCheckFromDeviceId.test.d.ts.map +1 -0
- package/lib/hw/getGenuineCheckFromDeviceId.test.js +84 -0
- package/lib/hw/getGenuineCheckFromDeviceId.test.js.map +1 -0
- package/lib/hw/getLatestAvailableFirmwareFromDeviceId.d.ts +17 -0
- package/lib/hw/getLatestAvailableFirmwareFromDeviceId.d.ts.map +1 -0
- package/lib/hw/getLatestAvailableFirmwareFromDeviceId.js +27 -0
- package/lib/hw/getLatestAvailableFirmwareFromDeviceId.js.map +1 -0
- package/lib/hw/hooks/useGenuineCheck.d.ts +34 -0
- package/lib/hw/hooks/useGenuineCheck.d.ts.map +1 -0
- package/lib/hw/hooks/useGenuineCheck.js +115 -0
- package/lib/hw/hooks/useGenuineCheck.js.map +1 -0
- package/lib/hw/hooks/useGenuineCheck.test.d.ts +2 -0
- package/lib/hw/hooks/useGenuineCheck.test.d.ts.map +1 -0
- package/lib/hw/hooks/useGenuineCheck.test.js +316 -0
- package/lib/hw/hooks/useGenuineCheck.test.js.map +1 -0
- package/lib/hw/hooks/useGetLatestAvailableFirmware.d.ts +29 -0
- package/lib/hw/hooks/useGetLatestAvailableFirmware.d.ts.map +1 -0
- package/lib/hw/hooks/useGetLatestAvailableFirmware.js +72 -0
- package/lib/hw/hooks/useGetLatestAvailableFirmware.js.map +1 -0
- package/lib/hw/hooks/useGetLatestAvailableFirmware.test.d.ts +2 -0
- package/lib/hw/hooks/useGetLatestAvailableFirmware.test.d.ts.map +1 -0
- package/lib/hw/hooks/useGetLatestAvailableFirmware.test.js +155 -0
- package/lib/hw/hooks/useGetLatestAvailableFirmware.test.js.map +1 -0
- package/lib/load/speculos.d.ts +1 -0
- package/lib/load/speculos.d.ts.map +1 -1
- package/lib/load/speculos.js +2 -1
- package/lib/load/speculos.js.map +1 -1
- package/lib/mock/fixtures/cryptoCurrencies.d.ts +5 -0
- package/lib/mock/fixtures/cryptoCurrencies.d.ts.map +1 -0
- package/lib/mock/fixtures/cryptoCurrencies.js +91 -0
- package/lib/mock/fixtures/cryptoCurrencies.js.map +1 -0
- package/lib/platform/converters.test.js +44 -218
- package/lib/platform/converters.test.js.map +1 -1
- package/lib/platform/logic.d.ts +44 -0
- package/lib/platform/logic.d.ts.map +1 -1
- package/lib/platform/logic.js +147 -1
- package/lib/platform/logic.js.map +1 -1
- package/lib/platform/logic.test.d.ts +2 -0
- package/lib/platform/logic.test.d.ts.map +1 -0
- package/lib/platform/logic.test.js +903 -0
- package/lib/platform/logic.test.js.map +1 -0
- package/lib/platform/react.d.ts +6 -0
- package/lib/platform/react.d.ts.map +1 -1
- package/lib/platform/react.js +6 -0
- package/lib/platform/react.js.map +1 -1
- package/lib/platform/tracking.d.ts +1 -1
- package/lib/platform/tracking.d.ts.map +1 -1
- package/lib/platform/tracking.test.js +14 -41
- package/lib/platform/tracking.test.js.map +1 -1
- package/lib/reconciliation.d.ts.map +1 -1
- package/lib/reconciliation.js +28 -10
- package/lib/reconciliation.js.map +1 -1
- package/package.json +5 -6
- package/src/__tests__/families/bitcoin/wallet-btc/xpub.syncing.integration.test.ts +2 -2
- package/src/__tests__/test-helpers/environment.ts +91 -0
- package/src/__tests__/test-helpers/setup.ts +2 -91
- package/src/account/serialization.ts +103 -64
- package/src/bot/bot-test-context.test.ts +37 -0
- package/src/bot/bot-test-context.ts +24 -0
- package/src/bot/cli.ts +18 -0
- package/src/bot/engine.ts +109 -73
- package/src/bot/formatters.ts +40 -14
- package/src/bot/index.ts +124 -18
- package/src/bot/specs.ts +10 -5
- package/src/bot/types.ts +7 -3
- package/src/countervalues/logic.integration.test.ts +50 -0
- package/src/countervalues/modules/weth.ts +9 -12
- package/src/currencies/__snapshots__/sortByMarketcap.test.ts.snap +59 -1
- package/src/currencies/sortByMarketcap.test.ts +1 -12
- package/src/currencies/sortByMarketcap.ts +2 -22
- package/src/env.ts +1 -1
- package/src/families/algorand/__snapshots__/bridge.integration.test.ts.snap +733 -8
- package/src/families/algorand/specs.ts +26 -16
- package/src/families/algorand/speculos-deviceActions.ts +31 -10
- package/src/families/bitcoin/__snapshots__/bridge.integration.test.ts.snap +43309 -7957
- package/src/families/bitcoin/bridge/mock.ts +7 -1
- package/src/families/bitcoin/datasets/bitcoin_cash.ts +73 -13
- package/src/families/bitcoin/datasets/dash.ts +29 -17
- package/src/families/bitcoin/datasets/decred.ts +42 -12
- package/src/families/bitcoin/datasets/digibyte.ts +9 -3
- package/src/families/bitcoin/datasets/dogecoin.ts +29 -17
- package/src/families/bitcoin/datasets/komodo.ts +22 -22
- package/src/families/bitcoin/datasets/litecoin.ts +9 -3
- package/src/families/bitcoin/datasets/peercoin.ts +17 -17
- package/src/families/bitcoin/datasets/pivx.ts +17 -17
- package/src/families/bitcoin/datasets/qtum.ts +40 -40
- package/src/families/bitcoin/datasets/stakenet.ts +56 -26
- package/src/families/bitcoin/datasets/vertcoin.ts +43 -55
- package/src/families/bitcoin/datasets/viacoin.ts +35 -23
- package/src/families/bitcoin/datasets/zcash.ts +78 -12
- package/src/families/bitcoin/datasets/zencash.ts +56 -10
- package/src/families/bitcoin/platformAdapter.test.ts +58 -0
- package/src/families/bitcoin/specs.ts +81 -41
- package/src/families/bitcoin/speculos-deviceActions.ts +68 -69
- package/src/families/cardano/js-estimateMaxSpendable.ts +1 -1
- package/src/families/cardano/specs.ts +28 -11
- package/src/families/cardano/speculos-deviceActions.ts +65 -66
- package/src/families/celo/specs.ts +2 -0
- package/src/families/celo/speculos-deviceActions.ts +42 -43
- package/src/families/cosmos/__snapshots__/bridge.integration.test.ts.snap +246 -5
- package/src/families/cosmos/specs.ts +44 -28
- package/src/families/cosmos/speculos-deviceActions.ts +82 -83
- package/src/families/crypto_org/specs.ts +3 -0
- package/src/families/crypto_org/speculos-deviceActions.ts +58 -59
- package/src/families/elrond/specs.ts +21 -4
- package/src/families/elrond/speculos-deviceActions.ts +41 -42
- package/src/families/ethereum/__snapshots__/bridge.integration.test.ts.snap +90 -90
- package/src/families/ethereum/platformAdapter.test.ts +112 -0
- package/src/families/ethereum/specs.ts +47 -23
- package/src/families/ethereum/speculos-deviceActions.ts +93 -95
- package/src/families/filecoin/specs.ts +2 -1
- package/src/families/filecoin/speculos-deviceActions.ts +61 -62
- package/src/families/hedera/__snapshots__/bridge.integration.test.ts.snap +57 -2
- package/src/families/hedera/specs.ts +13 -5
- package/src/families/hedera/speculos-deviceActions.ts +59 -60
- package/src/families/osmosis/specs.ts +15 -7
- package/src/families/osmosis/speculos-deviceActions.ts +82 -83
- package/src/families/polkadot/platformAdapter.test.ts +61 -0
- package/src/families/polkadot/specs.ts +20 -2
- package/src/families/polkadot/speculos-deviceActions.ts +83 -82
- package/src/families/ripple/platformAdapter.test.ts +54 -0
- package/src/families/ripple/specs.ts +14 -7
- package/src/families/ripple/speculos-deviceActions.ts +72 -73
- package/src/families/solana/specs.ts +33 -14
- package/src/families/solana/speculos-deviceActions.ts +0 -5
- package/src/families/stellar/api/horizon.ts +10 -6
- package/src/families/stellar/specs.ts +37 -19
- package/src/families/stellar/speculos-deviceActions.ts +85 -87
- package/src/families/tezos/bakers.whitelist-default.ts +0 -1
- package/src/families/tezos/specs.ts +2 -0
- package/src/families/tezos/speculos-deviceActions.ts +76 -77
- package/src/families/tron/specs.ts +67 -30
- package/src/families/tron/speculos-deviceActions.ts +81 -84
- package/src/hw/getGenuineCheckFromDeviceId.test.ts +98 -0
- package/src/hw/getGenuineCheckFromDeviceId.ts +61 -0
- package/src/hw/getLatestAvailableFirmwareFromDeviceId.ts +37 -0
- package/src/hw/hooks/useGenuineCheck.test.ts +232 -0
- package/src/hw/hooks/useGenuineCheck.ts +138 -0
- package/src/hw/hooks/useGetLatestAvailableFirmware.test.ts +111 -0
- package/src/hw/hooks/useGetLatestAvailableFirmware.ts +90 -0
- package/src/load/speculos.ts +2 -0
- package/src/mock/fixtures/cryptoCurrencies.ts +88 -0
- package/src/platform/converters.test.ts +49 -282
- package/src/platform/logic.test.ts +756 -0
- package/src/platform/logic.ts +285 -0
- package/src/platform/react.ts +6 -0
- package/src/platform/tracking.test.ts +6 -7
- package/src/platform/tracking.ts +1 -1
- package/src/reconciliation.ts +66 -43
- package/lib/bot/test.bot.d.ts +0 -2
- package/lib/bot/test.bot.d.ts.map +0 -1
- package/lib/bot/test.bot.js +0 -62
- package/lib/bot/test.bot.js.map +0 -1
- package/lib/generated/speculos-deviceActions.d.ts +0 -56
- package/lib/generated/speculos-deviceActions.d.ts.map +0 -1
- package/lib/generated/speculos-deviceActions.js +0 -42
- package/lib/generated/speculos-deviceActions.js.map +0 -1
- package/src/bot/test.bot.ts +0 -21
- package/src/generated/speculos-deviceActions.ts +0 -37
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
exports.__esModule = true;
|
|
3
|
+
var bot_test_context_1 = require("./bot-test-context");
|
|
4
|
+
var formatters_1 = require("./formatters");
|
|
5
|
+
describe("test the botTest context itself", function () {
|
|
6
|
+
test("botTest", function () {
|
|
7
|
+
var f = function () {
|
|
8
|
+
try {
|
|
9
|
+
(0, bot_test_context_1.botTest)("CTX", function () { return expect(true).toEqual(false); });
|
|
10
|
+
}
|
|
11
|
+
catch (e) {
|
|
12
|
+
return (0, bot_test_context_1.getContext)(e);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
expect(f()).toEqual("CTX");
|
|
16
|
+
});
|
|
17
|
+
test("double botTest", function () {
|
|
18
|
+
var f = function () {
|
|
19
|
+
try {
|
|
20
|
+
(0, bot_test_context_1.botTest)("1", function () { return (0, bot_test_context_1.botTest)("2", function () { return expect(true).toEqual(false); }); });
|
|
21
|
+
}
|
|
22
|
+
catch (e) {
|
|
23
|
+
return (0, bot_test_context_1.getContext)(e);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
expect(f()).toEqual("1 > 2");
|
|
27
|
+
});
|
|
28
|
+
test("formatError", function () {
|
|
29
|
+
var _a;
|
|
30
|
+
var f = function () {
|
|
31
|
+
try {
|
|
32
|
+
(0, bot_test_context_1.botTest)("CTX", function () { return expect(true).toEqual(false); });
|
|
33
|
+
}
|
|
34
|
+
catch (e) {
|
|
35
|
+
return (0, formatters_1.formatError)(e);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
expect((_a = f()) === null || _a === void 0 ? void 0 : _a.slice(0, 8)).toEqual("TEST CTX");
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=bot-test-context.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bot-test-context.test.js","sourceRoot":"","sources":["../../src/bot/bot-test-context.test.ts"],"names":[],"mappings":";;AAAA,uDAAyD;AACzD,2CAA2C;AAE3C,QAAQ,CAAC,iCAAiC,EAAE;IAC1C,IAAI,CAAC,SAAS,EAAE;QACd,IAAM,CAAC,GAAG;YACR,IAAI;gBACF,IAAA,0BAAO,EAAC,KAAK,EAAE,cAAM,OAAA,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAA3B,CAA2B,CAAC,CAAC;aACnD;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,IAAA,6BAAU,EAAC,CAAC,CAAC,CAAC;aACtB;QACH,CAAC,CAAC;QACF,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gBAAgB,EAAE;QACrB,IAAM,CAAC,GAAG;YACR,IAAI;gBACF,IAAA,0BAAO,EAAC,GAAG,EAAE,cAAM,OAAA,IAAA,0BAAO,EAAC,GAAG,EAAE,cAAM,OAAA,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAA3B,CAA2B,CAAC,EAA/C,CAA+C,CAAC,CAAC;aACrE;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,IAAA,6BAAU,EAAC,CAAC,CAAC,CAAC;aACtB;QACH,CAAC,CAAC;QACF,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,aAAa,EAAE;;QAClB,IAAM,CAAC,GAAG;YACR,IAAI;gBACF,IAAA,0BAAO,EAAC,KAAK,EAAE,cAAM,OAAA,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAA3B,CAA2B,CAAC,CAAC;aACnD;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,IAAA,wBAAW,EAAC,CAAC,CAAC,CAAC;aACvB;QACH,CAAC,CAAC;QACF,MAAM,CAAC,MAAA,CAAC,EAAE,0CAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/lib/bot/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/bot/cli.ts"],"names":[],"mappings":"AAAA,OAAO,uCAAuC,CAAC"}
|
package/lib/bot/cli.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
exports.__esModule = true;
|
|
3
|
+
require("../__tests__/test-helpers/environment");
|
|
4
|
+
var _1 = require(".");
|
|
5
|
+
var _a = process.env, BOT_FILTER_CURRENCY = _a.BOT_FILTER_CURRENCY, BOT_FILTER_FAMILY = _a.BOT_FILTER_FAMILY;
|
|
6
|
+
var arg = {};
|
|
7
|
+
if (BOT_FILTER_CURRENCY) {
|
|
8
|
+
arg.currency = BOT_FILTER_CURRENCY;
|
|
9
|
+
}
|
|
10
|
+
if (BOT_FILTER_FAMILY) {
|
|
11
|
+
arg.family = BOT_FILTER_FAMILY;
|
|
12
|
+
}
|
|
13
|
+
(0, _1.bot)(arg);
|
|
14
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bot/cli.ts"],"names":[],"mappings":";;AAAA,iDAA+C;AAC/C,sBAAwB;AAElB,IAAA,KAA6C,OAAO,CAAC,GAAG,EAAtD,mBAAmB,yBAAA,EAAE,iBAAiB,uBAAgB,CAAC;AAC/D,IAAM,GAAG,GAGL,EAAE,CAAC;AAEP,IAAI,mBAAmB,EAAE;IACvB,GAAG,CAAC,QAAQ,GAAG,mBAAmB,CAAC;CACpC;AAED,IAAI,iBAAiB,EAAE;IACrB,GAAG,CAAC,MAAM,GAAG,iBAAiB,CAAC;CAChC;AAED,IAAA,MAAG,EAAC,GAAG,CAAC,CAAC"}
|
package/lib/bot/engine.d.ts
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
|
+
import { OperatorFunction } from "rxjs";
|
|
1
2
|
import type { AppCandidate } from "../load/speculos";
|
|
2
3
|
import type { AppSpec, SpecReport, MutationReport, DeviceAction } from "./types";
|
|
3
4
|
import type { Account, SignOperationEvent } from "@ledgerhq/types-live";
|
|
4
|
-
import type { CryptoCurrency } from "@ledgerhq/types-cryptoassets";
|
|
5
5
|
import type { Transaction, TransactionStatus } from "../generated/types";
|
|
6
6
|
export declare function runWithAppSpec<T extends Transaction>(spec: AppSpec<T>, reportLog: (arg0: string) => void): Promise<SpecReport<T>>;
|
|
7
|
-
export declare function runOnAccount<T extends Transaction>({ appCandidate, spec, device, account, accounts, mutationsCount,
|
|
7
|
+
export declare function runOnAccount<T extends Transaction>({ appCandidate, spec, device, account, accounts, accountIdsNeedResync, mutationsCount, resyncAccountsDuration, preloadedData, }: {
|
|
8
8
|
appCandidate: any;
|
|
9
9
|
spec: AppSpec<T>;
|
|
10
10
|
device: any;
|
|
11
11
|
account: any;
|
|
12
12
|
accounts: any;
|
|
13
|
+
accountIdsNeedResync: string[];
|
|
13
14
|
mutationsCount: Record<string, number>;
|
|
14
|
-
|
|
15
|
+
resyncAccountsDuration: number;
|
|
15
16
|
preloadedData: any;
|
|
16
17
|
}): Promise<MutationReport<T>>;
|
|
17
18
|
export declare function autoSignTransaction<T extends Transaction>({ transport, deviceAction, appCandidate, account, transaction, status, }: {
|
|
@@ -21,6 +22,5 @@ export declare function autoSignTransaction<T extends Transaction>({ transport,
|
|
|
21
22
|
account: Account;
|
|
22
23
|
transaction: T;
|
|
23
24
|
status: TransactionStatus;
|
|
24
|
-
}):
|
|
25
|
-
export declare function getImplicitDeviceAction(currency: CryptoCurrency): any;
|
|
25
|
+
}): OperatorFunction<SignOperationEvent, SignOperationEvent>;
|
|
26
26
|
//# sourceMappingURL=engine.d.ts.map
|
package/lib/bot/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/bot/engine.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/bot/engine.ts"],"names":[],"mappings":"AAIA,OAAO,EAA8B,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAuBpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAOrD,OAAO,KAAK,EACV,OAAO,EAEP,UAAU,EACV,cAAc,EACd,YAAY,EAIb,MAAM,SAAS,CAAC;AAGjB,OAAO,KAAK,EACV,OAAO,EAEP,kBAAkB,EACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAwBzE,wBAAsB,cAAc,CAAC,CAAC,SAAS,WAAW,EACxD,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAChB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CA0MxB;AACD,wBAAsB,YAAY,CAAC,CAAC,SAAS,WAAW,EAAE,EACxD,YAAY,EACZ,IAAI,EACJ,MAAM,EACN,OAAO,EACP,QAAQ,EACR,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EACtB,aAAa,GACd,EAAE;IACD,YAAY,EAAE,GAAG,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACjB,MAAM,EAAE,GAAG,CAAC;IACZ,OAAO,EAAE,GAAG,CAAC;IACb,QAAQ,EAAE,GAAG,CAAC;IACd,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,aAAa,EAAE,GAAG,CAAC;CACpB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CA+Q7B;AAkBD,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,EACzD,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,WAAW,EACX,MAAM,GACP,EAAE;IACD,SAAS,EAAE,GAAG,CAAC;IACf,YAAY,EAAE,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnC,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,CAAC,CAAC;IACf,MAAM,EAAE,iBAAiB,CAAC;CAC3B,GAAG,gBAAgB,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAsE3D"}
|
package/lib/bot/engine.js
CHANGED
|
@@ -61,7 +61,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
61
61
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
62
62
|
};
|
|
63
63
|
exports.__esModule = true;
|
|
64
|
-
exports.
|
|
64
|
+
exports.autoSignTransaction = exports.runOnAccount = exports.runWithAppSpec = void 0;
|
|
65
65
|
var expect_1 = __importDefault(require("expect"));
|
|
66
66
|
var invariant_1 = __importDefault(require("invariant"));
|
|
67
67
|
var performance_now_1 = __importDefault(require("performance-now"));
|
|
@@ -76,10 +76,10 @@ var operation_1 = require("../operation");
|
|
|
76
76
|
var env_1 = require("../env");
|
|
77
77
|
var promise_2 = require("../promise");
|
|
78
78
|
var speculos_1 = require("../load/speculos");
|
|
79
|
-
var speculos_deviceActions_1 = __importDefault(require("../generated/speculos-deviceActions"));
|
|
80
79
|
var formatters_1 = require("./formatters");
|
|
81
80
|
var cache_1 = require("../bridge/cache");
|
|
82
81
|
var cross_1 = require("../cross");
|
|
82
|
+
var bot_test_context_1 = require("./bot-test-context");
|
|
83
83
|
var appCandidates;
|
|
84
84
|
var localCache = {};
|
|
85
85
|
var cache = (0, cache_1.makeBridgeCacheSystem)({
|
|
@@ -110,7 +110,7 @@ function crossAccount(account) {
|
|
|
110
110
|
}
|
|
111
111
|
function runWithAppSpec(spec, reportLog) {
|
|
112
112
|
return __awaiter(this, void 0, void 0, function () {
|
|
113
|
-
var seed, coinapps, mutationReports, appQuery, currency, dependency, appCandidate, deviceParams, device, appReport, bridge, syncConfig,
|
|
113
|
+
var seed, coinapps, mutationReports, appQuery, currency, dependency, appCandidate, deviceParams, device, appReport, bridge, syncConfig, t, preloadedData, preloadDuration, beforeScanTime, accounts, i, _a, _b, preloadStats, mutationsCount, length_1, totalTries, accountIdsNeedResync_1, j, _loop_1, i, e_1;
|
|
114
114
|
return __generator(this, function (_c) {
|
|
115
115
|
switch (_c.label) {
|
|
116
116
|
case 0:
|
|
@@ -139,39 +139,34 @@ function runWithAppSpec(spec, reportLog) {
|
|
|
139
139
|
};
|
|
140
140
|
_c.label = 3;
|
|
141
141
|
case 3:
|
|
142
|
-
_c.trys.push([3,
|
|
142
|
+
_c.trys.push([3, 19, 20, 23]);
|
|
143
143
|
return [4 /*yield*/, (0, speculos_1.createSpeculosDevice)(deviceParams)];
|
|
144
144
|
case 4:
|
|
145
145
|
device = _c.sent();
|
|
146
|
+
appReport.appPath = device.appPath;
|
|
146
147
|
bridge = (0, bridge_1.getCurrencyBridge)(currency);
|
|
147
148
|
syncConfig = {
|
|
148
149
|
paginationConfig: {}
|
|
149
150
|
};
|
|
150
|
-
|
|
151
|
+
t = (0, performance_now_1["default"])();
|
|
151
152
|
return [4 /*yield*/, cache.prepareCurrency(currency)];
|
|
152
153
|
case 5:
|
|
153
154
|
preloadedData = _c.sent();
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
firstSyncDurations_1 = {};
|
|
155
|
+
preloadDuration = (0, performance_now_1["default"])() - t;
|
|
156
|
+
appReport.preloadDuration = preloadDuration;
|
|
157
|
+
beforeScanTime = (0, performance_now_1["default"])();
|
|
158
|
+
t = (0, performance_now_1["default"])();
|
|
159
159
|
return [4 /*yield*/, bridge
|
|
160
160
|
.scanAccounts({
|
|
161
161
|
currency: currency,
|
|
162
162
|
deviceId: device.id,
|
|
163
163
|
syncConfig: syncConfig
|
|
164
164
|
})
|
|
165
|
-
.pipe((0, operators_1.filter)(function (e) { return e.type === "discovered"; }), (0, operators_1.map)(function (e) { return e.account; }), (0, operators_1.
|
|
166
|
-
var dt = (0, performance_now_1["default"])() - t_1;
|
|
167
|
-
firstSyncDurations_1[account.id] = dt;
|
|
168
|
-
t_1 = (0, performance_now_1["default"])();
|
|
169
|
-
scanTime_1 += dt;
|
|
170
|
-
}), (0, operators_1.reduce)(function (all, a) { return all.concat(a); }, []), (0, operators_1.timeoutWith)((0, env_1.getEnv)("BOT_TIMEOUT_SCAN_ACCOUNTS"), (0, rxjs_1.throwError)(new Error("scan accounts timeout for currency " + currency.name))))
|
|
165
|
+
.pipe((0, operators_1.filter)(function (e) { return e.type === "discovered"; }), (0, operators_1.map)(function (e) { return e.account; }), (0, operators_1.reduce)(function (all, a) { return all.concat(a); }, []), (0, operators_1.timeoutWith)((0, env_1.getEnv)("BOT_TIMEOUT_SCAN_ACCOUNTS"), (0, rxjs_1.throwError)(new Error("scan accounts timeout for currency " + currency.name))))
|
|
171
166
|
.toPromise()];
|
|
172
167
|
case 6:
|
|
173
168
|
accounts = _c.sent();
|
|
174
|
-
appReport.
|
|
169
|
+
appReport.scanDuration = (0, performance_now_1["default"])() - beforeScanTime;
|
|
175
170
|
i = 0;
|
|
176
171
|
_c.label = 7;
|
|
177
172
|
case 7:
|
|
@@ -188,15 +183,8 @@ function runWithAppSpec(spec, reportLog) {
|
|
|
188
183
|
case 10:
|
|
189
184
|
appReport.accountsBefore = accounts;
|
|
190
185
|
(0, invariant_1["default"])(accounts.length > 0, "unexpected empty accounts for " + currency.name);
|
|
191
|
-
preloadStats =
|
|
192
|
-
reportLog("Spec ".concat(spec.name, " found ").concat(accounts.length, " ").concat(currency.name, " accounts").concat(preloadStats, ". Will use ").concat((0, formatters_1.formatAppCandidate)(appCandidate), "\n").concat(accounts
|
|
193
|
-
.map(function (a) {
|
|
194
|
-
return "(" +
|
|
195
|
-
(0, formatters_1.formatTime)(firstSyncDurations_1[a.id] || 0) +
|
|
196
|
-
") " +
|
|
197
|
-
(0, account_1.formatAccount)(a, "head");
|
|
198
|
-
})
|
|
199
|
-
.join("\n"), "\n"));
|
|
186
|
+
preloadStats = preloadDuration > 10 ? " (preload: ".concat((0, formatters_1.formatTime)(preloadDuration), ")") : "";
|
|
187
|
+
reportLog("Spec ".concat(spec.name, " found ").concat(accounts.length, " ").concat(currency.name, " accounts").concat(preloadStats, ". Will use ").concat((0, formatters_1.formatAppCandidate)(appCandidate), "\n").concat(accounts.map(function (a) { return (0, account_1.formatAccount)(a, "head"); }).join("\n"), "\n"));
|
|
200
188
|
if (accounts.every(account_1.isAccountEmpty)) {
|
|
201
189
|
reportLog("This SEED does not have ".concat(currency.name, ". Please send funds to ").concat(accounts
|
|
202
190
|
.map(function (a) { return a.freshAddress; })
|
|
@@ -207,90 +195,118 @@ function runWithAppSpec(spec, reportLog) {
|
|
|
207
195
|
mutationsCount = {};
|
|
208
196
|
length_1 = accounts.length;
|
|
209
197
|
totalTries = spec.multipleRuns || 1;
|
|
198
|
+
accountIdsNeedResync_1 = [];
|
|
210
199
|
j = 0;
|
|
211
200
|
_c.label = 11;
|
|
212
201
|
case 11:
|
|
213
|
-
if (!(j < totalTries)) return [3 /*break*/,
|
|
202
|
+
if (!(j < totalTries)) return [3 /*break*/, 17];
|
|
203
|
+
_loop_1 = function (i) {
|
|
204
|
+
var resynced, resyncAccountsDuration, account, report, finalAccount_1;
|
|
205
|
+
return __generator(this, function (_d) {
|
|
206
|
+
switch (_d.label) {
|
|
207
|
+
case 0:
|
|
208
|
+
(0, logs_1.log)("engine", "spec ".concat(spec.name, " sync all accounts (try ").concat(j, " run ").concat(i, ")"));
|
|
209
|
+
// resync all accounts that needs to be resynced
|
|
210
|
+
t = (0, performance_now_1["default"])();
|
|
211
|
+
return [4 /*yield*/, (0, promise_1.promiseAllBatched)((0, env_1.getEnv)("SYNC_MAX_CONCURRENT"), accounts.filter(function (a) { return accountIdsNeedResync_1.includes(a.id); }), syncAccount)];
|
|
212
|
+
case 1:
|
|
213
|
+
resynced = _d.sent();
|
|
214
|
+
accounts = accounts.map(function (a) {
|
|
215
|
+
var i = accountIdsNeedResync_1.indexOf(a.id);
|
|
216
|
+
return i !== -1 ? resynced[i] : a;
|
|
217
|
+
});
|
|
218
|
+
accountIdsNeedResync_1 = [];
|
|
219
|
+
appReport.accountsAfter = accounts;
|
|
220
|
+
resyncAccountsDuration = (0, performance_now_1["default"])() - t;
|
|
221
|
+
account = accounts[i];
|
|
222
|
+
return [4 /*yield*/, runOnAccount({
|
|
223
|
+
appCandidate: appCandidate,
|
|
224
|
+
spec: spec,
|
|
225
|
+
device: device,
|
|
226
|
+
account: account,
|
|
227
|
+
accounts: accounts,
|
|
228
|
+
mutationsCount: mutationsCount,
|
|
229
|
+
resyncAccountsDuration: resyncAccountsDuration,
|
|
230
|
+
accountIdsNeedResync: accountIdsNeedResync_1,
|
|
231
|
+
preloadedData: preloadedData
|
|
232
|
+
})];
|
|
233
|
+
case 2:
|
|
234
|
+
report = _d.sent();
|
|
235
|
+
if (report.finalAccount) {
|
|
236
|
+
finalAccount_1 = report.finalAccount;
|
|
237
|
+
accountIdsNeedResync_1 = accountIdsNeedResync_1.filter(function (id) { return id !== finalAccount_1.id; });
|
|
238
|
+
accounts = accounts.map(function (a) {
|
|
239
|
+
return a.id === finalAccount_1.id ? finalAccount_1 : a;
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
// eslint-disable-next-line no-console
|
|
243
|
+
console.log((0, formatters_1.formatReportForConsole)(report));
|
|
244
|
+
mutationReports.push(report);
|
|
245
|
+
appReport.mutations = mutationReports;
|
|
246
|
+
if (!(report.error ||
|
|
247
|
+
(report.latestSignOperationEvent &&
|
|
248
|
+
report.latestSignOperationEvent.type ===
|
|
249
|
+
"device-signature-requested"))) return [3 /*break*/, 5];
|
|
250
|
+
(0, logs_1.log)("engine", "spec ".concat(spec.name, " is recreating the device because deviceAction didn't finished"));
|
|
251
|
+
return [4 /*yield*/, (0, speculos_1.releaseSpeculosDevice)(device.id)];
|
|
252
|
+
case 3:
|
|
253
|
+
_d.sent();
|
|
254
|
+
return [4 /*yield*/, (0, speculos_1.createSpeculosDevice)(deviceParams)];
|
|
255
|
+
case 4:
|
|
256
|
+
device = _d.sent();
|
|
257
|
+
_d.label = 5;
|
|
258
|
+
case 5: return [2 /*return*/];
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
};
|
|
214
262
|
i = 0;
|
|
215
263
|
_c.label = 12;
|
|
216
264
|
case 12:
|
|
217
|
-
if (!(i < length_1)) return [3 /*break*/,
|
|
218
|
-
|
|
219
|
-
// resync all accounts (necessary between mutations)
|
|
220
|
-
t_1 = (0, performance_now_1["default"])();
|
|
221
|
-
return [4 /*yield*/, (0, promise_1.promiseAllBatched)((0, env_1.getEnv)("SYNC_MAX_CONCURRENT"), accounts, syncAccount)];
|
|
265
|
+
if (!(i < length_1)) return [3 /*break*/, 15];
|
|
266
|
+
return [5 /*yield**/, _loop_1(i)];
|
|
222
267
|
case 13:
|
|
223
|
-
accounts = _c.sent();
|
|
224
|
-
appReport.accountsAfter = accounts;
|
|
225
|
-
syncAllAccountsTime = (0, performance_now_1["default"])() - t_1;
|
|
226
|
-
account = accounts[i];
|
|
227
|
-
return [4 /*yield*/, runOnAccount({
|
|
228
|
-
appCandidate: appCandidate,
|
|
229
|
-
spec: spec,
|
|
230
|
-
device: device,
|
|
231
|
-
account: account,
|
|
232
|
-
accounts: accounts,
|
|
233
|
-
mutationsCount: mutationsCount,
|
|
234
|
-
syncAllAccountsTime: syncAllAccountsTime,
|
|
235
|
-
preloadedData: preloadedData
|
|
236
|
-
})];
|
|
237
|
-
case 14:
|
|
238
|
-
report = _c.sent();
|
|
239
|
-
// eslint-disable-next-line no-console
|
|
240
|
-
console.log((0, formatters_1.formatReportForConsole)(report));
|
|
241
|
-
mutationReports.push(report);
|
|
242
|
-
appReport.mutations = mutationReports;
|
|
243
|
-
if (!(report.error ||
|
|
244
|
-
(report.latestSignOperationEvent &&
|
|
245
|
-
report.latestSignOperationEvent.type ===
|
|
246
|
-
"device-signature-requested"))) return [3 /*break*/, 17];
|
|
247
|
-
(0, logs_1.log)("engine", "spec ".concat(spec.name, " is recreating the device because deviceAction didn't finished"));
|
|
248
|
-
return [4 /*yield*/, (0, speculos_1.releaseSpeculosDevice)(device.id)];
|
|
249
|
-
case 15:
|
|
250
268
|
_c.sent();
|
|
251
|
-
|
|
252
|
-
case
|
|
253
|
-
device = _c.sent();
|
|
254
|
-
_c.label = 17;
|
|
255
|
-
case 17:
|
|
269
|
+
_c.label = 14;
|
|
270
|
+
case 14:
|
|
256
271
|
i++;
|
|
257
272
|
return [3 /*break*/, 12];
|
|
258
|
-
case
|
|
273
|
+
case 15:
|
|
259
274
|
mutationsCount = {};
|
|
260
|
-
_c.label =
|
|
261
|
-
case
|
|
275
|
+
_c.label = 16;
|
|
276
|
+
case 16:
|
|
262
277
|
j++;
|
|
263
278
|
return [3 /*break*/, 11];
|
|
264
|
-
case
|
|
265
|
-
case
|
|
279
|
+
case 17: return [4 /*yield*/, (0, promise_1.promiseAllBatched)((0, env_1.getEnv)("SYNC_MAX_CONCURRENT"), accounts, syncAccount)];
|
|
280
|
+
case 18:
|
|
266
281
|
accounts = _c.sent();
|
|
267
282
|
appReport.mutations = mutationReports;
|
|
268
283
|
appReport.accountsAfter = accounts;
|
|
269
|
-
return [3 /*break*/,
|
|
270
|
-
case
|
|
284
|
+
return [3 /*break*/, 23];
|
|
285
|
+
case 19:
|
|
271
286
|
e_1 = _c.sent();
|
|
272
|
-
|
|
287
|
+
if (process.env.CI)
|
|
288
|
+
console.error(e_1);
|
|
273
289
|
appReport.fatalError = e_1;
|
|
274
290
|
(0, logs_1.log)("engine", "spec ".concat(spec.name, " failed with ").concat(String(e_1)));
|
|
275
|
-
return [3 /*break*/,
|
|
276
|
-
case
|
|
291
|
+
return [3 /*break*/, 23];
|
|
292
|
+
case 20:
|
|
277
293
|
(0, logs_1.log)("engine", "spec ".concat(spec.name, " finished"));
|
|
278
|
-
if (!device) return [3 /*break*/,
|
|
294
|
+
if (!device) return [3 /*break*/, 22];
|
|
279
295
|
return [4 /*yield*/, (0, speculos_1.releaseSpeculosDevice)(device.id)];
|
|
280
|
-
case
|
|
296
|
+
case 21:
|
|
281
297
|
_c.sent();
|
|
282
|
-
_c.label =
|
|
283
|
-
case
|
|
284
|
-
case
|
|
298
|
+
_c.label = 22;
|
|
299
|
+
case 22: return [7 /*endfinally*/];
|
|
300
|
+
case 23: return [2 /*return*/, appReport];
|
|
285
301
|
}
|
|
286
302
|
});
|
|
287
303
|
});
|
|
288
304
|
}
|
|
289
305
|
exports.runWithAppSpec = runWithAppSpec;
|
|
290
306
|
function runOnAccount(_a) {
|
|
291
|
-
var appCandidate = _a.appCandidate, spec = _a.spec, device = _a.device, account = _a.account, accounts = _a.accounts, mutationsCount = _a.mutationsCount,
|
|
307
|
+
var appCandidate = _a.appCandidate, spec = _a.spec, device = _a.device, account = _a.account, accounts = _a.accounts, accountIdsNeedResync = _a.accountIdsNeedResync, mutationsCount = _a.mutationsCount, resyncAccountsDuration = _a.resyncAccountsDuration, preloadedData = _a.preloadedData;
|
|
292
308
|
return __awaiter(this, void 0, void 0, function () {
|
|
293
|
-
var mutations, latestSignOperationEvent, report, accountBridge, accountBeforeTransaction_1, maxSpendable, candidates, unavailableMutationReasons, mutations_1, mutations_1_1, mutation_1, count, arg, r, candidate, tx, mutation_2, updates, status_1,
|
|
309
|
+
var mutations, latestSignOperationEvent, report, accountBridge, accountBeforeTransaction_1, maxSpendable, candidates, unavailableMutationReasons, mutations_1, mutations_1_1, mutation_1, count, arg, r, candidate, tx, mutation_2, updates, status_1, errors_1, transaction_1, updates_1, updates_1_1, patch, e_2_1, warnings, recovered, signedOperation, optimisticOperation_1, _b, testBefore_1, step, result, error_1;
|
|
294
310
|
var e_3, _c, e_2, _d;
|
|
295
311
|
return __generator(this, function (_e) {
|
|
296
312
|
switch (_e.label) {
|
|
@@ -299,7 +315,7 @@ function runOnAccount(_a) {
|
|
|
299
315
|
report = {
|
|
300
316
|
spec: spec,
|
|
301
317
|
appCandidate: appCandidate,
|
|
302
|
-
|
|
318
|
+
resyncAccountsDuration: resyncAccountsDuration
|
|
303
319
|
};
|
|
304
320
|
_e.label = 1;
|
|
305
321
|
case 1:
|
|
@@ -342,7 +358,8 @@ function runOnAccount(_a) {
|
|
|
342
358
|
});
|
|
343
359
|
}
|
|
344
360
|
catch (error) {
|
|
345
|
-
|
|
361
|
+
if (process.env.CI)
|
|
362
|
+
console.error(error);
|
|
346
363
|
unavailableMutationReasons.push({
|
|
347
364
|
mutation: mutation_1,
|
|
348
365
|
error: error
|
|
@@ -366,7 +383,7 @@ function runOnAccount(_a) {
|
|
|
366
383
|
tx = candidate.tx, mutation_2 = candidate.mutation, updates = candidate.updates;
|
|
367
384
|
report.mutation = mutation_2;
|
|
368
385
|
report.mutationTime = (0, performance_now_1["default"])();
|
|
369
|
-
|
|
386
|
+
errors_1 = [];
|
|
370
387
|
return [4 /*yield*/, accountBridge.prepareTransaction(account, tx)];
|
|
371
388
|
case 3:
|
|
372
389
|
transaction_1 = _e.sent();
|
|
@@ -413,10 +430,10 @@ function runOnAccount(_a) {
|
|
|
413
430
|
status_1 = _e.sent();
|
|
414
431
|
report.status = status_1;
|
|
415
432
|
report.statusTime = (0, performance_now_1["default"])();
|
|
416
|
-
|
|
433
|
+
errors_1 = Object.values(status_1.errors);
|
|
417
434
|
warnings = Object.values(status_1.warnings);
|
|
418
435
|
if (!mutation_2.recoverBadTransactionStatus) return [3 /*break*/, 16];
|
|
419
|
-
if (!(
|
|
436
|
+
if (!(errors_1.length || warnings.length)) return [3 /*break*/, 16];
|
|
420
437
|
recovered = mutation_2.recoverBadTransactionStatus({
|
|
421
438
|
transaction: transaction_1,
|
|
422
439
|
status: status_1,
|
|
@@ -437,8 +454,12 @@ function runOnAccount(_a) {
|
|
|
437
454
|
_e.label = 16;
|
|
438
455
|
case 16:
|
|
439
456
|
// without recovering mechanism, we simply assume an error is a failure
|
|
440
|
-
if (
|
|
441
|
-
|
|
457
|
+
if (errors_1.length) {
|
|
458
|
+
(0, bot_test_context_1.botTest)("mutation must not have tx status errors", function () {
|
|
459
|
+
// all mutation must express transaction that are POSSIBLE
|
|
460
|
+
// recoveredFromTransactionStatus can also be used to solve this for tricky cases
|
|
461
|
+
throw errors_1[0];
|
|
462
|
+
});
|
|
442
463
|
}
|
|
443
464
|
mutationsCount[mutation_2.name] = (mutationsCount[mutation_2.name] || 0) + 1;
|
|
444
465
|
// sign the transaction with speculos
|
|
@@ -454,7 +475,7 @@ function runOnAccount(_a) {
|
|
|
454
475
|
(0, logs_1.log)("engine", "spec ".concat(spec.name, "/").concat(account.name, ": ").concat(e.type));
|
|
455
476
|
}), autoSignTransaction({
|
|
456
477
|
transport: device.transport,
|
|
457
|
-
deviceAction: mutation_2.deviceAction ||
|
|
478
|
+
deviceAction: mutation_2.deviceAction || spec.genericDeviceAction,
|
|
458
479
|
appCandidate: appCandidate,
|
|
459
480
|
account: account,
|
|
460
481
|
transaction: transaction_1,
|
|
@@ -466,12 +487,23 @@ function runOnAccount(_a) {
|
|
|
466
487
|
signedOperation = _e.sent();
|
|
467
488
|
report.signedOperation = signedOperation;
|
|
468
489
|
report.signedTime = (0, performance_now_1["default"])();
|
|
490
|
+
// at this stage, we are about to broadcast we assume we will need to resync receiver account
|
|
491
|
+
if (report.destination) {
|
|
492
|
+
accountIdsNeedResync.push(report.destination.id);
|
|
493
|
+
}
|
|
494
|
+
accountIdsNeedResync.push(account.id);
|
|
469
495
|
if (!(0, env_1.getEnv)("DISABLE_TRANSACTION_BROADCAST")) return [3 /*break*/, 18];
|
|
470
496
|
_b = signedOperation.operation;
|
|
471
497
|
return [3 /*break*/, 20];
|
|
472
|
-
case 18: return [4 /*yield*/, accountBridge
|
|
498
|
+
case 18: return [4 /*yield*/, accountBridge
|
|
499
|
+
.broadcast({
|
|
473
500
|
account: account,
|
|
474
501
|
signedOperation: signedOperation
|
|
502
|
+
})["catch"](function (e) {
|
|
503
|
+
// wrap the error into some bot test context
|
|
504
|
+
(0, bot_test_context_1.botTest)("during broadcast", function () {
|
|
505
|
+
throw e;
|
|
506
|
+
});
|
|
475
507
|
})];
|
|
476
508
|
case 19:
|
|
477
509
|
_b = _e.sent();
|
|
@@ -487,7 +519,9 @@ function runOnAccount(_a) {
|
|
|
487
519
|
(mutation_2.testTimeout || spec.testTimeout || 30 * 1000);
|
|
488
520
|
var operation = account.operations.find(function (o) { return o.id === optimisticOperation_1.id; });
|
|
489
521
|
if (timedOut && !operation) {
|
|
490
|
-
|
|
522
|
+
(0, bot_test_context_1.botTest)("waiting operation id to appear after broadcast", function () {
|
|
523
|
+
throw new Error("could not find optimisticOperation " + optimisticOperation_1.id);
|
|
524
|
+
});
|
|
491
525
|
}
|
|
492
526
|
if (operation) {
|
|
493
527
|
try {
|
|
@@ -531,8 +565,9 @@ function runOnAccount(_a) {
|
|
|
531
565
|
return [3 /*break*/, 23];
|
|
532
566
|
case 22:
|
|
533
567
|
error_1 = _e.sent();
|
|
534
|
-
|
|
535
|
-
|
|
568
|
+
if (process.env.CI)
|
|
569
|
+
console.error(error_1);
|
|
570
|
+
(0, logs_1.log)("mutation-error", spec.name + ": " + (0, formatters_1.formatError)(error_1, true));
|
|
536
571
|
report.error = error_1;
|
|
537
572
|
return [3 /*break*/, 23];
|
|
538
573
|
case 23:
|
|
@@ -625,21 +660,17 @@ function autoSignTransaction(_a) {
|
|
|
625
660
|
});
|
|
626
661
|
}
|
|
627
662
|
exports.autoSignTransaction = autoSignTransaction;
|
|
628
|
-
function getImplicitDeviceAction(currency) {
|
|
629
|
-
var actions = speculos_deviceActions_1["default"][currency.family];
|
|
630
|
-
var accept = actions && actions.acceptTransaction;
|
|
631
|
-
(0, invariant_1["default"])(accept, "a acceptTransaction is missing for family %s", currency.family);
|
|
632
|
-
return accept;
|
|
633
|
-
}
|
|
634
|
-
exports.getImplicitDeviceAction = getImplicitDeviceAction;
|
|
635
663
|
function awaitAccountOperation(_a) {
|
|
636
664
|
var account = _a.account, step = _a.step;
|
|
637
665
|
(0, logs_1.log)("engine", "awaitAccountOperation on " + account.name);
|
|
638
666
|
var syncCounter = 0;
|
|
639
667
|
var acc = account;
|
|
668
|
+
var lastSync = (0, performance_now_1["default"])();
|
|
669
|
+
var loopDebounce = 1000;
|
|
670
|
+
var targetInterval = (0, env_1.getEnv)("SYNC_PENDING_INTERVAL");
|
|
640
671
|
function loop() {
|
|
641
672
|
return __awaiter(this, void 0, void 0, function () {
|
|
642
|
-
var operation, r;
|
|
673
|
+
var operation, spent, r;
|
|
643
674
|
return __generator(this, function (_a) {
|
|
644
675
|
switch (_a.label) {
|
|
645
676
|
case 0:
|
|
@@ -651,9 +682,11 @@ function awaitAccountOperation(_a) {
|
|
|
651
682
|
operation: operation
|
|
652
683
|
}];
|
|
653
684
|
}
|
|
654
|
-
|
|
685
|
+
spent = (0, performance_now_1["default"])() - lastSync;
|
|
686
|
+
return [4 /*yield*/, (0, promise_2.delay)(Math.max(loopDebounce, targetInterval - spent))];
|
|
655
687
|
case 1:
|
|
656
688
|
_a.sent();
|
|
689
|
+
lastSync = (0, performance_now_1["default"])();
|
|
657
690
|
(0, logs_1.log)("engine", "sync #" + syncCounter++ + " on " + account.name);
|
|
658
691
|
return [4 /*yield*/, syncAccount(acc)];
|
|
659
692
|
case 2:
|
|
@@ -674,18 +707,34 @@ function transactionTest(_a) {
|
|
|
674
707
|
var timingThreshold = 30 * 60 * 1000;
|
|
675
708
|
// FIXME: .valueOf to do arithmetic operations on date with typescript
|
|
676
709
|
var dt = Date.now().valueOf() - operation.date.valueOf();
|
|
677
|
-
(0,
|
|
678
|
-
|
|
679
|
-
|
|
710
|
+
(0, bot_test_context_1.botTest)("operation.date must not be in future", function () {
|
|
711
|
+
return (0, expect_1["default"])(dt).toBeGreaterThanOrEqual(0);
|
|
712
|
+
});
|
|
713
|
+
(0, bot_test_context_1.botTest)("operation.date less than 30mn ago", function () {
|
|
714
|
+
return (0, expect_1["default"])(dt).toBeLessThan(timingThreshold);
|
|
715
|
+
});
|
|
716
|
+
(0, bot_test_context_1.botTest)("operation must not failed", function () {
|
|
717
|
+
(0, expect_1["default"])(!operation.hasFailed).toBe(true);
|
|
718
|
+
});
|
|
680
719
|
var blockAvgTime = account.currency.blockAvgTime;
|
|
681
720
|
if (blockAvgTime && account.blockHeight) {
|
|
682
|
-
var
|
|
683
|
-
var
|
|
684
|
-
(0,
|
|
721
|
+
var expected_1 = (0, operation_1.getOperationConfirmationNumber)(operation, account);
|
|
722
|
+
var expectedMax_1 = Math.ceil(timingThreshold / blockAvgTime);
|
|
723
|
+
(0, bot_test_context_1.botTest)("low amount of confirmations", function () {
|
|
724
|
+
return (0, invariant_1["default"])(expected_1 <= expectedMax_1, "There are way too much operation confirmation for a small amount of time. %s < %s", expected_1, expectedMax_1);
|
|
725
|
+
});
|
|
685
726
|
}
|
|
686
|
-
(0,
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
(0,
|
|
727
|
+
(0, bot_test_context_1.botTest)("optimisticOperation.value must not be NaN", function () {
|
|
728
|
+
return (0, expect_1["default"])(!optimisticOperation.value.isNaN()).toBe(true);
|
|
729
|
+
});
|
|
730
|
+
(0, bot_test_context_1.botTest)("optimisticOperation.fee must not be NaN", function () {
|
|
731
|
+
return (0, expect_1["default"])(!optimisticOperation.fee.isNaN()).toBe(true);
|
|
732
|
+
});
|
|
733
|
+
(0, bot_test_context_1.botTest)("operation.value must not be NaN", function () {
|
|
734
|
+
return (0, expect_1["default"])(!operation.value.isNaN()).toBe(true);
|
|
735
|
+
});
|
|
736
|
+
(0, bot_test_context_1.botTest)("operation.fee must not be NaN", function () {
|
|
737
|
+
return (0, expect_1["default"])(!operation.fee.isNaN()).toBe(true);
|
|
738
|
+
});
|
|
690
739
|
}
|
|
691
740
|
//# sourceMappingURL=engine.js.map
|