@ledgerhq/coin-framework 0.0.2
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/account/accountId.d.ts +16 -0
- package/lib/account/accountId.d.ts.map +1 -0
- package/lib/account/accountId.js +85 -0
- package/lib/account/accountId.js.map +1 -0
- package/lib/account/accountName.d.ts +14 -0
- package/lib/account/accountName.d.ts.map +1 -0
- package/lib/account/accountName.js +17 -0
- package/lib/account/accountName.js.map +1 -0
- package/lib/account/addAccounts.d.ts +35 -0
- package/lib/account/addAccounts.d.ts.map +1 -0
- package/lib/account/addAccounts.js +209 -0
- package/lib/account/addAccounts.js.map +1 -0
- package/lib/account/balanceHistoryCache.d.ts +25 -0
- package/lib/account/balanceHistoryCache.d.ts.map +1 -0
- package/lib/account/balanceHistoryCache.js +115 -0
- package/lib/account/balanceHistoryCache.js.map +1 -0
- package/lib/account/groupOperations.d.ts +17 -0
- package/lib/account/groupOperations.d.ts.map +1 -0
- package/lib/account/groupOperations.js +127 -0
- package/lib/account/groupOperations.js.map +1 -0
- package/lib/account/helpers.d.ts +44 -0
- package/lib/account/helpers.d.ts.map +1 -0
- package/lib/account/helpers.js +333 -0
- package/lib/account/helpers.js.map +1 -0
- package/lib/account/helpers.test.d.ts +2 -0
- package/lib/account/helpers.test.d.ts.map +1 -0
- package/lib/account/helpers.test.js +366 -0
- package/lib/account/helpers.test.js.map +1 -0
- package/lib/account/index.d.ts +11 -0
- package/lib/account/index.d.ts.map +1 -0
- package/lib/account/index.js +27 -0
- package/lib/account/index.js.map +1 -0
- package/lib/account/ordering.d.ts +10 -0
- package/lib/account/ordering.d.ts.map +1 -0
- package/lib/account/ordering.js +110 -0
- package/lib/account/ordering.js.map +1 -0
- package/lib/account/pending.d.ts +33 -0
- package/lib/account/pending.d.ts.map +1 -0
- package/lib/account/pending.js +64 -0
- package/lib/account/pending.js.map +1 -0
- package/lib/account/serialization.d.ts +6 -0
- package/lib/account/serialization.d.ts.map +1 -0
- package/lib/account/serialization.js +118 -0
- package/lib/account/serialization.js.map +1 -0
- package/lib/account/support.d.ts +9 -0
- package/lib/account/support.d.ts.map +1 -0
- package/lib/account/support.js +72 -0
- package/lib/account/support.js.map +1 -0
- package/lib/account.test.d.ts +2 -0
- package/lib/account.test.d.ts.map +1 -0
- package/lib/account.test.js +257 -0
- package/lib/account.test.js.map +1 -0
- 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/formatters.d.ts +2 -0
- package/lib/bot/formatters.d.ts.map +1 -0
- package/lib/bot/formatters.js +31 -0
- package/lib/bot/formatters.js.map +1 -0
- package/lib/bot/specs.d.ts +50 -0
- package/lib/bot/specs.d.ts.map +1 -0
- package/lib/bot/specs.js +204 -0
- package/lib/bot/specs.js.map +1 -0
- package/lib/bot/types.d.ts +178 -0
- package/lib/bot/types.d.ts.map +1 -0
- package/lib/bot/types.js +3 -0
- package/lib/bot/types.js.map +1 -0
- package/lib/bridge/getAddressWrapper.d.ts +6 -0
- package/lib/bridge/getAddressWrapper.d.ts.map +1 -0
- package/lib/bridge/getAddressWrapper.js +27 -0
- package/lib/bridge/getAddressWrapper.js.map +1 -0
- package/lib/bridge/jsHelpers.d.ts +63 -0
- package/lib/bridge/jsHelpers.d.ts.map +1 -0
- package/lib/bridge/jsHelpers.js +574 -0
- package/lib/bridge/jsHelpers.js.map +1 -0
- package/lib/cache.d.ts +10 -0
- package/lib/cache.d.ts.map +1 -0
- package/lib/cache.js +100 -0
- package/lib/cache.js.map +1 -0
- package/lib/cross.d.ts +42 -0
- package/lib/cross.d.ts.map +1 -0
- package/lib/cross.js +254 -0
- package/lib/cross.js.map +1 -0
- package/lib/cross.test.d.ts +2 -0
- package/lib/cross.test.d.ts.map +1 -0
- package/lib/cross.test.js +99 -0
- package/lib/cross.test.js.map +1 -0
- package/lib/currencies/BigNumberToLocaleString.d.ts +8 -0
- package/lib/currencies/BigNumberToLocaleString.d.ts.map +1 -0
- package/lib/currencies/BigNumberToLocaleString.js +65 -0
- package/lib/currencies/BigNumberToLocaleString.js.map +1 -0
- package/lib/currencies/BigNumberToLocaleString.test.d.ts +2 -0
- package/lib/currencies/BigNumberToLocaleString.test.d.ts.map +1 -0
- package/lib/currencies/BigNumberToLocaleString.test.js +108 -0
- package/lib/currencies/BigNumberToLocaleString.test.js.map +1 -0
- package/lib/currencies/CurrencyURIScheme.d.ts +13 -0
- package/lib/currencies/CurrencyURIScheme.d.ts.map +1 -0
- package/lib/currencies/CurrencyURIScheme.js +124 -0
- package/lib/currencies/CurrencyURIScheme.js.map +1 -0
- package/lib/currencies/chopCurrencyUnitDecimals.d.ts +3 -0
- package/lib/currencies/chopCurrencyUnitDecimals.d.ts.map +1 -0
- package/lib/currencies/chopCurrencyUnitDecimals.js +29 -0
- package/lib/currencies/chopCurrencyUnitDecimals.js.map +1 -0
- package/lib/currencies/formatCurrencyUnit.d.ts +33 -0
- package/lib/currencies/formatCurrencyUnit.d.ts.map +1 -0
- package/lib/currencies/formatCurrencyUnit.js +126 -0
- package/lib/currencies/formatCurrencyUnit.js.map +1 -0
- package/lib/currencies/formatShort.d.ts +8 -0
- package/lib/currencies/formatShort.d.ts.map +1 -0
- package/lib/currencies/formatShort.js +27 -0
- package/lib/currencies/formatShort.js.map +1 -0
- package/lib/currencies/index.d.ts +13 -0
- package/lib/currencies/index.d.ts.map +1 -0
- package/lib/currencies/index.js +65 -0
- package/lib/currencies/index.js.map +1 -0
- package/lib/currencies/localeUtility.d.ts +8 -0
- package/lib/currencies/localeUtility.d.ts.map +1 -0
- package/lib/currencies/localeUtility.js +49 -0
- package/lib/currencies/localeUtility.js.map +1 -0
- package/lib/currencies/parseCurrencyUnit.d.ts +4 -0
- package/lib/currencies/parseCurrencyUnit.d.ts.map +1 -0
- package/lib/currencies/parseCurrencyUnit.js +18 -0
- package/lib/currencies/parseCurrencyUnit.js.map +1 -0
- package/lib/currencies/sanitizeValueString.d.ts +6 -0
- package/lib/currencies/sanitizeValueString.d.ts.map +1 -0
- package/lib/currencies/sanitizeValueString.js +56 -0
- package/lib/currencies/sanitizeValueString.js.map +1 -0
- package/lib/currencies/support.d.ts +8 -0
- package/lib/currencies/support.d.ts.map +1 -0
- package/lib/currencies/support.js +101 -0
- package/lib/currencies/support.js.map +1 -0
- package/lib/currencies/valueFromUnit.d.ts +9 -0
- package/lib/currencies/valueFromUnit.d.ts.map +1 -0
- package/lib/currencies/valueFromUnit.js +14 -0
- package/lib/currencies/valueFromUnit.js.map +1 -0
- package/lib/derivation.d.ts +232 -0
- package/lib/derivation.d.ts.map +1 -0
- package/lib/derivation.js +501 -0
- package/lib/derivation.js.map +1 -0
- package/lib/env.d.ts +30 -0
- package/lib/env.d.ts.map +1 -0
- package/lib/env.js +773 -0
- package/lib/env.js.map +1 -0
- package/lib/errors.d.ts +7 -0
- package/lib/errors.d.ts.map +1 -0
- package/lib/errors.js +7 -0
- package/lib/errors.js.map +1 -0
- package/lib/errors.test.d.ts +2 -0
- package/lib/errors.test.d.ts.map +1 -0
- package/lib/errors.test.js +20 -0
- package/lib/errors.test.js.map +1 -0
- package/lib/mocks/account.d.ts +25 -0
- package/lib/mocks/account.d.ts.map +1 -0
- package/lib/mocks/account.js +368 -0
- package/lib/mocks/account.js.map +1 -0
- package/lib/mocks/fixtures/nfts.d.ts +27 -0
- package/lib/mocks/fixtures/nfts.d.ts.map +1 -0
- package/lib/mocks/fixtures/nfts.js +398 -0
- package/lib/mocks/fixtures/nfts.js.map +1 -0
- package/lib/mocks/fixtures/nfts.test.d.ts +2 -0
- package/lib/mocks/fixtures/nfts.test.d.ts.map +1 -0
- package/lib/mocks/fixtures/nfts.test.js +20 -0
- package/lib/mocks/fixtures/nfts.test.js.map +1 -0
- package/lib/mocks/helpers.d.ts +15 -0
- package/lib/mocks/helpers.d.ts.map +1 -0
- package/lib/mocks/helpers.js +32 -0
- package/lib/mocks/helpers.js.map +1 -0
- package/lib/network.d.ts +5 -0
- package/lib/network.d.ts.map +1 -0
- package/lib/network.js +125 -0
- package/lib/network.js.map +1 -0
- package/lib/nft/nftId.d.ts +8 -0
- package/lib/nft/nftId.d.ts.map +1 -0
- package/lib/nft/nftId.js +34 -0
- package/lib/nft/nftId.js.map +1 -0
- package/lib/operation.d.ts +24 -0
- package/lib/operation.d.ts.map +1 -0
- package/lib/operation.js +183 -0
- package/lib/operation.js.map +1 -0
- package/lib/promise.d.ts +21 -0
- package/lib/promise.d.ts.map +1 -0
- package/lib/promise.js +187 -0
- package/lib/promise.js.map +1 -0
- package/lib/promise.test.d.ts +2 -0
- package/lib/promise.test.d.ts.map +1 -0
- package/lib/promise.test.js +72 -0
- package/lib/promise.test.js.map +1 -0
- package/lib/rangeDates.d.ts +29 -0
- package/lib/rangeDates.d.ts.map +1 -0
- package/lib/rangeDates.js +94 -0
- package/lib/rangeDates.js.map +1 -0
- package/lib/rangeDates.test.d.ts +2 -0
- package/lib/rangeDates.test.d.ts.map +1 -0
- package/lib/rangeDates.test.js +51 -0
- package/lib/rangeDates.test.js.map +1 -0
- package/lib/test-helpers/staticTime.d.ts +2 -0
- package/lib/test-helpers/staticTime.d.ts.map +1 -0
- package/lib/test-helpers/staticTime.js +10 -0
- package/lib/test-helpers/staticTime.js.map +1 -0
- package/lib/transaction/common.d.ts +26 -0
- package/lib/transaction/common.d.ts.map +1 -0
- package/lib/transaction/common.js +123 -0
- package/lib/transaction/common.js.map +1 -0
- package/lib-es/account/accountId.d.ts +16 -0
- package/lib-es/account/accountId.d.ts.map +1 -0
- package/lib-es/account/accountId.js +74 -0
- package/lib-es/account/accountId.js.map +1 -0
- package/lib-es/account/accountName.d.ts +14 -0
- package/lib-es/account/accountName.d.ts.map +1 -0
- package/lib-es/account/accountName.js +12 -0
- package/lib-es/account/accountName.js.map +1 -0
- package/lib-es/account/addAccounts.d.ts +35 -0
- package/lib-es/account/addAccounts.d.ts.map +1 -0
- package/lib-es/account/addAccounts.js +200 -0
- package/lib-es/account/addAccounts.js.map +1 -0
- package/lib-es/account/balanceHistoryCache.d.ts +25 -0
- package/lib-es/account/balanceHistoryCache.d.ts.map +1 -0
- package/lib-es/account/balanceHistoryCache.js +109 -0
- package/lib-es/account/balanceHistoryCache.js.map +1 -0
- package/lib-es/account/groupOperations.d.ts +17 -0
- package/lib-es/account/groupOperations.d.ts.map +1 -0
- package/lib-es/account/groupOperations.js +122 -0
- package/lib-es/account/groupOperations.js.map +1 -0
- package/lib-es/account/helpers.d.ts +44 -0
- package/lib-es/account/helpers.d.ts.map +1 -0
- package/lib-es/account/helpers.js +303 -0
- package/lib-es/account/helpers.js.map +1 -0
- package/lib-es/account/helpers.test.d.ts +2 -0
- package/lib-es/account/helpers.test.d.ts.map +1 -0
- package/lib-es/account/helpers.test.js +361 -0
- package/lib-es/account/helpers.test.js.map +1 -0
- package/lib-es/account/index.d.ts +11 -0
- package/lib-es/account/index.d.ts.map +1 -0
- package/lib-es/account/index.js +11 -0
- package/lib-es/account/index.js.map +1 -0
- package/lib-es/account/ordering.d.ts +10 -0
- package/lib-es/account/ordering.d.ts.map +1 -0
- package/lib-es/account/ordering.js +103 -0
- package/lib-es/account/ordering.js.map +1 -0
- package/lib-es/account/pending.d.ts +33 -0
- package/lib-es/account/pending.d.ts.map +1 -0
- package/lib-es/account/pending.js +59 -0
- package/lib-es/account/pending.js.map +1 -0
- package/lib-es/account/serialization.d.ts +6 -0
- package/lib-es/account/serialization.d.ts.map +1 -0
- package/lib-es/account/serialization.js +112 -0
- package/lib-es/account/serialization.js.map +1 -0
- package/lib-es/account/support.d.ts +9 -0
- package/lib-es/account/support.d.ts.map +1 -0
- package/lib-es/account/support.js +64 -0
- package/lib-es/account/support.js.map +1 -0
- package/lib-es/account.test.d.ts +2 -0
- package/lib-es/account.test.d.ts.map +1 -0
- package/lib-es/account.test.js +252 -0
- package/lib-es/account.test.js.map +1 -0
- package/lib-es/bot/bot-test-context.d.ts +3 -0
- package/lib-es/bot/bot-test-context.d.ts.map +1 -0
- package/lib-es/bot/bot-test-context.js +21 -0
- package/lib-es/bot/bot-test-context.js.map +1 -0
- package/lib-es/bot/bot-test-context.test.d.ts +2 -0
- package/lib-es/bot/bot-test-context.test.d.ts.map +1 -0
- package/lib-es/bot/bot-test-context.test.js +39 -0
- package/lib-es/bot/bot-test-context.test.js.map +1 -0
- package/lib-es/bot/formatters.d.ts +2 -0
- package/lib-es/bot/formatters.d.ts.map +1 -0
- package/lib-es/bot/formatters.js +27 -0
- package/lib-es/bot/formatters.js.map +1 -0
- package/lib-es/bot/specs.d.ts +50 -0
- package/lib-es/bot/specs.d.ts.map +1 -0
- package/lib-es/bot/specs.js +193 -0
- package/lib-es/bot/specs.js.map +1 -0
- package/lib-es/bot/types.d.ts +178 -0
- package/lib-es/bot/types.d.ts.map +1 -0
- package/lib-es/bot/types.js +2 -0
- package/lib-es/bot/types.js.map +1 -0
- package/lib-es/bridge/getAddressWrapper.d.ts +6 -0
- package/lib-es/bridge/getAddressWrapper.d.ts.map +1 -0
- package/lib-es/bridge/getAddressWrapper.js +25 -0
- package/lib-es/bridge/getAddressWrapper.js.map +1 -0
- package/lib-es/bridge/jsHelpers.d.ts +63 -0
- package/lib-es/bridge/jsHelpers.d.ts.map +1 -0
- package/lib-es/bridge/jsHelpers.js +562 -0
- package/lib-es/bridge/jsHelpers.js.map +1 -0
- package/lib-es/cache.d.ts +10 -0
- package/lib-es/cache.d.ts.map +1 -0
- package/lib-es/cache.js +93 -0
- package/lib-es/cache.js.map +1 -0
- package/lib-es/cross.d.ts +42 -0
- package/lib-es/cross.d.ts.map +1 -0
- package/lib-es/cross.js +244 -0
- package/lib-es/cross.js.map +1 -0
- package/lib-es/cross.test.d.ts +2 -0
- package/lib-es/cross.test.d.ts.map +1 -0
- package/lib-es/cross.test.js +97 -0
- package/lib-es/cross.test.js.map +1 -0
- package/lib-es/currencies/BigNumberToLocaleString.d.ts +8 -0
- package/lib-es/currencies/BigNumberToLocaleString.d.ts.map +1 -0
- package/lib-es/currencies/BigNumberToLocaleString.js +61 -0
- package/lib-es/currencies/BigNumberToLocaleString.js.map +1 -0
- package/lib-es/currencies/BigNumberToLocaleString.test.d.ts +2 -0
- package/lib-es/currencies/BigNumberToLocaleString.test.d.ts.map +1 -0
- package/lib-es/currencies/BigNumberToLocaleString.test.js +106 -0
- package/lib-es/currencies/BigNumberToLocaleString.test.js.map +1 -0
- package/lib-es/currencies/CurrencyURIScheme.d.ts +13 -0
- package/lib-es/currencies/CurrencyURIScheme.d.ts.map +1 -0
- package/lib-es/currencies/CurrencyURIScheme.js +116 -0
- package/lib-es/currencies/CurrencyURIScheme.js.map +1 -0
- package/lib-es/currencies/chopCurrencyUnitDecimals.d.ts +3 -0
- package/lib-es/currencies/chopCurrencyUnitDecimals.d.ts.map +1 -0
- package/lib-es/currencies/chopCurrencyUnitDecimals.js +25 -0
- package/lib-es/currencies/chopCurrencyUnitDecimals.js.map +1 -0
- package/lib-es/currencies/formatCurrencyUnit.d.ts +33 -0
- package/lib-es/currencies/formatCurrencyUnit.d.ts.map +1 -0
- package/lib-es/currencies/formatCurrencyUnit.js +121 -0
- package/lib-es/currencies/formatCurrencyUnit.js.map +1 -0
- package/lib-es/currencies/formatShort.d.ts +8 -0
- package/lib-es/currencies/formatShort.d.ts.map +1 -0
- package/lib-es/currencies/formatShort.js +20 -0
- package/lib-es/currencies/formatShort.js.map +1 -0
- package/lib-es/currencies/index.d.ts +13 -0
- package/lib-es/currencies/index.d.ts.map +1 -0
- package/lib-es/currencies/index.js +16 -0
- package/lib-es/currencies/index.js.map +1 -0
- package/lib-es/currencies/localeUtility.d.ts +8 -0
- package/lib-es/currencies/localeUtility.d.ts.map +1 -0
- package/lib-es/currencies/localeUtility.js +43 -0
- package/lib-es/currencies/localeUtility.js.map +1 -0
- package/lib-es/currencies/parseCurrencyUnit.d.ts +4 -0
- package/lib-es/currencies/parseCurrencyUnit.d.ts.map +1 -0
- package/lib-es/currencies/parseCurrencyUnit.js +14 -0
- package/lib-es/currencies/parseCurrencyUnit.js.map +1 -0
- package/lib-es/currencies/sanitizeValueString.d.ts +6 -0
- package/lib-es/currencies/sanitizeValueString.d.ts.map +1 -0
- package/lib-es/currencies/sanitizeValueString.js +52 -0
- package/lib-es/currencies/sanitizeValueString.js.map +1 -0
- package/lib-es/currencies/support.d.ts +8 -0
- package/lib-es/currencies/support.d.ts.map +1 -0
- package/lib-es/currencies/support.js +92 -0
- package/lib-es/currencies/support.js.map +1 -0
- package/lib-es/currencies/valueFromUnit.d.ts +9 -0
- package/lib-es/currencies/valueFromUnit.d.ts.map +1 -0
- package/lib-es/currencies/valueFromUnit.js +10 -0
- package/lib-es/currencies/valueFromUnit.js.map +1 -0
- package/lib-es/derivation.d.ts +232 -0
- package/lib-es/derivation.d.ts.map +1 -0
- package/lib-es/derivation.js +473 -0
- package/lib-es/derivation.js.map +1 -0
- package/lib-es/env.d.ts +30 -0
- package/lib-es/env.d.ts.map +1 -0
- package/lib-es/env.js +758 -0
- package/lib-es/env.js.map +1 -0
- package/lib-es/errors.d.ts +7 -0
- package/lib-es/errors.d.ts.map +1 -0
- package/lib-es/errors.js +4 -0
- package/lib-es/errors.js.map +1 -0
- package/lib-es/errors.test.d.ts +2 -0
- package/lib-es/errors.test.d.ts.map +1 -0
- package/lib-es/errors.test.js +18 -0
- package/lib-es/errors.test.js.map +1 -0
- package/lib-es/mocks/account.d.ts +25 -0
- package/lib-es/mocks/account.d.ts.map +1 -0
- package/lib-es/mocks/account.js +358 -0
- package/lib-es/mocks/account.js.map +1 -0
- package/lib-es/mocks/fixtures/nfts.d.ts +27 -0
- package/lib-es/mocks/fixtures/nfts.d.ts.map +1 -0
- package/lib-es/mocks/fixtures/nfts.js +390 -0
- package/lib-es/mocks/fixtures/nfts.js.map +1 -0
- package/lib-es/mocks/fixtures/nfts.test.d.ts +2 -0
- package/lib-es/mocks/fixtures/nfts.test.d.ts.map +1 -0
- package/lib-es/mocks/fixtures/nfts.test.js +18 -0
- package/lib-es/mocks/fixtures/nfts.test.js.map +1 -0
- package/lib-es/mocks/helpers.d.ts +15 -0
- package/lib-es/mocks/helpers.d.ts.map +1 -0
- package/lib-es/mocks/helpers.js +26 -0
- package/lib-es/mocks/helpers.js.map +1 -0
- package/lib-es/network.d.ts +5 -0
- package/lib-es/network.d.ts.map +1 -0
- package/lib-es/network.js +118 -0
- package/lib-es/network.js.map +1 -0
- package/lib-es/nft/nftId.d.ts +8 -0
- package/lib-es/nft/nftId.d.ts.map +1 -0
- package/lib-es/nft/nftId.js +29 -0
- package/lib-es/nft/nftId.js.map +1 -0
- package/lib-es/operation.d.ts +24 -0
- package/lib-es/operation.d.ts.map +1 -0
- package/lib-es/operation.js +168 -0
- package/lib-es/operation.js.map +1 -0
- package/lib-es/promise.d.ts +21 -0
- package/lib-es/promise.d.ts.map +1 -0
- package/lib-es/promise.js +179 -0
- package/lib-es/promise.js.map +1 -0
- package/lib-es/promise.test.d.ts +2 -0
- package/lib-es/promise.test.d.ts.map +1 -0
- package/lib-es/promise.test.js +70 -0
- package/lib-es/promise.test.js.map +1 -0
- package/lib-es/rangeDates.d.ts +29 -0
- package/lib-es/rangeDates.d.ts.map +1 -0
- package/lib-es/rangeDates.js +84 -0
- package/lib-es/rangeDates.js.map +1 -0
- package/lib-es/rangeDates.test.d.ts +2 -0
- package/lib-es/rangeDates.test.d.ts.map +1 -0
- package/lib-es/rangeDates.test.js +49 -0
- package/lib-es/rangeDates.test.js.map +1 -0
- package/lib-es/test-helpers/staticTime.d.ts +2 -0
- package/lib-es/test-helpers/staticTime.d.ts.map +1 -0
- package/lib-es/test-helpers/staticTime.js +5 -0
- package/lib-es/test-helpers/staticTime.js.map +1 -0
- package/lib-es/transaction/common.d.ts +26 -0
- package/lib-es/transaction/common.d.ts.map +1 -0
- package/lib-es/transaction/common.js +115 -0
- package/lib-es/transaction/common.js.map +1 -0
- package/package.json +113 -0
- package/src/__snapshots__/account.test.ts.snap +2065 -0
- package/src/__snapshots__/cross.test.ts.snap +57 -0
- package/src/account/accountId.ts +93 -0
- package/src/account/accountName.ts +25 -0
- package/src/account/addAccounts.ts +236 -0
- package/src/account/balanceHistoryCache.ts +146 -0
- package/src/account/groupOperations.ts +164 -0
- package/src/account/helpers.test.ts +441 -0
- package/src/account/helpers.ts +380 -0
- package/src/account/index.ts +10 -0
- package/src/account/ordering.ts +109 -0
- package/src/account/pending.ts +66 -0
- package/src/account/serialization.ts +189 -0
- package/src/account/support.ts +96 -0
- package/src/account.test.ts +237 -0
- package/src/bot/bot-test-context.test.ts +37 -0
- package/src/bot/bot-test-context.ts +24 -0
- package/src/bot/formatters.ts +22 -0
- package/src/bot/specs.ts +275 -0
- package/src/bot/types.ts +224 -0
- package/src/bridge/getAddressWrapper.ts +40 -0
- package/src/bridge/jsHelpers.ts +645 -0
- package/src/cache.ts +65 -0
- package/src/cross.test.ts +112 -0
- package/src/cross.ts +366 -0
- package/src/currencies/BigNumberToLocaleString.test.ts +155 -0
- package/src/currencies/BigNumberToLocaleString.ts +80 -0
- package/src/currencies/CurrencyURIScheme.ts +114 -0
- package/src/currencies/chopCurrencyUnitDecimals.ts +34 -0
- package/src/currencies/formatCurrencyUnit.ts +167 -0
- package/src/currencies/formatShort.ts +24 -0
- package/src/currencies/index.ts +78 -0
- package/src/currencies/localeUtility.ts +50 -0
- package/src/currencies/parseCurrencyUnit.ts +16 -0
- package/src/currencies/sanitizeValueString.ts +58 -0
- package/src/currencies/support.ts +107 -0
- package/src/currencies/valueFromUnit.ts +10 -0
- package/src/derivation.ts +595 -0
- package/src/env.ts +780 -0
- package/src/errors.test.ts +21 -0
- package/src/errors.ts +9 -0
- package/src/mocks/account.ts +476 -0
- package/src/mocks/fixtures/nfts.test.ts +25 -0
- package/src/mocks/fixtures/nfts.ts +432 -0
- package/src/mocks/helpers.ts +38 -0
- package/src/network.ts +135 -0
- package/src/nft/nftId.ts +26 -0
- package/src/operation.ts +212 -0
- package/src/promise.test.ts +20 -0
- package/src/promise.ts +101 -0
- package/src/rangeDates.test.ts +66 -0
- package/src/rangeDates.ts +96 -0
- package/src/test-helpers/staticTime.ts +4 -0
- package/src/transaction/common.ts +157 -0
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
import { BigNumber } from "bignumber.js";
|
|
2
|
+
import invariant from "invariant";
|
|
3
|
+
import { getEnv } from "../env";
|
|
4
|
+
import { encodeTokenAccountId } from "./accountId";
|
|
5
|
+
import { emptyHistoryCache } from "./balanceHistoryCache";
|
|
6
|
+
import type {
|
|
7
|
+
Account,
|
|
8
|
+
AccountLike,
|
|
9
|
+
AccountLikeArray,
|
|
10
|
+
SubAccount,
|
|
11
|
+
TokenAccount,
|
|
12
|
+
ChildAccount,
|
|
13
|
+
} from "@ledgerhq/types-live";
|
|
14
|
+
import {
|
|
15
|
+
CryptoCurrency,
|
|
16
|
+
TokenCurrency,
|
|
17
|
+
Unit,
|
|
18
|
+
} from "@ledgerhq/types-cryptoassets";
|
|
19
|
+
|
|
20
|
+
// by convention, a main account is the top level account
|
|
21
|
+
// in case of an Account is the account itself
|
|
22
|
+
// in case of a TokenAccount it's the parentAccount
|
|
23
|
+
export const getMainAccount = (
|
|
24
|
+
account: AccountLike,
|
|
25
|
+
parentAccount?: Account | null | undefined
|
|
26
|
+
): Account => {
|
|
27
|
+
const mainAccount = account.type === "Account" ? account : parentAccount;
|
|
28
|
+
invariant(mainAccount, "an account is expected");
|
|
29
|
+
return mainAccount as Account;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export const getAccountCurrency = (
|
|
33
|
+
account?: AccountLike
|
|
34
|
+
): TokenCurrency | CryptoCurrency => {
|
|
35
|
+
switch (account?.type) {
|
|
36
|
+
case "Account":
|
|
37
|
+
case "ChildAccount":
|
|
38
|
+
return account.currency;
|
|
39
|
+
|
|
40
|
+
case "TokenAccount":
|
|
41
|
+
return account.token;
|
|
42
|
+
|
|
43
|
+
default:
|
|
44
|
+
throw new Error(
|
|
45
|
+
"invalid account.type=" + (account as unknown as { type: string })?.type
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export const getAccountUnit = (account: AccountLike): Unit => {
|
|
51
|
+
switch (account.type) {
|
|
52
|
+
case "Account":
|
|
53
|
+
return account.unit;
|
|
54
|
+
|
|
55
|
+
case "TokenAccount":
|
|
56
|
+
return account.token.units[0];
|
|
57
|
+
|
|
58
|
+
case "ChildAccount":
|
|
59
|
+
return account.currency.units[0];
|
|
60
|
+
|
|
61
|
+
default:
|
|
62
|
+
throw new Error("invalid account.type=" + (account as AccountLike).type);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
export const getAccountName = (account: AccountLike): string => {
|
|
67
|
+
switch (account.type) {
|
|
68
|
+
case "Account":
|
|
69
|
+
case "ChildAccount":
|
|
70
|
+
return account.name;
|
|
71
|
+
|
|
72
|
+
case "TokenAccount":
|
|
73
|
+
return account.token.name;
|
|
74
|
+
|
|
75
|
+
default:
|
|
76
|
+
throw new Error("invalid account.type=" + (account as AccountLike).type);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
export const getAccountSpendableBalance = (account: AccountLike): BigNumber => {
|
|
81
|
+
switch (account.type) {
|
|
82
|
+
case "Account":
|
|
83
|
+
case "TokenAccount":
|
|
84
|
+
return account.spendableBalance;
|
|
85
|
+
|
|
86
|
+
case "ChildAccount":
|
|
87
|
+
return account.balance;
|
|
88
|
+
|
|
89
|
+
default:
|
|
90
|
+
throw new Error("invalid account.type=" + (account as AccountLike).type);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
export const isAccountEmpty = (a: AccountLike): boolean => {
|
|
95
|
+
const hasSubAccounts =
|
|
96
|
+
a.type === "Account" && a.subAccounts && a.subAccounts.length;
|
|
97
|
+
return a.operationsCount === 0 && a.balance.isZero() && !hasSubAccounts;
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
export function areAllOperationsLoaded(account: AccountLike): boolean {
|
|
101
|
+
if (account.operationsCount !== account.operations.length) {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (account.type === "Account" && account.subAccounts) {
|
|
106
|
+
return account.subAccounts.every(areAllOperationsLoaded);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export const isAccountBalanceSignificant = (a: AccountLike): boolean =>
|
|
113
|
+
a.balance.gt(100);
|
|
114
|
+
|
|
115
|
+
// in future, could be a per currency thing
|
|
116
|
+
// clear account to a bare minimal version that can be restored via sync
|
|
117
|
+
// will preserve the balance to avoid user panic
|
|
118
|
+
export function clearAccount<T extends AccountLike>(
|
|
119
|
+
account: T,
|
|
120
|
+
familyClean?: (account: Account) => void
|
|
121
|
+
): T {
|
|
122
|
+
if (account.type === "TokenAccount") {
|
|
123
|
+
return {
|
|
124
|
+
...account,
|
|
125
|
+
balanceHistoryCache: emptyHistoryCache,
|
|
126
|
+
operations: [],
|
|
127
|
+
pendingOperations: [],
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if (account.type === "ChildAccount") {
|
|
132
|
+
return {
|
|
133
|
+
...account,
|
|
134
|
+
balanceHistoryCache: emptyHistoryCache,
|
|
135
|
+
operations: [],
|
|
136
|
+
pendingOperations: [],
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const copy: Account = {
|
|
141
|
+
...account,
|
|
142
|
+
balanceHistoryCache: emptyHistoryCache,
|
|
143
|
+
lastSyncDate: new Date(0),
|
|
144
|
+
operations: [],
|
|
145
|
+
pendingOperations: [],
|
|
146
|
+
subAccounts:
|
|
147
|
+
(account as Account).subAccounts &&
|
|
148
|
+
(account as Account).subAccounts?.map((acc) =>
|
|
149
|
+
clearAccount(acc, familyClean)
|
|
150
|
+
),
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
familyClean?.(copy);
|
|
154
|
+
|
|
155
|
+
delete copy.nfts;
|
|
156
|
+
return copy as T;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
export function findSubAccountById(
|
|
160
|
+
account: Account,
|
|
161
|
+
id: string
|
|
162
|
+
): SubAccount | null | undefined {
|
|
163
|
+
return (account.subAccounts || []).find((a) => a.id === id);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// get the token accounts of an account, ignoring those that are zero IF user don't want them
|
|
167
|
+
export function listSubAccounts(account: Account): SubAccount[] {
|
|
168
|
+
const accounts = account.subAccounts || [];
|
|
169
|
+
|
|
170
|
+
if (getEnv("HIDE_EMPTY_TOKEN_ACCOUNTS")) {
|
|
171
|
+
return accounts.filter((a) => !a.balance.isZero());
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return accounts;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export type FlattenAccountsOptions = {
|
|
178
|
+
enforceHideEmptySubAccounts?: boolean;
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
export function flattenAccounts(
|
|
182
|
+
topAccounts: AccountLikeArray,
|
|
183
|
+
o: FlattenAccountsOptions = {}
|
|
184
|
+
): AccountLike[] {
|
|
185
|
+
const accounts: AccountLike[] = [];
|
|
186
|
+
|
|
187
|
+
for (let i = 0; i < topAccounts.length; i++) {
|
|
188
|
+
const account = topAccounts[i];
|
|
189
|
+
accounts.push(account);
|
|
190
|
+
|
|
191
|
+
if (account.type === "Account") {
|
|
192
|
+
const subAccounts = o.enforceHideEmptySubAccounts
|
|
193
|
+
? listSubAccounts(account)
|
|
194
|
+
: account.subAccounts || [];
|
|
195
|
+
|
|
196
|
+
for (let j = 0; j < subAccounts.length; j++) {
|
|
197
|
+
accounts.push(subAccounts[j]);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
return accounts;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
export const shortAddressPreview = (addr: string, target = 20): string => {
|
|
206
|
+
const slice = Math.floor((target - 3) / 2);
|
|
207
|
+
return addr.length < target - 3
|
|
208
|
+
? addr
|
|
209
|
+
: `${addr.slice(0, slice)}...${addr.slice(addr.length - slice)}`;
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
export const isAccountBalanceUnconfirmed = (account: AccountLike): boolean =>
|
|
213
|
+
account.pendingOperations.some(
|
|
214
|
+
(op) => !account.operations.find((o) => o.hash === op.hash)
|
|
215
|
+
) || account.operations.some((op) => !op.blockHeight);
|
|
216
|
+
|
|
217
|
+
export const isUpToDateAccount = (account: Account | null | undefined) => {
|
|
218
|
+
if (!account) return true;
|
|
219
|
+
const { lastSyncDate, currency } = account;
|
|
220
|
+
const { blockAvgTime } = currency;
|
|
221
|
+
if (!blockAvgTime) return true;
|
|
222
|
+
const outdated =
|
|
223
|
+
// FIXME: same here, we need to use valueOf for typescript to compare dates
|
|
224
|
+
Date.now().valueOf() - (lastSyncDate.valueOf() || 0) >
|
|
225
|
+
blockAvgTime * 1000 + getEnv("SYNC_OUTDATED_CONSIDERED_DELAY");
|
|
226
|
+
return !outdated;
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
export const makeEmptyTokenAccount = (
|
|
230
|
+
account: Account,
|
|
231
|
+
token: TokenCurrency
|
|
232
|
+
): TokenAccount => ({
|
|
233
|
+
type: "TokenAccount",
|
|
234
|
+
id: account.id + "+" + token.contractAddress,
|
|
235
|
+
parentId: account.id,
|
|
236
|
+
token,
|
|
237
|
+
balance: new BigNumber(0),
|
|
238
|
+
spendableBalance: new BigNumber(0),
|
|
239
|
+
operationsCount: 0,
|
|
240
|
+
creationDate: new Date(),
|
|
241
|
+
operations: [],
|
|
242
|
+
pendingOperations: [],
|
|
243
|
+
starred: false,
|
|
244
|
+
swapHistory: [],
|
|
245
|
+
balanceHistoryCache: emptyHistoryCache,
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Enhance an account to force token accounts presence
|
|
250
|
+
*/
|
|
251
|
+
export const accountWithMandatoryTokens = (
|
|
252
|
+
account: Account,
|
|
253
|
+
tokenCurrencies: TokenCurrency[]
|
|
254
|
+
): Account => {
|
|
255
|
+
const { subAccounts } = account;
|
|
256
|
+
if (!subAccounts) return account;
|
|
257
|
+
const existingTokens = subAccounts
|
|
258
|
+
.map((a) => a.type === "TokenAccount" && a.token)
|
|
259
|
+
.filter(Boolean);
|
|
260
|
+
const addition = tokenCurrencies
|
|
261
|
+
.filter(
|
|
262
|
+
(
|
|
263
|
+
t // token of the same currency
|
|
264
|
+
) => t.parentCurrency === account.currency && !existingTokens.includes(t) // not yet in the sub accounts
|
|
265
|
+
)
|
|
266
|
+
.map<TokenAccount>((token) => ({
|
|
267
|
+
type: "TokenAccount",
|
|
268
|
+
id: encodeTokenAccountId(account.id, token),
|
|
269
|
+
parentId: account.id,
|
|
270
|
+
token,
|
|
271
|
+
balance: new BigNumber(0),
|
|
272
|
+
spendableBalance: new BigNumber(0),
|
|
273
|
+
operationsCount: 0,
|
|
274
|
+
creationDate: new Date(),
|
|
275
|
+
operations: [],
|
|
276
|
+
pendingOperations: [],
|
|
277
|
+
starred: false,
|
|
278
|
+
swapHistory: [],
|
|
279
|
+
balanceHistoryCache: emptyHistoryCache,
|
|
280
|
+
}));
|
|
281
|
+
if (addition.length === 0) return account;
|
|
282
|
+
return { ...account, subAccounts: subAccounts.concat(addition) };
|
|
283
|
+
};
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Patch account to enforce the removal of a blacklisted token
|
|
287
|
+
*/
|
|
288
|
+
export const withoutToken = (account: Account, tokenId: string): Account => {
|
|
289
|
+
const { subAccounts } = account;
|
|
290
|
+
if (!subAccounts) return account;
|
|
291
|
+
const tokenAccount = subAccounts.find(
|
|
292
|
+
(a) => a.type === "TokenAccount" && a.token.id === tokenId
|
|
293
|
+
);
|
|
294
|
+
if (!tokenAccount) return account;
|
|
295
|
+
return {
|
|
296
|
+
...account,
|
|
297
|
+
subAccounts: subAccounts.filter((sa) => sa.id !== tokenAccount.id),
|
|
298
|
+
};
|
|
299
|
+
};
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* Find matching pair of subAccount/parentAccount for a given token curency
|
|
303
|
+
* if no subAccount found will return parentAccount or null if no matches found
|
|
304
|
+
*/
|
|
305
|
+
export const findTokenAccountByCurrency = (
|
|
306
|
+
tokenCurrency: TokenCurrency,
|
|
307
|
+
accounts: Account[]
|
|
308
|
+
):
|
|
309
|
+
| {
|
|
310
|
+
account?: SubAccount;
|
|
311
|
+
parentAccount: Account;
|
|
312
|
+
}
|
|
313
|
+
| null
|
|
314
|
+
| undefined => {
|
|
315
|
+
const parentCurrency = tokenCurrency.parentCurrency;
|
|
316
|
+
|
|
317
|
+
for (const parentAccount of accounts) {
|
|
318
|
+
if (parentAccount.subAccounts && parentAccount.subAccounts.length > 0) {
|
|
319
|
+
for (const account of parentAccount.subAccounts) {
|
|
320
|
+
const c = getAccountCurrency(account);
|
|
321
|
+
|
|
322
|
+
if (c.id === tokenCurrency.id) {
|
|
323
|
+
// if token currency matches subAccount return couple account/parentAccount
|
|
324
|
+
return {
|
|
325
|
+
account,
|
|
326
|
+
parentAccount,
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
const parentC = getAccountCurrency(parentAccount);
|
|
333
|
+
|
|
334
|
+
if (parentC.id === parentCurrency.id) {
|
|
335
|
+
// if no token currency matches but parent matches return parentAccount
|
|
336
|
+
return {
|
|
337
|
+
parentAccount,
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
return null; // else return nothing
|
|
343
|
+
};
|
|
344
|
+
|
|
345
|
+
export function isAccount(account?: AccountLike): account is Account {
|
|
346
|
+
return account?.type === "Account";
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
export function isTokenAccount(account?: AccountLike): account is TokenAccount {
|
|
350
|
+
return account?.type === "TokenAccount";
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
export function isChildAccount(account?: AccountLike): account is ChildAccount {
|
|
354
|
+
return account?.type === "ChildAccount";
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
export function isSubAccount(account?: AccountLike): account is SubAccount {
|
|
358
|
+
return isTokenAccount(account) || isChildAccount(account);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
export function getParentAccount(
|
|
362
|
+
account: AccountLike,
|
|
363
|
+
accounts: AccountLike[]
|
|
364
|
+
): Account {
|
|
365
|
+
switch (account.type) {
|
|
366
|
+
case "Account":
|
|
367
|
+
return account;
|
|
368
|
+
case "TokenAccount":
|
|
369
|
+
case "ChildAccount": {
|
|
370
|
+
const parentAccount = accounts.find((a) => a.id == account.parentId);
|
|
371
|
+
if (!parentAccount) {
|
|
372
|
+
throw new Error(
|
|
373
|
+
"No 'parentAccount' account provided for token account"
|
|
374
|
+
);
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
return parentAccount as Account;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from "./accountId";
|
|
2
|
+
export * from "./accountName";
|
|
3
|
+
export * from "./addAccounts";
|
|
4
|
+
export * from "./balanceHistoryCache";
|
|
5
|
+
export * from "./groupOperations";
|
|
6
|
+
export * from "./helpers";
|
|
7
|
+
export * from "./ordering";
|
|
8
|
+
export * from "./pending";
|
|
9
|
+
export * from "./serialization";
|
|
10
|
+
export * from "./support";
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { BigNumber } from "bignumber.js";
|
|
2
|
+
import { flattenAccounts, getAccountCurrency } from "./helpers";
|
|
3
|
+
import type { FlattenAccountsOptions } from "./helpers";
|
|
4
|
+
import type { Account, AccountLike } from "@ledgerhq/types-live";
|
|
5
|
+
import type {
|
|
6
|
+
CryptoCurrency,
|
|
7
|
+
TokenCurrency,
|
|
8
|
+
} from "@ledgerhq/types-cryptoassets";
|
|
9
|
+
|
|
10
|
+
export type AccountComparator = (a: AccountLike, b: AccountLike) => number;
|
|
11
|
+
|
|
12
|
+
const sortNameLense = (a: AccountLike): string => {
|
|
13
|
+
switch (a.type) {
|
|
14
|
+
case "Account":
|
|
15
|
+
return a.name;
|
|
16
|
+
|
|
17
|
+
case "TokenAccount":
|
|
18
|
+
return a.token.name;
|
|
19
|
+
|
|
20
|
+
case "ChildAccount":
|
|
21
|
+
return a.currency.name;
|
|
22
|
+
|
|
23
|
+
default:
|
|
24
|
+
return "";
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export const sortAccountsComparatorFromOrder = (
|
|
29
|
+
orderAccounts: string,
|
|
30
|
+
calculateCountervalue: (
|
|
31
|
+
currency: TokenCurrency | CryptoCurrency,
|
|
32
|
+
value: BigNumber
|
|
33
|
+
) => BigNumber | null | undefined
|
|
34
|
+
): AccountComparator => {
|
|
35
|
+
const [order, sort] = orderAccounts.split("|");
|
|
36
|
+
const ascValue = sort === "desc" ? -1 : 1;
|
|
37
|
+
|
|
38
|
+
if (order === "name") {
|
|
39
|
+
return (a, b) =>
|
|
40
|
+
ascValue *
|
|
41
|
+
sortNameLense(a).localeCompare(sortNameLense(b), undefined, {
|
|
42
|
+
numeric: true,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const cvCaches: Record<string, BigNumber> = {};
|
|
47
|
+
|
|
48
|
+
const lazyCalcCV = (a: AccountLike) => {
|
|
49
|
+
if (a.id in cvCaches) return cvCaches[a.id];
|
|
50
|
+
const v =
|
|
51
|
+
calculateCountervalue(getAccountCurrency(a), a.balance) ||
|
|
52
|
+
new BigNumber(-1);
|
|
53
|
+
cvCaches[a.id] = v;
|
|
54
|
+
return v;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
return (a, b) => {
|
|
58
|
+
const diff = ascValue * lazyCalcCV(a).minus(lazyCalcCV(b)).toNumber();
|
|
59
|
+
if (diff === 0) return sortNameLense(a).localeCompare(sortNameLense(b));
|
|
60
|
+
return diff;
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
export const comparatorSortAccounts = <TA extends AccountLike>(
|
|
64
|
+
accounts: TA[],
|
|
65
|
+
comparator: AccountComparator
|
|
66
|
+
): TA[] => {
|
|
67
|
+
const meta = accounts
|
|
68
|
+
.map((ta, index) => ({
|
|
69
|
+
account: ta,
|
|
70
|
+
index,
|
|
71
|
+
}))
|
|
72
|
+
.sort((a, b) => comparator(a.account, b.account));
|
|
73
|
+
|
|
74
|
+
if (meta.every((m, i) => m.index === i)) {
|
|
75
|
+
// account ordering is preserved, we keep the same array reference (this should happen most of the time)
|
|
76
|
+
return accounts;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// otherwise, need to reorder
|
|
80
|
+
return meta.map((m) => accounts[m.index]);
|
|
81
|
+
};
|
|
82
|
+
// flatten accounts and sort between them (used for grid mode)
|
|
83
|
+
export const flattenSortAccounts = (
|
|
84
|
+
accounts: Account[],
|
|
85
|
+
comparator: AccountComparator,
|
|
86
|
+
o?: FlattenAccountsOptions
|
|
87
|
+
): AccountLike[] => {
|
|
88
|
+
return comparatorSortAccounts(flattenAccounts(accounts, o), comparator);
|
|
89
|
+
};
|
|
90
|
+
// sort top level accounts and the inner sub accounts if necessary (used for lists)
|
|
91
|
+
export const nestedSortAccounts = (
|
|
92
|
+
topAccounts: Account[],
|
|
93
|
+
comparator: AccountComparator
|
|
94
|
+
): Account[] => {
|
|
95
|
+
let oneAccountHaveChanged = false;
|
|
96
|
+
// first of all we sort the inner token accounts
|
|
97
|
+
const accounts = topAccounts.map((a) => {
|
|
98
|
+
if (!a.subAccounts) return a;
|
|
99
|
+
const subAccounts = comparatorSortAccounts(a.subAccounts, comparator);
|
|
100
|
+
if (subAccounts === a.subAccounts) return a;
|
|
101
|
+
oneAccountHaveChanged = true;
|
|
102
|
+
return { ...a, subAccounts };
|
|
103
|
+
});
|
|
104
|
+
// then we sort again between them
|
|
105
|
+
return comparatorSortAccounts(
|
|
106
|
+
oneAccountHaveChanged ? accounts : topAccounts,
|
|
107
|
+
comparator
|
|
108
|
+
);
|
|
109
|
+
};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { Account, Operation, SubAccount } from "@ledgerhq/types-live";
|
|
2
|
+
import { getEnv } from "../env";
|
|
3
|
+
export function shouldRetainPendingOperation(
|
|
4
|
+
account: Account,
|
|
5
|
+
op: Operation
|
|
6
|
+
): boolean {
|
|
7
|
+
// FIXME: valueOf to compare dates in typescript
|
|
8
|
+
const delay = new Date().valueOf() - op.date.valueOf();
|
|
9
|
+
const last = account.operations[0];
|
|
10
|
+
|
|
11
|
+
if (
|
|
12
|
+
last &&
|
|
13
|
+
last.transactionSequenceNumber &&
|
|
14
|
+
op.transactionSequenceNumber &&
|
|
15
|
+
op.transactionSequenceNumber <= last.transactionSequenceNumber
|
|
16
|
+
) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return delay < getEnv("OPERATION_OPTIMISTIC_RETENTION");
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const appendPendingOp = (ops: Operation[], op: Operation) => {
|
|
24
|
+
const filtered: Operation[] = ops.filter(
|
|
25
|
+
(o) => o.transactionSequenceNumber !== op.transactionSequenceNumber
|
|
26
|
+
);
|
|
27
|
+
filtered.unshift(op);
|
|
28
|
+
return filtered;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export const addPendingOperation = (account: Account, operation: Operation) => {
|
|
32
|
+
const accountCopy = { ...account };
|
|
33
|
+
const { subOperations } = operation;
|
|
34
|
+
const { subAccounts } = account;
|
|
35
|
+
|
|
36
|
+
function addInSubAccount(subaccounts: SubAccount[], op: Operation) {
|
|
37
|
+
const acc = subaccounts.find((sub) => sub.id === op.accountId);
|
|
38
|
+
|
|
39
|
+
if (acc) {
|
|
40
|
+
const copy: SubAccount = { ...acc };
|
|
41
|
+
copy.pendingOperations = appendPendingOp(acc.pendingOperations, op);
|
|
42
|
+
subaccounts[subaccounts.indexOf(acc)] = copy;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (subOperations && subAccounts) {
|
|
47
|
+
const taCopy: SubAccount[] = subAccounts.slice(0);
|
|
48
|
+
subOperations.forEach((op) => {
|
|
49
|
+
addInSubAccount(taCopy, op);
|
|
50
|
+
});
|
|
51
|
+
accountCopy.subAccounts = taCopy;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (accountCopy.id === operation.accountId) {
|
|
55
|
+
accountCopy.pendingOperations = appendPendingOp(
|
|
56
|
+
accountCopy.pendingOperations,
|
|
57
|
+
operation
|
|
58
|
+
);
|
|
59
|
+
} else if (subAccounts) {
|
|
60
|
+
const taCopy: SubAccount[] = subAccounts.slice(0);
|
|
61
|
+
addInSubAccount(taCopy, operation);
|
|
62
|
+
accountCopy.subAccounts = taCopy;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return accountCopy;
|
|
66
|
+
};
|