diff --git a/.gitignore b/.gitignore index 5a56cc59e27..fe97056833b 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ .docusaurus .cache-loader .idea +.yarn # Misc .DS_Store diff --git a/docusaurus.config.js b/docusaurus.config.ts similarity index 89% rename from docusaurus.config.js rename to docusaurus.config.ts index eaa9225690f..72a74e33c06 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.ts @@ -2,6 +2,9 @@ // Note: type annotations allow type checking and IDEs autocompletion require("dotenv").config(); +const { fetchAndGenerateDynamicSidebarItems } = require("./src/helpers"); +import { JSON_RPC_METHODS_LABEL, NETWORK_NAMES, CustomFields } from "./src/lib/constants"; +const upperFirst = require("lodash.upperfirst"); const { themes } = require("prism-react-renderer"); const { REF_ALLOW_LOGIN_PATH } = require("./src/lib/constants"); const codeTheme = themes.dracula; @@ -37,7 +40,9 @@ const config = { DASHBOARD_PREVIEW_URL: process.env.DASHBOARD_PREVIEW_URL, SENTRY_KEY: process.env.SENTRY_KEY, GF_SURVEY_KEY: process.env.GF_SURVEY_KEY, - }, + sidebarData: { docs: []}, + dynamicData: [], + } as CustomFields, trailingSlash: true, @@ -128,6 +133,30 @@ const config = { editUrl: "https://github.com/MetaMask/metamask-docs/edit/main/", sidebarPath: require.resolve("./services-sidebar.js"), breadcrumbs: false, + sidebarItemsGenerator: async function ({ defaultSidebarItemsGenerator, ...args }) { + config.customFields.sidebarData = args; + let sidebarItems = await defaultSidebarItemsGenerator(args); + const dynamicSidebarItems = await fetchAndGenerateDynamicSidebarItems(NETWORK_NAMES.linea); + config.customFields.dynamicData = dynamicSidebarItems; + const updatedItems = sidebarItems.map(item => { + if (item?.label === upperFirst(NETWORK_NAMES.linea) && item?.items) { + return { + ...item, + items: + [ + ...item.items.map(mappedItem => { + if (mappedItem.label === JSON_RPC_METHODS_LABEL) { + return {...mappedItem, items: [...dynamicSidebarItems[0].items]}; + } + return mappedItem + }), + ] + }; + } + return item; + }); + return [...updatedItems]; + }, }, ], [ diff --git a/package-lock.json b/package-lock.json index 9ebf04b2eda..d27a78418a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,7 +35,8 @@ "jsonwebtoken": "^9.0.2", "launchdarkly-js-client-sdk": "^3.3.0", "lodash.debounce": "^4.0.8", - "lodash.isobject": "^3.0.2", + "lodash.isplainobject": "^4.0.6", + "lodash.upperfirst": "^4.3.1", "node-polyfill-webpack-plugin": "^2.0.1", "prettier": "^3.3.3", "prism-react-renderer": "^2.1.0", @@ -19039,11 +19040,6 @@ "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" }, - "node_modules/lodash.isobject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", - "integrity": "sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==" - }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", @@ -19087,6 +19083,12 @@ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" }, + "node_modules/lodash.upperfirst": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", + "license": "MIT" + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", diff --git a/package.json b/package.json index ec1ffde8556..5aab71ab91c 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,7 @@ "launchdarkly-js-client-sdk": "^3.3.0", "lodash.debounce": "^4.0.8", "lodash.isplainobject": "^4.0.6", + "lodash.upperfirst": "^4.3.1", "node-polyfill-webpack-plugin": "^2.0.1", "prettier": "^3.3.3", "prism-react-renderer": "^2.1.0", diff --git a/services/reference/linea/json-rpc-methods/eth_accounts.mdx b/services/reference/linea/json-rpc-methods/_eth_accounts.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_accounts.mdx rename to services/reference/linea/json-rpc-methods/_eth_accounts.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_blocknumber.mdx b/services/reference/linea/json-rpc-methods/_eth_blocknumber.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_blocknumber.mdx rename to services/reference/linea/json-rpc-methods/_eth_blocknumber.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_call.mdx b/services/reference/linea/json-rpc-methods/_eth_call.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_call.mdx rename to services/reference/linea/json-rpc-methods/_eth_call.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_chainid.mdx b/services/reference/linea/json-rpc-methods/_eth_chainid.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_chainid.mdx rename to services/reference/linea/json-rpc-methods/_eth_chainid.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_coinbase.mdx b/services/reference/linea/json-rpc-methods/_eth_coinbase.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_coinbase.mdx rename to services/reference/linea/json-rpc-methods/_eth_coinbase.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_estimategas.mdx b/services/reference/linea/json-rpc-methods/_eth_estimategas.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_estimategas.mdx rename to services/reference/linea/json-rpc-methods/_eth_estimategas.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_feehistory.mdx b/services/reference/linea/json-rpc-methods/_eth_feehistory.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_feehistory.mdx rename to services/reference/linea/json-rpc-methods/_eth_feehistory.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_gasprice.mdx b/services/reference/linea/json-rpc-methods/_eth_gasprice.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_gasprice.mdx rename to services/reference/linea/json-rpc-methods/_eth_gasprice.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_getbalance.mdx b/services/reference/linea/json-rpc-methods/_eth_getbalance.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_getbalance.mdx rename to services/reference/linea/json-rpc-methods/_eth_getbalance.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_getblockbyhash.mdx b/services/reference/linea/json-rpc-methods/_eth_getblockbyhash.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_getblockbyhash.mdx rename to services/reference/linea/json-rpc-methods/_eth_getblockbyhash.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_getblockbynumber.mdx b/services/reference/linea/json-rpc-methods/_eth_getblockbynumber.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_getblockbynumber.mdx rename to services/reference/linea/json-rpc-methods/_eth_getblockbynumber.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_getblockreceipts.mdx b/services/reference/linea/json-rpc-methods/_eth_getblockreceipts.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_getblockreceipts.mdx rename to services/reference/linea/json-rpc-methods/_eth_getblockreceipts.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx b/services/reference/linea/json-rpc-methods/_eth_getblocktransactioncountbyhash.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx rename to services/reference/linea/json-rpc-methods/_eth_getblocktransactioncountbyhash.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx b/services/reference/linea/json-rpc-methods/_eth_getblocktransactioncountbynumber.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx rename to services/reference/linea/json-rpc-methods/_eth_getblocktransactioncountbynumber.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_getcode.mdx b/services/reference/linea/json-rpc-methods/_eth_getcode.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_getcode.mdx rename to services/reference/linea/json-rpc-methods/_eth_getcode.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_getlogs.mdx b/services/reference/linea/json-rpc-methods/_eth_getlogs.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_getlogs.mdx rename to services/reference/linea/json-rpc-methods/_eth_getlogs.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_getproof.mdx b/services/reference/linea/json-rpc-methods/_eth_getproof.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_getproof.mdx rename to services/reference/linea/json-rpc-methods/_eth_getproof.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_getstorageat.mdx b/services/reference/linea/json-rpc-methods/_eth_getstorageat.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_getstorageat.mdx rename to services/reference/linea/json-rpc-methods/_eth_getstorageat.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx b/services/reference/linea/json-rpc-methods/_eth_gettransactionbyblockhashandindex.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx rename to services/reference/linea/json-rpc-methods/_eth_gettransactionbyblockhashandindex.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx b/services/reference/linea/json-rpc-methods/_eth_gettransactionbyblocknumberandindex.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx rename to services/reference/linea/json-rpc-methods/_eth_gettransactionbyblocknumberandindex.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_gettransactionbyhash.mdx b/services/reference/linea/json-rpc-methods/_eth_gettransactionbyhash.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_gettransactionbyhash.mdx rename to services/reference/linea/json-rpc-methods/_eth_gettransactionbyhash.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_gettransactioncount.mdx b/services/reference/linea/json-rpc-methods/_eth_gettransactioncount.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_gettransactioncount.mdx rename to services/reference/linea/json-rpc-methods/_eth_gettransactioncount.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_gettransactionreceipt.mdx b/services/reference/linea/json-rpc-methods/_eth_gettransactionreceipt.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_gettransactionreceipt.mdx rename to services/reference/linea/json-rpc-methods/_eth_gettransactionreceipt.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_getunclebyblockhashandindex.mdx b/services/reference/linea/json-rpc-methods/_eth_getunclebyblockhashandindex.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_getunclebyblockhashandindex.mdx rename to services/reference/linea/json-rpc-methods/_eth_getunclebyblockhashandindex.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx b/services/reference/linea/json-rpc-methods/_eth_getunclebyblocknumberandindex.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx rename to services/reference/linea/json-rpc-methods/_eth_getunclebyblocknumberandindex.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_getunclecountbyblockhash.mdx b/services/reference/linea/json-rpc-methods/_eth_getunclecountbyblockhash.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_getunclecountbyblockhash.mdx rename to services/reference/linea/json-rpc-methods/_eth_getunclecountbyblockhash.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_getunclecountbyblocknumber.mdx b/services/reference/linea/json-rpc-methods/_eth_getunclecountbyblocknumber.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_getunclecountbyblocknumber.mdx rename to services/reference/linea/json-rpc-methods/_eth_getunclecountbyblocknumber.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_getwork.mdx b/services/reference/linea/json-rpc-methods/_eth_getwork.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_getwork.mdx rename to services/reference/linea/json-rpc-methods/_eth_getwork.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_hashrate.mdx b/services/reference/linea/json-rpc-methods/_eth_hashrate.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_hashrate.mdx rename to services/reference/linea/json-rpc-methods/_eth_hashrate.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_maxpriorityfeepergas.mdx b/services/reference/linea/json-rpc-methods/_eth_maxpriorityfeepergas.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_maxpriorityfeepergas.mdx rename to services/reference/linea/json-rpc-methods/_eth_maxpriorityfeepergas.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_mining.mdx b/services/reference/linea/json-rpc-methods/_eth_mining.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_mining.mdx rename to services/reference/linea/json-rpc-methods/_eth_mining.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_protocolversion.mdx b/services/reference/linea/json-rpc-methods/_eth_protocolversion.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_protocolversion.mdx rename to services/reference/linea/json-rpc-methods/_eth_protocolversion.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_sendrawtransaction.mdx b/services/reference/linea/json-rpc-methods/_eth_sendrawtransaction.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_sendrawtransaction.mdx rename to services/reference/linea/json-rpc-methods/_eth_sendrawtransaction.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_sendtransaction.mdx b/services/reference/linea/json-rpc-methods/_eth_sendtransaction.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_sendtransaction.mdx rename to services/reference/linea/json-rpc-methods/_eth_sendtransaction.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_sign.mdx b/services/reference/linea/json-rpc-methods/_eth_sign.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_sign.mdx rename to services/reference/linea/json-rpc-methods/_eth_sign.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_submitwork.mdx b/services/reference/linea/json-rpc-methods/_eth_submitwork.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_submitwork.mdx rename to services/reference/linea/json-rpc-methods/_eth_submitwork.mdx diff --git a/services/reference/linea/json-rpc-methods/eth_syncing.mdx b/services/reference/linea/json-rpc-methods/_eth_syncing.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/eth_syncing.mdx rename to services/reference/linea/json-rpc-methods/_eth_syncing.mdx diff --git a/services/reference/linea/json-rpc-methods/linea_estimategas.mdx b/services/reference/linea/json-rpc-methods/_linea_estimategas.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/linea_estimategas.mdx rename to services/reference/linea/json-rpc-methods/_linea_estimategas.mdx diff --git a/services/reference/linea/json-rpc-methods/net_listening.mdx b/services/reference/linea/json-rpc-methods/_net_listening.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/net_listening.mdx rename to services/reference/linea/json-rpc-methods/_net_listening.mdx diff --git a/services/reference/linea/json-rpc-methods/net_peercount.mdx b/services/reference/linea/json-rpc-methods/_net_peercount.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/net_peercount.mdx rename to services/reference/linea/json-rpc-methods/_net_peercount.mdx diff --git a/services/reference/linea/json-rpc-methods/net_version.mdx b/services/reference/linea/json-rpc-methods/_net_version.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/net_version.mdx rename to services/reference/linea/json-rpc-methods/_net_version.mdx diff --git a/services/reference/linea/json-rpc-methods/web3_clientversion.mdx b/services/reference/linea/json-rpc-methods/_web3_clientversion.mdx similarity index 100% rename from services/reference/linea/json-rpc-methods/web3_clientversion.mdx rename to services/reference/linea/json-rpc-methods/_web3_clientversion.mdx diff --git a/services/tutorials/ethereum/authenticate-with-jwt.md b/services/tutorials/ethereum/authenticate-with-jwt.md index e58e609d9de..32483377599 100644 --- a/services/tutorials/ethereum/authenticate-with-jwt.md +++ b/services/tutorials/ethereum/authenticate-with-jwt.md @@ -10,7 +10,7 @@ import TabItem from '@theme/TabItem'; # Authenticate with JWT This tutorial demonstrates how to create and apply a JSON Web Token (JWT) to authenticate an -[`eth_blockNumber`](../../api/networks/ethereum/json-rpc-methods/eth_blocknumber.mdx) API request +[`eth_blockNumber`](/services/reference/ethereum/json-rpc-methods/eth_blocknumber/) API request with Node.js. Developers can configure the expiry time and scope of JWTs to enhance the security profile of their dapps. @@ -157,7 +157,7 @@ Replace the following values in the `.env` file: - `` with your API key from the Infura dashboard. - `` with the JWT's key ID. This is generated by Infura, and you can find it in the Infura dashboard. The code in [Step 4](#4-create-and-apply-your-jwt) applies this ID to the JWT header to allow Infura to identify which key was used to sign the JWT. -- `` with the URL of an Infura network for which your key has access rights, and that supports the method [`eth_blockNumber`](../../api/networks/ethereum/json-rpc-methods/eth_blocknumber.mdx). +- `` with the URL of an Infura network for which your key has access rights, and that supports the method [`eth_blockNumber`](/services/reference/ethereum/json-rpc-methods/eth_blocknumber/). :::warning Important diff --git a/src/components/AuthLogin/styles.module.css b/src/components/AuthLogin/styles.module.css index b3e9a95ae90..e3c0e18e781 100644 --- a/src/components/AuthLogin/styles.module.css +++ b/src/components/AuthLogin/styles.module.css @@ -1,8 +1,8 @@ .modalOverlay { z-index: 300; position: fixed; - inset: 0px; - background-color: rgba(0, 0, 0, 0.75); + inset: 0; + background-color: rgb(0 0 0 / 75%); } .modalWrapper { @@ -22,7 +22,9 @@ .modalContent { color: #FFF; + --font-family-sans: "Euclid Circular B", "Roboto", sans-serif; + position: relative; } @@ -52,39 +54,41 @@ left: 0; width: 60px; height: 60px; - - -webkit-animation: rotating 3s linear infinite; - -moz-animation: rotating 3s linear infinite; - -ms-animation: rotating 3s linear infinite; - -o-animation: rotating 3s linear infinite; + animation: rotating 3s linear infinite; + animation: rotating 3s linear infinite; + animation: rotating 3s linear infinite; + animation: rotating 3s linear infinite; animation: rotating 3s linear infinite; } -@-webkit-keyframes spinner /* Safari and Chrome */ { +@keyframes spinner /* Safari and Chrome */ { from { - -webkit-transform: rotate(360deg); - -o-transform: rotate(360deg); + transform: rotate(360deg); + transform: rotate(360deg); transform: rotate(360deg); } + to { - -webkit-transform: rotate(-360deg); - -o-transform: rotate(-360deg); + transform: rotate(-360deg); + transform: rotate(-360deg); transform: rotate(-360deg); } } + @keyframes rotating { from { - -ms-transform: rotate(360deg); - -moz-transform: rotate(360deg); - -webkit-transform: rotate(360deg); - -o-transform: rotate(360deg); + transform: rotate(360deg); + transform: rotate(360deg); + transform: rotate(360deg); + transform: rotate(360deg); transform: rotate(360deg); } + to { - -ms-transform: rotate(-360deg); - -moz-transform: rotate(-360deg); - -webkit-transform: rotate(-360deg); - -o-transform: rotate(-360deg); + transform: rotate(-360deg); + transform: rotate(-360deg); + transform: rotate(-360deg); + transform: rotate(-360deg); transform: rotate(-360deg); } } @@ -100,7 +104,7 @@ font-size: 18px; font-weight: 700; line-height: 24px; - margin: 12px 0 0 0; + margin: 12px 0 0; } .content { diff --git a/src/components/CustomReferencePage/index.tsx b/src/components/CustomReferencePage/index.tsx new file mode 100644 index 00000000000..3535dcacc4a --- /dev/null +++ b/src/components/CustomReferencePage/index.tsx @@ -0,0 +1,150 @@ +import Layout from "@theme/Layout"; +import ParserOpenRPC from "@site/src/components/ParserOpenRPC"; +import React, { useEffect, useState } from "react"; +import DocSidebar from '@theme/DocSidebar'; +import styles from "@site/src/theme/Layout/styles.module.css" +import customStyles from "./styles.module.css" +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; +import upperFirst from "lodash.upperfirst" +import { JSON_RPC_METHODS_LABEL, lineaSidebarNames, NETWORK_NAMES, SidebarItem, CustomFields } from "@site/src/lib/constants"; +import { useLocation } from "@docusaurus/router"; + +const formatMenuLabel = (label) => { + const menuItem = lineaSidebarNames.find(name => name.old === label); + if (menuItem) { + return menuItem.new; + } + return label; +} + +function generateSidebarItems(docs) { + const categories = {}; + + docs.forEach((doc) => { + if (doc.id === 'index') { + categories['Introduction'] = { + type: 'link', + href: '/services', + label: upperFirst(doc.frontMatter?.sidebar_label || doc.title), + }; + return; + } + + const pathParts = doc.sourceDirName.split('/'); + let currentCategory = categories; + let isIndexPage = doc.id.endsWith('/index'); + pathParts.map(pathPart => formatMenuLabel(pathPart)).forEach((part, index) => { + if (!currentCategory[part]) { + if (isIndexPage && index === pathParts.length - 2) { + currentCategory[part] = { + type: 'category', + label: upperFirst(doc.frontMatter?.sidebar_label || doc.frontMatter?.title || part), + collapsed: false, + collapsible: true, + href: `/services/reference`, + items: [] + }; + } else { + currentCategory[part] = { + type: 'category', + label: upperFirst(part), + href: `/services/${doc.sourceDirName}`, + collapsed: part !== "Get started", + collapsible: true, + items: [] + }; + } + } + + if (index === pathParts.length - 1 && !isIndexPage) { + currentCategory[part].items.push({ + type: 'link', + label: doc.frontMatter?.title || doc.title, + href: `/services/${doc.id.replace(/\/index$/, '')}`, + sidebar_position: doc.frontMatter?.sidebar_position || Number.MAX_SAFE_INTEGER + }); + } + currentCategory = currentCategory[part].items; + }); + }); + + const convertToArray = (categoryObj) => { + return Object.values(categoryObj).map((category: SidebarItem) => { + if (category.items && typeof category.items === 'object') { + category.items = convertToArray(category.items); + if (category.items.every(item => item.sidebar_position !== undefined)) { + category.items.sort((a, b) => (a.sidebar_position || Number.MAX_SAFE_INTEGER) - (b.sidebar_position || Number.MAX_SAFE_INTEGER)); + } + } + return category; + }); + }; + return convertToArray(categories); +} + +const CustomReferencePage = (props) => { + const customData = props.route.customData; + const { siteConfig } = useDocusaurusContext(); + const [formattedData, setFormattedData] = useState([]); + const { pathname } = useLocation(); + const customSiteConfig = siteConfig.customFields as CustomFields; + + useEffect(() => { + if (customSiteConfig && customSiteConfig?.dynamicData && customSiteConfig?.sidebarData.docs) { + setFormattedData(generateSidebarItems(customSiteConfig.sidebarData.docs).map(item => { + if (item?.label === "Reference" && item?.items) { + return { + ...item, + items: item.items.map(referenceItem => { + if (referenceItem?.label === upperFirst(NETWORK_NAMES.linea) && referenceItem?.items && customSiteConfig.dynamicData) { + return { + ...referenceItem, + items: [ + ...referenceItem.items.filter(({ label }) => label !== JSON_RPC_METHODS_LABEL), + ...customSiteConfig.dynamicData.map(dynamicItem => { + const jsonRpcCategory = referenceItem.items.find(({ label }) => label === JSON_RPC_METHODS_LABEL); + if (jsonRpcCategory) { + return { + ...dynamicItem, + ...{ href: "/services/reference/linea/json-rpc-methods/" }, + ...{ items: [...dynamicItem.items, ...jsonRpcCategory.items.filter(refItem => refItem.type === "category")] } + }; + } + return dynamicItem; + }) + ] + }; + } + return referenceItem; + }) + } + } + return item; + })); + } + }, []); + + return formattedData ? ( + +
+ +
+
+ +
+
+
+
+ ) : null; +}; + +export default CustomReferencePage; diff --git a/src/components/CustomReferencePage/styles.module.css b/src/components/CustomReferencePage/styles.module.css new file mode 100644 index 00000000000..b14ea81110d --- /dev/null +++ b/src/components/CustomReferencePage/styles.module.css @@ -0,0 +1,24 @@ +.sidebar { + display: none; +} + +@media (width >= 997px) { + .sidebarViewport { + height: 100%; + max-height: 100vh; + position: sticky; + top: 0; + } + + .sidebar { + display: flex; + flex-direction: column; + height: 100%; + width: var(--doc-sidebar-width); + padding-top: 0 !important; + } + + .sidebar>div { + padding-top: 0 !important; + } +} diff --git a/src/components/ParserOpenRPC/DetailsBox/MDContent.tsx b/src/components/ParserOpenRPC/DetailsBox/MDContent.tsx index fcd8e3eebac..1cc4bc463ea 100644 --- a/src/components/ParserOpenRPC/DetailsBox/MDContent.tsx +++ b/src/components/ParserOpenRPC/DetailsBox/MDContent.tsx @@ -1,43 +1,48 @@ import React from "react"; -const parseLists = (content: string) => { - const lines = content.split('\n'); +const parseLists = (text: string) => { + const lines = text.split('\n'); let result = ''; - let isFirstLevelOpen = false; - let isSecondLevelOpen = false; + let inList = false; + let inSubList = false; + lines.forEach((line) => { - if (line.match(/^ {2}-\s+/)) { - if (!isSecondLevelOpen) { - result += '
    '; - isSecondLevelOpen = true; - } - result += `
  • ${line.trim().substring(4)}
  • `; - } else if (line.match(/^ -\s+/)) { - if (isSecondLevelOpen) { - result += '
'; - isSecondLevelOpen = false; + const trimmed = line.trim(); + const isListItem = trimmed.startsWith('- '); + const isSubListItem = line.startsWith(' - '); + + if (isListItem && !isSubListItem) { + if (!inList) { + result += '
    \n'; + inList = true; + } else if (inSubList) { + result += '
\n'; + inSubList = false; } - if (!isFirstLevelOpen) { - result += '
    '; - isFirstLevelOpen = true; + result += `
  • ${trimmed.slice(2).trim()}
  • \n`; + } else if (isSubListItem) { + if (!inSubList) { + result = result.replace(/<\/li>\n$/, ''); + result += '
      \n'; + inSubList = true; } - result += `
    • ${line.trim().substring(2)}
    • `; + result += `
    • ${trimmed.slice(4).trim()}
    • \n`; } else { - if (isSecondLevelOpen) { - result += '
    '; - isSecondLevelOpen = false; + if (inSubList) { + result += '
\n'; + inSubList = false; } - if (isFirstLevelOpen) { - result += ''; - isFirstLevelOpen = false; + if (inList) { + result += '\n'; + inList = false; } - result += line; + result += `${line}\n`; } }); - if (isSecondLevelOpen) result += ''; - if (isFirstLevelOpen) result += ''; + if (inSubList) result += '\n'; + if (inList) result += '\n'; return result; -}; +} const parseMarkdown = (content: string) => { return parseLists( @@ -45,6 +50,7 @@ const parseMarkdown = (content: string) => { .replace(/\[(.*?)\]\((.*?)\)/g, '$1') .replace(/`(.*?)`/g, '$1') .replace(/\*\*(.*?)\*\*/g, '$1') + .replace(/\*(.*?)\*/g, '$1') ); }; diff --git a/src/components/ParserOpenRPC/DetailsBox/RenderParams.tsx b/src/components/ParserOpenRPC/DetailsBox/RenderParams.tsx index 887b977a4f5..79444a968ab 100644 --- a/src/components/ParserOpenRPC/DetailsBox/RenderParams.tsx +++ b/src/components/ParserOpenRPC/DetailsBox/RenderParams.tsx @@ -96,6 +96,10 @@ const renderSchema = (schemaItem, schemas, name) => { ); + if (schemaItem?.schema?.oneOf) return renderCombinations(schemaItem.schema, name, "oneOf"); + if (schemaItem?.schema?.allOf) return renderCombinations(schemaItem.schema, name, "allOf"); + if (schemaItem?.schema?.anyOf) return renderCombinations(schemaItem.schema, name, "anyOf"); + if (schemaItem.oneOf) return renderCombinations(schemaItem, name, "oneOf"); if (schemaItem.allOf) return renderCombinations(schemaItem, name, "allOf"); if (schemaItem.anyOf) return renderCombinations(schemaItem, name, "anyOf"); @@ -184,5 +188,9 @@ export const renderParamSchemas = (inputSchema, schemas) => { }; export const renderResultSchemas = (inputSchema, schemas) => { + const customResult = inputSchema?.schema?.maxPriorityFeePerGas; + if (customResult) { + return <>{renderSchema(customResult, schemas, inputSchema.name)} + } return <>{renderSchema(inputSchema, schemas, inputSchema.name)}; }; diff --git a/src/components/ParserOpenRPC/DetailsBox/index.tsx b/src/components/ParserOpenRPC/DetailsBox/index.tsx index 912b1640e9e..e72022c881d 100644 --- a/src/components/ParserOpenRPC/DetailsBox/index.tsx +++ b/src/components/ParserOpenRPC/DetailsBox/index.tsx @@ -18,6 +18,7 @@ interface TagItem { interface DetailsBoxProps { method: string; description: string | null; + summary: string | null; params: MethodParam[]; components: SchemaComponents; result: any; @@ -28,6 +29,7 @@ interface DetailsBoxProps { export default function DetailsBox({ method, description, + summary, params, components, result, @@ -46,7 +48,14 @@ export default function DetailsBox({ )} {method} - + {summary !== null && ( +

+ +

+ )} + {description !== null && ( + + )} {extraContent &&
{extraContent}
} void; + requestURL: string; + isLoading: boolean; } export default function RequestBox({ @@ -32,6 +33,8 @@ export default function RequestBox({ isMetamaskNetwork = false, defExampleResponse, resetResponseHandle, + requestURL = "", + isLoading, }: RequestBoxProps) { const { userAPIKey } = useContext(MetamaskProviderContext); const exampleRequest = useMemo(() => { @@ -41,7 +44,7 @@ export default function RequestBox({ if (isMetamaskNetwork) { return `await window.ethereum.request({\n "method": "${method}",\n "params": ${preparedParams.replace(/"([^"]+)":/g, '$1:')},\n});`; } - return `curl ${LINEA_REQUEST_URL}/v3/${API_KEY} \\\n -X POST \\\n -H "Content-Type: application/json" \\\n -d '{\n "jsonrpc": "2.0",\n "method": "${method}",\n "params": ${preparedShellParams},\n "id": 1\n }'`; + return `curl ${requestURL}${API_KEY} \\\n -X POST \\\n -H "Content-Type: application/json" \\\n -d '{\n "jsonrpc": "2.0",\n "method": "${method}",\n "params": ${preparedShellParams},\n "id": 1\n }'`; }, [userAPIKey, method, paramsData]); const exampleResponse = useMemo(() => { @@ -59,18 +62,18 @@ export default function RequestBox({ }, [response, defExampleResponse]); const methodsWithRequiredWalletConnection = ["eth_accounts", "eth_sendTransaction", "personal_sign", "eth_signTypedData_v4"]; - const isRunAndCustomizeRequestDisabled = methodsWithRequiredWalletConnection.includes(method) ? + const isRunAndCustomizeRequestDisabled = isMetamaskNetwork && methodsWithRequiredWalletConnection.includes(method) ? !isMetamaskInstalled : false; const runRequestButton = ( ); diff --git a/src/components/ParserOpenRPC/RequestBox/styles.module.css b/src/components/ParserOpenRPC/RequestBox/styles.module.css index 78f14a484a6..0ded51e6801 100644 --- a/src/components/ParserOpenRPC/RequestBox/styles.module.css +++ b/src/components/ParserOpenRPC/RequestBox/styles.module.css @@ -40,3 +40,28 @@ background: none; border: 0; } + +.runBtnWrap { + display: flex; + justify-content: center; + min-width: 109px; +} + +.loader { + width: 16px; + height: 16px; + border: 2px solid #FFF; + border-bottom-color: transparent; + border-radius: 50%; + display: inline-block; + animation: rotation 1s linear infinite; +} + +@keyframes rotation { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} diff --git a/src/components/ParserOpenRPC/index.tsx b/src/components/ParserOpenRPC/index.tsx index 9f398816224..ed8bce7181a 100644 --- a/src/components/ParserOpenRPC/index.tsx +++ b/src/components/ParserOpenRPC/index.tsx @@ -6,8 +6,8 @@ import React, { useEffect, } from "react"; import { usePluginData } from "@docusaurus/useGlobalData"; -import { useLocation } from "@docusaurus/router"; -import { ResponseItem, NETWORK_NAMES } from "@site/src/plugins/plugin-json-rpc"; +import { ResponseItem } from "@site/src/plugins/plugin-json-rpc"; +import { NETWORK_NAMES } from "@site/src/lib/constants"; import DetailsBox from "@site/src/components/ParserOpenRPC/DetailsBox"; import InteractiveBox from "@site/src/components/ParserOpenRPC/InteractiveBox"; import RequestBox from "@site/src/components/ParserOpenRPC/RequestBox"; @@ -24,7 +24,7 @@ import { import { AuthBox } from "@site/src/components/ParserOpenRPC/AuthBox"; import { MetamaskProviderContext } from "@site/src/theme/Root"; import ProjectsBox from "@site/src/components/ParserOpenRPC/ProjectsBox"; -import { LINEA_REQUEST_URL, REF_PATH } from "@site/src/lib/constants"; +import { LINEA_REQUEST_URL } from "@site/src/lib/constants"; interface ParserProps { network: NETWORK_NAMES; @@ -49,8 +49,6 @@ export default function ParserOpenRPC({ extraContent, }: ParserProps) { if (!method || !network) return null; - const location = useLocation(); - const { pathname } = location; const [isModalOpen, setModalOpen] = useState(false); const [reqResult, setReqResult] = useState(undefined); const [paramsData, setParamsData] = useState([]); @@ -59,6 +57,7 @@ export default function ParserOpenRPC({ const [isComplexTypeView, setIsComplexTypeView] = useState(false); const { metaMaskAccount, metaMaskProvider, userAPIKey } = useContext(MetamaskProviderContext); const [defExampleResponse, setDefExampleResponse] = useState(undefined); + const [isLoading, setIsLoading] = useState(false); const { colorMode } = useColorMode(); const trackAnalyticsForRequest = (response) => { trackClickForSegment({ @@ -124,7 +123,8 @@ export default function ParserOpenRPC({ ); return { - description: currentMethod.description || currentMethod.summary || null, + description: currentMethod.description || null, + summary: currentMethod.summary || null, params: currentMethod.params || [], result: currentMethod.result || null, components: currentNetwork.data.components || null, @@ -132,6 +132,7 @@ export default function ParserOpenRPC({ paramStructure: currentMethod?.paramStructure || null, errors, tags, + servers: currentNetwork.data?.servers?.[0]?.url || null }; }, [currentNetwork, method]); @@ -187,39 +188,71 @@ export default function ParserOpenRPC({ setParamsData(Object.values(data)); }; - const onSubmitRequestHandle = async () => { - if (isMetamaskNetwork) { - if (!metaMaskProvider) return - try { - const response = await metaMaskProvider?.request({ - method: method, - params: paramsData - }) - setReqResult(response); - trackAnalyticsForRequest(response); - } catch (e) { - setReqResult(e); - } + const handleMetaMaskRequest = async () => { + if (!metaMaskProvider) return; + setIsLoading(true); + try { + const response = await metaMaskProvider.request({ + method, + params: paramsData, + }); + setReqResult(response); + trackAnalyticsForRequest(response); + } catch (e) { + setReqResult(e); + } finally { + setIsLoading(false); + } + }; + + const getInfuraUrl = (url: string) => { + if (process.env.VERCEL_ENV === "production") { + return url; } else { - const URL = `${LINEA_REQUEST_URL}/v3/${userAPIKey}`; - let params = { - method: "POST", + return url.replace("infura.io", "dev.infura.org"); + } + } + + const INIT_URL = currentMethodData.servers !== null ? getInfuraUrl(currentMethodData.servers) : LINEA_REQUEST_URL; + + const handleServiceRequest = async () => { + const URL = `${INIT_URL}${userAPIKey}`; + const params = { + method: "POST", + headers: { "Content-Type": "application/json", - body: JSON.stringify({ - jsonrpc: "2.0", - method, - params: paramsData, - id: 1, - }), - }; + }, + body: JSON.stringify({ + jsonrpc: "2.0", + method, + params: paramsData, + id: 1, + }), + }; + setIsLoading(true); + try { const res = await fetch(URL, params); if (res.ok) { const response = await res.json(); - setReqResult(response.result); - trackAnalyticsForRequest(response.result); + setReqResult(response); + trackAnalyticsForRequest(response); } else { - console.error("error"); + const errorText = await res.text(); + const errorState = JSON.parse(errorText); + setReqResult(`Request failed. Status: ${res.status}. ${errorState}`); } + } catch (e) { + setReqResult(`${e}`); + } finally { + setIsLoading(false); + } + }; + + const onSubmitRequestHandle = async () => { + if (isMetamaskNetwork) { + await handleMetaMaskRequest(); + } else { + await handleServiceRequest(); } }; @@ -250,6 +283,7 @@ export default function ParserOpenRPC({
- {pathname.startsWith(REF_PATH) && } - {!pathname.startsWith(REF_PATH) && !metaMaskAccount && ( + {!isMetamaskNetwork && } + {isMetamaskNetwork && !metaMaskAccount && ( )}
diff --git a/src/css/custom.css b/src/css/custom.css index 637fe43655e..fa4f1b8a078 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -356,7 +356,7 @@ button:hover { } .react-dropdown-select-dropdown-handle { - color: #ffffff; + color: #fff; } @media (width <= 1200px) { diff --git a/src/helpers/index.ts b/src/helpers/index.ts new file mode 100644 index 00000000000..05b676213b0 --- /dev/null +++ b/src/helpers/index.ts @@ -0,0 +1,29 @@ +import { RPC_NETWORK_URL } from "../lib/constants"; + +export const fetchAndGenerateDynamicSidebarItems = async (networkName) => { + try { + const response = await fetch(`${RPC_NETWORK_URL}/${networkName}`); + const data = await response.json(); + const dynamicItems = data.methods.map((method) => ({ + type: "link", + label: method.name, + href: `/services/reference/linea/json-rpc-methods/${method.name}`, + })).sort((a, b) => a.label.localeCompare(b.label)); + return [ + { + type: "category", + label: "JSON-RPC methods", + link: { + type: 'generated-index', + slug: "/reference/linea/json-rpc-methods/" + }, + collapsed: true, + collapsible: true, + items: dynamicItems, + }, + ]; + } catch (error) { + console.error("Error fetching methods:", error); + return []; + } +} diff --git a/src/lib/constants.js b/src/lib/constants.ts similarity index 85% rename from src/lib/constants.js rename to src/lib/constants.ts index f10a18bdc57..0c3cbd6303f 100644 --- a/src/lib/constants.js +++ b/src/lib/constants.ts @@ -474,8 +474,132 @@ export const REQUEST_PARAMS = (method = "POST") => ({ export const AUTH_WALLET_SESSION_NAME = "auth.wallet.session"; export const AUTH_WALLET_TOKEN = "auth.wallet.token"; export const AUTH_WALLET_PROJECTS = "auth.wallet.projects"; -export const LINEA_DEV_URL = "https://linea-mainnet.dev.infura.org"; -export const LINEA_PROD_URL = "https://linea-mainnet.infura.io"; +export const LINEA_DEV_URL = "https://linea-mainnet.dev.infura.org/v3/"; +export const LINEA_PROD_URL = "https://linea-mainnet.infura.io/v3/"; export const LINEA_REQUEST_URL = process.env.VERCEL_ENV === "production" ? LINEA_PROD_URL : LINEA_DEV_URL; + +export const RPC_NETWORK_URL = "https://sot-network-methods.vercel.app/specs"; + +export enum NETWORK_NAMES { + linea = "linea", + metamask = "metamask", +} + +export const lineaSidebarNames = [ + { + old: "get-started", + new: "Get started" + }, + { + old: "how-to", + new: "How to" + }, + { + old: "use-ipfs", + new: "Use IPFS" + }, + { + old: "access-ipfs-content", + new: "Access IPFS content" + }, + { + old: "send-a-transaction", + new: "Send transactions" + }, + { + old: "use-infura-as-a-reverse-proxy", + new: "Use Infura as a reverse proxy" + }, + { + old: "layer-2-networks", + new: "Layer 2 networks" + }, + { + old: "json-rpc-methods", + new: "JSON-RPC methods" + }, + { + old: "avalanche-c-chain", + new: "Avalanche (C-Chain)" + }, + { + old: "bnb-smart-chain", + new: "BNB Smart Chain" + }, + { + old: "gas-api", + new: "Gas API" + }, + { + old: "ipfs", + new: "IPFS" + }, + { + old: "opbnb", + new: "opBNB" + }, + { + old: "polygon-pos", + new: "Polygon PoS" + }, + { + old: "zksync", + new: "ZKsync Era" + }, + { + old: "http-api-methods", + new: "HTTP API methods" + }, + { + old: "api-reference", + new: "API reference" + }, + { + old: "subscription-methods", + new: "Subscription methods" + }, + { + old: "trace-methods", + new: "Trace methods" + }, +]; + +export const JSON_RPC_METHODS_LABEL = "JSON-RPC methods"; + +type SidebarItemType = "link" | "category"; + +export type SidebarItem = { + type: SidebarItemType; + label: string; + href: string; + sidebar_position: number; + items?: SidebarItem[]; +} + +export type SidebarDocs = { + docs: SidebarItem[]; +} + +export type DynamicData = { + type: SidebarItemType; + label: string; + link: { + type: string; + slug: string; + }; + collapsed: boolean; + collapsible: boolean; + items?: SidebarItem[]; +} + +export type CustomFields = { + LD_CLIENT_ID: string; + VERCEL_ENV: string; + DASHBOARD_PREVIEW_URL: string; + SENTRY_KEY: string; + GF_SURVEY_KEY: string; + sidebarData: SidebarDocs; + dynamicData: DynamicData[], +} diff --git a/src/plugins/plugin-json-rpc.ts b/src/plugins/plugin-json-rpc.ts index a3ecbaa1a9f..73ea3f6e4ec 100644 --- a/src/plugins/plugin-json-rpc.ts +++ b/src/plugins/plugin-json-rpc.ts @@ -1,3 +1,5 @@ +import { JSON_RPC_METHODS_LABEL, NETWORK_NAMES, RPC_NETWORK_URL } from "../lib/constants"; + export interface ResponseItem { name: string; data: any | null; @@ -22,13 +24,6 @@ async function fetchMultipleData( return responses; } -const RPC_NETWORK_URL = "https://sot-network-methods.vercel.app/specs"; - -export enum NETWORK_NAMES { - linea = "linea", - metamask = "metamask", -} - const requests = [ { url: `${RPC_NETWORK_URL}/${NETWORK_NAMES.linea}`, @@ -40,14 +35,41 @@ const requests = [ }, ]; +function generateMethodMDX(page) { + return `--- +title: '${page.name}' +--- +# ${page.name} + `; +} + export default function useNetworksMethodPlugin() { return { name: "plugin-json-rpc", async contentLoaded({ actions }) { - const { setGlobalData } = actions; + const { setGlobalData, createData, addRoute } = actions; await fetchMultipleData(requests) .then((responseArray) => { setGlobalData({ netData: responseArray }); + return Promise.all(responseArray[responseArray.findIndex(item => item.name === NETWORK_NAMES.linea) || 0].data.methods.map(async (page) => { + + const methodMDXContent = generateMethodMDX(page); + + const filePath = await createData( + `services/reference/linea/json-rpc-methods/${page.name}.mdx`, + methodMDXContent + ); + + return addRoute({ + path: `/services/reference/linea/json-rpc-methods/${page.name}`, + component: require.resolve("../components/CustomReferencePage/index.tsx"), + exact: true, + modules: { + methodFile: filePath, + }, + customData: { ...page } + }); + })); }) .catch(() => { setGlobalData({ netData: [] }); diff --git a/src/theme/Layout/index.tsx b/src/theme/Layout/index.tsx index 595adbcb1a2..e95436cfb60 100644 --- a/src/theme/Layout/index.tsx +++ b/src/theme/Layout/index.tsx @@ -3,7 +3,8 @@ import { usePluginData } from "@docusaurus/useGlobalData"; import { useLocation } from "@docusaurus/router"; import Layout from "@theme-original/Layout"; import ParserOpenRPC from "@site/src/components/ParserOpenRPC"; -import { ResponseItem, NETWORK_NAMES } from "@site/src/plugins/plugin-json-rpc"; +import { ResponseItem } from "@site/src/plugins/plugin-json-rpc"; +import { NETWORK_NAMES } from "@site/src/lib/constants"; import styles from "./styles.module.css"; const REF_PATH = "/wallet/reference/"; diff --git a/wallet/reference/new-reference.mdx b/wallet/reference/new-reference.mdx index e46cf7086d0..583dd0f4aec 100644 --- a/wallet/reference/new-reference.mdx +++ b/wallet/reference/new-reference.mdx @@ -6,7 +6,7 @@ sidebar_class_name: "hidden" --- import ParserOpenRPC from "@site/src/components/ParserOpenRPC" -import { NETWORK_NAMES } from "@site/src/plugins/plugin-json-rpc" +import { NETWORK_NAMES } from "@site/src/lib/constants";