diff --git a/config/wallet-config.json b/config/wallet-config.json index 96e6fa55..4a013ae0 100644 --- a/config/wallet-config.json +++ b/config/wallet-config.json @@ -83,5 +83,10 @@ "minValues": [2500, 3000, 3500], "minValuesEnabled": true }, - "nftMetadataEnabled": true + "nftMetadataEnabled": true, + "ordinalsbot": { + "integrationEnabled": true, + "mainnetApiUrl": "https://ordinalsbot-api2.herokuapp.com", + "signetApiUrl": "https://signet.ordinalsbot.com" + } } diff --git a/config/wallet-config.schema.json b/config/wallet-config.schema.json index 5712c896..68e506e8 100644 --- a/config/wallet-config.schema.json +++ b/config/wallet-config.schema.json @@ -127,6 +127,16 @@ "nftMetadataEnabled": { "type": "boolean", "description": "Determines whether or not we display nft metadata in the wallet" + }, + "ordinalsbot": { + "type": "object", + "description": "Configuration for the ordinalsbot", + "additionalProperties": false, + "properties": { + "integrationEnabled": { "type": "boolean" }, + "mainnetApiUrl": { "type": "string" }, + "signetApiUrl": { "type": "string" } + } } }, "$defs": { diff --git a/package.json b/package.json index 7027aa77..e002c975 100644 --- a/package.json +++ b/package.json @@ -171,6 +171,7 @@ "are-passive-events-supported": "1.1.1", "argon2-browser": "1.18.0", "assert": "2.0.0", + "axios": "1.4.0", "base64url": "3.0.1", "bignumber.js": "9.1.1", "bitcoin-address-validation": "2.2.1", @@ -211,6 +212,7 @@ "redux-persist": "6.0.0", "rxjs": "7.8.1", "ts-debounce": "4.0.0", + "url-join": "5.0.0", "use-events": "1.4.2", "use-latest": "1.2.1", "valid-url": "1.0.9", diff --git a/src/app/components/account/account-list-item-layout.tsx b/src/app/components/account/account-list-item-layout.tsx index 90be64f8..86feafc9 100644 --- a/src/app/components/account/account-list-item-layout.tsx +++ b/src/app/components/account/account-list-item-layout.tsx @@ -7,7 +7,7 @@ import { SettingsMenuSelectors } from '@tests/selectors/settings.selectors'; import { Tooltip } from '@app/components/tooltip'; import { Caption } from '@app/components/typography'; -import { useConfigBitcoinEnabled } from '@app/query/common/hiro-config/hiro-config.query'; +import { useConfigBitcoinEnabled } from '@app/query/common/remote-config/remote-config.query'; import { CaptionDotSeparator } from '../caption-dot-separator'; import { AccountActiveCheckmark } from './account-active-checkmark'; diff --git a/src/app/components/crypto-assets/bitcoin/brc20-token-asset/brc20-token-asset-item.tsx b/src/app/components/crypto-assets/bitcoin/brc20-token-asset/brc20-token-asset-item.tsx index 131a188b..e662c764 100644 --- a/src/app/components/crypto-assets/bitcoin/brc20-token-asset/brc20-token-asset-item.tsx +++ b/src/app/components/crypto-assets/bitcoin/brc20-token-asset/brc20-token-asset-item.tsx @@ -3,7 +3,7 @@ import { forwardRefWithAs } from '@stacks/ui-core'; import { createMoney } from '@shared/models/money.model'; -import { Brc20Token } from '@app/query/bitcoin/ordinals/brc20-tokens.query'; +import { Brc20Token } from '@app/query/bitcoin/ordinals/brc20/brc20-tokens.query'; import { Brc20TokenAssetItemLayout } from './brc20-token-asset-item.layout'; diff --git a/src/app/features/activity-list/activity-list.tsx b/src/app/features/activity-list/activity-list.tsx index b889a110..a41a5792 100644 --- a/src/app/features/activity-list/activity-list.tsx +++ b/src/app/features/activity-list/activity-list.tsx @@ -3,7 +3,7 @@ import { useMemo } from 'react'; import { LoadingSpinner } from '@app/components/loading-spinner'; import { useBitcoinPendingTransactions } from '@app/query/bitcoin/address/transactions-by-address.hooks'; import { useGetBitcoinTransactionsByAddressQuery } from '@app/query/bitcoin/address/transactions-by-address.query'; -import { useConfigBitcoinEnabled } from '@app/query/common/hiro-config/hiro-config.query'; +import { useConfigBitcoinEnabled } from '@app/query/common/remote-config/remote-config.query'; import { useStacksPendingTransactions } from '@app/query/stacks/mempool/mempool.hooks'; import { useGetAccountTransactionsWithTransfersQuery } from '@app/query/stacks/transactions/transactions-with-transfers.query'; import { useCurrentAccountNativeSegwitAddressIndexZero } from '@app/store/accounts/blockchain/bitcoin/native-segwit-account.hooks'; diff --git a/src/app/features/balances-list/balances-list.tsx b/src/app/features/balances-list/balances-list.tsx index f7ed53a2..5826e982 100644 --- a/src/app/features/balances-list/balances-list.tsx +++ b/src/app/features/balances-list/balances-list.tsx @@ -11,7 +11,7 @@ import { BtcIcon } from '@app/components/icons/btc-icon'; import { LoadingSpinner } from '@app/components/loading-spinner'; import { Caption } from '@app/components/typography'; import { Brc20TokensLoader } from '@app/features/balances-list/components/brc-20-tokens-loader'; -import { useConfigBitcoinEnabled } from '@app/query/common/hiro-config/hiro-config.query'; +import { useConfigBitcoinEnabled } from '@app/query/common/remote-config/remote-config.query'; import { useStacksFungibleTokenAssetBalancesAnchoredWithMetadata } from '@app/query/stacks/balance/stacks-ft-balances.hooks'; import { useCurrentAccountNativeSegwitAddressIndexZero } from '@app/store/accounts/blockchain/bitcoin/native-segwit-account.hooks'; diff --git a/src/app/features/balances-list/components/bitcoin-fungible-tokens-asset-list.tsx b/src/app/features/balances-list/components/bitcoin-fungible-tokens-asset-list.tsx index f7d8049d..b7fb0603 100644 --- a/src/app/features/balances-list/components/bitcoin-fungible-tokens-asset-list.tsx +++ b/src/app/features/balances-list/components/bitcoin-fungible-tokens-asset-list.tsx @@ -1,7 +1,7 @@ import { Stack } from '@stacks/ui'; import { Brc20TokenAssetItem } from '@app/components/crypto-assets/bitcoin/brc20-token-asset/brc20-token-asset-item'; -import { Brc20Token } from '@app/query/bitcoin/ordinals/brc20-tokens.query'; +import { Brc20Token } from '@app/query/bitcoin/ordinals/brc20/brc20-tokens.query'; interface BitcoinFungibleTokenAssetListProps { brc20Tokens?: Brc20Token[]; diff --git a/src/app/features/balances-list/components/brc-20-tokens-loader.tsx b/src/app/features/balances-list/components/brc-20-tokens-loader.tsx index 85e315bb..ff5cea34 100644 --- a/src/app/features/balances-list/components/brc-20-tokens-loader.tsx +++ b/src/app/features/balances-list/components/brc-20-tokens-loader.tsx @@ -1,7 +1,7 @@ import { Brc20Token, useBrc20TokensByAddressQuery, -} from '@app/query/bitcoin/ordinals/brc20-tokens.query'; +} from '@app/query/bitcoin/ordinals/brc20/brc20-tokens.query'; import { useCurrentAccountTaprootAddressIndexZeroPayment } from '@app/store/accounts/blockchain/bitcoin/taproot-account.hooks'; interface Brc20TokensLoaderProps { diff --git a/src/app/features/collectibles/collectibles.tsx b/src/app/features/collectibles/collectibles.tsx index 6d7434d0..90ed2a4a 100644 --- a/src/app/features/collectibles/collectibles.tsx +++ b/src/app/features/collectibles/collectibles.tsx @@ -6,7 +6,7 @@ import { useQueryClient } from '@tanstack/react-query'; import { RouteUrls } from '@shared/route-urls'; import { useWalletType } from '@app/common/use-wallet-type'; -import { useConfigNftMetadataEnabled } from '@app/query/common/hiro-config/hiro-config.query'; +import { useConfigNftMetadataEnabled } from '@app/query/common/remote-config/remote-config.query'; import { AddCollectible } from './components/add-collectible'; import { Ordinals } from './components/bitcoin/ordinals'; diff --git a/src/app/features/current-account/popup-header.tsx b/src/app/features/current-account/popup-header.tsx index b2ba752f..14d1763e 100644 --- a/src/app/features/current-account/popup-header.tsx +++ b/src/app/features/current-account/popup-header.tsx @@ -11,7 +11,7 @@ import { NetworkModeBadge } from '@app/components/network-mode-badge'; import { CurrentAccountAvatar } from '@app/features/current-account/current-account-avatar'; import { CurrentAccountName } from '@app/features/current-account/current-account-name'; import { CurrentStxAddress } from '@app/features/current-account/current-stx-address'; -import { useConfigBitcoinEnabled } from '@app/query/common/hiro-config/hiro-config.query'; +import { useConfigBitcoinEnabled } from '@app/query/common/remote-config/remote-config.query'; import { useCurrentStacksAccount } from '@app/store/accounts/blockchain/stacks/stacks-account.hooks'; interface PopupHeaderLayoutProps { diff --git a/src/app/features/hiro-messages/components/in-app-message-item.tsx b/src/app/features/hiro-messages/components/in-app-message-item.tsx index c9885f0c..6d69f58e 100644 --- a/src/app/features/hiro-messages/components/in-app-message-item.tsx +++ b/src/app/features/hiro-messages/components/in-app-message-item.tsx @@ -2,7 +2,7 @@ import { FiX } from 'react-icons/fi'; import { Box, Flex, Text } from '@stacks/ui'; -import { HiroMessage } from '@app/query/common/hiro-config/hiro-config.query'; +import { HiroMessage } from '@app/query/common/remote-config/remote-config.query'; interface HiroMessageItemProps extends HiroMessage { onDismiss(id: string): void; diff --git a/src/app/features/hiro-messages/in-app-messages.tsx b/src/app/features/hiro-messages/in-app-messages.tsx index c66ed41a..bd6cab55 100644 --- a/src/app/features/hiro-messages/in-app-messages.tsx +++ b/src/app/features/hiro-messages/in-app-messages.tsx @@ -1,6 +1,6 @@ import { Flex, FlexProps } from '@stacks/ui'; -import { useRemoteHiroMessages } from '@app/query/common/hiro-config/hiro-config.query'; +import { useRemoteHiroMessages } from '@app/query/common/remote-config/remote-config.query'; import { useCurrentNetworkState } from '@app/store/networks/networks.hooks'; import { useDismissMessage } from '@app/store/settings/settings.actions'; import { useDismissedMessageIds } from '@app/store/settings/settings.selectors'; diff --git a/src/app/pages/fund/components/fiat-provider-item.tsx b/src/app/pages/fund/components/fiat-provider-item.tsx index 4fb8a731..ac95a214 100644 --- a/src/app/pages/fund/components/fiat-provider-item.tsx +++ b/src/app/pages/fund/components/fiat-provider-item.tsx @@ -1,6 +1,6 @@ import { FundPageSelectors } from '@tests-legacy/page-objects/fund.selectors'; -import { AvailableRegions } from '@app/query/common/hiro-config/hiro-config.query'; +import { AvailableRegions } from '@app/query/common/remote-config/remote-config.query'; import { FastCheckoutBadge } from './fast-checkout-badge'; import { FundAccountTile } from './fund-account-tile'; diff --git a/src/app/pages/fund/components/fiat-providers-list.tsx b/src/app/pages/fund/components/fiat-providers-list.tsx index 10377565..ea93eb6b 100644 --- a/src/app/pages/fund/components/fiat-providers-list.tsx +++ b/src/app/pages/fund/components/fiat-providers-list.tsx @@ -10,7 +10,7 @@ import { LoadingSpinner } from '@app/components/loading-spinner'; import { useActiveFiatProviders, useHasFiatProviders, -} from '@app/query/common/hiro-config/hiro-config.query'; +} from '@app/query/common/remote-config/remote-config.query'; import { FiatProviderItem } from './fiat-provider-item'; import { activeFiatProviderIcons, getProviderUrl } from './fiat-providers.utils'; diff --git a/src/app/pages/fund/components/fiat-providers.utils.ts b/src/app/pages/fund/components/fiat-providers.utils.ts index 71fd1830..f317c95a 100644 --- a/src/app/pages/fund/components/fiat-providers.utils.ts +++ b/src/app/pages/fund/components/fiat-providers.utils.ts @@ -12,7 +12,7 @@ import { generateOnRampURL } from '@coinbase/cbpay-js'; import { COINBASE_APP_ID, MOONPAY_API_KEY, TRANSAK_API_KEY } from '@shared/environment'; -import { ActiveFiatProvider } from '@app/query/common/hiro-config/hiro-config.query'; +import { ActiveFiatProvider } from '@app/query/common/remote-config/remote-config.query'; // Keys are set in wallet-config.json enum ActiveFiatProviders { diff --git a/src/app/pages/home/components/buy-button.tsx b/src/app/pages/home/components/buy-button.tsx index 74c8bb47..98e32e5c 100644 --- a/src/app/pages/home/components/buy-button.tsx +++ b/src/app/pages/home/components/buy-button.tsx @@ -9,7 +9,7 @@ import { HomePageSelectorsLegacy } from '@tests-legacy/page-objects/home.selecto import { RouteUrls } from '@shared/route-urls'; import { SecondaryButton } from '@app/components/secondary-button'; -import { useHasFiatProviders } from '@app/query/common/hiro-config/hiro-config.query'; +import { useHasFiatProviders } from '@app/query/common/remote-config/remote-config.query'; import { useCurrentNetworkState } from '@app/store/networks/networks.hooks'; import { HomeActionButton } from './tx-button'; diff --git a/src/app/pages/home/components/receive-button.tsx b/src/app/pages/home/components/receive-button.tsx index dd68ea6b..988c1a37 100644 --- a/src/app/pages/home/components/receive-button.tsx +++ b/src/app/pages/home/components/receive-button.tsx @@ -7,7 +7,7 @@ import { RouteUrls } from '@shared/route-urls'; import { PrimaryButton } from '@app/components/primary-button'; import { QrCodeIcon } from '@app/components/qr-code-icon'; -import { useConfigBitcoinEnabled } from '@app/query/common/hiro-config/hiro-config.query'; +import { useConfigBitcoinEnabled } from '@app/query/common/remote-config/remote-config.query'; import { HomeActionButton } from './tx-button'; diff --git a/src/app/pages/send/choose-crypto-asset/components/crypto-asset-list-item.tsx b/src/app/pages/send/choose-crypto-asset/components/crypto-asset-list-item.tsx index ea8da6b8..da98083b 100644 --- a/src/app/pages/send/choose-crypto-asset/components/crypto-asset-list-item.tsx +++ b/src/app/pages/send/choose-crypto-asset/components/crypto-asset-list-item.tsx @@ -8,7 +8,7 @@ import type { import { RouteUrls } from '@shared/route-urls'; import { CryptoCurrencyAssetItem } from '@app/components/crypto-assets/crypto-currency-asset/crypto-currency-asset-item'; -import { useConfigBitcoinSendEnabled } from '@app/query/common/hiro-config/hiro-config.query'; +import { useConfigBitcoinSendEnabled } from '@app/query/common/remote-config/remote-config.query'; import { CryptoCurrencyAssetIcon } from './crypto-currency-asset-icon'; import { FungibleTokenAssetItem } from './fungible-token-asset-item'; diff --git a/src/app/query/bitcoin/ordinals/brc20/brc-20.utils.ts b/src/app/query/bitcoin/ordinals/brc20/brc-20.utils.ts new file mode 100644 index 00000000..04bb4dec --- /dev/null +++ b/src/app/query/bitcoin/ordinals/brc20/brc-20.utils.ts @@ -0,0 +1,41 @@ +import BigNumber from 'bignumber.js'; +import * as yup from 'yup'; + +interface Brc20TransferInscription { + p: 'brc-20'; + op: 'transfer'; + tick: string; + amt: string; +} + +const brc20TransferInscriptionSchema = yup.object({ + p: yup.string().required().equals(['brc-20']), + op: yup.string().required().equals(['transfer']), + tick: yup + .string() + .required() + .test(value => value.length > 0 && value.length <= 4), + amt: yup + .string() + .required() + .test(value => new BigNumber(value).isFinite()) + .test(value => new BigNumber(value).isInteger()), +}); + +function validateBrc20TransferInscription(val: unknown): val is Brc20TransferInscription { + return brc20TransferInscriptionSchema.isValidSync(val); +} + +// ts-unused-exports:disable-next-line +export function createBrc20TransferInscription(tick: string, amt: string) { + const transfer: Brc20TransferInscription = { + p: 'brc-20', + op: 'transfer', + tick, + amt, + }; + + if (!validateBrc20TransferInscription(transfer)) throw new Error('Invalid transfer inscription'); + + return transfer; +} diff --git a/src/app/query/bitcoin/ordinals/brc20-tokens.query.ts b/src/app/query/bitcoin/ordinals/brc20/brc20-tokens.query.ts similarity index 100% rename from src/app/query/bitcoin/ordinals/brc20-tokens.query.ts rename to src/app/query/bitcoin/ordinals/brc20/brc20-tokens.query.ts diff --git a/src/app/query/bitcoin/ordinals/brc20/use-brc-20.ts b/src/app/query/bitcoin/ordinals/brc20/use-brc-20.ts new file mode 100644 index 00000000..d39a695b --- /dev/null +++ b/src/app/query/bitcoin/ordinals/brc20/use-brc-20.ts @@ -0,0 +1,93 @@ +import axios from 'axios'; +import urlJoin from 'url-join'; + +import { useConfigOrdinalsbot } from '@app/query/common/remote-config/remote-config.query'; +import { useCurrentNetwork } from '@app/store/networks/networks.selectors'; + +interface TextInscriptionSuccessResponse { + status: 'ok'; + charge: { + id: string; + address: string; + amount: number; + lightning_invoice: { + expires_at: number; + payreq: string; + }; + created_at: number; + }; + chainFee: number; + serviceFee: number; + orderType: string; + createdAt: number; +} + +interface OrderStatusSuccessResponse { + status: string; + paid: boolean; + underpaid: boolean; + expired: boolean; + tx: { + commit: string; + fees: number; + inscription: string; + reveal: string; + }; + sent: string; +} + +class OrdinalsbotClient { + constructor(readonly baseUrl: string) {} + + async isAvailable() { + return axios.get<{ status: string }>(urlJoin(this.baseUrl, 'status')); + } + + async textInscription(text: string, receiveAddress: string) { + return axios.post(urlJoin(this.baseUrl, 'textorder'), { + receiveAddress, + texts: [text], + }); + } + + async orderStatus(id: string) { + return axios.get(urlJoin(this.baseUrl, 'order'), { + params: { id }, + }); + } +} + +function useOrdinalsbotApiUrl() { + const currentNetwork = useCurrentNetwork(); + const ordinalsbotConfig = useConfigOrdinalsbot(); + + if (currentNetwork.chain.bitcoin.network === 'mainnet') return ordinalsbotConfig.mainnetApiUrl; + return ordinalsbotConfig.signetApiUrl; +} + +// ts-unused-exports:disable-next-line +export function useOrdinalsbotClient() { + const apiUrl = useOrdinalsbotApiUrl(); + return new OrdinalsbotClient(apiUrl); +} + +// ts-unused-exports:disable-next-line +export function useBrc20FeatureFlag() { + const currentNetwork = useCurrentNetwork(); + + const ordinalsbotConfig = useConfigOrdinalsbot(); + + if (!ordinalsbotConfig.integrationEnabled) { + return { enabled: false, reason: 'BRC-20 transfers are temporarily disabled' } as const; + } + + const supportedNetwork = + currentNetwork.chain.bitcoin.network === 'mainnet' || + currentNetwork.chain.bitcoin.network === 'signet'; + + if (!supportedNetwork) return { enabled: false, reason: 'Unsupported network' } as const; + + // TODO: Add api availability check + + return { enabled: true } as const; +} diff --git a/src/app/query/common/hiro-config/hiro-config.query.ts b/src/app/query/common/remote-config/remote-config.query.ts similarity index 81% rename from src/app/query/common/hiro-config/hiro-config.query.ts rename to src/app/query/common/remote-config/remote-config.query.ts index 10375f22..10a7d7d9 100644 --- a/src/app/query/common/hiro-config/hiro-config.query.ts +++ b/src/app/query/common/remote-config/remote-config.query.ts @@ -45,13 +45,18 @@ interface FeeEstimationsConfig { minValuesEnabled?: boolean; } -interface HiroConfig { +interface RemoteConfig { messages: any; activeFiatProviders?: Record; bitcoinEnabled: boolean; bitcoinSendEnabled: boolean; feeEstimationsMinMax?: FeeEstimationsConfig; nftMetadataEnabled: boolean; + ordinalsbot: { + integrationEnabled: boolean; + mainnetApiUrl: string; + signetApiUrl: string; + }; } // TODO: BRANCH_NAME is not working here for config changes on PR branches @@ -61,12 +66,12 @@ const githubWalletConfigRawUrl = `https://raw.githubusercontent.com/${GITHUB_ORG BRANCH_NAME || defaultBranch }/config/wallet-config.json`; -async function fetchHiroMessages(): Promise { - if (!BRANCH_NAME && WALLET_ENVIRONMENT !== 'production') return localConfig as HiroConfig; +async function fetchHiroMessages(): Promise { + if (!BRANCH_NAME && WALLET_ENVIRONMENT !== 'production') return localConfig as RemoteConfig; return fetch(githubWalletConfigRawUrl).then(msg => msg.json()); } -function useRemoteHiroConfig() { +function useRemoteConfig() { const { data } = useQuery(['walletConfig'], fetchHiroMessages, { // As we're fetching from Github, a third-party, we want // to avoid any unnecessary stress on their services, so @@ -78,12 +83,12 @@ function useRemoteHiroConfig() { } export function useRemoteHiroMessages(): HiroMessage[] { - const config = useRemoteHiroConfig(); + const config = useRemoteConfig(); return get(config, 'messages.global', []); } export function useActiveFiatProviders() { - const config = useRemoteHiroConfig(); + const config = useRemoteConfig(); if (!config?.activeFiatProviders) return {} as Record; return Object.fromEntries( @@ -101,7 +106,7 @@ export function useHasFiatProviders() { export function useConfigBitcoinEnabled() { const { whenWallet } = useWalletType(); - const config = useRemoteHiroConfig(); + const config = useRemoteConfig(); return whenWallet({ ledger: false, software: config?.bitcoinEnabled ?? true, @@ -110,7 +115,7 @@ export function useConfigBitcoinEnabled() { export function useConfigBitcoinSendEnabled() { const { whenWallet } = useWalletType(); - const config = useRemoteHiroConfig(); + const config = useRemoteConfig(); return whenWallet({ ledger: false, software: config?.bitcoinSendEnabled ?? true, @@ -118,13 +123,13 @@ export function useConfigBitcoinSendEnabled() { } export function useConfigFeeEstimationsMaxEnabled() { - const config = useRemoteHiroConfig(); + const config = useRemoteConfig(); if (isUndefined(config) || isUndefined(config?.feeEstimationsMinMax)) return; return config.feeEstimationsMinMax.maxValuesEnabled; } export function useConfigFeeEstimationsMaxValues() { - const config = useRemoteHiroConfig(); + const config = useRemoteConfig(); if (typeof config?.feeEstimationsMinMax === 'undefined') return; if (!config.feeEstimationsMinMax.maxValues) return; if (!Array.isArray(config.feeEstimationsMinMax.maxValues)) return; @@ -132,13 +137,13 @@ export function useConfigFeeEstimationsMaxValues() { } export function useConfigFeeEstimationsMinEnabled() { - const config = useRemoteHiroConfig(); + const config = useRemoteConfig(); if (isUndefined(config) || isUndefined(config?.feeEstimationsMinMax)) return; return config.feeEstimationsMinMax.minValuesEnabled; } export function useConfigFeeEstimationsMinValues() { - const config = useRemoteHiroConfig(); + const config = useRemoteConfig(); if (typeof config?.feeEstimationsMinMax === 'undefined') return; if (!config.feeEstimationsMinMax.minValues) return; if (!Array.isArray(config.feeEstimationsMinMax.minValues)) return; @@ -146,6 +151,19 @@ export function useConfigFeeEstimationsMinValues() { } export function useConfigNftMetadataEnabled() { - const config = useRemoteHiroConfig(); + const config = useRemoteConfig(); return config?.nftMetadataEnabled ?? true; } + +export function useConfigOrdinalsbot() { + const config = useRemoteConfig(); + return { + integrationEnabled: get(config, 'ordinalsbot.integrationEnabled', true), + mainnetApiUrl: get( + config, + 'ordinalsbot.mainnetApiUrl', + 'https://ordinalsbot-api2.herokuapp.com' + ), + signetApiUrl: get(config, 'ordinalsbot.signetApiUrl', 'https://signet.ordinalsbot.com'), + }; +} diff --git a/src/app/query/stacks/fees/fees.hooks.ts b/src/app/query/stacks/fees/fees.hooks.ts index f6b50556..75478e0d 100644 --- a/src/app/query/stacks/fees/fees.hooks.ts +++ b/src/app/query/stacks/fees/fees.hooks.ts @@ -12,7 +12,7 @@ import { useConfigFeeEstimationsMaxValues, useConfigFeeEstimationsMinEnabled, useConfigFeeEstimationsMinValues, -} from '@app/query/common/hiro-config/hiro-config.query'; +} from '@app/query/common/remote-config/remote-config.query'; import { useGetStacksTransactionFeeEstimationQuery } from '@app/query/stacks/fees/fees.query'; import { diff --git a/yarn.lock b/yarn.lock index eb3ef4fb..80f974a6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7109,6 +7109,15 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== +axios@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" + integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + axios@^0.25.0: version "0.25.0" resolved "https://registry.yarnpkg.com/axios/-/axios-0.25.0.tgz#349cfbb31331a9b4453190791760a8d35b093e0a" @@ -10425,7 +10434,7 @@ fluent-syntax@0.13.0: resolved "https://registry.yarnpkg.com/fluent-syntax/-/fluent-syntax-0.13.0.tgz#417144d99cba94ff474c422b3e6623d5a842855a" integrity sha512-0Bk1AsliuYB550zr4JV9AYhsETsD3ELXUQzdXGJfIc1Ni/ukAfBdQInDhVMYJUaT2QxoamNslwkYF7MlOrPUwg== -follow-redirects@^1.0.0, follow-redirects@^1.14.7: +follow-redirects@^1.0.0, follow-redirects@^1.14.7, follow-redirects@^1.15.0: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== @@ -17199,6 +17208,11 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +url-join@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-5.0.0.tgz#c2f1e5cbd95fa91082a93b58a1f42fecb4bdbcf1" + integrity sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA== + url-parse@^1.5.3: version "1.5.10" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1"