edge-core-js
Version:
Edge account & wallet management library
1,283 lines (830 loc) • 68.4 kB
Markdown
# edge-core-js
## Unreleased
## 2.33.3 (2025-08-01)
- added: Log the device description on more requests, such as credential changes.
## 2.33.2 (2025-08-01)
- fixed: Fixed syncing bug caused by ES5 transpilation.
## 2.33.1 (2025-07-24)
- fixed: By-pass pin-wait period special case caused by duress mode feature.
## 2.33.0 (2025-07-21)
- added: Added `usesChangeServer` flag to `EdgeCurrencyInfo` to optimize syncing for engines which subscribe to the change-server.
- fixed: Race condition between engine change-server subscription and periodic sync.
## 2.32.1 (2025-07-18)
- fixed: Don't write the enabled tokens file until after we've read it from disk.
## 2.32.0 (2025-06-27)
- changed: Fake PIN disable while in duress mode.
- changed: `SwapBelowLimitError` & `SwapAboveLimitError` `nativeMin`/`nativeMax` now optional
- changed: `SwapBelowLimitError` & `SwapAboveLimitError` `pluginId` deprecated in favor of `swapPluginId`
## 2.31.1 (2025-06-09)
- fixed: Fix change-server reliability issues by fallback to pull-based syncing as a trade-off.
- fixed: Show the correct login errors when duress account is disabled.
## 2.31.0 (2025-06-05)
- added: Support for zero-sync (aka silent-sync) enabled by the change-server protocol.
- changed: Batch change-server subscriptions for better reliability and efficiency.
- fixed: Allow pin change while device is in duress mode and user is logged into a non-duress account.
- fixed: Change conditions for syncNetwork pixies to avoid unnecessary sync and support for zero-sync (aka silent-sync) enabled by the change-server protocol.
## 2.30.2 (2025-05-30)
- fixed: Create a package.json React Native export.
## 2.30.1 (2025-05-29)
- changed: Allow for duress mode setup while in duress mode but only for non-duress accounts.
- fixed: Fixed regression causing pin disabled for other accounts when disabling PIN login within a duress account
## 2.30.0 (2025-05-26)
- added: A `transactionsRemoved` event on `EdgeCurrencyWallet`.
## 2.29.0 (2025-05-26)
- added: Add `getTokenDetails` to currency tools
## 2.28.0 (2025-05-22)
- added: Added `forDuressAccount` option to `checkPin`.
- changed: Extended `onSubscribeAddresses` callback to optionally include checkpoints.
- fixed: Disabling pin-login while in duress mode disables pin-login for the main login.
- fixed: `loginWithPassword` bug disabled duress mode when doing an online login.
- fixed: Properly fake duress mode settings while in duress mode.
## 2.27.4 (2025-05-13)
- fixed: Disable duress pin mistakenly disables pin-login for entire account.
- fixed: Make `deleteRemoteAccount` a no-op while in duress mode.
## 2.27.3 (2025-05-12)
- fixed: Bug causing duress account creation from `loginWithKey` while in duress mode.
- fixed: Clean the Android build folder, so leftover files don't get published.
## 2.27.2 (2025-05-08)
- changed: Show all local users even when in duress mode.
- changed: Stay in duress mode when using `loginWithPassword`.
- fixed: Broken `changePin({ enableLogin: false })` when in duress mode.
- fixed: Made `checkPassword` work when in duress mode.
- fixed: Made `changePassword` a no-op for duress accounts
- fixed: Made `enableOtp`/`disableOtp` a no-op for duress accounts.
- fixed: Spoof `changeRecovery` for duress account.
- fixed: Support duress mode when logging in with `loginWithKey` (biometric login).
- fixed: Unintentional pin timeouts caused by duress mode pin-logins.
- fixed: Deleting account while in duress account will forget account rather than throw error.
## 2.27.1 (2025-04-30)
- fixed: Incorrect protocol for default change server URL.
## 2.27.0 (2025-04-28)
- added: Added new Duress Mode feature.
- added: `imported` flag from raw private keys into `EdgeWalletInfoFull`
- added: Integration with change-server.
## 2.26.2 (2025-03-24)
- fixed: New transaction event should not be emitted when updating transaction metadata.
## 2.26.1 (2025-02-26)
- added: Log changes to the `enabledTokenId` array.
- fixed: Create wallets in the correct location when using non-default appId's.
## 2.26.0 (2025-02-20)
- changed: `saveTx` emits `newTransaction` event for unseen transaction.
## 2.25.3 (2025-02-17)
- fixed: Only write the enabled tokens file when actually necessary.
## 2.25.2 (2025-02-12)
- fixed: Metadata stomping bug in memory caused by new EdgeTransaction objects from the engine.
- fixed: Support the `loginServer` prop on the `MakeEdgeContext` component.
## 2.25.1 (2025-01-16)
- fixed: Broken `EdgeContextProps.loginServer` type definition.
## 2.25.0 (2025-01-16)
- added: `EdgeContextOptions.loginServer`. This replaces `EdgeContextOptions.authServer`, but without the `/api` path component in the server URL.
- changed: Auto-rotate between multiple login servers.
- deprecated: `EdgeContextOptions.authServer`. Use `EdgeContextOptions.loginServer` instead.
## 2.24.0 (2025-01-15)
- added: `onSeenTxCheckpoint` callback for new Seen Tx Checkpoint API.
- added: `onTransactions` callback to support new Seen Tx Checkpoint API.
## 2.23.0 (2025-01-13)
- added: `EdgeCurrencyInfo.chainDisplayName` and `EdgeCurrencyInfo.assetDisplayName`
- deprecated: `EdgeCurrencyInfo.displayName`
## 2.22.2 (2025-01-03)
- deprecated: `EdgeCurrencyWallet.denominationToNative` and `EdgeCurrencyWallet.nativeToDenomination` utilities. Clients can perform these conversions on their own, using information that the core already provides.
- fixed: Do not report the `segwitAddress` as the `publicAddress` for wallets that have one.
## 2.22.1 (2024-12-17)
- fixed: Fixed broken `fetchCors` implementation caused by referencing error to `EdgeIo.fetch`.
## 2.22.0 (2024-12-10)
- added: Add `avoidCors` API to `EdgeFetchFunction`
- changed: Deprecated `fetchCors` API in favor of `fetch` with `avoidCors` option.
## 2.21.0 (2024-12-02)
- added: Added `networkFees` to `EdgeTransaction`.
- added: Add `getAddresses` to `EdgeCurrencyWallet`
- changed: Deprecated `getReceiveAddress` field on `EdgeCurrencyWallet`
- changed: Deprecated `networkFee` and `parentNetworkFee` field on `EdgeTransaction`.
## 2.20.3 (2024-11-25)
- fixed: Accept `''` to select the default API key.
## 2.20.2 (2024-11-21)
- fixed: Do not error when changing the PIN on accounts with children.
- fixed: Incorrectly including `parentNetworkFee` for native currency transactions from `getTransactions`.
## 2.20.1 (2024-10-30)
- fixed: Correctly update info-server payload in the background.
## 2.20.0 (2024-10-28)
- changed: Log unknown swap errors as a crash.
## 2.19.1 (2024-10-24)
- fixed: Barcode login works again.
## 2.19.0 (2024-10-14)
- added: Support HMAC-based API keys.
## 2.18.0 (2024-09-16)
- changed: Allow transactions tagged with actions through spam filter
## 2.17.0 (2024-09-11)
- added: `minReceiveAmount` to `EdgeSwapQuote` - the minimum amount that can be received from the swap
## 2.16.0 (2024-09-11)
- added: Report key wallet creation dates.
## 2.15.0 (2024-09-06)
- added: `EdgeContext.fetchChallenge`, to request an account-creation CAPTCHA.
- added: Accept a challengeId in `EdgeContext.usernameAvailable`
## 2.14.0 (2024-09-03)
- added: Log HTTP 409 errors from login server with breadcrumbs.
## 2.13.1 (2024-08-23)
- fixed: Use full URI to determine whether a request has previously succeeded CORS
## 2.13.0 (2024-08-12)
- added: `EdgeStreamTransactionOptions.spamThreshold`.
## 2.12.0 (2024-08-12)
- added: `EdgeCurrencyEngine.otherMethodsWithKeys`. These methods will be added to `EdgeCurrencyEngine.otherMethods`, but the core will insert private keys as the first parameter.
## 2.11.0 (2024-08-07)
- added: `EdgeCurrencyTools.getDisplayPublicKeys` to get the master public keys for a wallet.
- added: `EdgeCurrencyConfig.getTokenId` to create a tokenId from an EdgeToken
## 2.10.0 (2024-07-30)
- added: `EdgeCurrencyWallet.signBytes` to sign raw bytes with a private key.
- changed: Randomize data-sync start times.
## 2.9.2 (2024-07-25)
- fixed: Work with React Native bridgeless mode on iOS and Android.
## 2.9.1-1 (2024-08-07)
- added: `EdgeCurrencyConfig.getTokenId` to create a tokenId from an EdgeToken
## 2.9.1 (2024-07-24)
- fixed: Edge case for filtering transactions with empty txs (zero amount & fee)
## 2.9.0 (2024-07-22)
- added: Add `makeMemoryWallet` method to ephemeral wallet objects that can query balances and spend funds
## 2.8.2 (2024-07-22)
- fixed: Correctly handle `null` fetch bodies on Android.
## 2.8.1 (2024-07-11)
- fixed: Filter transactions with empty (zero) nativeAmount and networkFee
## 2.8.0 (2024-07-09)
- changed: Replace the CORS proxy servers with a fully native fallback on React Native.
## 2.7.0 (2024-06-10)
- added: New `enableRbf` field on `EdgeSpendInfo`
- changed: Deprecated `rbfTxid` field on `EdgeSpendInfo`
## 2.6.1 (2024-05-23)
- fixed: Add missing Swift import statement.
## 2.6.0 (2024-05-21)
- added: Better documentation comments for the `EdgeObjectTemplate` types.
- changed: Expose the `EdgeTransaction.feeRateUsed` provided by the engine, and only use the on-disk copy as a fallback.
## 2.5.0 (2024-03-29)
- added: `EdgeContextOptions.airbitzSupport`, for loading legacy Airbitz data from disk.
- fixed: Export the `EdgeObjectTemplate` type.
- fixed: TypeScript v5 compatibility.
## 2.4.0 (2024-03-25)
- added: New `'failed'` value to confirmations field on `EdgeTransactions`
## 2.3.0 (2024-03-23)
- added: `EdgeCorePluginOptions.infoPayload`, containing arbitrary JSON provided by the info server.
- added: `EdgeCurrencyPlugin.updateInfoPayload`, called when we the core fetches a fresh payload from the info server.
## 2.2.1 (2024-02-21)
- fixed: Correctly save `enabledTokenIds` when creating a new wallet.
## 2.2.0 (2024-02-12)
- added: Accept an `enabledTokens` parameter to the `createCurrencyWallets` method.
## 2.1.1 (2024-02-02)
- fixed: Token activation causing error and insufficient funds when used with core 1.x plugins
## 2.1.0 (2024-01-18)
- added: Make swap timeouts adjustable.
- fixed: Provide a `currencyCode` fallback to `EdgeCurrencyEngine.getMaxSpendable`.
## 2.0.1 (2024-01-08)
- added: Missing asset action types (claim, claimOrder, swapNetworkFee, and transferNetworkFee).
- fixed: Avoid superfluous property updates.
- fixed: Correctly populate `tokenId` on `makeSpend` when using legacy currency plugins.
- fixed: Correctly write `assetAction` to disk.
## 2.0.0 (2024-01-04)
- added: `EdgeCurrencyWallet.saveTxAction` to add/edit `EdgeTransaction.savedAction`
- added: `EdgeTransaction.assetAction` & `EdgeSpendInfo.assetAction` for action info that is saved per token in a transaction.
- added: `EdgeTransaction.savedAction` & `EdgeSpendInfo.savedAction` as editable version of `chainAction`
- added: `EdgeTxActionFiat` action type for fiat buy/sells
- added: `EdgeTxActionTokenApproval` action type for token approval transactions
- changed: Extend `EdgeTxActionSwap` to fully replace `EdgeSwapData`
- changed: Make `EdgeCurrencyInfo.defaultSettings` and `EdgeCurrencyInfo.metaTokens` optional.
- changed: Rename `EdgeTransaction.action` to `chainAction`
- changed: Require `tokenId` to be null or string and eliminate `currencyCode` in `EdgeCurrencyWallet.getTransactions/getReceiveAddress`, `EdgeSpendInfo`, `EdgeSwapRequest`, `EdgeTxAction.EdgeAssetAmount`, `saveTxMetadata`
- removed: `EdgeAccount.rateCache` and related types, as well as the rate plugin concept.
- removed: `EdgeContext.deleteLocalAccount`
- removed: `EdgeContext.listUsernames`
- removed: `EdgeContext.pinLoginEnabled`
- removed: `EdgeCurrencyInfo.symbolImage` and `symbolImageDarkMono`.
- removed: `EdgeLoginRequest.displayImageUrl`
- removed: `listRecoveryQuestionChoices` and related types.
- removed: `validateMemo` methods and related types.
## 1.14.0 (2024-01-04)
- added: `EdgeCurrencyCodeOptions.tokenId`. This upgrades `getBalance`, `getNumTransactions`, and `getReceiveAddress`.
- added: `EdgeCurrencyEngineCallbacks.onTokenBalanceChanged`, which is thew new balance-update callback.
- added: `EdgeCurrencyWallet.balanceMap`, which reports balances by tokenId.
- added: `EdgeParsedUri.tokenId`
- added: `EdgeTokenId` type definition.
- added: `EdgeTransaction.tokenId`.
- added: Allow deleting metadata fields by passing `null` to `saveTxMetadata`.
- deprecated: `EdgeCurrencyEngineCallbacks.onBalanceChanged`. Use `onTokenBalanceChanged` instead.
- deprecated: `EdgeParsedUri.currencyCode`. Use `tokenId` instead.
- deprecated: `EdgeTransaction.currencyCode`. Use `tokenId` instead.
## 1.13.1 (2023-12-06)
- added: Extra cors servers to distribute load
## 1.13.0 (2023-12-05)
- added: `EdgeAccount.createCurrencyWallets`, for creating multiple wallets at once.
## 1.12.0 (2023-11-30)
- added: Accept an `onNewTokens` callback from `EdgeCurrencyEngine`.
- added: Emit an `enabledDetectedTokens` event when auto-enabling tokens.
- added: Expose auto-detected tokens as `EdgeCurrencyWallet.detectedTokenIds`.
- changed: Save enabled tokens by their tokenId, not by their currency code.
- fixed: Add missing `export` to the `EdgeCorePluginFactory` type definition.
## 1.11.0 (2023-10-18)
- added: `EdgeAccount.fetchSwapQuotes`, to return all relevant quotes, and not just the best one.
## 1.10.0 (2023-10-10)
- added: `EdgeTransaction.action` to tag known smart contract transaction types (swap, stake, etc.).
## 1.9.0 (2023-10-10)
- added: Support optimized login syncing, checking to see if our credentials are up-to-date before performing a periodic login.
## 1.8.0 (2023-10-02)
- added: Export cleaners for server types and testing data types.
- deprecated: `EdgeContext.listRecoveryQuestionChoices`. The GUI provides its own localized strings now.
## v1.7.0 (2023-09-12)
- added: Add a `ChallengeError` and related types, which will allow the login server to request CAPTCHA validation.
- fixed: Correctly pass `EdgeSpendTarget.memos` through to currency plugins.
- fixed: Do not let `EdgeTransaction.memos` be undefined, even for legacy plugins.
- fixed: Restore "0x" prefix support for legacy hex memos.
## v1.6.0 (2023-09-11)
- added: Currency-info support for multiple memos per transaction.
- added: `EdgeCurrencyInfo.memoOptions`, lists acceptable memo types.
- added: `EdgeCurrencyInfo.multipleMemos`, set if a currency supports multiple memos in the same transaction.
- deprecated: `EdgeCurrencyInfo.memoMaxLength`
- deprecated: `EdgeCurrencyInfo.memoMaxValue`
- deprecated: `EdgeCurrencyInfo.memoType`. Note: If it is not set correctly, legacy plugins will no longer receive memos. Some buggy plugins forgot to do this, so those plugins will stop receiving memos. This is not a breaking change, though, since this field was always mandatory.
- added: Spending support for multiple memos.
- added: `EdgeSpendInfo.memos`
- deprecated: `EdgeSpendTarget.memo`
- added: Transaction history support for on-chain memos.
- added: `EdgeTransaction.memos`
- deprecated: `EdgeTransaction.spendTargets.memo`
## v1.5.0 (2023-09-06)
- added: New infoServer and syncServer options for EdgeContextOptions
## v1.4.2 (2023-08-16)
- fixed: Allow PIN changes on accounts without usernames.
- changed: Change the `error` event type to `any`. This will become `unknown` in a future breaking release.
## v1.4.1 (2023-08-16)
- changed: Reduced YAOB throttle to 50ms and apply throttle to return bridge calls
## v1.4.0 (2023-08-08)
- added: canBePartial and maxFulfillmentSeconds to EdgeSwapQuote
- added: skipBlockHeight config option
## v1.3.7 (2023-08-03)
- changed: Throttle the react-native bridge to 500ms. This will create some lag, but should improve overall performance.
- changed: Move the Android namespace definition out of the `AndroidMaifest.xml` and into the `build.gradle` file.
## v1.3.6 (2023-08-01)
- fixed: Interpret HTTP 418 responses from the CORS proxy as errors.
## v1.3.5 (2023-07-26)
- changed: Remove `fetch` fallback logic. No proxy servers will be used.
- changed: The `fetchCors` method is no longer deprecated. Use this if CORS might be an issue. Do _not_ use this for any secrets or credentials.
## v1.3.4 (2023-07-26)
- fixed: Escape bridge strings closer to serialization, for possibly better performance.
- fixed: Fallback to CORS-safe fetch functions on all errors to fix inconsistency with error messages across platforms.
## v1.3.3 (2023-07-24)
- changed: Add fallback to bridged `fetch` if request to edge-cors-proxy server fails.
## v1.3.2 (2023-07-13)
- changed: Added a fallback to edge-cors-proxy server to `fetch` method on `EdgeIo`.
## v1.3.1 (2023-07-11)
- fixed: Enable WebView debugging on iOS 16.4+
- fixed: Correctly return transactions after a resync.
## v1.3.0 (2023-06-16)
- added: Add an `EdgeAccount.getPin` method.
- fixed: Allow the `EdgeAccount.username` property to update after calling `changeUsername`.
## v1.2.0 (2023-06-15)
- added: Add an `EdgeCurrencyWallet.streamTransactions` method.
- deprecated: Pagination options for `getTransactions`. Use `streamTransactions` if you need pagination.
- fixed: Add the correct URI to `changeUsername`, so it works.
- fixed: Send a 'transactionsChanged' event when editing metadata.
## v1.1.0 (2023-06-08)
- added: Add an `EdgeContext.forgetAccount` method.
- deprecated: `EdgeContext.deleteLocalAccount`. Use `EdgeContext.forgetAccount` instead.
- fixed: Do not throw a "No username in reply" error when logging into light accounts via barcode.
## v1.0.1 (2023-06-01)
- fixed: Do not crash when accessing `EdgeAccount.username` on an account that has none.
## v1.0.0 (2023-06-01)
- changed: Convert `createAccount` to named parameters
- changed: Return an array from `fetchLoginMessages`
- changed: Fix the `listRecoveryQuestionChoices` return type
- changed: Allow usernames to be `undefined`
- removed: Ethereum hacks
- Ethereum address derivation.
- `EdgeAccount.signEthereumTransaction`
- removed: Deprecated client-side token methods
- `EdgeCurrencyEngine.getEnabledTokens` (no longer used)
- `EdgeCurrencyEngine.getTokenStatus` (no longer used)
- `EdgeCurrencyWallet.addCustomToken`
- `EdgeCurrencyWallet.changeEnabledTokens`
- `EdgeCurrencyWallet.disableTokens`
- `EdgeCurrencyWallet.enableTokens`
- `EdgeCurrencyWallet.getEnabledTokens`
- removed: Deprecated display-key properties
- `EdgeCurrencyWallet.displayPrivateSeed`
- `EdgeCurrencyWallet.displayPublicSeed`
- removed: Deprecated `EdgeAccount.loginKey` property
- removed: Deprecated `keys` properties on `EdgeAccount` and `EdgeCurrencyWallet`
- removed: Deprecated `EdgeTransaction.amountSatoshi`
- removed: Deprecated `options` prop from the `MakeEdgeContext` component.
- removed: Unused `EdgeTransaction.wallet`
- removed: Unused `getTransactions` parameters
- removed: Unused type definitions
- `EdgeBitcoinPrivateKeyOptions`
- `EdgeCreatePrivateKeyOptions`
- removed: No longer allow the OTP key to be passed as `EdgeAccountOptions.otp`. This parameter only accepts 6-digit OTP codes now. Pass the key as `EdgeAccountOptions.otpKey` instead.
## v0.21.5 (2023-05-24)
- deprecated: `EdgeContext.pinLoginEnabled`. Use `EdgeContext.localUsers` instead.
- fixed: Correctly handle `startEntries` in `getTransactions`, by always returning the requested number of transactions.
## v0.21.4 (2023-05-24)
- added: `EdgeAccount.changeUsername`.
- added: `EdgeAccount.getLoginKey`.
- deprecated: `EdgeAccount.loginKey`. Use `EdgeAccount.getLoginKey` instead.
- deprecated: `EdgeContext.listUsernames`. Use `EdgeContext.localUsers` instead.
## v0.21.3 (2023-05-09)
- fixed: Return transactions from getTransactions, even if they have no on-disk metadata
- changed: Remove deprecated methods in unit tests
## v0.21.1-1 (2023-05-09)
- fixed: Return transactions from getTransactions, even if they have no on-disk metadata
## v0.21.2 (2023-05-02)
- added: `EdgeUserInfo.username`.
- added: Provide `EdgeAccount` methods for reading public and private keys:
- `getDisplayPrivateKey`
- `getDisplayPublicKey`
- `getRawPrivateKey`
- `getRawPublicKey`
- added: Matching `EdgeCurrencyTools` methods for getting display keys.
- deprecated: `EdgeCurrencyEngine` methods for getting display keys.
- deprecated: `EdgeAccount` and `EdgeCurrencyWallet` key properties.
## v0.21.1 (2023-04-24)
- added: Log any swap plugins that time out.
## v0.21.0 (2023-04-19)
- added: `EdgeParsedUri.minNativeAmount`. Note: This is not a breaking change, but we incorrectly updated the version number as if it were.
## v0.20.2 (2023-04-13)
- fixed: Stop incorrectly writing metadata for sends. This should make editing metadata more stable.
## v0.20.1 (2023-04-12)
- fixed: Remove check that spentTargets.length > 0 in makeSpend
## v0.20.0 (2023-04-10)
- changed: Removed private keys from `walletInfo` for `makeCurrencyEngine`
- added: Add an `EdgeTransaction.isSend` flag.
## v0.19.50 (2023-04-12)
- fixed: Remove check that spentTargets.length > 0 in makeSpend
## v0.19.49 (2023-03-30)
- fixed: Incorrectly formed `privateKeys` argument for `signTx` call to the engine
## v0.19.48 (2023-03-27)
- fixed: Passing only the private keys to `EdgeEnginePrivateKeyOptions['privateKeys']` for `syncNetwork`, instead of the entire `EdgeWalletInfo`
## v0.19.47 (2023-03-27)
- added: Pass private keys to `EdgeCurrencyEngine.signTx` and similar functions.
- changed: Only accept base-10 integer balances from currency engines, and ignore all other balance strings.
- removed: Make deprecated token methods optional on `EdgeCurrencyEngine`, so they can be removed.
## v0.19.46 (2023-03-07)
- added: Add `expireDate` to `EdgeParsedUri`
## v0.19.45 (2023-03-02)
- fixed: Update `denominationToNative` and `nativeToDenomination` to look at `allTokens`, instead of the legacy token lists.
## v0.19.44 (2023-02-28)
- added: `EdgeAccount.currencyEngineErrors` - these are set for wallets that fail to load.
- added: `EdgeAccount.waitForAllWallets()` - resolves once all wallets have either loaded or failed (but balances may still be syncing).
## v0.19.43 (2023-02-23)
- added: Provide login request images for both dark & light mode apps as `EdgeLoginRequest.displayImageDarkUrl` and `EdgeLoginRequest.displayImageDarkUrl`.
- added: `EdgeFakeContextOptions.allowNetworkAccess`, which allows non-Edge traffic to pass through to the real network.
- added: `EdgeWalletInfoFull.migratedFromWalletId`, which can be saved when sweeping funds from an old wallet to a new wallet.
- deprecated: `EdgeLoginRequest.displayImageUrl`. Use the new dark or light mode images instead.
## v0.19.42 (2023-02-02)
- added: Support for token activation
## v0.19.41 (2023-01-26)
- changed: Convert source code to TypeScript internally. No changes should be visible externally, aside from some file locations.
## v0.19.40 (2023-01-24)
- added: New 'syncing' to confirmations API
- fixed: Bug in `validateConfirmations` function incorrectly inferring a transaction as 'dropped'
## v0.19.39 (2023-01-17)
- fixed: Re-publish with missing files.
## v0.19.38 (2023-01-17)
- changed: Make sensitive account & wallet properties, like keys, non-enumerable.
- changed: Use the pluginId as the wallet logging prefix, instead of the currency code.
## v0.19.37 (2023-01-06)
- added: Always-enabled tokens. The currency engine checks these for balances and transactions, but they do not appear in the per-wallet enabled token lists.
- `EdgeCurrencyConfig.alwaysEnabledTokenIds`
- `EdgeCurrencyConfig.changeAlwaysEnabledTokenIds`
- added: `EdgeCurrencyTools.checkPublicKey`, which provides a mechanism for currency plugins to refresh their cached public keys if necessary.
- added: `EdgeSwapInfo.isDex` and `EdgeSwapRequestOptions.preferType`, to always prefer DEX swaps over centralized swaps.
- changed: Always select the "transfer" plugin if it returns a quote, regardless of price.
## v0.19.36 (2022-12-26)
- added: Accelerate Transaction API
## v0.19.35 (2022-12-20)
- fixed: Clean swap quotes before logging to prevent circular reference error
## v0.19.34 (2022-12-16)
- fixed: Export more accurate TypeScript definitions for our React Native components.
## v0.19.33 (2022-11-25)
- added: New options for getReceiveAddress
- changed: Upgrade biggystring to 4.0.0
- changed: Increase BCH replay protection transaction value amount
- changed: Upgrade redux to 4.2.0
- changed: Upgrade redux-keto to 0.3.5
- fixed: Login server override testing
## v0.19.32 (2022-11-14)
- added: `EdgeTransaction.walletId`.
- added: Add the swap request to the quote object as `EdgeSwapQuote.request`.
- changed: Change login server to login.edge.app, and filter which domains we allow.
- deprecated: `EdgeTransaction.wallet`. Use `EdgeTransaction.walletId` instead.
## v0.19.31 (2022-11-02)
- added: Specifying token spends by their ID, instead of their imprecise currency code:
- `EdgeSpendInfo.tokenId`
- `EdgeSwapRequest.fromTokenId`
- `EdgeSwapRequest.toTokenId`
- deprecated: Spending tokens by their currency code.
- `EdgeSpendInfo.currencyCode`
- `EdgeSwapRequest.fromCurrencyCode`
- `EdgeSwapRequest.toCurrencyCode`
## v0.19.30 (2022-09-22)
- fixed: Correctly pass `EdgeSpendInfo.pendingTxs` to the currency plugin.
## v0.19.29 (2022-09-13)
- added: Include the `loginId` in `EdgeContext.localUsers`.
- added: Accept an optional metadata parameter to `EdgeSwapQuote.approve`.
## v0.19.28 (2022-09-02)
- added: `hex` option for memoType
## v0.19.27 (2022-08-25)
- fixed: Correctly pass `EdgeSpendInfo.skipChecks` to the currency plugin.
## v0.19.26 (2022-08-19)
- added: `EdgeContext.clientId`.
- added: `EdgeSpendInfo.pendingTxs` and `EdgeSpendInfo.skipChecks` flags.
- fixed: Show useful information when logging errors, instead of just `{}`.
## v0.19.25 (2022-07-27)
- changed: Allow individual plugins to resist being loaded by returning `undefined` instead of an `EdgeCurrencyPlugin` object.
## v0.19.24 (2022-07-26)
- changed: Randomly generate loginIds so recycled usernames don't cause conflicts
- fixed: Upgrade edge-sync-client to include patch
## v0.19.23 (2022-07-13)
- added: Add optional from/to parameter to min and max swap errors
## v0.19.22 (2022-07-08)
- upgrade: yaob dependency to include error serialization fix
## v0.19.21 (2022-07-05)
- added: New `deleteRemoteAccount` function to the `EdgeAccount` object
## v0.19.20 (2022-06-22)
- fixed: Loosen constraint for checking tx confirmation status in 'getTransaction' and Make the condition identical to the condition in onBlockHeightChanged.
## v0.19.19 (2022-06-13)
- added: New Confirmations API on `EdgeTransaction` type
## v0.19.18 (2022-05-19)
- fixed: Do not uselessly re-save the custom tokens on every login.
## v0.19.17 (2022-05-18)
- fixed: Correctly load custom tokens (regression from last release).
## v0.19.16 (2022-05-16)
- fixed: Correctly load tokens from the legacy settings file.
- fixed: Correctly report errors when adding invalid custom tokens.
## v0.19.15 (2022-05-02)
- added: `EdgeCurrencyConfig.allTokens`.
- fixed: Do not erroneously enable tokens when editing their currency codes.
## v0.19.14 (2022-04-26)
- fixed: Never return `undefined` for `EdgeCurrencyConfig.customTokens`.
- fixed: Handle token edits that change the `tokenId` or `currencyCode`.
- removed: Do not treat parent currencies as tokens. This logic was unused, so update the documentation.
## v0.19.13 (2022-04-05)
- added: `EdgeCurrencyWallet.currencyConfig`.
- changed: Save custom tokens to disk.
- added: `EdgeCurrencyConfig.addCustomToken`.
- added: `EdgeCurrencyConfig.changeCustomToken`.
- added: `EdgeCurrencyConfig.removeCustomToken`.
- deprecated: `EdgeCurrencyWallet.addCustomToken`.
- changed: Save enabled tokens to disk.
- added: `EdgeCurrencyWallet.changeEnabledTokenIds`
- added: `EdgeCurrencyWallet.enabledTokenIds`
- deprecated: `EdgeCurrencyWallet.changeEnabledTokens`
- deprecated: `EdgeCurrencyWallet.disableTokens`
- deprecated: `EdgeCurrencyWallet.enableTokens`
- deprecated: `EdgeCurrencyWallet.getEnabledTokens`
- changed: Update the token API for currency plugins. Plugins should implement the new methods, then turn the old methods to no-ops.
- added: Optional `EdgeCurrencyEngine.changeCustomTokens`
- added: Optional `EdgeCurrencyEngine.changeEnabledTokenIds`
- added: Optional `EdgeCurrencyTools.getTokenId`
- deprecated: `EdgeCurrencyEngine.addCustomToken`
- deprecated: `EdgeCurrencyEngine.disableTokens`
- deprecated: `EdgeCurrencyEngine.enableTokens`
- deprecated: `EdgeCurrencyEngine.getEnabledTokens`
- deprecated: `EdgeCurrencyEngine.getTokenStatus`
## v0.19.12 (2022-04-01)
- fixed: Avoid an internal crash on logout while reloading addresses.
- fixed: Make our code compatible with older Java versions again.
- fixed: Use the correct React dependency in the iOS podspec.
- changed: Allow individual log sources to be set to `silent`.
- changed: Move some string manipulations off of the main Java thread.
## v0.19.11 (2022-03-18)
- changed: Perform React Native disk accesses on their own threads.
## v0.19.10 (2022-03-02)
- added: `EdgeCurrencyInfo.canReplaceByFee`.
- changed: Make `denominationToNative` and `nativeToDenomination` only look at the currencies available on the current wallet.
## v0.19.9 (2022-02-22)
- fixed: Stop adding `undefined` entries to `EdgeAccount.currencyWallets`.
## v0.19.8 (2022-02-21)
- added: Define a new `EdgeToken` type and make that available as `EdgeCurrencyConfig.builtinTokens` and `EdgeCurrencyConfig.customTokens`.
- added: Define a new `EdgeCurrencyPlugin.getBuiltinTokens` method, and use that to populate `EdgeCurrencyConfig.builtinTokens` when available.
- added: Pass `EdgeToken` fields to `EdgeCurrencyEngine.addCustomToken`, along with the existing `EdgeMetaToken` fields.
- deprecated: `EdgeCurrencyInfo.defaultSettings`
- deprecated: `EdgeCurrencyInfo.metaTokens`
- deprecated: `EdgeCurrencyInfo.symbolImage`
- deprecated: `EdgeCurrencyInfo.symbolImageDarkMono`
## v0.19.7 (2022-02-15)
- added: Include an `imported` flag with all new wallet keys, to indicate whether they were derived freshly or imported from user-entered data.
- fixed: Do not hang forever if creating a currency engine fails.
## v0.19.6 (2022-02-10)
- changed: Add comments and improve organization in the public types file.
- changed: Use cleaners to load & save many files for additional safety.
- fixed: Improve wallet start-up performance by loading fewer files.
## v0.19.5 (2022-02-04)
- changed: Send the optional `keyOptions` parameter through the `importKey` methods.
- fixed: Remove JCenter from the Android build file.
## v0.19.4 (2022-01-28)
- added: `EdgeCurrencyWallet.stakingStatus`, along with matching engine methods for returning and updating this.
- fixed: Removed unnecessary C++ compiler flags.
## v0.19.3 (2022-01-21)
- fixed: Correctly select swaps with the best price.
- fixed: Correctly prefer swap plugins with active promo codes.
- changed: Add more logging to the swap procedure.
## v0.19.2 (2022-01-20)
- fixed: Only write the `deviceDescription` on sent transactions.
- fixed: Add a native `requiresMainQueueSetup` method to silence a warning on iOS.
## v0.19.1 (2022-01-14)
- changed: Write files atomically on Android, so out-of-disk and other errors do not lead to data corruption.
- fixed: Upgrade edge-sync-client, so info server errors are no longer fatal.
- fixed: Do not destroy the core WebView when opening Safari links on iOS.
## v0.19.0 (2022-01-11)
This release completely changes the way React Native works, both to improve performance and to make integration and debugging much easier.
- changed: Simplify the React Native integration to "just work".
- Stop depending on external libraries such as react-native-fast-crypto, react-native-randombytes, or react-native-webview.
- Use React Native auto-linking to integrate all native code, HTML, and Javascript needed to run the core.
- Accept core plugins via a `pluginUris` prop to `MakeEdgeContext` or `MakeFakeEdgeWorld`.
- Allow core debugging by running `yarn start` in this repo to start a dev server, and then setting the `debug` prop to true.
- Accept an `allowDebugging` prop on Android to enable WebView debugging in general (useful for debugging plugins).
- changed: Require `EdgeCurrencyEngine` methods to return promises.
- changed: Mark methods as `readonly` in the TypeScript definitions, to match what Flow was already doing.
## v0.18.14 (2021-01-06)
- fixed: Allow logins with an appId to approve or reject vouchers.
- added: Allow maximum swaps by passing "max" to `EdgeSwapRequest.quoteFor`.
- added: Add an `EdgeCurrencyEngine.getMaxSpendable` method for native max-spend calculations.
## v0.18.13 (2021-12-17)
- added: `EdgeSpendTarget.memo`, which is a renamed version of `EdgeSpendTarget.uniqueIdentifier`.
- added: `EdgeCurrencyInfo.memoType`, `EdgeCurrencyInfo.memoMaxLength`, `EdgeCurrencyInfo.memoMaxValue`. Use these to learn which currencies support memos.
- added: `EdgeCurrencyTools.validateMemo` & `EdgeCurrencyWallet.validateMemo`. Use these to check memos for validity before sending.
- deprecated: `EdgeSpendTarget.uniqueIdentifier`. Use `EdgeSpendTarget.memo` instead.
## v0.18.12 (2021-12-10)
- fixed: Gracefully handle errors while reading the exchange-rate hint cache.
- fixed: Correctly match server-returned children with their on-disk stash entries. This produces more accurate errors if the server loses a child.
## v0.18.11 (2021-11-07)
- fixed: onWcNewContractCall callback type
- fixed: Bitcoin and Bitcoin xpub documentation
## v0.18.10 (2021-11-02)
- added: Implement TypeScript utilities in Flow
- added: Wallet Connect types and onWcNewContractCall callback
- updated: Ethereum, Bitcoin, and Bitcoin xpub documentation
- fixed: Type-safety and null checks
## v0.18.9 (2021-09-21)
- fixed: Allow `import 'edge-core-js/types'` to work in TypeScript.
## v0.18.8 (2021-09-17)
- changed: Upgrade cleaners to v0.3.11
- fixed: Restore Webpack production mode
## 0.18.7 (2021-09-10)
- fixed: Limit the number of documents uploaded to the sync server in one request.
- fixed: Upgrade to edge-sync-client v0.2.1, which improves the sync-server retry logic.
## 0.18.6 (2021-09-08)
- changed: Use edge-sync-client to retrieve the list of sync servers instead of a hard-coded list.
## 0.18.5 (2021-08-17)
- fixed: If multiple metadata files exist for a single transaction, always load the oldest one.
## 0.18.4 (2021-08-02)
- fixed: Ensure that transactions never have `undefined` as a `nativeAmount`.
- fixed: Change the WebPack build settings to allow easier debugging.
## 0.18.3 (2021-07-26)
- fixed: Fix the React Native WebView bundle to work on really old devices.
## 0.18.2 (2021-06-21)
- Replace nullish coalescing operator with ternary
## 0.18.1 (2021-06-18)
- added: Save the device description on sent transactions.
- added: Add an optional `InsufficientFundsError.networkFee` field.
- fixed: Avoid performing back-to-back initial syncs.
## 0.18.0 (2021-05-25)
This is a breaking release to remove various deprecated features that have accumulated.
- Remove several methods and properties:
- `EdgeAccount.exchangeCache` - Use `EdgeAccount.rateCache` instead.
- `EdgeContext.getRecovery2Key` - Use `EdgeUserInfo.recovery2Key` instead.
- `EdgeContext.pinExists` - Use `EdgeUserInfo.pinLoginEnabled` instead.
- `EdgeContext.on('login')` - Use `EdgePendingEdgeLogin.watch('account')` instead.
- `EdgeContext.on('loginError')` - Use `EdgePendingEdgeLogin.watch('error')` instead.
- `EdgeContext.on('loginStart')` - Use `EdgePendingEdgeLogin.watch('username')` instead.
- `EdgeCurrencyWallet.exportTransactionsToCSV` - Moved to edge-react-gui project.
- `EdgeCurrencyWallet.exportTransactionsToQBO` - Moved to edge-react-gui project.
- `EdgeCurrencyWallet.getBalance` - Use `EdgeCurrencyWallet.balance` instead.
- `EdgeCurrencyWallet.getBlockHeight` - Use `EdgeCurrencyWallet.blockHeight` instead.
- `EdgeCurrencyWallet.getDisplayPrivateSeed` - Use `EdgeCurrencyWallet.displayPrivateSeed` instead.
- `EdgeCurrencyWallet.getDisplayPublicSeed` - Use `EdgeCurrencyWallet.displayPublicSeed` instead.
- `EdgeCurrencyWallet.startEngine` - Use `EdgeCurrencyWallet.changePaused(false)` instead.
- `EdgeCurrencyWallet.stopEngine` - Use `EdgeCurrencyWallet.changePaused(true)` instead.
- `EdgeEncodeUri.legacyAddress` - Use `EdgeEncodeUri.publicAddress` instead.
- `EdgeEncodeUri.segwitAddress` - Use `EdgeEncodeUri.publicAddress` instead.
- Remove the `options` prop on the `MakeEdgeContext` React Native component.
- Just pass any context options as normal props.
- Remove the `type` property from all error classes, as well as the global `errorNames` table.
- Use the new error-identification methods, such as `asMaybePasswordError`, to determine if an error is a specific type.
- Stop allowing `null` in places where we expect an `EdgeAccountOptions` object.
- Just pass `undefined` if this parameter isn't used.
- Return the `EdgeAccount.otpResetDate` as a `Date` object.
The following changes affect Edge core plugins:
- Remove `EdgeIo.console` - Use `EdgeCorePluginOptions.log` instead.
- Define `EdgeCurrencyEngine` methods to return `Promise<void>` instead of `Promise<mixed>`.
- The core will no longer upgrade `pluginName` to `pluginId` for legacy currency plugins.
## 0.17.33 (2021-05-10)
- Add a `paused` flag to `EdgeCurrencyWallet`, and a matching `changePaused` method.
- Deprecate `EdgeCurrencyWallet.startEngine` - Use `EdgeCurrencyWallet.changePaused(false)` instead.
- Deprecate `EdgeCurrencyWallet.stopEngine` - Use `EdgeCurrencyWallet.changePaused(true)` instead.
- Clean legacy Airbitz wallet files to prevent potential crashes at login.
## 0.17.32 (2021-04-28)
- Enable safari10 option in webpack minimizer to fix stuck loading screens on iOS 10
## 0.17.31 (2021-04-22)
- Add `crash` and `breadcrumb` methods to `EdgeLog` for crash reporting.
- Deprecate the `options` prop on the `MakeEdgeContext` React Native component.
- Just pass any context options as normal props.
- Reset the wallet sync ratio as part of a resync.
## 0.17.30 (2021-04-12)
- Deprecate several methods:
- `EdgeContext.getRecovery2Key` - Use `EdgeUserInfo.recovery2Key` instead.
- `EdgeCurrencyWallet.exportTransactionsToCSV` - Moved to edge-react-gui project.
- `EdgeCurrencyWallet.exportTransactionsToQBO` - Moved to edge-react-gui project.
- `EdgeCurrencyWallet.getDisplayPrivateSeed` - Use `EdgeCurrencyWallet.displayPrivateSeed` instead.
- `EdgeCurrencyWallet.getDisplayPublicSeed` - Use `EdgeCurrencyWallet.displayPublicSeed` instead.
- Upgrade build scripts to use Webpack 5.
## 0.17.29 (2021-03-29)
- Fix an error which was causing all new 2FA-protected logins to fail.
- Add cleaners for all core error types, such as `asMaybeOtpError`. These provide a type-safe way to identify different error objects that may have been thrown.
- Deprecate the old `errorNames` table.
## 0.17.28 (2021-03-25)
- Fix a code-packaging error in the previous release.
## 0.17.27 (2021-03-25)
- Improve the `EdgePendingEdgeLogin` API.
- Add a `state` field to track the progress of the barcode login.
- Add other fields to hold the outcome of the barcode login.
- Add a `watch` method to track changes to these fields.
- Allow `EdgeCurrencyEngine.dumpData` to return a promise.
- Cache exchange-rate hints from all local accounts to speed up initial rates query.
- Validate incoming & outgoing network requests even more thoroughly.
## 0.17.26 (2021-02-28)
- Fix the `EdgeContext.listRecoveryQuestionChoices` method.
- Fix the runtime data validation to accept the actual server return values.
- The return type of `Promise<string[]>` has always been incorrect, so the correct return type is now `Promise<EdgeRecoveryQuestionChoice[]>`.
- As a stop-gap measure, though the return-type definitions is now `any`. We will insert the correct return type definition in the next breaking release.
## 0.17.25 (2021-02-27)
- Load all supported currency pairs at launch to improve exchange rate loading. List is replaced by enabled wallets once the wallets are loaded.
## 0.17.24 (2021-02-19)
- Fix the `parentNetworkFee` field missing in certain `EdgeTransaction` instances.
- Fix missing transactions while searching.
- Perform more data validation on network requests.
- Fix a bug that would prevent login vouchers from working on Airbitz accounts with 2fa turned on.
- Expose periodic 2fa errors through the context's `error` event.
- Add an `EdgeAccount.repairOtp` method.
## 0.17.23 (2021-02-10)
- Ensure all crypto to crypto exchange rates have a route to USD
- Add currency code column to CSV exports
## 0.17.22 (2021-01-26)
- Update `EdgeCurrencyEngine` to allow `getFreshAddres`, `addGapLimitAddresses`, and `isAddressUsed` to return promises.
## 0.17.21 (2021-01-25)
- Periodically perform a re-login to sync logged-in account credentials with the server.
- Fix a bug that would prevent the `EdgeContext.logSettings` property from updating.
## 0.17.20 (2021-01-21)
- Add an `EdgeContextOptions.logSettings` property to control logging verbosity, along with an `EdgeContext.changeLogSettings` method.
- Deprecate the `EdgeEncodeUri.legacyAddress` and `EdgeEncodeUri.segwitAddress` parameters. Just pass the address in `EdgeEncodeUri.publicAddress`, regardless of format.
- Update the swap logging to give more information about failed quotes.
## 0.17.19 (2020-12-31)
- Upgrade Airbitz accounts with secret-key login
- Filter duplicates from rateHints
- Add low priority edgeRates bias
- Update linting
## 0.17.18 (2020-11-27)
- (feature) Add ability to filter `getTransactions()` with `searchString` option
- (feature) Add requested currency pair to rateHints if it cannot be served by searchRoutes()
## 0.17.17 (2020-11-15)
- (feature) Identify enabled currency and fiat pairs to pass to exchange rate plugins
## 0.17.16 (2020-11-11)
- (feature) RBF Transaction Support
- Adds new `rbfTxid` optional string to `EdgeSpendInfo` type definition
- Adds new `rbfTxid` to the returned `EdgeTransaction` object in `makeSpend` on `EdgeCurrencyWallet` objects
- Include sync keys in the logs
## 0.17.15 (2020-10-08)
- (feature) Add onAddressChanged callback
- This allows a plugin to inform the GUI of address or account name updates (e.g. when an EOS account becomes activated)
## 0.17.14 (2020-09-18)
- (fix) Don't crash when using a barcode to log into accounts with pending OTP resets.
- (fix) Correctly expire any vouchers on the device while doing a barcode login.
- (fix) Upgrade to node-fetch v2.6.1.
## 0.17.13 (2020-09-10)
- (fix) Switch to the new voucher endpoint.
- (fix) Always return `OtpError.voucherId` when available.
- (feature) Expose an `EdgeAccount.pendingVouchers` field.
- (feature) Expose as `EdgeUserInfo.voucherId` field.
## 0.17.12 (2020-08-31)
- (feature) Add a `keyLoginEnabled` flag to `EdgeUserInfo`.
- (feature) Add a `lastLogin` date to `EdgeUserInfo` and `EdgeAccount`.
## 0.17.11 (2020-08-21)
- (feature) Add a login voucher system. When a new device tries to log into an account with 2-factor security, the server can issue a voucher along with the `OtpError`. Existing devices with the 2-factor token can then log in and either approve or deny the voucher using `EdgeAccount.approveVoucher` or `EdgeAccount.rejectVoucher`. The `EdgeLoginMessages` type also includes a list of pending vouchers now.
- (chore) Upgrade to hash.js v1.1.7 and redux-keto v0.3.4.
## 0.17.10 (2020-08-17)
- (feature) Allow users to pass 6-digit OTP codes directly. This means `EdgeAccountOptions.otp` is deprecated for passing the secret. Use `EdgeAccountOptions.otpKey` to pass the secret, or `EdgeAccountOptions.otp` to pass the 6-digit code.
- (feature) Save usernames for first-time logins that fail 2fa.
- (feature) Save & return the account creation date as `EdgeAccount.created`.
- (fix) Harden server response parsing.
- (fix) Upgrade many dev dependencies.
## 0.17.9 (2020-07-10)
- Restore sync failure messages in the UI
## 0.17.8 (2020-07-08)
- Allow the user to pass an `onLog` callback to the context constructor
- This allows our CLI to silence the core and supports more flexibilty in GUI log handling
- Apply cleaners to the login stashes as well as remove some legacy disklet API usage
- Support date filters for `getTransactions`
- Save fee information in the spend metadata
- Send sync failures to the logs, not the UI
- Fix BSV replay protection feature broken by commit 11e752d8
## 0.17.7 (2020-07-03)
- Update info server URI
- Add bias for Coinmonitor exchange rate provider
## 0.17.6 (2020-06-16)
- Fix type annotations on some optional parameters that were accidentally marked as mandatory.
- Work around an issue in edge-currency-bitcoin that prevented spends from saving metadata.
## 0.17.5 (2020-06-11)
- Expose an `EdgeAccount.rootLoginId`.
## 0.17.4 (2020-06-02)
- Save the decryption keys for Monero spends (requires a matching Monero plugin change).
- Replace git2.airbitz.co with git1.edge.app in the sync server list.
## 0.17.3 (2020-05-26)
- Save transaction metadata with spends.
- Save an `EdgeTransaction.spendTargets` list with every spend.
- Save an optional `EdgeTransaction.swapData` field with swap transactions.
## 0.17.2 (2020-05-21)
- Prioritize the `wazirx` rate plugin when available.
## 0.17.1 (2020-05-07)
- Use constant-time comparisons for encryption & decryption.
- Upgrade redux-keto dependency & fix uncovered type errors.
- Improve git server error messages & rotation logic.
## 0.17.0 (2020-04-08)
This is a breaking release to address some issues in the swap API.
This release also renames all `pluginName` instances to `pluginId`. This affects all plugin types, but the core contains compatibility code so old currency plugins continue working (but not for rate or swap plugins, which are easier to just upgrade).
- Breaking changes to the swap API:
- Return a new `EdgeSwapResult` structure from `EdgeSwapQuote.approve`. This now contains the `destinationAddress` and `orderId` that used to exist on the `EdgeSwapQuote` type.
- Merge the `EdgeSwapPluginQuote` and `EdgeSwapQuote` types into one.
- The `EdgeSwapQuote.isEstimate` flag is no longer optional, but must be `true` or `false`.
- Remove `EdgeSwapQuote.quoteUri`. Just concatenate `EdgeSwapInfo.orderUri` with `EdgeSwapResult.orderId` to get this.
- Rename `EdgeSwapInfo.quoteUri` to `orderUri`.
- Remove the deprecated `plugins` option from `EdgeSwapRequestOptions`.
- Other breaking changes:
- Remove deprecated `EdgeAccount.currencyTools`. Use `EdgeAccount.currencyConfig`.
- Remove deprecated `EdgeAccount.exchangeTools`. Use `EdgeAccount.swapConfig`.
- Remove deprecated `EdgeAccount.getExchangeQuote`. Use `EdgeAccount.fetchSwapQuote`.
- Remove deprecated `EdgeAccount.pluginData`. Use `EdgeAccount.dataStore`.
- Remove deprecated `EdgeIo.WebSocket`.
## 0.16.25 (2020-04-04)
- Prioritize swap providers with active promo codes.
## 0.16.24 (2020-03-04)
- Simplify the API for providing plugin swap promo codes.
## 0.16.23 (2020-03-03)
- Quick re-publish to fix Flow bug in previous release.
## 0.16.22 (2020-03-03)
- Fix the TypeScript type definitions.
- Add a way to prioritize different exchange-rate plugins.
- Add a way to pass promotion codes & disable swap providers on-the-fly while quoting.
## 0.16.21 (2020-02-05)
- Deprecate `pluginName` fields in favor of `pluginId`, which is a less confusing name.
- Add a way to pass a preferred plugin to `fetchSwapQuote`.
## 0.16.20 (2020-01-28)
- Add `EdgeCurrencyInfo.xpubExplorer`.
## 0.16.19 (2020-01-16)
- Record auth server failures in the log.
## 0.16.18 (2020-01-02)
- Type updates:
- Deprecate `EdgeIo.console`.
- Supply our own types for `EdgeIo.fetch`, which clarify our supported feature set.
- Fix `EdgeOtherMethods` to be read-only.
- New features:
- Pass a `log` method to plugins and engines.
- Add an `EdgeIo.fetchCors` method on platforms that support it.
- Fixes:
- Fix Edge login network error handling.
- Use the `log` method internally, which changes our message format.
## 0.16.17 (2019-12-19)
- Work around a balance update bug.
- Add a `hidden` wallet state.
## 0.16.16 (2019-12-12)
- Generate TypeScript type definitions from the public Flow types.
- Add Flow type definitions to the error types.
- Perform the React Native polyfill more safely.
## 0.16.15 (2019-11-25)
- Add an `EdgeCurrencyWallet.changeEnabledTokens` method.
## 0.16.14 (2019-11-20)
- Save 2-factor keys sent back from the auth server.
- Expose the `recovery2Key` in `EdgeContext.localUsers`.
## 0.16.13 (2019-10-31)
- Include a default API key in the core, in case the user initializes the context with a blank `apiKey`.
## 0.16.12 (2019-10-23)
- Add a `currencyCode` to `InsufficientFundsError`.
- Update the readme with helpful information.
## 0.16.11 (2019-09-26)
- Fix swap quote prioritization logic to always prefer exact quotes.
- Add an `EdgeCurrencyConfig.importKey` method.
- Add optional properties to `EdgeCurrencyInfo`:
- `canAdjustFees`
- `canImportKeys`
- `customFeeTemplate`
- `customTokenTemplate`
## 0.16.10 (2019-09-20)
- De-duplicate dependencies.
- Enable minification on React Native builds.
## 0.16.9 (2019-09-05)
- Always prefer top-level currency codes over tokens, if there is a conflict.
## 0.16.8 (2019-08-26)
- Close unused swap quotes.
- Update YAOB correctly when plugin configurations change.
- Simplify the react-native WebView debug appearance.
## 0.16.7 (2019-08-14)
- Update linting and build tooling.
- Add a new `EdgeContext.paused` control for stopping background work.
## 0.16.6 (2019-08-02)
- Fix OTP settings to only apply to the root login.
- Add `close` events to Flow type definitions.
- Apply timeouts to the exchange-rate fetching logic.
## 0.16.5 (2019-07-22)
- Add polyfills for old