diff --git a/embedded-wallets/connect-blockchain/evm/aleph-zero/react-native.mdx b/embedded-wallets/connect-blockchain/evm/aleph-zero/react-native.mdx index 21dd4e15c08..1d0c7e2abda 100644 --- a/embedded-wallets/connect-blockchain/evm/aleph-zero/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/aleph-zero/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Aleph Zero Blockchain in React import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsAlephZero from '../../_general-connect-blockchain/_aleph-zero.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Aleph Zero](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Aleph Zero](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Aleph Zero diff --git a/embedded-wallets/connect-blockchain/evm/ancient8/react-native.mdx b/embedded-wallets/connect-blockchain/evm/ancient8/react-native.mdx index f450e9a0357..e14ba254c9a 100644 --- a/embedded-wallets/connect-blockchain/evm/ancient8/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/ancient8/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Ancient8 Blockchain in React N import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsAncient8 from '../../_general-connect-blockchain/_ancient8.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Ancient8](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Ancient8](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Ancient8 diff --git a/embedded-wallets/connect-blockchain/evm/arbitrum/react-native.mdx b/embedded-wallets/connect-blockchain/evm/arbitrum/react-native.mdx index 5c2f49db27a..a6acebd7482 100644 --- a/embedded-wallets/connect-blockchain/evm/arbitrum/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/arbitrum/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Arbitrum Blockchain in React N import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsArbitrum from '../../_general-connect-blockchain/_arbitrum.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Arbitrum](https://arbitrum.io/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Arbitrum](https://arbitrum.io/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Arbitrum diff --git a/embedded-wallets/connect-blockchain/evm/astar-zkevm/react-native.mdx b/embedded-wallets/connect-blockchain/evm/astar-zkevm/react-native.mdx index 95dbfff3428..11fd3ce07bd 100644 --- a/embedded-wallets/connect-blockchain/evm/astar-zkevm/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/astar-zkevm/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Astar zkEVM Blockchain in Reac import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsAstarZkevm from '../../_general-connect-blockchain/_astar-zkevm.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Astar zkEVM](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started quickly. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Astar zkEVM](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started quickly. ## Chain details for Astar zkEVM diff --git a/embedded-wallets/connect-blockchain/evm/astar-zkyoto/react-native.mdx b/embedded-wallets/connect-blockchain/evm/astar-zkyoto/react-native.mdx index 5686a6cfe15..cc0c0fbd799 100644 --- a/embedded-wallets/connect-blockchain/evm/astar-zkyoto/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/astar-zkyoto/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Astar Zkyoto Blockchain in Rea import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsAstarZkyoto from '../../_general-connect-blockchain/_astar-zkyoto.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Astar Zkyoto](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Astar Zkyoto](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Astar Zkyoto diff --git a/embedded-wallets/connect-blockchain/evm/avalanche/react-native.mdx b/embedded-wallets/connect-blockchain/evm/avalanche/react-native.mdx index 5827e452fc1..df1189be7a5 100644 --- a/embedded-wallets/connect-blockchain/evm/avalanche/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/avalanche/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Avalanche Blockchain in React import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsAvalanche from '../../_general-connect-blockchain/_avalanche.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Avalanche](https://www.avax.network/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Avalanche](https://www.avax.network/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Avalanche diff --git a/embedded-wallets/connect-blockchain/evm/base/react-native.mdx b/embedded-wallets/connect-blockchain/evm/base/react-native.mdx index 7e81b18ce67..7d621ed73f9 100644 --- a/embedded-wallets/connect-blockchain/evm/base/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/base/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Base Blockchain in React Nativ import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsBase from '../../_general-connect-blockchain/_base.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Base](https://base.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Base](https://base.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Base diff --git a/embedded-wallets/connect-blockchain/evm/bitkub/react-native.mdx b/embedded-wallets/connect-blockchain/evm/bitkub/react-native.mdx index 69e67ad7634..ee975cad0b7 100644 --- a/embedded-wallets/connect-blockchain/evm/bitkub/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/bitkub/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Bitkub Blockchain in React Nat import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsBitkub from '../../_general-connect-blockchain/_bitkub.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Bitkub](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Bitkub](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Bitkub diff --git a/embedded-wallets/connect-blockchain/evm/bnb/react-native.mdx b/embedded-wallets/connect-blockchain/evm/bnb/react-native.mdx index fb1954400b4..9bcdb8db117 100644 --- a/embedded-wallets/connect-blockchain/evm/bnb/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/bnb/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the BNB Blockchain in React Native import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsBnb from '../../_general-connect-blockchain/_bnb.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [BNB](https://www.bnbchain.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [BNB](https://www.bnbchain.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for BNB diff --git a/embedded-wallets/connect-blockchain/evm/celo/react-native.mdx b/embedded-wallets/connect-blockchain/evm/celo/react-native.mdx index c47cff8ec61..c715b7d030f 100644 --- a/embedded-wallets/connect-blockchain/evm/celo/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/celo/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Celo Blockchain in React Nativ import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsCelo from '../../_general-connect-blockchain/_celo.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Celo](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Celo](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Celo diff --git a/embedded-wallets/connect-blockchain/evm/chiliz/react-native.mdx b/embedded-wallets/connect-blockchain/evm/chiliz/react-native.mdx index d8636aabd4b..f0d740208ec 100644 --- a/embedded-wallets/connect-blockchain/evm/chiliz/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/chiliz/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Chiliz Blockchain in React Nat import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsChiliz from '../../_general-connect-blockchain/_chiliz.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Chiliz](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Chiliz](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Chiliz diff --git a/embedded-wallets/connect-blockchain/evm/cronos/react-native.mdx b/embedded-wallets/connect-blockchain/evm/cronos/react-native.mdx index 56716e43d0f..aff7a8ab871 100644 --- a/embedded-wallets/connect-blockchain/evm/cronos/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/cronos/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Cronos Blockchain in React Nat import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsCronos from '../../_general-connect-blockchain/_cronos.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Cronos](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Cronos](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Cronos diff --git a/embedded-wallets/connect-blockchain/evm/ethereum/react-native.mdx b/embedded-wallets/connect-blockchain/evm/ethereum/react-native.mdx index 883e038d03e..08027b30ebe 100644 --- a/embedded-wallets/connect-blockchain/evm/ethereum/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/ethereum/react-native.mdx @@ -17,7 +17,7 @@ import Tabs from '@theme/Tabs' import TabItem from '@theme/TabItem' import ChainDetailsEthereum from '../../_general-connect-blockchain/_ethereum.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Ethereum](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Ethereum](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Ethereum diff --git a/embedded-wallets/connect-blockchain/evm/fhenix/react-native.mdx b/embedded-wallets/connect-blockchain/evm/fhenix/react-native.mdx index a06111989e7..b3dbeeee121 100644 --- a/embedded-wallets/connect-blockchain/evm/fhenix/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/fhenix/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Fhenix Blockchain in React Nat import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsFhenix from '../../_general-connect-blockchain/_fhenix.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Fhenix](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Fhenix](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Fhenix diff --git a/embedded-wallets/connect-blockchain/evm/flare/react-native.mdx b/embedded-wallets/connect-blockchain/evm/flare/react-native.mdx index e0d7b402ee8..a79510371ee 100644 --- a/embedded-wallets/connect-blockchain/evm/flare/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/flare/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Flare Blockchain in React Nati import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsFlare from '../../_general-connect-blockchain/_flare.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Flare](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Flare](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Flare diff --git a/embedded-wallets/connect-blockchain/evm/flow/react-native.mdx b/embedded-wallets/connect-blockchain/evm/flow/react-native.mdx index f94c57a4c7c..27ecaaa6bae 100644 --- a/embedded-wallets/connect-blockchain/evm/flow/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/flow/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Flow Blockchain in React Nativ import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsFlow from '../../_general-connect-blockchain/_flow.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Flow](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Flow](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Flow diff --git a/embedded-wallets/connect-blockchain/evm/harmony/react-native.mdx b/embedded-wallets/connect-blockchain/evm/harmony/react-native.mdx index 7c325735004..b8adf8b0368 100644 --- a/embedded-wallets/connect-blockchain/evm/harmony/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/harmony/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Harmony Blockchain in React Na import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsHarmony from '../../_general-connect-blockchain/_harmony.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Harmony](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Harmony](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Harmony diff --git a/embedded-wallets/connect-blockchain/evm/hedera/react-native.mdx b/embedded-wallets/connect-blockchain/evm/hedera/react-native.mdx index ae301ca2828..ac912ad8d3b 100644 --- a/embedded-wallets/connect-blockchain/evm/hedera/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/hedera/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Hedera Blockchain in React Nat import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsHedera from '../../_general-connect-blockchain/_hedera.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Hedera](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Hedera](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Hedera diff --git a/embedded-wallets/connect-blockchain/evm/kinto/react-native.mdx b/embedded-wallets/connect-blockchain/evm/kinto/react-native.mdx index 4dd61c9e834..660857c3e0f 100644 --- a/embedded-wallets/connect-blockchain/evm/kinto/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/kinto/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Kinto Blockchain in React Nati import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsKinto from '../../_general-connect-blockchain/_kinto.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Kinto](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Kinto](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Kinto diff --git a/embedded-wallets/connect-blockchain/evm/klaytn/react-native.mdx b/embedded-wallets/connect-blockchain/evm/klaytn/react-native.mdx index d2912243abb..af35593a392 100644 --- a/embedded-wallets/connect-blockchain/evm/klaytn/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/klaytn/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Klaytn Blockchain in React Nat import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsKlaytn from '../../_general-connect-blockchain/_klaytn.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Klaytn](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Klaytn](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Klaytn diff --git a/embedded-wallets/connect-blockchain/evm/linea/react-native.mdx b/embedded-wallets/connect-blockchain/evm/linea/react-native.mdx index 445ee0af33d..b5b6630e3be 100644 --- a/embedded-wallets/connect-blockchain/evm/linea/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/linea/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Linea Blockchain in React Nati import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsLinea from '../../_general-connect-blockchain/_linea.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Linea](https://linea.build/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Linea](https://linea.build/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Linea diff --git a/embedded-wallets/connect-blockchain/evm/manta/react-native.mdx b/embedded-wallets/connect-blockchain/evm/manta/react-native.mdx index d719be2b23e..0c9525b1051 100644 --- a/embedded-wallets/connect-blockchain/evm/manta/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/manta/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Manta Blockchain in React Nati import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsManta from '../../_general-connect-blockchain/_manta.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Manta](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Manta](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Manta diff --git a/embedded-wallets/connect-blockchain/evm/metis/react-native.mdx b/embedded-wallets/connect-blockchain/evm/metis/react-native.mdx index dba681fa5cb..018864e4022 100644 --- a/embedded-wallets/connect-blockchain/evm/metis/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/metis/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Metis Blockchain in React Nati import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsMetis from '../../_general-connect-blockchain/_metis.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Metis](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Metis](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Metis diff --git a/embedded-wallets/connect-blockchain/evm/mint/react-native.mdx b/embedded-wallets/connect-blockchain/evm/mint/react-native.mdx index 9089647d923..ec1b176c0bb 100644 --- a/embedded-wallets/connect-blockchain/evm/mint/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/mint/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Mint Blockchain in React Nativ import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsMint from '../../_general-connect-blockchain/_mint.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Mint](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Mint](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Mint diff --git a/embedded-wallets/connect-blockchain/evm/monad/react-native.mdx b/embedded-wallets/connect-blockchain/evm/monad/react-native.mdx index aa6cd16abd4..c4be146e607 100644 --- a/embedded-wallets/connect-blockchain/evm/monad/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/monad/react-native.mdx @@ -17,7 +17,7 @@ import Tabs from '@theme/Tabs' import TabItem from '@theme/TabItem' import ChainDetailsMonad from '../../_general-connect-blockchain/_monad.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Monad](https://monad.xyz/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started quickly on that. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Monad](https://monad.xyz/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started quickly on that. ## Chain details for Monad diff --git a/embedded-wallets/connect-blockchain/evm/moonbeam/react-native.mdx b/embedded-wallets/connect-blockchain/evm/moonbeam/react-native.mdx index aab39d0b1b2..e27f2debe97 100644 --- a/embedded-wallets/connect-blockchain/evm/moonbeam/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/moonbeam/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Moonbeam Blockchain in React N import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsMoonbeam from '../../_general-connect-blockchain/_moonbeam.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Moonbeam](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Moonbeam](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Moonbeam diff --git a/embedded-wallets/connect-blockchain/evm/moonriver/react-native.mdx b/embedded-wallets/connect-blockchain/evm/moonriver/react-native.mdx index 225d14a3125..fa60ba073c8 100644 --- a/embedded-wallets/connect-blockchain/evm/moonriver/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/moonriver/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Moonriver Blockchain in React import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsMoonriver from '../../_general-connect-blockchain/_moonriver.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Moonriver](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Moonriver](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Moonriver diff --git a/embedded-wallets/connect-blockchain/evm/morph/react-native.mdx b/embedded-wallets/connect-blockchain/evm/morph/react-native.mdx index 18e42d8c88f..3d8dbd4ff6b 100644 --- a/embedded-wallets/connect-blockchain/evm/morph/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/morph/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Morph Blockchain in React Nati import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsMorph from '../../_general-connect-blockchain/_morph.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Morph](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Morph](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Morph diff --git a/embedded-wallets/connect-blockchain/evm/neon/react-native.mdx b/embedded-wallets/connect-blockchain/evm/neon/react-native.mdx index fff7adc59a4..8f8e30f8e85 100644 --- a/embedded-wallets/connect-blockchain/evm/neon/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/neon/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Neon Blockchain in React Nativ import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsNeon from '../../_general-connect-blockchain/_neon.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Neon](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Neon](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Neon diff --git a/embedded-wallets/connect-blockchain/evm/nibiru/react-native.mdx b/embedded-wallets/connect-blockchain/evm/nibiru/react-native.mdx index 70783b97b54..9043fcfe3ce 100644 --- a/embedded-wallets/connect-blockchain/evm/nibiru/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/nibiru/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Nibiru Blockchain in React Nat import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsNibiru from '../../_general-connect-blockchain/_nibiru.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Nibiru](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Nibiru](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Nibiru diff --git a/embedded-wallets/connect-blockchain/evm/opbnb/react-native.mdx b/embedded-wallets/connect-blockchain/evm/opbnb/react-native.mdx index 7e7aa20ef30..9a36cf0f1cb 100644 --- a/embedded-wallets/connect-blockchain/evm/opbnb/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/opbnb/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the OpBNB Blockchain in React Nati import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsOpBnb from '../../_general-connect-blockchain/_opbnb.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [opBNB](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [opBNB](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for opBNB diff --git a/embedded-wallets/connect-blockchain/evm/optimism/react-native.mdx b/embedded-wallets/connect-blockchain/evm/optimism/react-native.mdx index c15c6f091d8..7c037419fb6 100644 --- a/embedded-wallets/connect-blockchain/evm/optimism/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/optimism/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Optimism Blockchain in React N import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsOptimism from '../../_general-connect-blockchain/_optimism.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Optimism](https://www.optimism.io/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Optimism](https://www.optimism.io/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Optimism diff --git a/embedded-wallets/connect-blockchain/evm/polygon/react-native.mdx b/embedded-wallets/connect-blockchain/evm/polygon/react-native.mdx index 4803d3f3c40..d3d44d61015 100644 --- a/embedded-wallets/connect-blockchain/evm/polygon/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/polygon/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Polygon Blockchain in React Na import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsPolygon from '../../_general-connect-blockchain/_polygon.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Polygon](https://polygon.technology/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Polygon](https://polygon.technology/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Polygon diff --git a/embedded-wallets/connect-blockchain/evm/rootstock/react-native.mdx b/embedded-wallets/connect-blockchain/evm/rootstock/react-native.mdx index 3d493e82685..1c9831e3373 100644 --- a/embedded-wallets/connect-blockchain/evm/rootstock/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/rootstock/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Rootstock Blockchain in React import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsRootstock from '../../_general-connect-blockchain/_rootstock.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Rootstock](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Rootstock](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Rootstock diff --git a/embedded-wallets/connect-blockchain/evm/saakuru/react-native.mdx b/embedded-wallets/connect-blockchain/evm/saakuru/react-native.mdx index b593d05f488..2228313e819 100644 --- a/embedded-wallets/connect-blockchain/evm/saakuru/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/saakuru/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Saakuru Blockchain in React Na import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsSaakuru from '../../_general-connect-blockchain/_saakuru.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Saakuru](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Saakuru](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Saakuru diff --git a/embedded-wallets/connect-blockchain/evm/shardeum/react-native.mdx b/embedded-wallets/connect-blockchain/evm/shardeum/react-native.mdx index c2dceade152..fdc8aebf175 100644 --- a/embedded-wallets/connect-blockchain/evm/shardeum/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/shardeum/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Shardeum Blockchain in React N import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsShardeum from '../../_general-connect-blockchain/_shardeum.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Shardeum](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Shardeum](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Shardeum diff --git a/embedded-wallets/connect-blockchain/evm/skale/react-native.mdx b/embedded-wallets/connect-blockchain/evm/skale/react-native.mdx index 740cf6ed4eb..19118be587b 100644 --- a/embedded-wallets/connect-blockchain/evm/skale/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/skale/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Skale Blockchain in React Nati import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsSkale from '../../_general-connect-blockchain/_skale.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Skale](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Skale](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Skale diff --git a/embedded-wallets/connect-blockchain/evm/soneium/react-native.mdx b/embedded-wallets/connect-blockchain/evm/soneium/react-native.mdx index ccbdd981d2f..084f21c72cd 100644 --- a/embedded-wallets/connect-blockchain/evm/soneium/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/soneium/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Soneium Blockchain in React Na import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsSoneium from '../../_general-connect-blockchain/_soneium.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Soneium](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Soneium](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Soneium diff --git a/embedded-wallets/connect-blockchain/evm/songbird/react-native.mdx b/embedded-wallets/connect-blockchain/evm/songbird/react-native.mdx index 65ef77f8121..43f1d48936f 100644 --- a/embedded-wallets/connect-blockchain/evm/songbird/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/songbird/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Songbird Blockchain in React N import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsSongbird from '../../_general-connect-blockchain/_songbird.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Songbird](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Songbird](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Songbird diff --git a/embedded-wallets/connect-blockchain/evm/unichain/react-native.mdx b/embedded-wallets/connect-blockchain/evm/unichain/react-native.mdx index 65b6699270c..2206c751753 100644 --- a/embedded-wallets/connect-blockchain/evm/unichain/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/unichain/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Unichain Blockchain in React N import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsUnichain from '../../_general-connect-blockchain/_unichain.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Unichain](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Unichain](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Unichain diff --git a/embedded-wallets/connect-blockchain/evm/xdc/react-native.mdx b/embedded-wallets/connect-blockchain/evm/xdc/react-native.mdx index ccb43d4016d..26a948e2f3c 100644 --- a/embedded-wallets/connect-blockchain/evm/xdc/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/xdc/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the XDC Blockchain in React Native import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsXdc from '../../_general-connect-blockchain/_xdc.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [XDC](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [XDC](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for XDC diff --git a/embedded-wallets/connect-blockchain/evm/zetachain/react-native.mdx b/embedded-wallets/connect-blockchain/evm/zetachain/react-native.mdx index 573556c8b26..21ad01e70f4 100644 --- a/embedded-wallets/connect-blockchain/evm/zetachain/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/zetachain/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Zetachain Blockchain in React import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsZetachain from '../../_general-connect-blockchain/_zetachain.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Zetachain](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Zetachain](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Zetachain diff --git a/embedded-wallets/connect-blockchain/evm/zilliqa/react-native.mdx b/embedded-wallets/connect-blockchain/evm/zilliqa/react-native.mdx index 688d2ca3217..45a9071fa87 100644 --- a/embedded-wallets/connect-blockchain/evm/zilliqa/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/zilliqa/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Zilliqa Blockchain in React Na import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsZilliqa from '../../_general-connect-blockchain/_zilliqa.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Zilliqa](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Zilliqa](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Zilliqa diff --git a/embedded-wallets/connect-blockchain/evm/zircuit/react-native.mdx b/embedded-wallets/connect-blockchain/evm/zircuit/react-native.mdx index 5c2b55aea3e..e63c1ec2c5a 100644 --- a/embedded-wallets/connect-blockchain/evm/zircuit/react-native.mdx +++ b/embedded-wallets/connect-blockchain/evm/zircuit/react-native.mdx @@ -10,7 +10,7 @@ description: 'Integrate Embedded Wallets with the Zircuit Blockchain in React Na import EVMInteraction from '../../_react-native-connect-blockchain/_evm-interaction.mdx' import ChainDetailsZircuit from '../../_general-connect-blockchain/_zircuit.mdx' -While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Zircuit](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. +While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Zircuit](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started. ## Chain details for Zircuit diff --git a/embedded-wallets/sdk/js/ethereum-integration.mdx b/embedded-wallets/sdk/js/ethereum-integration.mdx index d71953dc27f..8b388629787 100644 --- a/embedded-wallets/sdk/js/ethereum-integration.mdx +++ b/embedded-wallets/sdk/js/ethereum-integration.mdx @@ -6,7 +6,7 @@ description: '@web3auth/modal Ethereum integration with Web3Auth JS SDK | Embedd import EthereumIntegration from './_ethereum-integration-snippets.mdx' -While using the Embedded Wallets Web SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [Metamask provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries (like [`ethers.js`](https://docs.ethers.io/v5/getting-started/), [`viem`](https://viem.sh/)) to make [Ethereum](https://ethereum.org) calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract. We have highlighted a few examples to get you started. +While using the Embedded Wallets Web SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [Metamask provider](/metamask-connect/evm/reference/provider-api/). This provider can be used with libraries (like [`ethers.js`](https://docs.ethers.io/v5/getting-started/), [`viem`](https://viem.sh/)) to make [Ethereum](https://ethereum.org) calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract. We have highlighted a few examples to get you started. ## Integration diff --git a/middleware.ts b/middleware.ts index 1cec3ea4a52..b7b852fa4e3 100644 --- a/middleware.ts +++ b/middleware.ts @@ -29,7 +29,13 @@ export default function middleware(request: Request) { let pathname = url.pathname if (pathname.endsWith('/')) pathname = pathname.slice(0, -1) - if (!pathname) return next() + if (!pathname) { + // The homepage has no `.md` sibling (the root index.html is skipped by the + // llms-html-injector by design), so route agents to the documentation + // index, which is already served as text/markdown. + url.pathname = '/llms.txt' + return rewrite(url) + } url.pathname = `${pathname}.md` return rewrite(url) diff --git a/package-lock.json b/package-lock.json index 8155c5407d3..9edfe5f7718 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,6 +35,7 @@ "@sentry/browser": "^10.22.0", "@types/react": "^18.3.3", "@vercel/edge": "^1.3.1", + "cheerio": "1.0.0-rc.12", "classnames": "^2.5.1", "clsx": "^2.1.1", "copy-to-clipboard": "^3.3.3", @@ -49,6 +50,7 @@ "lodash.camelcase": "^4.3.0", "lodash.debounce": "^4.0.8", "lodash.isplainobject": "^4.0.6", + "node-html-markdown": "^2.0.0", "node-polyfill-webpack-plugin": "^2.0.1", "prettier": "^3.6.2", "prism-react-renderer": "^2.4.1", @@ -25975,6 +25977,28 @@ "node-gyp-build-test": "build-test.js" } }, + "node_modules/node-html-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-html-markdown/-/node-html-markdown-2.0.0.tgz", + "integrity": "sha512-DqUC3GGP7pwSYxS93SwHoP+qCw78xcMP6C6H2DuC8rPD2AweJRjBzQb5SdXpKtDlqAQ7hVotJcfhgU7hU5Gthw==", + "license": "MIT", + "dependencies": { + "node-html-parser": "^6.1.13" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/node-html-parser": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.13.tgz", + "integrity": "sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==", + "license": "MIT", + "dependencies": { + "css-select": "^5.1.0", + "he": "1.2.0" + } + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", diff --git a/package.json b/package.json index 2da81f74dd6..e1f941fb3a0 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "@sentry/browser": "^10.22.0", "@types/react": "^18.3.3", "@vercel/edge": "^1.3.1", + "cheerio": "1.0.0-rc.12", "classnames": "^2.5.1", "clsx": "^2.1.1", "copy-to-clipboard": "^3.3.3", @@ -71,6 +72,7 @@ "lodash.camelcase": "^4.3.0", "lodash.debounce": "^4.0.8", "lodash.isplainobject": "^4.0.6", + "node-html-markdown": "^2.0.0", "node-polyfill-webpack-plugin": "^2.0.1", "prettier": "^3.6.2", "prism-react-renderer": "^2.4.1", diff --git a/src/plugins/llms-html-injector/index.js b/src/plugins/llms-html-injector/index.js index ad8eebf631e..5cbfdbd73a3 100644 --- a/src/plugins/llms-html-injector/index.js +++ b/src/plugins/llms-html-injector/index.js @@ -1,7 +1,41 @@ const path = require('path') const fs = require('fs/promises') -const MARKER = 'data-llms-md-alt' +// Sentinel attributes / strings used to make HTML and markdown post-processing +// idempotent across re-runs (e.g. when scripts/verify-llms-output.js is invoked +// against an already-processed outDir). +const MD_ALT_MARKER = 'data-llms-md-alt' +const BODY_DIRECTIVE_MARKER = 'data-llms-directive' +const MD_DIRECTIVE_LINE = '> For the complete documentation index, see [llms.txt](/llms.txt).' + +// Matches the opening tag of every `` (KaTeX +// always emits this exact class with no additional classes on the wrapper +// itself; the mathml subtree is the off-screen MathML rendering used by +// screen readers). The `[^>]*` allow for any other attributes (rare but +// possible if upstream rehype plugins add them). The capture group is +// reused to splice the marker into the same position in the tag. +const KATEX_MATHML_OPEN_TAG_RE = + /"']|"[^"]*"|'[^']*')*?\bclass="katex-mathml"(?:[^>"']|"[^"]*"|'[^']*')*?)>/g + +// Visible-but-screen-reader-only directive injected at the top of every +// `` in the build. AFDocs scans `` (excluding nav/script/style) +// for a mention of `llms.txt`, so this satisfies `llms-txt-directive-html`. +// `.sr-only` is defined in src/scss/commons/_utils.scss and loaded site-wide +// via src/scss/custom.scss, so no styling work is needed at the page level. +function buildBodyDirective(siteUrl) { + // The href is intentionally site-relative (`/llms.txt`) so it works on the + // production host and any preview/staging deployment alike. The siteUrl + // argument is accepted for symmetry with the head-link injector and to + // allow a future absolute variant without touching call sites. + void siteUrl + return ( + `
` + + 'For AI agents: a documentation index is available at ' + + '/llms.txt. A markdown version of this page is ' + + 'available at the same URL with .md appended (or via Accept: text/markdown).' + + `
` + ) +} /** * Build the URL prefix the upstream `docusaurus-plugin-llms` uses when it @@ -24,10 +58,78 @@ function resolveSiteUrl(siteConfig) { return `${url}${base}` } +/** + * Vercel sets several deployment URL env vars on every build: + * + * - `VERCEL_URL` — the deployment-specific host + * (e.g. `metamask-docs-f8nytczy3-consensys.vercel.app`). Changes on + * every deploy. + * - `VERCEL_BRANCH_URL` — the stable branch alias + * (e.g. `metamask-docs-git-my-branch-consensys.vercel.app`). Same URL + * across rebuilds of the same branch — this is the URL collaborators + * and CI tools normally test against. + * - `VERCEL_ENV` — `production`, `preview`, or `development`. + * + * On preview/development deployments we want the curated `static/llms.txt`, + * the generated `llms-*.txt` index files, and the per-page `.md` link + * bodies to point at the same host AFDocs is being pointed at — otherwise + * AFDocs sees the absolute URLs as cross-origin and silently degrades + * checks like `llms-txt-links-markdown` and `llms-txt-coverage` to + * "skipped: all links external". + * + * `VERCEL_BRANCH_URL` is preferred because it matches the URL most reviewers + * paste into `npx afdocs check`. `VERCEL_URL` is the fallback when the + * branch URL isn't available (e.g. on `vercel dev`, where only the + * deployment-specific URL is set). Returns null on production deployments + * and outside Vercel so the canonical `siteConfig.url` is preserved. + */ +function resolvePreviewSiteUrl() { + const env = process.env.VERCEL_ENV + const host = process.env.VERCEL_BRANCH_URL || process.env.VERCEL_URL + if (!host) return null + // VERCEL_ENV is "preview" for branch deploys (PRs, branch URLs) and + // "development" when running `vercel dev`. Both should rewrite to the + // ephemeral host. "production" deploys keep the canonical URL. + if (env !== 'preview' && env !== 'development') return null + return `https://${host}` +} + // Source path prefixes that Docusaurus strips when constructing public URLs. // Mirrors `pathTransformation.ignorePaths` we pass to `docusaurus-plugin-llms`. const URL_STRIPPED_PREFIXES = ['src/pages/'] +// Path prefix → all-pages bucket filename. Generated files live alongside the +// existing per-product `llms-.txt` files in the build root and are +// referenced from `static/llms.txt` so the AFDocs walker descends one level +// into them and discovers every sitemap URL (fixes `llms-txt-coverage`). +const ALL_PAGES_BUCKETS = [ + { + prefix: '/metamask-connect/', + filename: 'llms-all-metamask-connect.txt', + title: 'All MetaMask Connect pages', + }, + { + prefix: '/embedded-wallets/', + filename: 'llms-all-embedded-wallets.txt', + title: 'All Embedded Wallets pages', + }, + { + prefix: '/smart-accounts-kit/', + filename: 'llms-all-smart-accounts-kit.txt', + title: 'All Smart Accounts Kit pages', + }, + { prefix: '/services/', filename: 'llms-all-services.txt', title: 'All Services pages' }, + { prefix: '/snaps/', filename: 'llms-all-snaps.txt', title: 'All Snaps pages' }, + { + prefix: '/developer-tools/', + filename: 'llms-all-dashboard.txt', + title: 'All Developer dashboard pages', + }, + { prefix: '/tutorials/', filename: 'llms-all-tutorials.txt', title: 'All Tutorials pages' }, +] +const ALL_PAGES_MISC_FILENAME = 'llms-all-misc.txt' +const ALL_PAGES_MISC_TITLE = 'All other documentation pages' + // docusaurus-plugin-llms is wrapped (rather than registered separately) because // Docusaurus 3.x runs `postBuild` hooks concurrently via `Promise.all`. As two // independent plugins, the injector below would race against the generator and @@ -38,26 +140,41 @@ const upstreamLlmsPlugin = require('docusaurus-plugin-llms').default /** * Docusaurus plugin that: * - * 1. Delegates LLM-friendly file generation to `docusaurus-plugin-llms` - * (per-section `llms-.txt` indexes plus per-page `.md` files when - * `generateMarkdownFiles: true`). + * 1. Delegates per-section `llms-.txt` and per-page `.md` generation + * to `docusaurus-plugin-llms` (the upstream walks raw source MDX). + * + * 2. Normalizes the per-page `.md` files so their location mirrors the public + * URL of the corresponding HTML page (e.g. `embedded-wallets/README.md` -> + * `embedded-wallets.md`, `src/pages/tutorials/foo.md` -> `tutorials/foo.md`). + * + * 3. Replaces every per-page `.md` body with markdown derived from the + * rendered HTML `
` (node-html-markdown). This is the only way + * to get true HTML/`.md` parity for pages assembled from MDX `import` + * partials, which the upstream plugin cannot resolve. Fixes + * `markdown-content-parity`. + * + * 4. Prepends a `> For the complete documentation index, see [llms.txt](/llms.txt).` + * blockquote to every per-page `.md`. Fixes `llms-txt-directive-md`. + * + * 5. Rewrites every `build/llms*.txt` URL so it points at the normalized + * `.md` location, eliminating stale "links not in sitemap" warnings. * - * 2. Normalizes the generated per-page `.md` files so their location mirrors - * the public URL of the corresponding HTML page (e.g. - * `embedded-wallets/README.md` -> `embedded-wallets.md`, - * `src/pages/tutorials/foo.md` -> `tutorials/foo.md`). This makes Fern's - * `markdown-url-support` check pass because `.md` now returns 200. + * 6. Prunes link-index `llms-*.txt` files of any link whose target URL is + * absent from the build's sitemap (defensive — only operates on + * non-`-full` link indexes to avoid corrupting embedded content). * - * 3. Rewrites every `build/llms*.txt` URL so it points at the normalized file - * location instead of the original source path. This eliminates stale - * "links not in sitemap" warnings. + * 7. Generates `llms-all-.txt` files from the build's sitemap so + * `llms-txt-coverage` reaches 100% deterministically. The static root + * `llms.txt` links to these files; the AFDocs walker descends one level + * and picks up every sitemap URL. * - * 4. Injects `` - * into the `` of every doc page that now has a sibling `.md`, - * satisfying `Llms Txt Directive Html` / `Llms Txt Directive Md`. + * 8. Injects `` into `` and + * a hidden `
` directive at the top of `` of every doc page, + * satisfying `llms-txt-directive-html` and the existing markdown-alt + * discovery hook for HTML clients. * - * The combination satisfies all five failing Agent Score checks together with - * the Vercel `Accept: text/markdown` rewrite in `vercel.json`. + * Together these steps satisfy every Agent Score check in the + * content-discoverability and observability categories. */ async function postProcessLlmsOutput(outDir, siteUrl) { if (!siteUrl) { @@ -74,31 +191,87 @@ async function postProcessLlmsOutput(outDir, siteUrl) { `[llms-html-injector] Normalized ${renames.size} .md file(s) into URL-aligned positions` ) + const regen = await regenerateMdFromHtml(outDir) + console.log( + `[llms-html-injector] Regenerated ${regen.regenerated} per-page .md from rendered HTML, ` + + `created ${regen.created} new .md for pages without an upstream-emitted sibling ` + + `(skipped ${regen.skipped}: unreadable HTML or empty
)` + ) + + const directiveCount = await prependMdDirective(outDir) + console.log(`[llms-html-injector] Prepended llms.txt directive to ${directiveCount} .md file(s)`) + const rewriteCount = await rewriteLlmsIndexes(outDir, renames, siteUrl) console.log(`[llms-html-injector] Updated URLs in ${rewriteCount} llms*.txt file(s)`) - const { injected, missing, skippedRoot } = await injectAlternateLinks(outDir, siteUrl) + const sitemapUrls = await readSitemapUrls(outDir) + if (sitemapUrls) { + const stale = await pruneStaleLlmsLinks(outDir, sitemapUrls, siteUrl) + console.log( + `[llms-html-injector] Pruned ${stale.removed} stale link(s) from ${stale.fileCount} link-index file(s)` + ) + + const all = await generateAllPagesIndex(outDir, siteUrl, sitemapUrls) + console.log( + `[llms-html-injector] Generated ${all.fileCount} llms-all-*.txt index file(s) covering ${all.urlCount} sitemap URL(s)` + ) + } else { + console.warn( + '[llms-html-injector] No sitemap.xml found in outDir; skipping pruneStaleLlmsLinks and generateAllPagesIndex.' + ) + } + + const { injected, missing, skippedRoot, bodyInjected, katexMarked, canonicalFixed } = + await injectAlternateLinks(outDir, siteUrl) console.log( `[llms-html-injector] Injected markdown alternate link into ${injected} HTML pages ` + `(skipped ${missing} pages with no matching .md sibling, ` + `${skippedRoot} root index.html page(s) by design)` ) + console.log( + `[llms-html-injector] Injected sr-only llms.txt body directive into ${bodyInjected} HTML pages` + ) + console.log( + `[llms-html-injector] Marked ${katexMarked} KaTeX MathML span(s) as data-markdown-ignore` + ) + console.log( + `[llms-html-injector] Stripped trailing slash from canonical/og:url on ${canonicalFixed} dotted-route page(s)` + ) + + const sitemap = await normalizeSitemap(outDir, siteUrl) + if (sitemap.skipped) { + console.warn( + '[llms-html-injector] No sitemap.xml found in outDir; skipping sitemap normalization.' + ) + } else { + console.log( + `[llms-html-injector] Sitemap: stripped trailing slash from ${sitemap.rewritten} dotted-segment (s) ` + + `and dropped ${sitemap.dropped} URL(s) shadowed by a vercel.json redirect` + ) + } + + // On Vercel preview/development deployments, rewrite every absolute URL in + // generated llms*.txt files and per-page .md files from the canonical + // production host to the preview's auto-assigned host. The HTML alternate + // link injected above already uses a path-only href, so HTML files don't + // need this pass — only text artifacts that the llmstxt.org spec requires + // to carry absolute URLs. + const previewSiteUrl = resolvePreviewSiteUrl() + if (previewSiteUrl && previewSiteUrl !== siteUrl) { + const rewriteStats = await rewriteHostInBuildArtifacts(outDir, siteUrl, previewSiteUrl) + const hostSource = process.env.VERCEL_BRANCH_URL ? 'VERCEL_BRANCH_URL' : 'VERCEL_URL' + console.log( + `[llms-html-injector] Vercel preview detected (${hostSource}=${process.env.VERCEL_BRANCH_URL || process.env.VERCEL_URL}); ` + + `rewrote ${siteUrl} -> ${previewSiteUrl} in ${rewriteStats.txtFiles} llms*.txt file(s) ` + + `and ${rewriteStats.mdFiles} per-page .md file(s)` + ) + } } module.exports = function llmsHtmlInjectorPlugin(context, options = {}) { const inner = upstreamLlmsPlugin(context, options) - // Resolve once at plugin construction. `context.siteConfig` is populated by - // Docusaurus before any plugin factory runs, and `baseUrl` cannot change - // between then and `postBuild`, so we don't need to recompute per build. const siteUrl = resolveSiteUrl(context && context.siteConfig) - // Spread the inner plugin object so any lifecycle hook the upstream package - // already exposes (or adds in a future release) — e.g. `contentLoaded`, - // `loadContent`, `configureWebpack`, `getPathsToWatch`, `getThemePath`, - // `extendCli` — is forwarded to Docusaurus untouched. Only `name` and - // `postBuild` are overridden: `name` to identify this wrapper in build - // output, and `postBuild` to chain the generator's hook before our - // post-processing step (see the wrapper rationale at the top of this file). return { ...inner, name: 'llms-html-injector', @@ -112,9 +285,7 @@ module.exports = function llmsHtmlInjectorPlugin(context, options = {}) { } // Exported for scripts/verify-llms-output.js, which invokes the generator -// directly and then runs only the post-processing stage. The verify script -// passes its own siteUrl (and uses `resolveSiteUrl` to mirror the production -// computation when a non-root baseUrl is in play). +// directly and then runs only the post-processing stage. module.exports.postProcessLlmsOutput = postProcessLlmsOutput module.exports.resolveSiteUrl = resolveSiteUrl @@ -136,12 +307,6 @@ async function normalizeMarkdownLayout(outDir) { const absTo = path.join(outDir, relTo) - // `fs.access` is used purely as an existence probe: a throw means "target - // is absent, proceed to rename", which is expected control flow. Errors - // from the subsequent `fs.unlink` are real I/O failures (file locked, - // permission denied, etc.) and must propagate rather than silently fall - // through to `fs.rename`, which would overwrite the existing target and - // contradict the "target exists -> drop the duplicate source" intent. let targetExists = true try { await fs.access(absTo) @@ -150,11 +315,6 @@ async function normalizeMarkdownLayout(outDir) { } if (targetExists) { - // Two source files normalize to the same URL-aligned target (e.g. - // `foo/README.md` and `foo/index.md` both -> `foo.md`). Whichever - // `collectMarkdownFiles` emits first wins; this loser is dropped. - // Today no source tree triggers this, but logging makes the silent - // delete loud if a future restructure ever does. console.warn( `[llms-html-injector] Target ${relTo} already exists; dropping duplicate source ${relFrom}` ) @@ -174,11 +334,6 @@ async function normalizeMarkdownLayout(outDir) { return renames } -/** - * Remove now-empty directories that previously held source-path markdown - * files. Walks upward from each pruned location until a non-empty ancestor - * is reached or we exit `outDir`. - */ async function pruneEmptyDirs(outDir, dirs) { const root = path.resolve(outDir) for (const start of dirs) { @@ -218,12 +373,6 @@ async function collectMarkdownFiles(outDir, acc = []) { return acc } -/** - * Map a source-path-style markdown filename to its URL-aligned location: - * - Strip a leading `docs/` or `src/pages/` (Docusaurus URL transformation). - * - Replace trailing `/README.md` or `/index.md` with `.md` of the parent dir. - * - A bare `README.md` or `index.md` at the build root maps to nothing (homepage). - */ function urlAlignedRelative(relFrom) { let p = relFrom for (const prefix of URL_STRIPPED_PREFIXES) { @@ -237,11 +386,6 @@ function urlAlignedRelative(relFrom) { return p } -/** - * Rewrite every llms*.txt index so URLs that referenced an old source-path - * markdown file now point at the URL-aligned location. Returns the number of - * files rewritten. - */ async function rewriteLlmsIndexes(outDir, renames, siteUrl) { if (renames.size === 0) return 0 const entries = await fs.readdir(outDir, { withFileTypes: true }) @@ -271,14 +415,29 @@ async function rewriteLlmsIndexes(outDir, renames, siteUrl) { /** * Walk `build/**\/index.html`, and for each page that has a sibling `.md` at * the URL-aligned location, inject a `` - * into the ``. + * into the ``. Independently, inject a hidden `
` directive into the + * `` of every page so HTML-only agents can discover `/llms.txt`. + * + * Also marks every `` with `data-markdown-ignore`. + * KaTeX renders each math expression three times in the DOM (`mrow` text + + * `` LaTeX source + the visual `.katex-html`), which AFDocs' + * `markdown-content-parity` HTML extractor concatenates into segments like + * `retrievePubKey()retrievePubKey()retrievePubKey()` that can never match + * the single `$retrievePubKey()$` in the regenerated `.md`. Marking the + * MathML subtree as `data-markdown-ignore` makes AFDocs strip it before + * extracting text, leaving only the visual rendering — invisible to the + * markdown side via `htmlToMarkdown`'s own `.katex` replacement, but + * structurally aligned with what the parity check measures. */ async function injectAlternateLinks(outDir, siteUrl) { let injected = 0 let missing = 0 let skippedRoot = 0 + let bodyInjected = 0 + let katexMarked = 0 + let canonicalFixed = 0 await visit(outDir) - return { injected, missing, skippedRoot } + return { injected, missing, skippedRoot, bodyInjected, katexMarked, canonicalFixed } async function visit(dir) { const entries = await fs.readdir(dir, { withFileTypes: true }) @@ -287,44 +446,817 @@ async function injectAlternateLinks(outDir, siteUrl) { if (entry.isDirectory()) { await visit(full) } else if (entry.name === 'index.html') { - const ok = await injectOne(full) - if (ok === true) injected++ - else if (ok === false) missing++ - else if (ok === 'root') skippedRoot++ + const result = await injectOne(full) + if (result.altLink === true) injected++ + else if (result.altLink === false) missing++ + else if (result.altLink === 'root') skippedRoot++ + if (result.bodyDirective) bodyInjected++ + if (result.canonicalFixed) canonicalFixed++ + katexMarked += result.katexMarked } } } - // The site root (`build/index.html`) is rendered from a React component - // (`src/pages/index.tsx`) and intentionally has no `.md` sibling — the - // root LLMS surface is the hand-curated `static/llms.txt`. Return the - // sentinel `'root'` instead of `null` so the caller can count this - // skip explicitly rather than letting it vanish; if a future change - // ever causes a non-homepage page to land at `relDir === '.'`, the - // bump in `skippedRoot` will make it visible. async function injectOne(htmlAbs) { const relDir = toPosix(path.relative(outDir, path.dirname(htmlAbs))) - if (!relDir || relDir === '.') return 'root' - const mdRel = `${relDir}.md` - const mdAbs = path.join(outDir, mdRel) + let html try { - await fs.access(mdAbs) + html = await fs.readFile(htmlAbs, 'utf8') } catch { - return false + return { altLink: false, bodyDirective: false, katexMarked: 0 } + } + + let changed = false + let altLinkResult + + if (!relDir || relDir === '.') { + altLinkResult = 'root' + } else { + const mdRel = `${relDir}.md` + const mdAbs = path.join(outDir, mdRel) + let mdExists = true + try { + await fs.access(mdAbs) + } catch { + mdExists = false + } + if (!mdExists) { + altLinkResult = false + } else if (html.includes(MD_ALT_MARKER) || !html.includes('')) { + altLinkResult = null + } else { + // Use a path-only href (`/foo/bar.md`) rather than an absolute URL. + // Browsers and AFDocs both resolve relative hrefs against the page's + // origin, so the same HTML works correctly on production + // (docs.metamask.io), Vercel preview deployments + // (`*.vercel.app`), and `localhost` without any host-rewrite step + // touching HTML files. The `siteUrl` parameter is retained for + // signature compatibility but no longer baked into the href. + void siteUrl + const href = `/${mdRel}` + const tag = `` + html = html.replace('', `${tag}`) + altLinkResult = true + changed = true + } + } + + let bodyDirectiveAdded = false + if (!html.includes(BODY_DIRECTIVE_MARKER)) { + const directive = buildBodyDirective(siteUrl) + // Insert just after the opening tag so the directive is at the + // very top of the document body, well before navigation/header markup. + // Use a regex on the first tag rather than a naive string + // replace to handle attributes/whitespace variations. + const bodyTagMatch = html.match(/]*>/i) + if (bodyTagMatch) { + const insertAt = bodyTagMatch.index + bodyTagMatch[0].length + html = html.slice(0, insertAt) + directive + html.slice(insertAt) + bodyDirectiveAdded = true + changed = true + } + } + + // Mark every KaTeX MathML wrapper with data-markdown-ignore. The marker + // is idempotent: we skip any opening tag that already carries the + // attribute (which a previous run may have added) so re-invoking the + // postBuild stage against an already-processed outDir does not append + // duplicate attributes. + let katexMarkedHere = 0 + html = html.replace(KATEX_MATHML_OPEN_TAG_RE, (match, attrs) => { + if (/\bdata-markdown-ignore\b/.test(attrs)) return match + katexMarkedHere++ + return `` + }) + if (katexMarkedHere > 0) changed = true + + // Normalize trailing slashes in canonical/og:url metadata for "dotted" + // routes. Docusaurus (`trailingSlash: true`) always emits a trailing-slash + // canonical, but Vercel (`trailingSlash: true`) treats any final path + // segment containing a dot (e.g. `use-web3.js`, version `1.0.0`, + // `android-v7.1.1-to-v7.1.2`) as a file and 308-strips the slash. That + // makes the canonical point to a redirect. Stripping the slash here aligns + // the canonical/og:url with the URL Vercel actually serves with a 200. + let canonicalFixedHere = false + if (relDir && relDir !== '.' && lastSegmentHasDot(relDir)) { + const beforeCanonical = html + html = stripDottedTrailingSlashInMetadata(html) + if (html !== beforeCanonical) { + canonicalFixedHere = true + changed = true + } + } + + if (changed) { + await fs.writeFile(htmlAbs, html, 'utf8') + } + + return { + altLink: altLinkResult, + bodyDirective: bodyDirectiveAdded, + katexMarked: katexMarkedHere, + canonicalFixed: canonicalFixedHere, } + } +} + +/** + * Return true when the final non-empty segment of a route/path contains a dot. + * These are the routes Vercel treats as files and serves without a trailing + * slash (308-stripping any trailing-slash variant). + */ +function lastSegmentHasDot(routePath) { + const segments = routePath.split('/').filter(Boolean) + const last = segments[segments.length - 1] || '' + return last.includes('.') +} + +/** + * Strip the trailing slash from the `` href and the + * `og:url` content in a page's HTML. Only called for dotted routes, where the + * emitted absolute URL is guaranteed to be this page's own trailing-slash URL. + */ +function stripDottedTrailingSlashInMetadata(html) { + // + html = html.replace(/(]*\brel="canonical"[^>]*\bhref=")([^"]+?)\/("[^>]*>)/i, '$1$2$3') + // (property first) + html = html.replace( + /(]*\bproperty="og:url"[^>]*\bcontent=")([^"]+?)\/("[^>]*>)/i, + '$1$2$3' + ) + // (content first) + html = html.replace( + /(]*\bcontent=")([^"]+?)\/("[^>]*\bproperty="og:url"[^>]*>)/i, + '$1$2$3' + ) + return html +} + +/** + * Generate (or regenerate) every per-page `.md` from its rendered HTML + * `
`. This achieves true HTML/MD parity AND fills coverage gaps: + * + * - The upstream `docusaurus-plugin-llms` reads raw source MDX and + * cannot resolve `import` partials, leaving pages built from imported + * components nearly empty in the upstream `.md` (e.g. + * `services/reference/.../eth_sendrawtransaction`). Regenerating from + * the rendered HTML resolves every partial and component. + * + * - Some pages exist in the build with NO upstream-emitted `.md` at all + * (e.g. Docusaurus-versioned docs: gator's `current` version publishes + * under `/smart-accounts-kit/development/...` while the upstream only + * emits a single `.md` per source file at the version-less path). The + * ghost URLs fail AFDocs' `markdown-url-support`, `content-negotiation`, + * and `llms-txt-directive-md` checks. Walking `build/**\/index.html` + * and creating a `.md` sibling for any page that lacks one closes + * that gap deterministically. + * + * Algorithm: + * 1. Walk every `build/**\/index.html` (skipping the root index.html, + * which has no meaningful `.md` companion). + * 2. Compute the URL-aligned `.md` path (`.md`). + * 3. Read the HTML, parse with cheerio, select `
`, strip + * `data-markdown-ignore` plus nav/script/style/aside. + * 4. Convert the remaining HTML to markdown via node-html-markdown + * (GFM-aware: tables, strikethrough, line breaks). + * 5. Write the `.md`, creating the directory if needed. + * + * Frontmatter is intentionally not preserved: the upstream-generated `.md` + * frontmatter mirrors the source MDX frontmatter, but the rendered HTML + * already inlines the resolved title/description/etc. into the article body + * via Docusaurus components, so the new `.md` is self-contained. + */ +async function regenerateMdFromHtml(outDir) { + const mdConverter = makeMarkdownConverter() + const cheerio = require('cheerio') + + let regenerated = 0 + let created = 0 + let skipped = 0 + + await visit(outDir) + return { regenerated, created, skipped } + + // Sequential is fine: ~2.5k pages * ~10ms parse + convert is well under a + // minute. Parallelism would add complexity without measurable benefit at + // this scale and risk hitting the open-file-descriptor limit. + async function visit(dir) { + const entries = await fs.readdir(dir, { withFileTypes: true }) + for (const entry of entries) { + const full = path.join(dir, entry.name) + if (entry.isDirectory()) { + await visit(full) + } else if (entry.name === 'index.html') { + await processOne(full, dir) + } + } + } + + async function processOne(htmlAbs, dir) { + const relDir = toPosix(path.relative(outDir, dir)) + // Skip the site root: `/index.html` would map to a top-level + // `.md` that has no canonical URL counterpart in the markdown space. + if (!relDir || relDir === '.') return + let html try { html = await fs.readFile(htmlAbs, 'utf8') } catch { - return false + skipped++ + return } - if (html.includes(MARKER) || !html.includes('')) return null - const href = `${siteUrl}/${mdRel}` - const tag = `` - const next = html.replace('', `${tag}`) - await fs.writeFile(htmlAbs, next, 'utf8') - return true + + const newBody = htmlToMarkdown(html, cheerio, mdConverter) + if (!newBody) { + skipped++ + return + } + + const mdAbs = path.join(outDir, `${relDir}.md`) + let existed = true + try { + await fs.access(mdAbs) + } catch { + existed = false + } + + if (!existed) { + await fs.mkdir(path.dirname(mdAbs), { recursive: true }) + } + await fs.writeFile(mdAbs, newBody, 'utf8') + if (existed) regenerated++ + else created++ + } +} + +function htmlToMarkdown(html, cheerio, mdConverter) { + const $ = cheerio.load(html) + let $article = $('article').first() + if ($article.length === 0) { + $article = $('main').first() } + if ($article.length === 0) return null + + // KaTeX renders each math expression as a `.katex` container holding BOTH a + // `.katex-mathml` (MathML for screen readers, with a `` element whose + // child `` and child `` both produce the same text) AND a + // `.katex-html` (visual rendering, marked `aria-hidden="true"`). If we + // simply pass the container through to the markdown converter, the + // resulting markdown contains every math expression two or three times + // (mrow text + annotation text + visual text), which AFDocs' content-parity + // check counts as "missing from markdown" relative to the rendered HTML's + // deduplicated visual text. + // + // Replace each `.katex` with a `` element holding the **visual** + // text extracted from `.katex-html`. NHM converts `` to a single + // backtick span (`` `n` ``) in the .md, and AFDocs' markdown stripper + // protects backtick spans then restores their bare content as plain text. + // The HTML side (post-`injectAlternateLinks`) marks `.katex-mathml` with + // `data-markdown-ignore` so AFDocs only sees the `.katex-html` rendering + // — the exact same string we embed here. Both sides thus normalize to + // identical text, so prose sentences with inline math (`\sigma` → σ, + // `a_1` → a1, etc.) substring-match cleanly. Using the LaTeX annotation + // source instead would re-introduce the mismatch that broke parity on + // `embedded-wallets/infrastructure/sss-architecture` (52% missing). + $article.find('.katex').each((_, el) => { + const $el = $(el) + const visual = $el.find('.katex-html').first().text().trim() + const annotation = $el.find('annotation[encoding="application/x-tex"]').first().text().trim() + const inner = visual || annotation + if (!inner) { + $el.remove() + return + } + const $code = $('') + $code.text(inner) + $el.replaceWith($code) + }) + + // Strip elements that are intentionally human-only (chrome wrappers tagged + // with data-markdown-ignore in src/theme/DocItem/Layout/index.jsx) plus + // structural noise the converter would otherwise leave as empty markdown. + // `.katex` elements are gone by this point so the aria-hidden selector + // only catches non-math hidden content (e.g. anchor link icons). + $article.find('[data-markdown-ignore]').remove() + $article.find('nav, script, style, aside, [aria-hidden="true"]').remove() + // The body directive injected by injectAlternateLinks() lives outside + //
, so it is not present here. No removal needed. + + // Flatten Docusaurus chrome inside
elements. Docusaurus wraps + // collapsible content like this: + // + //
+ // Title + //
+ //
+ //
+ //

real content

+ //
+ //
+ //
+ //
+ // + // The custom NHM translator below preserves
/ as raw + // HTML wrappers and recurses into children. Without this flattening, the + // emitted .md would carry every wrapper
, which AFDocs' + // markdown-content-parity normalizer collapses to text (`` becomes + // `x`), smushing classnames like `collapsibleContent_i85q` into adjacent + // prose and breaking substring matches against the clean HTML segments. + // + // Unwrap iteratively so arbitrary depths of nested wrapper
s flatten. + // We only unwrap direct children of
that are
s with either + // no class or the Docusaurus collapsible-content class — never
s + // that the author intentionally placed (which always carry meaningful + // class names). + $article.find('details').each((_, el) => { + const $det = $(el) + Object.keys($det.attr() || {}).forEach(attr => $det.removeAttr(attr)) + $det.children('summary').each((__, sEl) => { + const $sum = $(sEl) + Object.keys($sum.attr() || {}).forEach(attr => $sum.removeAttr(attr)) + }) + let didUnwrap = true + while (didUnwrap) { + didUnwrap = false + $det.children('div').each((__, dEl) => { + const $d = $(dEl) + const cls = $d.attr('class') || '' + if (!cls.trim() || /\bcollapsibleContent[_-]/.test(cls)) { + $d.replaceWith($d.contents()) + didUnwrap = true + } + }) + } + }) + + const contentHtml = ($article.html() || '').trim() + if (!contentHtml) return null + + const md = mdConverter.translate(contentHtml).trim() + if (!md) return null + return md + '\n' +} + +function makeMarkdownConverter() { + const { NodeHtmlMarkdown } = require('node-html-markdown') + // node-html-markdown is GFM-aware by default (tables, strikethrough, line + // breaks), and ATX-only for headings, so no plugin equivalent of + // turndown-plugin-gfm is required. The remaining style options mirror the + // previous turndown configuration: fenced code blocks with ```, `-` + // bullets (NHM defaults to `*`), `_` for emphasis, `**` for strong, + // inline links over reference style. + const options = { + codeFence: '```', + codeBlockStyle: 'fenced', + bulletMarker: '-', + emDelimiter: '_', + strongDelimiter: '**', + useInlineLinks: true, + // Override both default escapes to a narrower set. Character sequences + // that have no ambiguous meaning in our doc body — square brackets in + // prose like "(string) [optional]", parentheses, hash symbols + // mid-sentence, asterisks adjacent to letters etc. — shouldn't get + // backslash-escaped. NHM's defaults would insert `\[`, `\]`, `\#`, + // `\>`, `\*`, `\_`, etc., none of which the AFDocs + // `markdown-content-parity` normalizer strips. The result is segments + // like `callGasLimit: (string) [optional] - description` failing to + // match `callGasLimit: (string) \[optional\] - description` even + // though the prose is identical. Underscores inside identifiers are + // also escaped by default (`my_var` -> `my\_var`), which breaks the + // same substring check. + // + // `globalEscape` is narrowed to backticks ONLY. A literal backtick in + // a text node (i.e. outside any ``/`
` — those elements set
+    // `noEscape: true` in NHM's default translators, so this regex is not
+    // applied to their contents) is the one character we cannot leave raw:
+    // unescaped, it would open an unintended inline code span in the
+    // emitted markdown, splicing surrounding prose into a `` block
+    // when the markdown is rendered. The other characters NHM escapes by
+    // default (`\\`, `*`, `_`, `~`, `[`, `]`) are intentionally left raw
+    // for the parity-check reasons above. `lineStartEscape` is reduced
+    // to the sequences that would actually produce broken markdown if
+    // left raw at the start of a line: a leading `#`/`>` (could create a
+    // heading or blockquote) or a leading `-`/`*`/`+` followed by
+    // whitespace (could create a list item). A leading `\d+.`
+    // escape was previously included, but NHM applies these escapes to
+    // the text content of headings BEFORE prefixing `### ` etc.: a
+    // heading like `

1. Set up the project

` becomes + // `### 1\. Set up the project`, and AFDocs' + // markdown-content-parity stripper does not consume the literal `\`, + // so the segment fails to match the HTML side `1. Set up the + // project`. Body lists are emitted by NHM's `
    `/`
  1. ` + // translators directly (which insert their own `1. ` markers), so + // dropping this escape only affects free-standing `1. foo` text at + // line start — which our docs do not produce outside list contexts. + // NHM's TS signature documents the replacement as a string, but it + // passes the tuple straight through to `String.prototype.replace()`, + // which accepts a function at runtime; the function form is the only + // way to express the per-branch backslash positioning below. + globalEscape: [/`/g, '\\$&'], + lineStartEscape: [ + /^([#>])|^([-*+])(?=\s)/gm, + (match, hashOrGt, bullet) => { + if (hashOrGt !== undefined) return '\\' + hashOrGt + if (bullet !== undefined) return '\\' + bullet + return match + }, + ], + } + const customTranslators = { + // Keep `
    ` and `` as raw HTML wrappers (GFM renders + // them natively in `.md`), but let NHM convert their children to + // markdown so the body of a collapsible block is plain markdown — not + // raw HTML chrome. + // + // The blank line between `` and the first content element is + // load-bearing: GFM-flavoured markdown parsers only treat inline-HTML + // children as markdown when there's a blank line separator. The + // `postfix: '
\n\n'` plus NHM's own `\n\n` around block + // children produce that separator. + // + // The previous translator returned `content: node.outerHTML`, which + // embedded Docusaurus class wrappers (`details_lb9f`, + // `collapsibleContent_i85q`, etc.) verbatim into the .md. AFDocs' + // markdown-content-parity normalizer collapses `` to its content, + // jamming those class names into adjacent prose and breaking + // substring matches against the rendered HTML's clean text segments. + // The cheerio pre-pass in `htmlToMarkdown` flattens those wrappers + // before NHM ever sees the tree. + details: { + prefix: '
\n', + postfix: '\n
', + surroundingNewlines: 2, + noEscape: true, + }, + summary: { + prefix: '', + postfix: '\n\n', + noEscape: true, + }, + } + return new NodeHtmlMarkdown(options, customTranslators) +} + +/** + * Prepend a single-line blockquote pointing to `/llms.txt` to every per-page + * `.md`. Idempotent: skips files that already contain the directive (so + * scripts/verify-llms-output.js can be re-run safely against an existing + * outDir). + */ +async function prependMdDirective(outDir) { + const mdFiles = await collectMarkdownFiles(outDir) + let updated = 0 + for (const mdAbs of mdFiles) { + const text = await fs.readFile(mdAbs, 'utf8') + if (text.includes(MD_DIRECTIVE_LINE)) continue + + // If a file still has YAML frontmatter (i.e. `regenerateMdFromHtml` + // skipped it because no HTML sibling was found), insert the directive + // after the closing `---` so frontmatter parsers still see the document + // as well-formed. + let next + const fmMatch = text.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n/) + if (fmMatch) { + const idx = fmMatch[0].length + next = text.slice(0, idx) + '\n' + MD_DIRECTIVE_LINE + '\n\n' + text.slice(idx) + } else { + next = MD_DIRECTIVE_LINE + '\n\n' + text + } + await fs.writeFile(mdAbs, next, 'utf8') + updated++ + } + return updated +} + +/** + * Convert a `vercel.json` redirect `source` into an anchored RegExp matching a + * URL pathname (trailing slash stripped). Mirrors Vercel's path-to-regexp + * subset we use: `:name*` / `:name+` match across segments, `:name` matches a + * single segment. + */ +function redirectSourceToRegExp(source) { + let s = source.replace(/\/+$/, '') + // Escape regex metacharacters, but leave `:`/`*`/`+` for param handling. + s = s.replace(/[.^${}()|[\]\\?]/g, '\\$&') + // `:name*` or `:name+` -> match across one or more segments (`.*`). + s = s.replace(/:\w+[*+]/g, '.*') + // `:name` -> match a single path segment. + s = s.replace(/:\w+/g, '[^/]+') + return new RegExp(`^${s}$`) +} + +/** + * Load the list of redirect matchers from `vercel.json` (located in the repo + * root, one level above the build `outDir`). Returns an empty array if the file + * is missing or unparseable so sitemap normalization degrades gracefully. + */ +async function loadRedirectMatchers(outDir) { + const vercelPath = path.join(outDir, '..', 'vercel.json') + let raw + try { + raw = await fs.readFile(vercelPath, 'utf8') + } catch { + return [] + } + let parsed + try { + parsed = JSON.parse(raw) + } catch { + return [] + } + const redirects = Array.isArray(parsed.redirects) ? parsed.redirects : [] + const matchers = [] + for (const r of redirects) { + if (!r || typeof r.source !== 'string') continue + try { + matchers.push(redirectSourceToRegExp(r.source)) + } catch { + // Ignore sources we can't compile. + } + } + return matchers +} + +/** + * Normalize `build/sitemap.xml` so every listed URL returns 200 (not a 3XX): + * + * - Strip the trailing slash from ``s whose final path segment contains + * a dot (Vercel serves these without a trailing slash; see + * `stripDottedTrailingSlashInMetadata`). + * - Drop entire `` entries whose pathname is shadowed by a `vercel.json` + * redirect (e.g. `.../eth_newpendingtransactionfilter/`, `.../tron/web/`), + * since those 3XX-redirect on the deployed site and should not be indexed. + */ +async function normalizeSitemap(outDir, siteUrl) { + const xmlPath = path.join(outDir, 'sitemap.xml') + let xml + try { + xml = await fs.readFile(xmlPath, 'utf8') + } catch { + return { skipped: true, rewritten: 0, dropped: 0 } + } + + const firstIdx = xml.indexOf('') + const lastIdx = xml.lastIndexOf('') + if (firstIdx === -1 || lastIdx === -1) { + return { skipped: false, rewritten: 0, dropped: 0 } + } + const head = xml.slice(0, firstIdx) + const tail = xml.slice(lastIdx + ''.length) + const blocksRegion = xml.slice(firstIdx, lastIdx + ''.length) + const blocks = blocksRegion.match(/[\s\S]*?<\/url>/g) || [] + + const matchers = await loadRedirectMatchers(outDir) + let rewritten = 0 + let dropped = 0 + const kept = [] + + for (const block of blocks) { + const locMatch = block.match(/([^<]+)<\/loc>/) + if (!locMatch) { + kept.push(block) + continue + } + const loc = locMatch[1].trim() + let pathname + try { + pathname = loc.startsWith(siteUrl) ? loc.slice(siteUrl.length) : new URL(loc).pathname + } catch { + pathname = loc + } + if (!pathname.startsWith('/')) pathname = `/${pathname}` + const pathNoSlash = pathname.replace(/\/+$/, '') || '/' + + if (matchers.some(re => re.test(pathNoSlash))) { + dropped++ + continue + } + + if (lastSegmentHasDot(pathname)) { + const newLoc = loc.replace(/\/+$/, '') + if (newLoc !== loc) { + kept.push(block.replace(/[^<]+<\/loc>/, `${newLoc}`)) + rewritten++ + continue + } + } + kept.push(block) + } + + const newXml = head + kept.join('\n') + tail + if (newXml !== xml) { + await fs.writeFile(xmlPath, newXml, 'utf8') + } + return { skipped: false, rewritten, dropped } +} + +/** + * Read `` URLs from build/sitemap.xml. Returns null if the sitemap is + * absent (e.g. when the script is run against an outDir that wasn't produced + * by a full Docusaurus build). + */ +async function readSitemapUrls(outDir) { + const xmlPath = path.join(outDir, 'sitemap.xml') + let xml + try { + xml = await fs.readFile(xmlPath, 'utf8') + } catch { + return null + } + const matches = xml.match(/([^<]+)<\/loc>/g) || [] + return matches.map(m => m.replace(/<\/?loc>/g, '').trim()) +} + +/** + * Prune links from per-section LINK-INDEX `llms-*.txt` files (i.e. the + * `fullContent: false` ones — filenames not containing `-full`) whose target + * page is absent from the build's sitemap. + * + * The `-full.txt` files are intentionally left alone: they intersperse + * markdown links with embedded page content, so removing a single link line + * would orphan the content block beneath it and corrupt the file. The + * link-index files are pure link lists, so safe to filter line-by-line. + */ +async function pruneStaleLlmsLinks(outDir, sitemapUrls, siteUrl) { + // Normalize sitemap URLs so trailing-slash variants both match. + const sitemapSet = new Set() + for (const url of sitemapUrls) { + sitemapSet.add(url) + sitemapSet.add(url.endsWith('/') ? url.slice(0, -1) : url + '/') + } + + const entries = await fs.readdir(outDir, { withFileTypes: true }) + let removed = 0 + let fileCount = 0 + + for (const entry of entries) { + if (!entry.isFile()) continue + if (!/^llms-[^.]+\.txt$/.test(entry.name)) continue + if (entry.name.includes('-full')) continue + if (entry.name.startsWith('llms-all-')) continue + + const abs = path.join(outDir, entry.name) + const text = await fs.readFile(abs, 'utf8') + const lines = text.split('\n') + const filtered = [] + let changed = false + + for (const line of lines) { + const linkMatch = line.match(/\[[^\]]+\]\(([^)]+)\)/) + if (linkMatch) { + const url = linkMatch[1].trim() + if (url.startsWith(siteUrl + '/')) { + // Map a `/.md` link to its corresponding HTML route. + // Docusaurus is configured with `trailingSlash: true`, so the route + // ends with `/`. Try both forms to be safe. + const htmlUrl = url.endsWith('.md') ? url.slice(0, -'.md'.length) + '/' : url + const htmlNoSlash = htmlUrl.endsWith('/') ? htmlUrl.slice(0, -1) : htmlUrl + if (!sitemapSet.has(htmlUrl) && !sitemapSet.has(htmlNoSlash)) { + removed++ + changed = true + continue + } + } + } + filtered.push(line) + } + + if (changed) { + await fs.writeFile(abs, filtered.join('\n'), 'utf8') + fileCount++ + } + } + + return { removed, fileCount } +} + +/** + * Generate `llms-all-.txt` files from the build's sitemap. Each + * file lists every sitemap URL whose path starts with the matching prefix + * (and a `llms-all-misc.txt` for anything that doesn't). + * + * Each entry takes the form `- [](.md)`, pointing at the per-page + * markdown that exists in the build. The static root `llms.txt` references + * each of these files so the AFDocs walker (which descends one level into + * linked `.txt` files) discovers every sitemap URL, pushing + * `llms-txt-coverage` to 100%. + */ +async function generateAllPagesIndex(outDir, siteUrl, sitemapUrls) { + const buckets = new Map() + for (const b of ALL_PAGES_BUCKETS) { + buckets.set(b.filename, { ...b, links: [] }) + } + buckets.set(ALL_PAGES_MISC_FILENAME, { + filename: ALL_PAGES_MISC_FILENAME, + title: ALL_PAGES_MISC_TITLE, + prefix: '', + links: [], + }) + + let urlCount = 0 + const seen = new Set() + + for (const rawUrl of sitemapUrls) { + if (!rawUrl.startsWith(siteUrl)) continue + const pathPart = rawUrl.slice(siteUrl.length) || '/' + + // Skip the homepage (no .md sibling — root LLMS surface is static/llms.txt) + // and AFDocs-builtin non-doc patterns. + if (pathPart === '/' || pathPart === '') continue + if ( + /^\/(blog|pricing|about|career|careers|job|jobs|contact|legal|privacy|terms|login|signup|sign-up|sign-in|register|404|500)(\/|$)/.test( + pathPart + ) + ) { + continue + } + + if (seen.has(pathPart)) continue + seen.add(pathPart) + + // Map a directory-style URL (`/foo/bar/`) to its `.md` sibling + // (`/foo/bar.md`). `trailingSlash: true` is assumed. + const mdPath = pathPart.endsWith('/') ? pathPart.slice(0, -1) + '.md' : pathPart + '.md' + const mdUrl = `${siteUrl}${mdPath}` + const label = pathPart.replace(/^\/|\/$/g, '') || pathPart + + let bucket = null + for (const b of ALL_PAGES_BUCKETS) { + if (pathPart.startsWith(b.prefix)) { + bucket = buckets.get(b.filename) + break + } + } + if (!bucket) bucket = buckets.get(ALL_PAGES_MISC_FILENAME) + bucket.links.push(`- [${label}](${mdUrl})`) + urlCount++ + } + + let fileCount = 0 + for (const bucket of buckets.values()) { + if (bucket.links.length === 0) continue + const header = + `# ${bucket.title}\n\n` + + `> Auto-generated complete index of every page in this section. ` + + `Generated from build/sitemap.xml so coverage stays in sync with the deployed site.\n\n` + + `## Pages\n\n` + const body = bucket.links.join('\n') + '\n' + await fs.writeFile(path.join(outDir, bucket.filename), header + body, 'utf8') + fileCount++ + } + + return { fileCount, urlCount } +} + +/** + * Rewrite every literal occurrence of `fromHost` to `toHost` in: + * + * - `build/llms*.txt` (root): hand-curated `llms.txt`, the upstream-emitted + * per-section `llms-.txt` / `llms--full.txt`, and the + * `llms-all-.txt` we generate from the sitemap. + * - Every per-page `.md` under `outDir` (excluding `llms*.md` to mirror + * `collectMarkdownFiles()`). + * + * Used only on Vercel preview/development deployments to swap the canonical + * production host (`https://docs.metamask.io`) for the deploy's auto-assigned + * `https://*.vercel.app` host so AFDocs running against the preview URL sees + * same-origin links it can resolve, and so the `llms-txt-coverage` walker + * actually descends into the linked `.txt` files (it skips cross-origin + * links). HTML files are intentionally untouched: the alternate link is now + * path-only (`/foo.md`), and rewriting other absolute URLs in HTML would + * break canonical/OG/JSON-LD metadata that should keep the canonical host + * even on preview. + * + * Plain string replace is sufficient and safer than a regex: `fromHost` is a + * fully-qualified URL, so the chance of an accidental match inside prose is + * effectively zero. + */ +async function rewriteHostInBuildArtifacts(outDir, fromHost, toHost) { + if (fromHost === toHost) return { txtFiles: 0, mdFiles: 0 } + + let txtFiles = 0 + let mdFiles = 0 + + const rootEntries = await fs.readdir(outDir, { withFileTypes: true }) + for (const entry of rootEntries) { + if (!entry.isFile()) continue + if (!/^llms.*\.txt$/.test(entry.name)) continue + const abs = path.join(outDir, entry.name) + const text = await fs.readFile(abs, 'utf8') + if (!text.includes(fromHost)) continue + await fs.writeFile(abs, text.split(fromHost).join(toHost), 'utf8') + txtFiles++ + } + + const mdAbsPaths = await collectMarkdownFiles(outDir) + for (const mdAbs of mdAbsPaths) { + const text = await fs.readFile(mdAbs, 'utf8') + if (!text.includes(fromHost)) continue + await fs.writeFile(mdAbs, text.split(fromHost).join(toHost), 'utf8') + mdFiles++ + } + + return { txtFiles, mdFiles } } function toPosix(p) { diff --git a/src/plugins/plugin-snaps-docs.ts b/src/plugins/plugin-snaps-docs.ts index 8a5348f0b93..8b382ebbf07 100644 --- a/src/plugins/plugin-snaps-docs.ts +++ b/src/plugins/plugin-snaps-docs.ts @@ -146,6 +146,14 @@ export default function useSnapsDocsPlugin(context: LoadContext): Plugin { `${methodName}.mdx` ) + // The upstream schema occasionally embeds insecure `http://docs.metamask.io` + // links (for example in the `wallet_snap` description). Normalize them to + // HTTPS so the rendered pages don't link from an HTTPS page to HTTP. + const methodJson = JSON.stringify(method).replaceAll( + 'http://docs.metamask.io', + 'https://docs.metamask.io' + ) + const content = `--- id: ${methodName} title: ${method.name} @@ -156,7 +164,7 @@ hide_table_of_contents: true import SnapsAPIReference from '@site/src/components/SnapsAPIReference/index.mdx'; - + ` await writeFile(filePath, content) diff --git a/src/theme/DocItem/Layout/index.jsx b/src/theme/DocItem/Layout/index.jsx index b1b8c09bbbf..b9f086e6fd5 100644 --- a/src/theme/DocItem/Layout/index.jsx +++ b/src/theme/DocItem/Layout/index.jsx @@ -93,19 +93,39 @@ export default function DocItemLayout({ children }) {
- - - {docTOC.mobile} + {/* data-markdown-ignore wraps UI chrome that exists only in the + rendered HTML (breadcrumbs, tags, mobile TOC, copy button, + "Edit this page"/last-updated footer). AFDocs strips elements + with this attribute before comparing HTML to the .md sibling, + so the chrome no longer counts as "missing from markdown" in + the markdown-content-parity check. The same attribute is + respected by the build-time HTML→.md regenerator in + src/plugins/llms-html-injector. */} +
+ + + {docTOC.mobile} +
- +
+ +
{children} - +
+ +
- +
+ +
- {docTOC.desktop &&
{docTOC.desktop}
} + {docTOC.desktop && ( +
+ {docTOC.desktop} +
+ )}
) } diff --git a/src/utils/example-maps.tsx b/src/utils/example-maps.tsx index 3f2c8c0c457..9746bd13d35 100644 --- a/src/utils/example-maps.tsx +++ b/src/utils/example-maps.tsx @@ -712,7 +712,7 @@ export const webExamples: ExamplesInterface[] = [ { title: 'Server Side Verification Example', description: 'Implementing server-side verification with Web3Auth', - image: 'img/embedded-wallets/banners/ssv.png', + image: 'img/embedded-wallets/banners/react.png', type: SAMPLE_APP, tags: [tags.pnp, tags.web, tags.evm, tags.wagmi, 'nextjs', 'server-side'], link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/server-side-verification-example', @@ -985,7 +985,7 @@ export const pnpReactNativeExamples: ExamplesInterface[] = [ title: 'Using Auth0 with Web3Auth PnP React Native SDK', description: 'Using Auth0 Single Page App (Implicit Mode) in MetaMask Embedded Wallets React Native SDK in Android and iOS', - image: 'img/embedded-wallets/banners/react-native-auth0.png', + image: 'img/embedded-wallets/banners/react-native.png', type: SAMPLE_APP, tags: [tags.pnp, tags.android, tags.ios, tags.reactNative, tags.evm, 'auth0', 'implicit mode'], link: 'https://github.com/Web3Auth/web3auth-react-native-examples/tree/main/rn-bare-auth0-example', @@ -997,7 +997,7 @@ export const pnpReactNativeExamples: ExamplesInterface[] = [ title: 'Using Aggregate Verifiers in Web3Auth PnP React Native SDK', description: 'Combine multiple logins (Google, Facebook and GitHub) using Aggregate Verifiers in MetaMask Embedded Wallets React Native SDK for Android and iOS', - image: 'img/embedded-wallets/banners/react-native-auth0.png', + image: 'img/embedded-wallets/banners/react-native.png', type: SAMPLE_APP, tags: [ tags.pnp, diff --git a/static/img/embedded-wallets/authentication/facebook/facebook-app-id-secret.png b/static/img/embedded-wallets/authentication/facebook/facebook-app-id-secret.png index d260060d2e1..98bb29f30c5 100644 Binary files a/static/img/embedded-wallets/authentication/facebook/facebook-app-id-secret.png and b/static/img/embedded-wallets/authentication/facebook/facebook-app-id-secret.png differ diff --git a/static/img/embedded-wallets/authentication/facebook/facebook-login-settings-oauth.png b/static/img/embedded-wallets/authentication/facebook/facebook-login-settings-oauth.png index 93e75b30776..17410d3dfc4 100644 Binary files a/static/img/embedded-wallets/authentication/facebook/facebook-login-settings-oauth.png and b/static/img/embedded-wallets/authentication/facebook/facebook-login-settings-oauth.png differ diff --git a/static/img/embedded-wallets/authentication/facebook/facebook-login-setup.png b/static/img/embedded-wallets/authentication/facebook/facebook-login-setup.png index 001c1a0e1fc..e9683228f8b 100644 Binary files a/static/img/embedded-wallets/authentication/facebook/facebook-login-setup.png and b/static/img/embedded-wallets/authentication/facebook/facebook-login-setup.png differ diff --git a/static/img/embedded-wallets/flow-diagrams/key-management-dark.png b/static/img/embedded-wallets/flow-diagrams/key-management-dark.png index 80c6d7265d6..7b92616feec 100644 Binary files a/static/img/embedded-wallets/flow-diagrams/key-management-dark.png and b/static/img/embedded-wallets/flow-diagrams/key-management-dark.png differ diff --git a/static/img/embedded-wallets/flow-diagrams/key-management-light.png b/static/img/embedded-wallets/flow-diagrams/key-management-light.png index fec7de80b5a..280b0f52309 100644 Binary files a/static/img/embedded-wallets/flow-diagrams/key-management-light.png and b/static/img/embedded-wallets/flow-diagrams/key-management-light.png differ diff --git a/static/img/embedded-wallets/flow-diagrams/pnp-core-kit-flow-dark.png b/static/img/embedded-wallets/flow-diagrams/pnp-core-kit-flow-dark.png index c8535c6d033..42acd90c294 100644 Binary files a/static/img/embedded-wallets/flow-diagrams/pnp-core-kit-flow-dark.png and b/static/img/embedded-wallets/flow-diagrams/pnp-core-kit-flow-dark.png differ diff --git a/static/img/embedded-wallets/flow-diagrams/pnp-core-kit-flow-light.png b/static/img/embedded-wallets/flow-diagrams/pnp-core-kit-flow-light.png index 46a307e16bc..ae27b7aa059 100644 Binary files a/static/img/embedded-wallets/flow-diagrams/pnp-core-kit-flow-light.png and b/static/img/embedded-wallets/flow-diagrams/pnp-core-kit-flow-light.png differ diff --git a/static/img/embedded-wallets/flow-diagrams/tkey-mpc-flow-dark.png b/static/img/embedded-wallets/flow-diagrams/tkey-mpc-flow-dark.png index 80e98da4e2c..055f057271a 100644 Binary files a/static/img/embedded-wallets/flow-diagrams/tkey-mpc-flow-dark.png and b/static/img/embedded-wallets/flow-diagrams/tkey-mpc-flow-dark.png differ diff --git a/static/img/embedded-wallets/flow-diagrams/tkey-mpc-flow-light.png b/static/img/embedded-wallets/flow-diagrams/tkey-mpc-flow-light.png index 7c5c5a01918..0bd4a269f16 100644 Binary files a/static/img/embedded-wallets/flow-diagrams/tkey-mpc-flow-light.png and b/static/img/embedded-wallets/flow-diagrams/tkey-mpc-flow-light.png differ diff --git a/static/img/embedded-wallets/mfa/mfa-options.gif b/static/img/embedded-wallets/mfa/mfa-options.gif index 2d01c3aaf35..e8cd5e620d0 100644 Binary files a/static/img/embedded-wallets/mfa/mfa-options.gif and b/static/img/embedded-wallets/mfa/mfa-options.gif differ diff --git a/static/img/tutorials/graph-6-final.png b/static/img/tutorials/graph-6-final.png index a2d46371e94..94fa43f5402 100644 Binary files a/static/img/tutorials/graph-6-final.png and b/static/img/tutorials/graph-6-final.png differ diff --git a/static/img/wallet-discovery.png b/static/img/wallet-discovery.png index 86083161f5c..d1db110e355 100644 Binary files a/static/img/wallet-discovery.png and b/static/img/wallet-discovery.png differ diff --git a/static/llms.txt b/static/llms.txt index 65f4ad792f5..c11b53fff35 100644 --- a/static/llms.txt +++ b/static/llms.txt @@ -41,3 +41,16 @@ These links contain LLM-readable files following the llmstxt.org standard, for e - [Tutorials documentation links](https://docs.metamask.io/llms-tutorials.txt): Documentation links for MetaMask tutorials. - [Tutorials full documentation](https://docs.metamask.io/llms-tutorials-full.txt): Complete documentation for MetaMask tutorials. + +## Complete page index + +These auto-generated indexes are produced from the live sitemap at build time and list every documentation page in each product section. They guarantee complete coverage of `https://docs.metamask.io/sitemap.xml` and are the canonical entry point for agents that need the full catalog. + +- [All MetaMask Connect pages](https://docs.metamask.io/llms-all-metamask-connect.txt): Complete sitemap-derived index of every MetaMask Connect page. +- [All Embedded Wallets pages](https://docs.metamask.io/llms-all-embedded-wallets.txt): Complete sitemap-derived index of every Embedded Wallets page. +- [All Smart Accounts Kit pages](https://docs.metamask.io/llms-all-smart-accounts-kit.txt): Complete sitemap-derived index of every Smart Accounts Kit page. +- [All Services pages](https://docs.metamask.io/llms-all-services.txt): Complete sitemap-derived index of every Services page (including JSON-RPC reference). +- [All Snaps pages](https://docs.metamask.io/llms-all-snaps.txt): Complete sitemap-derived index of every Snaps page. +- [All Developer dashboard pages](https://docs.metamask.io/llms-all-dashboard.txt): Complete sitemap-derived index of every Developer dashboard page. +- [All Tutorials pages](https://docs.metamask.io/llms-all-tutorials.txt): Complete sitemap-derived index of every tutorials page. +- [All other documentation pages](https://docs.metamask.io/llms-all-misc.txt): Complete sitemap-derived index of pages outside the main product sections. diff --git a/static/logos/logo-bnb.png b/static/logos/logo-bnb.png index 295d71aee33..42b6ea58893 100644 Binary files a/static/logos/logo-bnb.png and b/static/logos/logo-bnb.png differ diff --git a/static/logos/logo-unity.png b/static/logos/logo-unity.png index 684e8a9ce17..4860edc32f3 100644 Binary files a/static/logos/logo-unity.png and b/static/logos/logo-unity.png differ diff --git a/static/logos/logo-wechat.png b/static/logos/logo-wechat.png index f41bbd8ddab..0d8507dbd47 100644 Binary files a/static/logos/logo-wechat.png and b/static/logos/logo-wechat.png differ diff --git a/static/robots.txt b/static/robots.txt index 4d50c5f075b..c22e14fbb7c 100644 --- a/static/robots.txt +++ b/static/robots.txt @@ -1,4 +1,5 @@ User-agent: * Allow: / +Content-Signal: search=yes, ai-input=yes, ai-train=yes Sitemap: https://docs.metamask.io/sitemap.xml diff --git a/tsconfig.json b/tsconfig.json index d3786bf1401..a86af1f2b36 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,7 +10,7 @@ "launchdarkly": ["./node_modules/launchdarkly-js-client-sdk/dist/ldclient.es.js"], "sentry-plugin": ["./node_modules/@sentry/browser/build/npm/esm/index.js"] }, - "types": ["docusaurus-plugin-sass"] + "types": ["docusaurus-plugin-sass", "node"] }, "include": ["src/globals.d.ts", "./src/**/*", "middleware.ts"], "exclude": ["node_modules"] diff --git a/vercel.json b/vercel.json index 86f0ddf6f65..4c5edb241e8 100644 --- a/vercel.json +++ b/vercel.json @@ -8,6 +8,24 @@ { "key": "Content-Type", "value": "text/markdown; charset=utf-8" }, { "key": "Cache-Control", "value": "public, max-age=300, s-maxage=3600" } ] + }, + { + "source": "/(llms.*)\\.txt", + "headers": [{ "key": "Content-Type", "value": "text/markdown; charset=utf-8" }] + }, + { + "source": "/", + "headers": [ + { + "key": "Link", + "value": "; rel=\"service-doc\", ; rel=\"alternate\"; type=\"text/markdown\"" + } + ] + }, + { + "source": "/", + "has": [{ "type": "header", "key": "accept", "value": ".*text/markdown.*" }], + "headers": [{ "key": "Content-Type", "value": "text/markdown; charset=utf-8" }] } ], "redirects": [ @@ -163,6 +181,10 @@ "source": "/guide/ethereum-provider/", "destination": "/metamask-connect/evm/reference/provider-api/" }, + { + "source": "/guide/ethereum-provider.html", + "destination": "/metamask-connect/evm/reference/provider-api/" + }, { "source": "/wallet/reference/json-rpc-api/", "destination": "/metamask-connect/evm/reference/json-rpc-api/"