@ledgerhq/ledger-wallet-framework 1.0.1-nightly.20260314025831
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/.eslintrc.js +19 -0
- package/.turbo/turbo-build.log +4 -0
- package/.unimportedrc.json +82 -0
- package/CHANGELOG.md +17 -0
- package/LICENSE.txt +21 -0
- package/jest-global-setup.js +9 -0
- package/jest.config.js +30 -0
- package/lib/account/accountId.d.ts +18 -0
- package/lib/account/accountId.d.ts.map +1 -0
- package/lib/account/accountId.js +96 -0
- package/lib/account/accountId.js.map +1 -0
- package/lib/account/balanceHistoryCache.d.ts +42 -0
- package/lib/account/balanceHistoryCache.d.ts.map +1 -0
- package/lib/account/balanceHistoryCache.js +137 -0
- package/lib/account/balanceHistoryCache.js.map +1 -0
- package/lib/account/balanceHistoryCacheCompression.d.ts +65 -0
- package/lib/account/balanceHistoryCacheCompression.d.ts.map +1 -0
- package/lib/account/balanceHistoryCacheCompression.js +174 -0
- package/lib/account/balanceHistoryCacheCompression.js.map +1 -0
- package/lib/account/groupOperations.d.ts +46 -0
- package/lib/account/groupOperations.d.ts.map +1 -0
- package/lib/account/groupOperations.js +180 -0
- package/lib/account/groupOperations.js.map +1 -0
- package/lib/account/helpers.d.ts +37 -0
- package/lib/account/helpers.d.ts.map +1 -0
- package/lib/account/helpers.js +240 -0
- package/lib/account/helpers.js.map +1 -0
- package/lib/account/index.d.ts +8 -0
- package/lib/account/index.d.ts.map +1 -0
- package/lib/account/index.js +45 -0
- package/lib/account/index.js.map +1 -0
- package/lib/account/pending.d.ts +4 -0
- package/lib/account/pending.d.ts.map +1 -0
- package/lib/account/pending.js +77 -0
- package/lib/account/pending.js.map +1 -0
- package/lib/account/support.d.ts +6 -0
- package/lib/account/support.d.ts.map +1 -0
- package/lib/account/support.js +45 -0
- package/lib/account/support.js.map +1 -0
- package/lib/account/sync.d.ts +2 -0
- package/lib/account/sync.d.ts.map +1 -0
- package/lib/account/sync.js +15 -0
- package/lib/account/sync.js.map +1 -0
- package/lib/api/index.d.ts +6 -0
- package/lib/api/index.d.ts.map +1 -0
- package/lib/api/index.js +22 -0
- package/lib/api/index.js.map +1 -0
- package/lib/api/types.d.ts +20 -0
- package/lib/api/types.d.ts.map +1 -0
- package/lib/api/types.js +3 -0
- package/lib/api/types.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 +25 -0
- package/lib/bot/bot-test-context.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 +29 -0
- package/lib/bot/formatters.js.map +1 -0
- package/lib/bot/specs.d.ts +23 -0
- package/lib/bot/specs.d.ts.map +1 -0
- package/lib/bot/specs.js +197 -0
- package/lib/bot/specs.js.map +1 -0
- package/lib/bot/types.d.ts +215 -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 +5 -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 +71 -0
- package/lib/bridge/jsHelpers.d.ts.map +1 -0
- package/lib/bridge/jsHelpers.js +457 -0
- package/lib/bridge/jsHelpers.js.map +1 -0
- package/lib/currencies/BigNumberToLocaleString.d.ts +2 -0
- package/lib/currencies/BigNumberToLocaleString.d.ts.map +1 -0
- package/lib/currencies/BigNumberToLocaleString.js +6 -0
- package/lib/currencies/BigNumberToLocaleString.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 +91 -0
- package/lib/currencies/CurrencyURIScheme.js.map +1 -0
- package/lib/currencies/index.d.ts +5 -0
- package/lib/currencies/index.d.ts.map +1 -0
- package/lib/currencies/index.js +15 -0
- package/lib/currencies/index.js.map +1 -0
- package/lib/currencies/localeUtility.d.ts +2 -0
- package/lib/currencies/localeUtility.d.ts.map +1 -0
- package/lib/currencies/localeUtility.js +8 -0
- package/lib/currencies/localeUtility.js.map +1 -0
- package/lib/currencies/sanitizeValueString.d.ts +2 -0
- package/lib/currencies/sanitizeValueString.d.ts.map +1 -0
- package/lib/currencies/sanitizeValueString.js +6 -0
- package/lib/currencies/sanitizeValueString.js.map +1 -0
- package/lib/currencies/support.d.ts +5 -0
- package/lib/currencies/support.d.ts.map +1 -0
- package/lib/currencies/support.js +31 -0
- package/lib/currencies/support.js.map +1 -0
- package/lib/derivation.d.ts +56 -0
- package/lib/derivation.d.ts.map +1 -0
- package/lib/derivation.js +437 -0
- package/lib/derivation.js.map +1 -0
- package/lib/errors.d.ts +4 -0
- package/lib/errors.d.ts.map +1 -0
- package/lib/errors.js +6 -0
- package/lib/errors.js.map +1 -0
- package/lib/formatters.d.ts +3 -0
- package/lib/formatters.d.ts.map +1 -0
- package/lib/formatters.js +42 -0
- package/lib/formatters.js.map +1 -0
- package/lib/mocks/account.d.ts +28 -0
- package/lib/mocks/account.d.ts.map +1 -0
- package/lib/mocks/account.js +359 -0
- package/lib/mocks/account.js.map +1 -0
- package/lib/mocks/fixtures/nfts.d.ts +9 -0
- package/lib/mocks/fixtures/nfts.d.ts.map +1 -0
- package/lib/mocks/fixtures/nfts.js +92 -0
- package/lib/mocks/fixtures/nfts.js.map +1 -0
- package/lib/mocks/fixtures/nftsSamples.d.ts +50 -0
- package/lib/mocks/fixtures/nftsSamples.d.ts.map +1 -0
- package/lib/mocks/fixtures/nftsSamples.js +138 -0
- package/lib/mocks/fixtures/nftsSamples.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 +31 -0
- package/lib/mocks/helpers.js.map +1 -0
- package/lib/nft/helpers.d.ts +3 -0
- package/lib/nft/helpers.d.ts.map +1 -0
- package/lib/nft/helpers.js +64 -0
- package/lib/nft/helpers.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 +18 -0
- package/lib/nft/nftId.js.map +1 -0
- package/lib/nft/nftOperationId.d.ts +16 -0
- package/lib/nft/nftOperationId.d.ts.map +1 -0
- package/lib/nft/nftOperationId.js +35 -0
- package/lib/nft/nftOperationId.js.map +1 -0
- package/lib/nft/support.d.ts +20 -0
- package/lib/nft/support.d.ts.map +1 -0
- package/lib/nft/support.js +37 -0
- package/lib/nft/support.js.map +1 -0
- package/lib/nft/types.d.ts +14 -0
- package/lib/nft/types.d.ts.map +1 -0
- package/lib/nft/types.js +3 -0
- package/lib/nft/types.js.map +1 -0
- package/lib/operation.d.ts +44 -0
- package/lib/operation.d.ts.map +1 -0
- package/lib/operation.js +267 -0
- package/lib/operation.js.map +1 -0
- package/lib/sanction/errors.d.ts +4 -0
- package/lib/sanction/errors.d.ts.map +1 -0
- package/lib/sanction/errors.js +6 -0
- package/lib/sanction/errors.js.map +1 -0
- package/lib/sanction/index.d.ts +4 -0
- package/lib/sanction/index.d.ts.map +1 -0
- package/lib/sanction/index.js +52 -0
- package/lib/sanction/index.js.map +1 -0
- package/lib/serialization/account.d.ts +14 -0
- package/lib/serialization/account.d.ts.map +1 -0
- package/lib/serialization/account.js +201 -0
- package/lib/serialization/account.js.map +1 -0
- package/lib/serialization/index.d.ts +5 -0
- package/lib/serialization/index.d.ts.map +1 -0
- package/lib/serialization/index.js +24 -0
- package/lib/serialization/index.js.map +1 -0
- package/lib/serialization/nft.d.ts +4 -0
- package/lib/serialization/nft.d.ts.map +1 -0
- package/lib/serialization/nft.js +31 -0
- package/lib/serialization/nft.js.map +1 -0
- package/lib/serialization/operation.d.ts +7 -0
- package/lib/serialization/operation.d.ts.map +1 -0
- package/lib/serialization/operation.js +156 -0
- package/lib/serialization/operation.js.map +1 -0
- package/lib/serialization/transaction.d.ts +7 -0
- package/lib/serialization/transaction.d.ts.map +1 -0
- package/lib/serialization/transaction.js +67 -0
- package/lib/serialization/transaction.js.map +1 -0
- package/lib/setup.d.ts +2 -0
- package/lib/setup.d.ts.map +1 -0
- package/lib/setup.js +6 -0
- package/lib/setup.js.map +1 -0
- package/lib/signer.d.ts +3 -0
- package/lib/signer.d.ts.map +1 -0
- package/lib/signer.js +3 -0
- package/lib/signer.js.map +1 -0
- package/lib/test-helpers/bridge-integration-suite.d.ts +13 -0
- package/lib/test-helpers/bridge-integration-suite.d.ts.map +1 -0
- package/lib/test-helpers/bridge-integration-suite.js +598 -0
- package/lib/test-helpers/bridge-integration-suite.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 +21 -0
- package/lib/transaction/common.d.ts.map +1 -0
- package/lib/transaction/common.js +3 -0
- package/lib/transaction/common.js.map +1 -0
- package/lib-es/account/accountId.d.ts +18 -0
- package/lib-es/account/accountId.d.ts.map +1 -0
- package/lib-es/account/accountId.js +82 -0
- package/lib-es/account/accountId.js.map +1 -0
- package/lib-es/account/balanceHistoryCache.d.ts +42 -0
- package/lib-es/account/balanceHistoryCache.d.ts.map +1 -0
- package/lib-es/account/balanceHistoryCache.js +127 -0
- package/lib-es/account/balanceHistoryCache.js.map +1 -0
- package/lib-es/account/balanceHistoryCacheCompression.d.ts +65 -0
- package/lib-es/account/balanceHistoryCacheCompression.d.ts.map +1 -0
- package/lib-es/account/balanceHistoryCacheCompression.js +168 -0
- package/lib-es/account/balanceHistoryCacheCompression.js.map +1 -0
- package/lib-es/account/groupOperations.d.ts +46 -0
- package/lib-es/account/groupOperations.d.ts.map +1 -0
- package/lib-es/account/groupOperations.js +176 -0
- package/lib-es/account/groupOperations.js.map +1 -0
- package/lib-es/account/helpers.d.ts +37 -0
- package/lib-es/account/helpers.d.ts.map +1 -0
- package/lib-es/account/helpers.js +214 -0
- package/lib-es/account/helpers.js.map +1 -0
- package/lib-es/account/index.d.ts +8 -0
- package/lib-es/account/index.d.ts.map +1 -0
- package/lib-es/account/index.js +8 -0
- package/lib-es/account/index.js.map +1 -0
- package/lib-es/account/pending.d.ts +4 -0
- package/lib-es/account/pending.d.ts.map +1 -0
- package/lib-es/account/pending.js +72 -0
- package/lib-es/account/pending.js.map +1 -0
- package/lib-es/account/support.d.ts +6 -0
- package/lib-es/account/support.d.ts.map +1 -0
- package/lib-es/account/support.js +39 -0
- package/lib-es/account/support.js.map +1 -0
- package/lib-es/account/sync.d.ts +2 -0
- package/lib-es/account/sync.d.ts.map +1 -0
- package/lib-es/account/sync.js +9 -0
- package/lib-es/account/sync.js.map +1 -0
- package/lib-es/api/index.d.ts +6 -0
- package/lib-es/api/index.d.ts.map +1 -0
- package/lib-es/api/index.js +6 -0
- package/lib-es/api/index.js.map +1 -0
- package/lib-es/api/types.d.ts +20 -0
- package/lib-es/api/types.d.ts.map +1 -0
- package/lib-es/api/types.js +2 -0
- package/lib-es/api/types.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/formatters.d.ts +2 -0
- package/lib-es/bot/formatters.d.ts.map +1 -0
- package/lib-es/bot/formatters.js +26 -0
- package/lib-es/bot/formatters.js.map +1 -0
- package/lib-es/bot/specs.d.ts +23 -0
- package/lib-es/bot/specs.d.ts.map +1 -0
- package/lib-es/bot/specs.js +186 -0
- package/lib-es/bot/specs.js.map +1 -0
- package/lib-es/bot/types.d.ts +215 -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 +5 -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 +71 -0
- package/lib-es/bridge/jsHelpers.d.ts.map +1 -0
- package/lib-es/bridge/jsHelpers.js +441 -0
- package/lib-es/bridge/jsHelpers.js.map +1 -0
- package/lib-es/currencies/BigNumberToLocaleString.d.ts +2 -0
- package/lib-es/currencies/BigNumberToLocaleString.d.ts.map +1 -0
- package/lib-es/currencies/BigNumberToLocaleString.js +2 -0
- package/lib-es/currencies/BigNumberToLocaleString.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 +84 -0
- package/lib-es/currencies/CurrencyURIScheme.js.map +1 -0
- package/lib-es/currencies/index.d.ts +5 -0
- package/lib-es/currencies/index.d.ts.map +1 -0
- package/lib-es/currencies/index.js +5 -0
- package/lib-es/currencies/index.js.map +1 -0
- package/lib-es/currencies/localeUtility.d.ts +2 -0
- package/lib-es/currencies/localeUtility.d.ts.map +1 -0
- package/lib-es/currencies/localeUtility.js +2 -0
- package/lib-es/currencies/localeUtility.js.map +1 -0
- package/lib-es/currencies/sanitizeValueString.d.ts +2 -0
- package/lib-es/currencies/sanitizeValueString.d.ts.map +1 -0
- package/lib-es/currencies/sanitizeValueString.js +2 -0
- package/lib-es/currencies/sanitizeValueString.js.map +1 -0
- package/lib-es/currencies/support.d.ts +5 -0
- package/lib-es/currencies/support.d.ts.map +1 -0
- package/lib-es/currencies/support.js +26 -0
- package/lib-es/currencies/support.js.map +1 -0
- package/lib-es/derivation.d.ts +56 -0
- package/lib-es/derivation.d.ts.map +1 -0
- package/lib-es/derivation.js +414 -0
- package/lib-es/derivation.js.map +1 -0
- package/lib-es/errors.d.ts +4 -0
- package/lib-es/errors.d.ts.map +1 -0
- package/lib-es/errors.js +3 -0
- package/lib-es/errors.js.map +1 -0
- package/lib-es/formatters.d.ts +3 -0
- package/lib-es/formatters.d.ts.map +1 -0
- package/lib-es/formatters.js +38 -0
- package/lib-es/formatters.js.map +1 -0
- package/lib-es/mocks/account.d.ts +28 -0
- package/lib-es/mocks/account.d.ts.map +1 -0
- package/lib-es/mocks/account.js +350 -0
- package/lib-es/mocks/account.js.map +1 -0
- package/lib-es/mocks/fixtures/nfts.d.ts +9 -0
- package/lib-es/mocks/fixtures/nfts.d.ts.map +1 -0
- package/lib-es/mocks/fixtures/nfts.js +85 -0
- package/lib-es/mocks/fixtures/nfts.js.map +1 -0
- package/lib-es/mocks/fixtures/nftsSamples.d.ts +50 -0
- package/lib-es/mocks/fixtures/nftsSamples.d.ts.map +1 -0
- package/lib-es/mocks/fixtures/nftsSamples.js +135 -0
- package/lib-es/mocks/fixtures/nftsSamples.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/nft/helpers.d.ts +3 -0
- package/lib-es/nft/helpers.d.ts.map +1 -0
- package/lib-es/nft/helpers.js +57 -0
- package/lib-es/nft/helpers.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 +13 -0
- package/lib-es/nft/nftId.js.map +1 -0
- package/lib-es/nft/nftOperationId.d.ts +16 -0
- package/lib-es/nft/nftOperationId.d.ts.map +1 -0
- package/lib-es/nft/nftOperationId.js +29 -0
- package/lib-es/nft/nftOperationId.js.map +1 -0
- package/lib-es/nft/support.d.ts +20 -0
- package/lib-es/nft/support.d.ts.map +1 -0
- package/lib-es/nft/support.js +31 -0
- package/lib-es/nft/support.js.map +1 -0
- package/lib-es/nft/types.d.ts +14 -0
- package/lib-es/nft/types.d.ts.map +1 -0
- package/lib-es/nft/types.js +2 -0
- package/lib-es/nft/types.js.map +1 -0
- package/lib-es/operation.d.ts +44 -0
- package/lib-es/operation.d.ts.map +1 -0
- package/lib-es/operation.js +246 -0
- package/lib-es/operation.js.map +1 -0
- package/lib-es/sanction/errors.d.ts +4 -0
- package/lib-es/sanction/errors.d.ts.map +1 -0
- package/lib-es/sanction/errors.js +3 -0
- package/lib-es/sanction/errors.js.map +1 -0
- package/lib-es/sanction/index.d.ts +4 -0
- package/lib-es/sanction/index.d.ts.map +1 -0
- package/lib-es/sanction/index.js +45 -0
- package/lib-es/sanction/index.js.map +1 -0
- package/lib-es/serialization/account.d.ts +14 -0
- package/lib-es/serialization/account.d.ts.map +1 -0
- package/lib-es/serialization/account.js +194 -0
- package/lib-es/serialization/account.js.map +1 -0
- package/lib-es/serialization/index.d.ts +5 -0
- package/lib-es/serialization/index.d.ts.map +1 -0
- package/lib-es/serialization/index.js +5 -0
- package/lib-es/serialization/index.js.map +1 -0
- package/lib-es/serialization/nft.d.ts +4 -0
- package/lib-es/serialization/nft.d.ts.map +1 -0
- package/lib-es/serialization/nft.js +24 -0
- package/lib-es/serialization/nft.js.map +1 -0
- package/lib-es/serialization/operation.d.ts +7 -0
- package/lib-es/serialization/operation.d.ts.map +1 -0
- package/lib-es/serialization/operation.js +145 -0
- package/lib-es/serialization/operation.js.map +1 -0
- package/lib-es/serialization/transaction.d.ts +7 -0
- package/lib-es/serialization/transaction.d.ts.map +1 -0
- package/lib-es/serialization/transaction.js +56 -0
- package/lib-es/serialization/transaction.js.map +1 -0
- package/lib-es/setup.d.ts +2 -0
- package/lib-es/setup.d.ts.map +1 -0
- package/lib-es/setup.js +4 -0
- package/lib-es/setup.js.map +1 -0
- package/lib-es/signer.d.ts +3 -0
- package/lib-es/signer.d.ts.map +1 -0
- package/lib-es/signer.js +2 -0
- package/lib-es/signer.js.map +1 -0
- package/lib-es/test-helpers/bridge-integration-suite.d.ts +13 -0
- package/lib-es/test-helpers/bridge-integration-suite.d.ts.map +1 -0
- package/lib-es/test-helpers/bridge-integration-suite.js +592 -0
- package/lib-es/test-helpers/bridge-integration-suite.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 +21 -0
- package/lib-es/transaction/common.d.ts.map +1 -0
- package/lib-es/transaction/common.js +2 -0
- package/lib-es/transaction/common.js.map +1 -0
- package/package.json +134 -0
- package/src/account/__fixtures__/binance-peg_dai_token.json +74 -0
- package/src/account/__fixtures__/ethereum-erc20-0x_project.json +73 -0
- package/src/account/__snapshots__/index.test.ts.snap +2065 -0
- package/src/account/accountId.test.ts +165 -0
- package/src/account/accountId.ts +112 -0
- package/src/account/balanceHistoryCache.test.ts +25 -0
- package/src/account/balanceHistoryCache.ts +165 -0
- package/src/account/balanceHistoryCacheCompression.test.ts +431 -0
- package/src/account/balanceHistoryCacheCompression.ts +202 -0
- package/src/account/groupOperations.test.ts +126 -0
- package/src/account/groupOperations.ts +219 -0
- package/src/account/helpers.test.ts +250 -0
- package/src/account/helpers.ts +284 -0
- package/src/account/index.test.ts +194 -0
- package/src/account/index.ts +39 -0
- package/src/account/pending.test.ts +288 -0
- package/src/account/pending.ts +83 -0
- package/src/account/support.ts +57 -0
- package/src/account/sync.test.ts +79 -0
- package/src/account/sync.ts +12 -0
- package/src/api/index.ts +6 -0
- package/src/api/types.ts +19 -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 +252 -0
- package/src/bot/types.ts +271 -0
- package/src/bridge/getAddressWrapper.ts +36 -0
- package/src/bridge/jsHelpers.test.ts +915 -0
- package/src/bridge/jsHelpers.ts +695 -0
- package/src/currencies/BigNumberToLocaleString.ts +1 -0
- package/src/currencies/CurrencyURIScheme.ts +120 -0
- package/src/currencies/index.ts +4 -0
- package/src/currencies/localeUtility.ts +6 -0
- package/src/currencies/sanitizeValueString.ts +1 -0
- package/src/currencies/support.ts +33 -0
- package/src/derivation.test.ts +226 -0
- package/src/derivation.ts +529 -0
- package/src/errors.ts +3 -0
- package/src/formatters.ts +49 -0
- package/src/mocks/account.ts +419 -0
- package/src/mocks/fixtures/nfts.test.ts +40 -0
- package/src/mocks/fixtures/nfts.ts +130 -0
- package/src/mocks/fixtures/nftsSamples.ts +140 -0
- package/src/mocks/helpers.ts +32 -0
- package/src/nft/helpers.ts +63 -0
- package/src/nft/nftId.ts +26 -0
- package/src/nft/nftOperationId.ts +53 -0
- package/src/nft/support.ts +63 -0
- package/src/nft/types.ts +16 -0
- package/src/operation.test.ts +261 -0
- package/src/operation.ts +322 -0
- package/src/sanction/errors.ts +5 -0
- package/src/sanction/index.integration.test.ts +74 -0
- package/src/sanction/index.test.ts +153 -0
- package/src/sanction/index.ts +57 -0
- package/src/serialization/account.ts +339 -0
- package/src/serialization/index.ts +4 -0
- package/src/serialization/nft.ts +41 -0
- package/src/serialization/operation.test.ts +103 -0
- package/src/serialization/operation.ts +241 -0
- package/src/serialization/transaction.ts +79 -0
- package/src/setup.ts +4 -0
- package/src/signer.ts +5 -0
- package/src/test-helpers/bridge-integration-suite.ts +792 -0
- package/src/test-helpers/staticTime.ts +4 -0
- package/src/transaction/common.ts +23 -0
- package/tsconfig.build.json +15 -0
- package/tsconfig.json +26 -0
- package/types/bip32-path.d.ts +7 -0
package/.eslintrc.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
env: {
|
|
3
|
+
browser: true,
|
|
4
|
+
es6: true,
|
|
5
|
+
},
|
|
6
|
+
overrides: [
|
|
7
|
+
{
|
|
8
|
+
files: ["src/**/*.test.{ts,tsx}"],
|
|
9
|
+
env: {
|
|
10
|
+
"jest/globals": true,
|
|
11
|
+
},
|
|
12
|
+
plugins: ["jest"],
|
|
13
|
+
},
|
|
14
|
+
],
|
|
15
|
+
rules: {
|
|
16
|
+
"no-console": ["error", { allow: ["warn", "error"] }],
|
|
17
|
+
"@typescript-eslint/no-explicit-any": "warn",
|
|
18
|
+
},
|
|
19
|
+
};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
{
|
|
2
|
+
"entry": [
|
|
3
|
+
"src/account/index.ts",
|
|
4
|
+
"src/api/index.ts",
|
|
5
|
+
"src/bot/specs.ts",
|
|
6
|
+
"src/bot/formatters.ts",
|
|
7
|
+
"src/bridge/jsHelpers.ts",
|
|
8
|
+
"src/currencies/index.ts",
|
|
9
|
+
"src/derivation.ts",
|
|
10
|
+
"src/mocks/helpers.ts",
|
|
11
|
+
"src/mocks/account.ts",
|
|
12
|
+
"src/nft/helpers.ts",
|
|
13
|
+
"src/nft/support.ts",
|
|
14
|
+
"src/formatters.ts",
|
|
15
|
+
"src/index.ts",
|
|
16
|
+
"src/operation.ts",
|
|
17
|
+
"src/signer.ts",
|
|
18
|
+
"src/transaction/common.ts",
|
|
19
|
+
"src/sanction/index.ts",
|
|
20
|
+
"src/sanction/errors.ts"
|
|
21
|
+
],
|
|
22
|
+
"ignoreUnimported": [
|
|
23
|
+
"src/account/groupOperations.ts",
|
|
24
|
+
"src/account/index.ts",
|
|
25
|
+
"src/account/pending.ts",
|
|
26
|
+
"src/account/support.ts",
|
|
27
|
+
"src/api/errors.ts",
|
|
28
|
+
"src/api/index.ts",
|
|
29
|
+
"src/api/types.ts",
|
|
30
|
+
"src/bot/bot-test-context.ts",
|
|
31
|
+
"src/bot/formatters.ts",
|
|
32
|
+
"src/bot/specs.ts",
|
|
33
|
+
"src/bot/types.ts",
|
|
34
|
+
"src/bridge/getAddressWrapper.ts",
|
|
35
|
+
"src/bridge/index.ts",
|
|
36
|
+
"src/bridge/jsHelpers.ts",
|
|
37
|
+
"src/bridge/validateAddress.ts",
|
|
38
|
+
"src/currencies/BigNumberToLocaleString.ts",
|
|
39
|
+
"src/currencies/CurrencyURIScheme.ts",
|
|
40
|
+
"src/currencies/index.ts",
|
|
41
|
+
"src/currencies/localeUtility.ts",
|
|
42
|
+
"src/currencies/sanitizeValueString.ts",
|
|
43
|
+
"src/currencies/support.ts",
|
|
44
|
+
"src/errors.ts",
|
|
45
|
+
"src/formatters.ts",
|
|
46
|
+
"src/mocks/account.ts",
|
|
47
|
+
"src/mocks/fixtures/nfts.ts",
|
|
48
|
+
"src/mocks/fixtures/nftsSamples.ts",
|
|
49
|
+
"src/mocks/helpers.ts",
|
|
50
|
+
"src/nft/helpers.ts",
|
|
51
|
+
"src/nft/support.ts",
|
|
52
|
+
"src/nft/types.ts",
|
|
53
|
+
"src/sanction/errors.ts",
|
|
54
|
+
"src/sanction/index.ts",
|
|
55
|
+
"src/setup.ts",
|
|
56
|
+
"src/signer.ts",
|
|
57
|
+
"src/test-helpers/bridge-integration-suite.ts",
|
|
58
|
+
"src/test-helpers/staticTime.ts",
|
|
59
|
+
"src/transaction/common.ts",
|
|
60
|
+
"src/features/types.ts"
|
|
61
|
+
],
|
|
62
|
+
"ignoreUnresolved": [
|
|
63
|
+
"@jest/expect-utils",
|
|
64
|
+
"@jest/get-type",
|
|
65
|
+
"jest-util",
|
|
66
|
+
"@ledgerhq/live-dmk-speculos",
|
|
67
|
+
"src/utils.ts",
|
|
68
|
+
"src/uiConfig/types.ts",
|
|
69
|
+
"src/setup.ts",
|
|
70
|
+
"src/features/types.ts"
|
|
71
|
+
],
|
|
72
|
+
"ignoreUnused": [
|
|
73
|
+
"@ledgerhq/devices",
|
|
74
|
+
"@ledgerhq/live-config",
|
|
75
|
+
"@ledgerhq/live-network",
|
|
76
|
+
"bip32-path",
|
|
77
|
+
"eip55",
|
|
78
|
+
"expect",
|
|
79
|
+
"prando",
|
|
80
|
+
"uuid"
|
|
81
|
+
]
|
|
82
|
+
}
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# @ledgerhq/ledger-wallet-framework
|
|
2
|
+
|
|
3
|
+
## 1.0.1-nightly.20260314025831
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [[`c8d7be6`](https://github.com/LedgerHQ/ledger-live/commit/c8d7be6964aa9d8defd77de0b77ba7d42f472025), [`a221ae8`](https://github.com/LedgerHQ/ledger-live/commit/a221ae85b846c6d5dc6efb55ed873942d7720b05), [`ffb3c46`](https://github.com/LedgerHQ/ledger-live/commit/ffb3c46acd292b9ac0f46a2b84509d02775a5f20), [`7cbfb7d`](https://github.com/LedgerHQ/ledger-live/commit/7cbfb7dd2d52ad8380ab4d37b02f63292699cd68), [`bfa4315`](https://github.com/LedgerHQ/ledger-live/commit/bfa4315d2f3b4b95c5a742ffd6e05272662f4550), [`17e1fb3`](https://github.com/LedgerHQ/ledger-live/commit/17e1fb3fdb92d6dab9af72adcbcde62bdd772a71), [`75dfb86`](https://github.com/LedgerHQ/ledger-live/commit/75dfb86c871a026aa90136d0184637878d484484), [`7038137`](https://github.com/LedgerHQ/ledger-live/commit/703813747349288325fdc661637644d980073b9d), [`e6f26e0`](https://github.com/LedgerHQ/ledger-live/commit/e6f26e0f475763aaf3271e2d4ed6cf36fb1f5060), [`42bf9b7`](https://github.com/LedgerHQ/ledger-live/commit/42bf9b7c40c04c7d2eeffba30b778be0b123bfd0), [`164788e`](https://github.com/LedgerHQ/ledger-live/commit/164788e4a7e9c063d7769d44393708632854cb0a), [`9f559e9`](https://github.com/LedgerHQ/ledger-live/commit/9f559e98a1af37073e0e79ee5bb54b4aaecfb8c4), [`312d92d`](https://github.com/LedgerHQ/ledger-live/commit/312d92dbd9d115a2ec6ad6628445c31d45806aea), [`08ee941`](https://github.com/LedgerHQ/ledger-live/commit/08ee9414908ec1f7489493c98b9a823a20cce550), [`fd24208`](https://github.com/LedgerHQ/ledger-live/commit/fd242082615ef0af25f0f5f96389b7406fc194dc), [`8cb2da1`](https://github.com/LedgerHQ/ledger-live/commit/8cb2da1f175f143666abcb66ef94bd230456846d), [`173946c`](https://github.com/LedgerHQ/ledger-live/commit/173946ce652ffef216f04d82b680b14f5686500e), [`70f6288`](https://github.com/LedgerHQ/ledger-live/commit/70f6288597722a1e8fd6b5884d843f27be87e9d8), [`ad66568`](https://github.com/LedgerHQ/ledger-live/commit/ad66568fd9c96cfa08d11123a711e3fa79705f65), [`79f2f0e`](https://github.com/LedgerHQ/ledger-live/commit/79f2f0e3e8b8089664d2aee7c3dd25c7685aec2c), [`4cc02f3`](https://github.com/LedgerHQ/ledger-live/commit/4cc02f3c1ba0bdb93917b5427a375ab44cd5d208), [`37bc15e`](https://github.com/LedgerHQ/ledger-live/commit/37bc15e245107ce1044f36b57d191552a77329e6)]:
|
|
8
|
+
- @ledgerhq/cryptoassets@13.42.0-nightly.20260314025831
|
|
9
|
+
- @ledgerhq/devices@8.12.0-nightly.20260314025831
|
|
10
|
+
- @ledgerhq/errors@6.31.0-nightly.20260314025831
|
|
11
|
+
- @ledgerhq/logs@6.16.0-nightly.20260314025831
|
|
12
|
+
- @ledgerhq/types-cryptoassets@7.35.0-nightly.20260314025831
|
|
13
|
+
- @ledgerhq/types-live@6.101.0-nightly.20260314025831
|
|
14
|
+
- @ledgerhq/coin-framework@7.0.0-nightly.20260314025831
|
|
15
|
+
- @ledgerhq/live-currency-format@0.6.0-nightly.20260314025831
|
|
16
|
+
- @ledgerhq/live-env@2.30.0-nightly.20260314025831
|
|
17
|
+
- @ledgerhq/live-network@2.4.1-nightly.20260314025831
|
package/LICENSE.txt
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2017-present Ledger https://www.ledger.com/
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
module.exports = async () => {
|
|
2
|
+
/**
|
|
3
|
+
* Set the timezone to EST for all tests
|
|
4
|
+
* This allow us to run tests directly through jest without having to manually
|
|
5
|
+
* set the timezone as an env var beforehand, either manually or through a
|
|
6
|
+
* custom script in package.json
|
|
7
|
+
*/
|
|
8
|
+
process.env.TZ = "America/New_York";
|
|
9
|
+
};
|
package/jest.config.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
testEnvironment: "node",
|
|
3
|
+
transform: {
|
|
4
|
+
"^.+\\.(t|j)sx?$": [
|
|
5
|
+
"@swc/jest",
|
|
6
|
+
{
|
|
7
|
+
jsc: {
|
|
8
|
+
target: "esnext",
|
|
9
|
+
},
|
|
10
|
+
},
|
|
11
|
+
],
|
|
12
|
+
},
|
|
13
|
+
testPathIgnorePatterns: ["lib/", "lib-es/"],
|
|
14
|
+
globalSetup: "<rootDir>/jest-global-setup.js",
|
|
15
|
+
passWithNoTests: true,
|
|
16
|
+
collectCoverageFrom: [
|
|
17
|
+
"src/**/*.{ts,js,tsx}",
|
|
18
|
+
"!src/**/*.test.{ts,tsx}",
|
|
19
|
+
"!src/**/*.spec.{ts,tsx}",
|
|
20
|
+
"!src/**/__integration__/**",
|
|
21
|
+
"!src/**/__integrations__/**",
|
|
22
|
+
"!src/**/__tests__/**",
|
|
23
|
+
],
|
|
24
|
+
coverageReporters: ["json", ["lcov", { file: "lcov.info", projectRoot: "../../" }], "text"],
|
|
25
|
+
reporters: [
|
|
26
|
+
"default",
|
|
27
|
+
["jest-sonar", { outputName: "sonar-executionTests-report.xml", reportedFilePath: "absolute" }],
|
|
28
|
+
],
|
|
29
|
+
setupFilesAfterEnv: ["<rootDir>/src/setup.ts"],
|
|
30
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { AccountIdParams } from "@ledgerhq/types-live";
|
|
2
|
+
import type { TokenCurrency } from "@ledgerhq/types-cryptoassets";
|
|
3
|
+
export declare function safeEncodeTokenId(tokenId: string): string;
|
|
4
|
+
export declare function safeDecodeTokenId(encodedTokenId: string): string;
|
|
5
|
+
export declare function safeEncodeXpubOrAddress(xpubOrAddress: string): string;
|
|
6
|
+
export declare function safeDecodeXpubOrAddress(encodedXpubOrAddress: string): string;
|
|
7
|
+
export declare function encodeAccountId({ type, version, currencyId, xpubOrAddress, derivationMode, customData, }: AccountIdParams): string;
|
|
8
|
+
export declare function encodeTokenAccountId(accountId: string, token: TokenCurrency): string;
|
|
9
|
+
export declare function decodeTokenAccountIdSync(id: string): {
|
|
10
|
+
accountId: string;
|
|
11
|
+
tokenId: string;
|
|
12
|
+
};
|
|
13
|
+
export declare function decodeTokenAccountId(id: string): Promise<{
|
|
14
|
+
accountId: string;
|
|
15
|
+
token: TokenCurrency | undefined;
|
|
16
|
+
}>;
|
|
17
|
+
export declare function decodeAccountId(accountId: string): AccountIdParams;
|
|
18
|
+
//# sourceMappingURL=accountId.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accountId.d.ts","sourceRoot":"","sources":["../../src/account/accountId.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAQlE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOzD;AAED,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAShE;AAED,wBAAgB,uBAAuB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAIrE;AAED,wBAAgB,uBAAuB,CAAC,oBAAoB,EAAE,MAAM,GAAG,MAAM,CAI5E;AAED,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,OAAO,EACP,UAAU,EACV,aAAa,EACb,cAAc,EACd,UAAU,GACX,EAAE,eAAe,GAAG,MAAM,CAW1B;AACD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,CAEpF;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,CAOA;AAED,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,aAAa,GAAG,SAAS,CAAC;CAClC,CAAC,CAaD;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,CAelE"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.safeEncodeTokenId = safeEncodeTokenId;
|
|
7
|
+
exports.safeDecodeTokenId = safeDecodeTokenId;
|
|
8
|
+
exports.safeEncodeXpubOrAddress = safeEncodeXpubOrAddress;
|
|
9
|
+
exports.safeDecodeXpubOrAddress = safeDecodeXpubOrAddress;
|
|
10
|
+
exports.encodeAccountId = encodeAccountId;
|
|
11
|
+
exports.encodeTokenAccountId = encodeTokenAccountId;
|
|
12
|
+
exports.decodeTokenAccountIdSync = decodeTokenAccountIdSync;
|
|
13
|
+
exports.decodeTokenAccountId = decodeTokenAccountId;
|
|
14
|
+
exports.decodeAccountId = decodeAccountId;
|
|
15
|
+
const invariant_1 = __importDefault(require("invariant"));
|
|
16
|
+
const derivation_1 = require("../derivation");
|
|
17
|
+
const state_1 = require("@ledgerhq/cryptoassets/state");
|
|
18
|
+
function ensureNoColon(value, ctx) {
|
|
19
|
+
(0, invariant_1.default)(!value.includes(":"), "AccountId '%s' component must not use colon", ctx);
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
function safeEncodeTokenId(tokenId) {
|
|
23
|
+
if (!tokenId)
|
|
24
|
+
return "";
|
|
25
|
+
const URIEncoded = encodeURIComponent(tokenId);
|
|
26
|
+
const dashUnderscoreSafe = URIEncoded.replace(/-/g, "~!dash!~").replace(/_/g, "~!underscore!~");
|
|
27
|
+
return dashUnderscoreSafe;
|
|
28
|
+
}
|
|
29
|
+
function safeDecodeTokenId(encodedTokenId) {
|
|
30
|
+
if (!encodedTokenId)
|
|
31
|
+
return "";
|
|
32
|
+
const dashUnderscoreUnsafe = encodedTokenId
|
|
33
|
+
.replace(/~!dash!~/g, "-")
|
|
34
|
+
.replace(/~!underscore!~/g, "_");
|
|
35
|
+
const decodedURIComponent = decodeURIComponent(dashUnderscoreUnsafe);
|
|
36
|
+
return decodedURIComponent;
|
|
37
|
+
}
|
|
38
|
+
function safeEncodeXpubOrAddress(xpubOrAddress) {
|
|
39
|
+
if (!xpubOrAddress)
|
|
40
|
+
return "";
|
|
41
|
+
return xpubOrAddress.replace(/::/g, "~!colons!~");
|
|
42
|
+
}
|
|
43
|
+
function safeDecodeXpubOrAddress(encodedXpubOrAddress) {
|
|
44
|
+
if (!encodedXpubOrAddress)
|
|
45
|
+
return "";
|
|
46
|
+
return encodedXpubOrAddress.replace(/~!colons!~/g, "::");
|
|
47
|
+
}
|
|
48
|
+
function encodeAccountId({ type, version, currencyId, xpubOrAddress, derivationMode, customData, }) {
|
|
49
|
+
const base = `${ensureNoColon(type, "type")}:${ensureNoColon(version, "version")}:${ensureNoColon(currencyId, "currencyId")}:${safeEncodeXpubOrAddress(xpubOrAddress)}:${ensureNoColon(derivationMode, "derivationMode")}`;
|
|
50
|
+
if (customData && customData.length > 0) {
|
|
51
|
+
return `${base}:${safeEncodeXpubOrAddress(customData)}`;
|
|
52
|
+
}
|
|
53
|
+
return base;
|
|
54
|
+
}
|
|
55
|
+
function encodeTokenAccountId(accountId, token) {
|
|
56
|
+
return accountId + "+" + safeEncodeTokenId(token.id);
|
|
57
|
+
}
|
|
58
|
+
function decodeTokenAccountIdSync(id) {
|
|
59
|
+
const [accountId, tokenId] = id.split("+");
|
|
60
|
+
const decodedTokenId = safeDecodeTokenId(tokenId);
|
|
61
|
+
return {
|
|
62
|
+
accountId,
|
|
63
|
+
tokenId: decodedTokenId,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
async function decodeTokenAccountId(id) {
|
|
67
|
+
const store = (0, state_1.getCryptoAssetsStore)();
|
|
68
|
+
const [accountId, tokenId] = id.split("+");
|
|
69
|
+
const decodedTokenId = safeDecodeTokenId(tokenId);
|
|
70
|
+
let token = await store.findTokenById(decodedTokenId);
|
|
71
|
+
if (!token) {
|
|
72
|
+
const { currencyId } = decodeAccountId(accountId);
|
|
73
|
+
token = await store.findTokenByAddressInCurrency(decodedTokenId, currencyId);
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
accountId,
|
|
77
|
+
token,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function decodeAccountId(accountId) {
|
|
81
|
+
(0, invariant_1.default)(typeof accountId === "string", "accountId is not a string");
|
|
82
|
+
const splitted = accountId.split(":");
|
|
83
|
+
(0, invariant_1.default)(splitted.length >= 5, "invalid size for accountId");
|
|
84
|
+
const [type, version, currencyId, encodedXpubOrAddress, derivationMode, customData] = splitted;
|
|
85
|
+
return {
|
|
86
|
+
type,
|
|
87
|
+
version,
|
|
88
|
+
currencyId,
|
|
89
|
+
xpubOrAddress: safeDecodeXpubOrAddress(encodedXpubOrAddress),
|
|
90
|
+
derivationMode: (0, derivation_1.asDerivationMode)(derivationMode),
|
|
91
|
+
...(customData && {
|
|
92
|
+
customData: safeDecodeXpubOrAddress(customData),
|
|
93
|
+
}),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=accountId.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accountId.js","sourceRoot":"","sources":["../../src/account/accountId.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { GranularityId, BalanceHistoryCache, AccountLike, Account } from "@ledgerhq/types-live";
|
|
2
|
+
export declare const createEmptyHistoryCache: () => {
|
|
3
|
+
HOUR: {
|
|
4
|
+
latestDate: null;
|
|
5
|
+
balances: never[];
|
|
6
|
+
};
|
|
7
|
+
DAY: {
|
|
8
|
+
latestDate: null;
|
|
9
|
+
balances: never[];
|
|
10
|
+
};
|
|
11
|
+
WEEK: {
|
|
12
|
+
latestDate: null;
|
|
13
|
+
balances: never[];
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
export declare const emptyHistoryCache: {
|
|
17
|
+
HOUR: {
|
|
18
|
+
latestDate: null;
|
|
19
|
+
balances: never[];
|
|
20
|
+
};
|
|
21
|
+
DAY: {
|
|
22
|
+
latestDate: null;
|
|
23
|
+
balances: never[];
|
|
24
|
+
};
|
|
25
|
+
WEEK: {
|
|
26
|
+
latestDate: null;
|
|
27
|
+
balances: never[];
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
export declare function startOfHour(t: Date): Date;
|
|
31
|
+
export declare function startOfDay(t: Date): Date;
|
|
32
|
+
export declare function startOfWeek(t: Date): Date;
|
|
33
|
+
export declare function generateHistoryFromOperations(account: AccountLike): BalanceHistoryCache;
|
|
34
|
+
/**
|
|
35
|
+
* get the current balance history of the account. if possible from the cache.
|
|
36
|
+
*/
|
|
37
|
+
export declare function getAccountHistoryBalances(account: AccountLike, g: GranularityId): number[];
|
|
38
|
+
/**
|
|
39
|
+
* utility used at the end of an account synchronisation to recalculate the balance history if necessary
|
|
40
|
+
*/
|
|
41
|
+
export declare function recalculateAccountBalanceHistories<A extends Account = Account>(res: A, prev: A): A;
|
|
42
|
+
//# sourceMappingURL=balanceHistoryCache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"balanceHistoryCache.d.ts","sourceRoot":"","sources":["../../src/account/balanceHistoryCache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EAEnB,WAAW,EACX,OAAO,EAER,MAAM,sBAAsB,CAAC;AAG9B,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;CAalC,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;CAA4B,CAAC;AAM3D,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAEzC;AACD,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAExC;AACD,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAGzC;AAkED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,WAAW,GAAG,mBAAmB,CAMvF;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,aAAa,GAAG,MAAM,EAAE,CAW1F;AAED;;GAEG;AACH,wBAAgB,kCAAkC,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,EAC5E,GAAG,EAAE,CAAC,EACN,IAAI,EAAE,CAAC,GACN,CAAC,CA4BH"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.emptyHistoryCache = exports.createEmptyHistoryCache = void 0;
|
|
4
|
+
exports.startOfHour = startOfHour;
|
|
5
|
+
exports.startOfDay = startOfDay;
|
|
6
|
+
exports.startOfWeek = startOfWeek;
|
|
7
|
+
exports.generateHistoryFromOperations = generateHistoryFromOperations;
|
|
8
|
+
exports.getAccountHistoryBalances = getAccountHistoryBalances;
|
|
9
|
+
exports.recalculateAccountBalanceHistories = recalculateAccountBalanceHistories;
|
|
10
|
+
const operation_1 = require("../operation");
|
|
11
|
+
const createEmptyHistoryCache = () => ({
|
|
12
|
+
HOUR: {
|
|
13
|
+
latestDate: null,
|
|
14
|
+
balances: [],
|
|
15
|
+
},
|
|
16
|
+
DAY: {
|
|
17
|
+
latestDate: null,
|
|
18
|
+
balances: [],
|
|
19
|
+
},
|
|
20
|
+
WEEK: {
|
|
21
|
+
latestDate: null,
|
|
22
|
+
balances: [],
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
exports.createEmptyHistoryCache = createEmptyHistoryCache;
|
|
26
|
+
exports.emptyHistoryCache = (0, exports.createEmptyHistoryCache)();
|
|
27
|
+
const hourIncrement = 60 * 60 * 1000;
|
|
28
|
+
const dayIncrement = 24 * hourIncrement;
|
|
29
|
+
const weekIncrement = 7 * dayIncrement;
|
|
30
|
+
function startOfHour(t) {
|
|
31
|
+
return new Date(t.getFullYear(), t.getMonth(), t.getDate(), t.getHours());
|
|
32
|
+
}
|
|
33
|
+
function startOfDay(t) {
|
|
34
|
+
return new Date(t.getFullYear(), t.getMonth(), t.getDate());
|
|
35
|
+
}
|
|
36
|
+
function startOfWeek(t) {
|
|
37
|
+
const d = startOfDay(t);
|
|
38
|
+
return new Date(d.getTime() - d.getDay() * dayIncrement);
|
|
39
|
+
}
|
|
40
|
+
const granularities = {
|
|
41
|
+
WEEK: {
|
|
42
|
+
increment: weekIncrement,
|
|
43
|
+
startOf: startOfWeek,
|
|
44
|
+
maxDatapoints: 1000, // (essentially no limit)
|
|
45
|
+
},
|
|
46
|
+
DAY: {
|
|
47
|
+
increment: dayIncrement,
|
|
48
|
+
startOf: startOfDay,
|
|
49
|
+
maxDatapoints: 400, // we only need a year
|
|
50
|
+
},
|
|
51
|
+
HOUR: {
|
|
52
|
+
increment: hourIncrement,
|
|
53
|
+
startOf: startOfHour,
|
|
54
|
+
maxDatapoints: 8 * 24, // we only need a week
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
function generateHistoryFromOperationsG(account, g, // partial=true allows a faster implementation that only recompose the last part of the history
|
|
58
|
+
// to only use when we do not recalculate the history but we just want to access it
|
|
59
|
+
partial = false) {
|
|
60
|
+
const { increment, startOf, maxDatapoints } = granularities[g];
|
|
61
|
+
const latestDate = startOf(new Date()).getTime();
|
|
62
|
+
let balances = [];
|
|
63
|
+
let { balance } = account;
|
|
64
|
+
const operationsLength = account.operations.length;
|
|
65
|
+
let date = latestDate;
|
|
66
|
+
const reference = account.balanceHistoryCache?.[g];
|
|
67
|
+
for (let i = 0; i < operationsLength;) {
|
|
68
|
+
if ((partial && reference?.latestDate && date < reference.latestDate) ||
|
|
69
|
+
balances.length > maxDatapoints) {
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
// accumulate operations after time t
|
|
73
|
+
while (i < operationsLength &&
|
|
74
|
+
// FIXME: added valueOf here to make typescript happy
|
|
75
|
+
account.operations[i].date.valueOf() > date) {
|
|
76
|
+
balance = balance.minus((0, operation_1.getOperationAmountNumberWithInternals)(account.operations[i]));
|
|
77
|
+
i++;
|
|
78
|
+
}
|
|
79
|
+
balances.unshift(Math.max(balance.toNumber(), 0));
|
|
80
|
+
date -= increment;
|
|
81
|
+
}
|
|
82
|
+
if (partial && reference?.balances) {
|
|
83
|
+
balances = reference.balances.concat(balances);
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
balances,
|
|
87
|
+
latestDate,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function generateHistoryFromOperations(account) {
|
|
91
|
+
return {
|
|
92
|
+
HOUR: generateHistoryFromOperationsG(account, "HOUR"),
|
|
93
|
+
DAY: generateHistoryFromOperationsG(account, "DAY"),
|
|
94
|
+
WEEK: generateHistoryFromOperationsG(account, "WEEK"),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* get the current balance history of the account. if possible from the cache.
|
|
99
|
+
*/
|
|
100
|
+
function getAccountHistoryBalances(account, g) {
|
|
101
|
+
const cacheData = account.balanceHistoryCache?.[g];
|
|
102
|
+
const { startOf } = granularities[g];
|
|
103
|
+
const now = startOf(new Date()).getTime();
|
|
104
|
+
if (cacheData?.balances && cacheData.latestDate && cacheData.latestDate === now) {
|
|
105
|
+
return cacheData.balances;
|
|
106
|
+
}
|
|
107
|
+
// account cache was not up to date or missing. recalculating on the fly
|
|
108
|
+
return generateHistoryFromOperationsG(account, g, true).balances;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* utility used at the end of an account synchronisation to recalculate the balance history if necessary
|
|
112
|
+
*/
|
|
113
|
+
function recalculateAccountBalanceHistories(res, prev) {
|
|
114
|
+
// recalculate balance history cache
|
|
115
|
+
if (prev.balanceHistoryCache === res.balanceHistoryCache) {
|
|
116
|
+
// we only regenerate if it was not overriden by the implemenetation.
|
|
117
|
+
res = { ...res, balanceHistoryCache: generateHistoryFromOperations(res) };
|
|
118
|
+
}
|
|
119
|
+
const prevSubAccounts = prev.subAccounts;
|
|
120
|
+
const nextSubAccounts = res.subAccounts;
|
|
121
|
+
if (nextSubAccounts && prevSubAccounts && prevSubAccounts !== nextSubAccounts) {
|
|
122
|
+
// when sub accounts changes, we need to recalculate
|
|
123
|
+
res.subAccounts = nextSubAccounts.map((subAccount) => {
|
|
124
|
+
const old = prevSubAccounts.find(a => a.id === subAccount.id);
|
|
125
|
+
if (!old || old.balanceHistoryCache === subAccount.balanceHistoryCache) {
|
|
126
|
+
// we only regenerate if it was not overriden by the implemenetation.
|
|
127
|
+
subAccount = {
|
|
128
|
+
...subAccount,
|
|
129
|
+
balanceHistoryCache: generateHistoryFromOperations(subAccount),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
return subAccount;
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
return res;
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=balanceHistoryCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"balanceHistoryCache.js","sourceRoot":"","sources":["../../src/account/balanceHistoryCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compression utilities for BalanceHistoryCache
|
|
3
|
+
*
|
|
4
|
+
* This module provides compression/decompression functions to reduce
|
|
5
|
+
* the storage size of balance history cache in app.json.
|
|
6
|
+
*
|
|
7
|
+
* Strategy: Run-Length Encoding (RLE) on absolute values
|
|
8
|
+
* - If a value repeats 2+ times: store as [value, count]
|
|
9
|
+
* - Otherwise: store the value directly
|
|
10
|
+
*
|
|
11
|
+
* Format:
|
|
12
|
+
* - balances array contains numbers or RLE tuples [value, count]
|
|
13
|
+
* - All values are absolute (no delta encoding to preserve precision)
|
|
14
|
+
*/
|
|
15
|
+
import type { BalanceHistoryCache, BalanceHistoryDataCache, CompressedBalanceHistoryCache, CompressedBalanceHistoryDataCache, CompressedBalanceEntry } from "@ledgerhq/types-live";
|
|
16
|
+
export type { CompressedBalanceHistoryCache, CompressedBalanceHistoryDataCache, CompressedBalanceEntry, };
|
|
17
|
+
/**
|
|
18
|
+
* Compress a single BalanceHistoryDataCache using RLE on absolute values
|
|
19
|
+
*
|
|
20
|
+
* @param cache - The cache to compress
|
|
21
|
+
* @returns Compressed cache with RLE-compressed balances
|
|
22
|
+
* @example
|
|
23
|
+
* // Input: [1000000, 1000000, 1000000, 1000500, 1000500]
|
|
24
|
+
* // Output: [[1000000, 3], [1000500, 2]]
|
|
25
|
+
* compressBalanceHistoryDataCache({
|
|
26
|
+
* latestDate: 1234567890,
|
|
27
|
+
* balances: [1000000, 1000000, 1000000, 1000500, 1000500]
|
|
28
|
+
* })
|
|
29
|
+
*/
|
|
30
|
+
export declare function compressBalanceHistoryDataCache(cache: BalanceHistoryDataCache): CompressedBalanceHistoryDataCache;
|
|
31
|
+
/**
|
|
32
|
+
* Decompress a CompressedBalanceHistoryDataCache back to BalanceHistoryDataCache
|
|
33
|
+
* Handles backward compatibility with uncompressed format (array of absolute numbers)
|
|
34
|
+
*
|
|
35
|
+
* @param data - The compressed cache (or uncompressed for backward compatibility)
|
|
36
|
+
* @returns Decompressed cache with absolute balances
|
|
37
|
+
* @example
|
|
38
|
+
* // Input: [[1000000, 3], [1000500, 2]]
|
|
39
|
+
* // Output: [1000000, 1000000, 1000000, 1000500, 1000500]
|
|
40
|
+
* decompressBalanceHistoryDataCache({
|
|
41
|
+
* latestDate: 1234567890,
|
|
42
|
+
* balances: [[1000000, 3], [1000500, 2]]
|
|
43
|
+
* })
|
|
44
|
+
*/
|
|
45
|
+
export declare function decompressBalanceHistoryDataCache(data: CompressedBalanceHistoryDataCache | BalanceHistoryDataCache | null | undefined): BalanceHistoryDataCache;
|
|
46
|
+
export declare function compressBalanceHistoryCache(cache: BalanceHistoryCache | null | undefined): CompressedBalanceHistoryCache;
|
|
47
|
+
/**
|
|
48
|
+
* Decompress a CompressedBalanceHistoryCache back to BalanceHistoryCache
|
|
49
|
+
*
|
|
50
|
+
* @param data - The compressed cache (or uncompressed for backward compatibility)
|
|
51
|
+
* @returns Decompressed cache
|
|
52
|
+
* @example
|
|
53
|
+
* decompressBalanceHistoryCache({
|
|
54
|
+
* HOUR: { latestDate: 1000, balances: [[100, 3]] },
|
|
55
|
+
* DAY: { latestDate: 2000, balances: [200, 200] },
|
|
56
|
+
* WEEK: { latestDate: 3000, balances: [300] }
|
|
57
|
+
* })
|
|
58
|
+
* // Returns: {
|
|
59
|
+
* // HOUR: { latestDate: 1000, balances: [100, 100, 100] },
|
|
60
|
+
* // DAY: { latestDate: 2000, balances: [200, 200] },
|
|
61
|
+
* // WEEK: { latestDate: 3000, balances: [300] }
|
|
62
|
+
* // }
|
|
63
|
+
*/
|
|
64
|
+
export declare function decompressBalanceHistoryCache(data: CompressedBalanceHistoryCache | BalanceHistoryCache | null | undefined): BalanceHistoryCache;
|
|
65
|
+
//# sourceMappingURL=balanceHistoryCacheCompression.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"balanceHistoryCacheCompression.d.ts","sourceRoot":"","sources":["../../src/account/balanceHistoryCacheCompression.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,uBAAuB,EACvB,6BAA6B,EAC7B,iCAAiC,EACjC,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAG9B,YAAY,EACV,6BAA6B,EAC7B,iCAAiC,EACjC,sBAAsB,GACvB,CAAC;AASF;;;;;;;;;;;;GAYG;AACH,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,uBAAuB,GAC7B,iCAAiC,CAkCnC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,iCAAiC,GAAG,uBAAuB,GAAG,IAAI,GAAG,SAAS,GACnF,uBAAuB,CA+BzB;AAwBD,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,GAC5C,6BAA6B,CAM/B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,6BAA6B,GAAG,mBAAmB,GAAG,IAAI,GAAG,SAAS,GAC3E,mBAAmB,CAarB"}
|