From 5e96c8d1582084234c3ac7e114b029b7cb9c65dc Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Thu, 25 Jul 2024 13:55:42 -0400 Subject: [PATCH 1/7] checkin --- bun.lockb | Bin 549566 -> 568089 bytes docs/codeStrings/config.ts | 8 +++ docs/codeStrings/requestAccounts.ts | 14 +++++ docs/components/App.tsx | 19 ++++++ docs/components/Plain.tsx | 16 ++++++ docs/components/RequestAccountsButton.tsx | 24 ++++++++ .../RequestAccountsHTML.tsx | 54 ++++++++++++++++++ docs/components/requestAccountsHTML/app.js | 10 ++++ docs/components/requestAccountsHTML/config.js | 6 ++ .../components/requestAccountsHTML/index.html | 14 +++++ docs/html/test.html | 0 docs/js/test.js | 16 ++++++ docs/pages/sdk/install.mdx | 14 +++++ package.json | 2 + 14 files changed, 197 insertions(+) create mode 100644 docs/codeStrings/config.ts create mode 100644 docs/codeStrings/requestAccounts.ts create mode 100644 docs/components/App.tsx create mode 100644 docs/components/Plain.tsx create mode 100644 docs/components/RequestAccountsButton.tsx create mode 100644 docs/components/requestAccountsHTML/RequestAccountsHTML.tsx create mode 100644 docs/components/requestAccountsHTML/app.js create mode 100644 docs/components/requestAccountsHTML/config.js create mode 100644 docs/components/requestAccountsHTML/index.html create mode 100644 docs/html/test.html create mode 100644 docs/js/test.js diff --git a/bun.lockb b/bun.lockb index 7404e8a910a648ff58f10c9bc57fc2266acc0c69..492f1d6ca0ad900724ad17f566a7d7e41921796d 100755 GIT binary patch delta 111192 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 delta 99845 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

h2cgWI)dyjVga;)|H{rer3z8AC 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 t5KJd78Rn)%TsADqPV4bw provider.request({ method: "eth_requestAccounts" })} + > + Connect + + ); +}`; + +export default requestAccountsApp; diff --git a/docs/components/App.tsx b/docs/components/App.tsx new file mode 100644 index 0000000..3b0244d --- /dev/null +++ b/docs/components/App.tsx @@ -0,0 +1,19 @@ +"use client"; + +import type { ReactNode } from "react"; + +function App({ children }: { children: ReactNode }) { + const isServer = typeof window === "undefined"; + if (isServer) { + return null; + } + return ( + + + {children} + + + ); +} + +export default App; diff --git a/docs/components/Plain.tsx b/docs/components/Plain.tsx new file mode 100644 index 0000000..3ed58f9 --- /dev/null +++ b/docs/components/Plain.tsx @@ -0,0 +1,16 @@ +function Plain() { + const htmlContent = { + __html: ` + + + + + + +`, + }; + + return

; +} + +export default Plain; diff --git a/docs/components/RequestAccountsButton.tsx b/docs/components/RequestAccountsButton.tsx new file mode 100644 index 0000000..d0f6b02 --- /dev/null +++ b/docs/components/RequestAccountsButton.tsx @@ -0,0 +1,24 @@ +"use client"; +import { Sandpack } from "@codesandbox/sandpack-react"; +import { amethyst } from "@codesandbox/sandpack-themes"; + +import config from "../codeStrings/config"; +import requestAccountsApp from "../codeStrings/requestAccounts"; + +export default function RequestAccountsButton() { + return ( + + ); +} diff --git a/docs/components/requestAccountsHTML/RequestAccountsHTML.tsx b/docs/components/requestAccountsHTML/RequestAccountsHTML.tsx new file mode 100644 index 0000000..5204643 --- /dev/null +++ b/docs/components/requestAccountsHTML/RequestAccountsHTML.tsx @@ -0,0 +1,54 @@ +"use client"; +import { Sandpack } from "@codesandbox/sandpack-react"; +import { amethyst } from "@codesandbox/sandpack-themes"; + +export default function RequestAccountsHTML() { + return ( + + + + + + Connect to Coinbase Wallet + + + + + + + +`, + }} + theme={amethyst} + /> + ); +} diff --git a/docs/components/requestAccountsHTML/app.js b/docs/components/requestAccountsHTML/app.js new file mode 100644 index 0000000..83897f5 --- /dev/null +++ b/docs/components/requestAccountsHTML/app.js @@ -0,0 +1,10 @@ +document.addEventListener("DOMContentLoaded", function() { + const connectButton = document.getElementById("connectButton"); + + connectButton.addEventListener("click", function() { + const provider = window.sdk.makeWeb3Provider({ options: "smartWalletOnly" }); + provider.request({ method: "eth_requestAccounts" }) + .then(accounts => console.log(accounts)) + .catch(error => console.error(error)); + }); +}); diff --git a/docs/components/requestAccountsHTML/config.js b/docs/components/requestAccountsHTML/config.js new file mode 100644 index 0000000..3af54af --- /dev/null +++ b/docs/components/requestAccountsHTML/config.js @@ -0,0 +1,6 @@ +const CoinbaseWalletSDK = window.CoinbaseWalletSDK; + +window.sdk = new CoinbaseWalletSDK({ + appName: "My App Name", + appChainIds: [8453], +}); diff --git a/docs/components/requestAccountsHTML/index.html b/docs/components/requestAccountsHTML/index.html new file mode 100644 index 0000000..dcb8bdd --- /dev/null +++ b/docs/components/requestAccountsHTML/index.html @@ -0,0 +1,14 @@ + + + + + + Connect to Coinbase Wallet + + + + + + + + \ No newline at end of file diff --git a/docs/html/test.html b/docs/html/test.html new file mode 100644 index 0000000..e69de29 diff --git a/docs/js/test.js b/docs/js/test.js new file mode 100644 index 0000000..cee46a1 --- /dev/null +++ b/docs/js/test.js @@ -0,0 +1,16 @@ +const sdk = useMemo(() => + new CoinbaseWalletSDK({ + appName: "My App Name", + appChainIds: [8453], + }), []); + +console.log("loaded!!!!!"); + +// Ensure the DOM is fully loaded before trying to access elements +document.addEventListener("DOMContentLoaded", function() { + // Attach the event listener to the button with id 'testButton' + document.getElementById("testButton").addEventListener( + "click", + () => provider.request({ method: "eth_requestAccounts" }), + ); +}); diff --git a/docs/pages/sdk/install.mdx b/docs/pages/sdk/install.mdx index 3e4707c..3c02fae 100644 --- a/docs/pages/sdk/install.mdx +++ b/docs/pages/sdk/install.mdx @@ -1,3 +1,7 @@ +import App from '../../components/App'; +import RequestAccountsButton from '../../components/RequestAccountsButton'; +import RequestAccountsHTML from '../../components/requestAccountsHTML/RequestAccountsHTML'; + # Install ## Command @@ -20,3 +24,13 @@ bun i @coinbase/wallet-sdk ``` ::: +:::code-group + +
+ +
+ +
+ +
+::: \ No newline at end of file diff --git a/package.json b/package.json index cb43437..029be9d 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,8 @@ "prepare": "bun x simple-git-hooks" }, "dependencies": { + "@codesandbox/sandpack-react": "^2.18.0", + "@codesandbox/sandpack-themes": "^2.0.21", "@types/react": "latest", "@vercel/analytics": "^1.2.2", "react": "latest", From 132a8dbd25404bb08cf707af9130c822168290ed Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Thu, 25 Jul 2024 16:29:59 -0400 Subject: [PATCH 2/7] checkin --- docs/codeStrings/{ => react}/config.ts | 0 docs/codeStrings/react/requestAccounts.ts | 25 +++++++++ docs/codeStrings/requestAccounts.ts | 14 ----- docs/codeStrings/static/requestAccounts.ts | 49 +++++++++++++++++ .../RequestAccountsHTML.tsx | 54 ------------------- docs/components/requestAccountsHTML/app.js | 10 ---- docs/components/requestAccountsHTML/config.js | 6 --- .../components/requestAccountsHTML/index.html | 14 ----- .../react/RequestAccountsReact.tsx} | 8 ++- .../sandpack/static/RequestAccountsButton.tsx | 15 ++++++ .../sdk/CoinbaseWalletProvider/overview.mdx | 0 .../request/eth_requestAccounts.mdx | 31 +++++++++++ docs/pages/sdk/install.mdx | 15 ------ vocs.config.tsx | 12 +++++ 14 files changed, 135 insertions(+), 118 deletions(-) rename docs/codeStrings/{ => react}/config.ts (100%) create mode 100644 docs/codeStrings/react/requestAccounts.ts delete mode 100644 docs/codeStrings/requestAccounts.ts create mode 100644 docs/codeStrings/static/requestAccounts.ts delete mode 100644 docs/components/requestAccountsHTML/RequestAccountsHTML.tsx delete mode 100644 docs/components/requestAccountsHTML/app.js delete mode 100644 docs/components/requestAccountsHTML/config.js delete mode 100644 docs/components/requestAccountsHTML/index.html rename docs/components/{RequestAccountsButton.tsx => sandpack/react/RequestAccountsReact.tsx} (58%) create mode 100644 docs/components/sandpack/static/RequestAccountsButton.tsx create mode 100644 docs/pages/sdk/CoinbaseWalletProvider/overview.mdx create mode 100644 docs/pages/sdk/CoinbaseWalletProvider/request/eth_requestAccounts.mdx diff --git a/docs/codeStrings/config.ts b/docs/codeStrings/react/config.ts similarity index 100% rename from docs/codeStrings/config.ts rename to docs/codeStrings/react/config.ts diff --git a/docs/codeStrings/react/requestAccounts.ts b/docs/codeStrings/react/requestAccounts.ts new file mode 100644 index 0000000..5f301a9 --- /dev/null +++ b/docs/codeStrings/react/requestAccounts.ts @@ -0,0 +1,25 @@ +const requestAccountsApp = `import {sdk} from "./config"; +import {useState} from "react"; + +export default function App() { + const [address, setAddress] = useState(undefined); + const provider = sdk.makeWeb3Provider({ options: "smartWalletOnly" }); + + const handleClick = async () => { + const accounts = await provider.request({ method: "eth_requestAccounts" }); + setAddress(accounts[0]); + } + + return ( + <> + {!address && } + {address &&

Connected address: {address}

} + + ); +}`; + +export default requestAccountsApp; diff --git a/docs/codeStrings/requestAccounts.ts b/docs/codeStrings/requestAccounts.ts deleted file mode 100644 index ea37e1f..0000000 --- a/docs/codeStrings/requestAccounts.ts +++ /dev/null @@ -1,14 +0,0 @@ -const requestAccountsApp = `import {sdk} from "./config"; - -export default function App() { - const provider = sdk.makeWeb3Provider({ options: "smartWalletOnly" }); - return ( - - ); -}`; - -export default requestAccountsApp; diff --git a/docs/codeStrings/static/requestAccounts.ts b/docs/codeStrings/static/requestAccounts.ts new file mode 100644 index 0000000..4b93983 --- /dev/null +++ b/docs/codeStrings/static/requestAccounts.ts @@ -0,0 +1,49 @@ +export const requestAccountsHTML = ` + + + + + Connect to Coinbase Wallet + + + + +
+ + +
+ +`; + +export const requestAccountsJS = `document.addEventListener('DOMContentLoaded', () => { + // Initialize the Coinbase Wallet SDK + const coinbaseWallet = new CoinbaseWalletSDK({ + appName: "My App Name", + appChainIds: [8453] // Replace with your chain IDs if needed + }); + + // Create a Web3 provider + const provider = coinbaseWallet.makeWeb3Provider({ options: "smartWalletOnly" }); + + // Get DOM elements + const connectButton = document.getElementById('connectButton'); + const connectedAddressParagraph = document.getElementById('connectedAddress'); + const addressSpan = document.getElementById('address'); + + // Event listener for the connect button + connectButton.addEventListener('click', async () => { + try { + // Request accounts from the provider + const accounts = await provider.request({ method: 'eth_requestAccounts' }); + if (accounts.length > 0) { + // Update the UI to show the connected address + addressSpan.textContent = accounts[0]; + connectedAddressParagraph.style.display = 'block'; + connectButton.style.display = 'none'; + } + } catch (error) { + console.error('Error connecting to Coinbase Wallet:', error); + } + }); +}); +`; diff --git a/docs/components/requestAccountsHTML/RequestAccountsHTML.tsx b/docs/components/requestAccountsHTML/RequestAccountsHTML.tsx deleted file mode 100644 index 5204643..0000000 --- a/docs/components/requestAccountsHTML/RequestAccountsHTML.tsx +++ /dev/null @@ -1,54 +0,0 @@ -"use client"; -import { Sandpack } from "@codesandbox/sandpack-react"; -import { amethyst } from "@codesandbox/sandpack-themes"; - -export default function RequestAccountsHTML() { - return ( - - - - - - Connect to Coinbase Wallet - - - - - - - -`, - }} - theme={amethyst} - /> - ); -} diff --git a/docs/components/requestAccountsHTML/app.js b/docs/components/requestAccountsHTML/app.js deleted file mode 100644 index 83897f5..0000000 --- a/docs/components/requestAccountsHTML/app.js +++ /dev/null @@ -1,10 +0,0 @@ -document.addEventListener("DOMContentLoaded", function() { - const connectButton = document.getElementById("connectButton"); - - connectButton.addEventListener("click", function() { - const provider = window.sdk.makeWeb3Provider({ options: "smartWalletOnly" }); - provider.request({ method: "eth_requestAccounts" }) - .then(accounts => console.log(accounts)) - .catch(error => console.error(error)); - }); -}); diff --git a/docs/components/requestAccountsHTML/config.js b/docs/components/requestAccountsHTML/config.js deleted file mode 100644 index 3af54af..0000000 --- a/docs/components/requestAccountsHTML/config.js +++ /dev/null @@ -1,6 +0,0 @@ -const CoinbaseWalletSDK = window.CoinbaseWalletSDK; - -window.sdk = new CoinbaseWalletSDK({ - appName: "My App Name", - appChainIds: [8453], -}); diff --git a/docs/components/requestAccountsHTML/index.html b/docs/components/requestAccountsHTML/index.html deleted file mode 100644 index dcb8bdd..0000000 --- a/docs/components/requestAccountsHTML/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - Connect to Coinbase Wallet - - - - - - - - \ No newline at end of file diff --git a/docs/components/RequestAccountsButton.tsx b/docs/components/sandpack/react/RequestAccountsReact.tsx similarity index 58% rename from docs/components/RequestAccountsButton.tsx rename to docs/components/sandpack/react/RequestAccountsReact.tsx index d0f6b02..dcb935f 100644 --- a/docs/components/RequestAccountsButton.tsx +++ b/docs/components/sandpack/react/RequestAccountsReact.tsx @@ -1,11 +1,10 @@ "use client"; import { Sandpack } from "@codesandbox/sandpack-react"; -import { amethyst } from "@codesandbox/sandpack-themes"; -import config from "../codeStrings/config"; -import requestAccountsApp from "../codeStrings/requestAccounts"; +import config from "../../../codeStrings/react/config"; +import requestAccountsApp from "../../../codeStrings/react/requestAccounts"; -export default function RequestAccountsButton() { +export default function RequestAccountsReact() { return ( ); } diff --git a/docs/components/sandpack/static/RequestAccountsButton.tsx b/docs/components/sandpack/static/RequestAccountsButton.tsx new file mode 100644 index 0000000..9192a13 --- /dev/null +++ b/docs/components/sandpack/static/RequestAccountsButton.tsx @@ -0,0 +1,15 @@ +"use client"; +import { Sandpack } from "@codesandbox/sandpack-react"; +import { requestAccountsHTML, requestAccountsJS } from "../../../codeStrings/static/requestAccounts"; + +export default function RequestAccountsHTML() { + return ( + + ); +} diff --git a/docs/pages/sdk/CoinbaseWalletProvider/overview.mdx b/docs/pages/sdk/CoinbaseWalletProvider/overview.mdx new file mode 100644 index 0000000..e69de29 diff --git a/docs/pages/sdk/CoinbaseWalletProvider/request/eth_requestAccounts.mdx b/docs/pages/sdk/CoinbaseWalletProvider/request/eth_requestAccounts.mdx new file mode 100644 index 0000000..722f7d8 --- /dev/null +++ b/docs/pages/sdk/CoinbaseWalletProvider/request/eth_requestAccounts.mdx @@ -0,0 +1,31 @@ +import RequestAccountsReact from '../../../../components/sandpack/react/RequestAccountsReact'; +import RequestAccountsHTML from '../../../../components/sandpack/static/RequestAccountsButton'; + +# eth_requestAccounts +Defined in [EIP-1102](https://eips.ethereum.org/EIPS/eip-1102) +> Calling this method MAY trigger a user interface that allows the user to approve or reject account access for a given app. + + +## Returns +`Array` + +An array of Ethereum addresses, which the connected user presumably controls. + +## Errors +| Code | Message | +| ---- | ------- | +| 4001 | User denied connection request | + + + +## Examples +:::code-group + +
+ +
+ +
+ +
+::: \ No newline at end of file diff --git a/docs/pages/sdk/install.mdx b/docs/pages/sdk/install.mdx index 3c02fae..f8c4a8d 100644 --- a/docs/pages/sdk/install.mdx +++ b/docs/pages/sdk/install.mdx @@ -1,7 +1,3 @@ -import App from '../../components/App'; -import RequestAccountsButton from '../../components/RequestAccountsButton'; -import RequestAccountsHTML from '../../components/requestAccountsHTML/RequestAccountsHTML'; - # Install ## Command @@ -23,14 +19,3 @@ yarn add @coinbase/wallet-sdk bun i @coinbase/wallet-sdk ``` ::: - -:::code-group - -
- -
- -
- -
-::: \ No newline at end of file diff --git a/vocs.config.tsx b/vocs.config.tsx index 163d917..045a6b3 100644 --- a/vocs.config.tsx +++ b/vocs.config.tsx @@ -127,6 +127,18 @@ export default defineConfig({ text: "Upgrading from 3.x", link: "/sdk/v3-to-v4-changes", }, + { + text: "CoinbaseWalletProvider", + items: [ + { text: "Overview", link: "/sdk/CoinbaseWalletProvider/overview" }, + { + text: "request", + items: [ + { text: "eth_requestAccounts", link: "/sdk/CoinbaseWalletProvider/request/eth_requestAccounts" }, + ], + }, + ], + }, ], }, { From e244bf9caae4a8ef310b00c8e43d1436a38c507e Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Thu, 25 Jul 2024 16:36:56 -0400 Subject: [PATCH 3/7] ready for first review --- docs/codeStrings/react/config.ts | 4 +++- docs/codeStrings/static/requestAccounts.ts | 7 +++---- .../{RequestAccountsButton.tsx => RequestAccountsHTML.tsx} | 0 .../CoinbaseWalletProvider/request/eth_requestAccounts.mdx | 5 ++--- 4 files changed, 8 insertions(+), 8 deletions(-) rename docs/components/sandpack/static/{RequestAccountsButton.tsx => RequestAccountsHTML.tsx} (100%) diff --git a/docs/codeStrings/react/config.ts b/docs/codeStrings/react/config.ts index 2873c3a..f574df0 100644 --- a/docs/codeStrings/react/config.ts +++ b/docs/codeStrings/react/config.ts @@ -1,8 +1,10 @@ const config = `import { CoinbaseWalletSDK } from "@coinbase/wallet-sdk"; +const baseSepoliaChainId = 84532; + export const sdk = new CoinbaseWalletSDK({ appName: "My App Name", - appChainIds: [8453], + appChainIds: [baseSepoliaChainId], })`; export default config; diff --git a/docs/codeStrings/static/requestAccounts.ts b/docs/codeStrings/static/requestAccounts.ts index 4b93983..631a974 100644 --- a/docs/codeStrings/static/requestAccounts.ts +++ b/docs/codeStrings/static/requestAccounts.ts @@ -16,16 +16,15 @@ export const requestAccountsHTML = ` `; export const requestAccountsJS = `document.addEventListener('DOMContentLoaded', () => { - // Initialize the Coinbase Wallet SDK + const baseSepoliaChainId = 84532; + const coinbaseWallet = new CoinbaseWalletSDK({ appName: "My App Name", - appChainIds: [8453] // Replace with your chain IDs if needed + appChainIds: [baseSepoliaChainId] // Replace with your chain IDs if needed }); - // Create a Web3 provider const provider = coinbaseWallet.makeWeb3Provider({ options: "smartWalletOnly" }); - // Get DOM elements const connectButton = document.getElementById('connectButton'); const connectedAddressParagraph = document.getElementById('connectedAddress'); const addressSpan = document.getElementById('address'); diff --git a/docs/components/sandpack/static/RequestAccountsButton.tsx b/docs/components/sandpack/static/RequestAccountsHTML.tsx similarity index 100% rename from docs/components/sandpack/static/RequestAccountsButton.tsx rename to docs/components/sandpack/static/RequestAccountsHTML.tsx diff --git a/docs/pages/sdk/CoinbaseWalletProvider/request/eth_requestAccounts.mdx b/docs/pages/sdk/CoinbaseWalletProvider/request/eth_requestAccounts.mdx index 722f7d8..c899071 100644 --- a/docs/pages/sdk/CoinbaseWalletProvider/request/eth_requestAccounts.mdx +++ b/docs/pages/sdk/CoinbaseWalletProvider/request/eth_requestAccounts.mdx @@ -1,5 +1,5 @@ import RequestAccountsReact from '../../../../components/sandpack/react/RequestAccountsReact'; -import RequestAccountsHTML from '../../../../components/sandpack/static/RequestAccountsButton'; +import RequestAccountsHTML from '../../../../components/sandpack/static/RequestAccountsHTML'; # eth_requestAccounts Defined in [EIP-1102](https://eips.ethereum.org/EIPS/eip-1102) @@ -9,7 +9,7 @@ Defined in [EIP-1102](https://eips.ethereum.org/EIPS/eip-1102) ## Returns `Array` -An array of Ethereum addresses, which the connected user presumably controls. +An array of Ethereum addresses, which the connected user controls. ## Errors | Code | Message | @@ -17,7 +17,6 @@ An array of Ethereum addresses, which the connected user presumably controls. | 4001 | User denied connection request | - ## Examples :::code-group From 492c32bcba322c0d08d23afa604b6b571964ba5f Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Thu, 25 Jul 2024 16:37:51 -0400 Subject: [PATCH 4/7] add overview --- docs/pages/sdk/CoinbaseWalletProvider/overview.mdx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/pages/sdk/CoinbaseWalletProvider/overview.mdx b/docs/pages/sdk/CoinbaseWalletProvider/overview.mdx index e69de29..716357b 100644 --- a/docs/pages/sdk/CoinbaseWalletProvider/overview.mdx +++ b/docs/pages/sdk/CoinbaseWalletProvider/overview.mdx @@ -0,0 +1,5 @@ +# Overview + +CoinbaseWalletProvider is an [Ethereum Javascript provider](https://eips.ethereum.org/EIPS/eip-1193) provider. +Most RPC requests received are passed directly to the wallet, creating a popup window, in the case of Smart Wallet. +In this section we document the known RPC requests which the SDK is intended to service. \ No newline at end of file From 0e94e11e2bc54b6c0aad79c6dd66540d85d93def Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Mon, 5 Aug 2024 09:55:38 -0400 Subject: [PATCH 5/7] fix safari --- docs/codeStrings/static/requestAccounts.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/codeStrings/static/requestAccounts.ts b/docs/codeStrings/static/requestAccounts.ts index 631a974..5d27c55 100644 --- a/docs/codeStrings/static/requestAccounts.ts +++ b/docs/codeStrings/static/requestAccounts.ts @@ -4,8 +4,7 @@ export const requestAccountsHTML = ` Connect to Coinbase Wallet - - +
@@ -15,7 +14,9 @@ export const requestAccountsHTML = ` `; -export const requestAccountsJS = `document.addEventListener('DOMContentLoaded', () => { +export const requestAccountsJS = `import CoinbaseWalletSDK from 'https://esm.sh/@coinbase/wallet-sdk'; + +document.addEventListener('DOMContentLoaded', () => { const baseSepoliaChainId = 84532; const coinbaseWallet = new CoinbaseWalletSDK({ From 0613541b61a9576531ec0ed8c09bd97cd2d3da30 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Mon, 5 Aug 2024 11:22:44 -0400 Subject: [PATCH 6/7] better sandpack setup --- .gitignore | 1 + docs/codeStrings/static/requestAccounts.ts | 49 ------------------- .../sandpack/RequestAccountsHTML.tsx | 14 ++++++ .../{react => }/RequestAccountsReact.tsx | 9 ++-- .../sandpack/files/react/RequestAccounts.jsx} | 28 +++++------ .../sandpack/files/react/config.js} | 6 +-- .../files/static/requestAccounts.html | 17 +++++++ .../files/static/requestAccountsScript.js | 32 ++++++++++++ .../sandpack/static/RequestAccountsHTML.tsx | 15 ------ docs/html/test.html | 0 docs/js/test.js | 16 ------ .../request/eth_requestAccounts.mdx | 4 +- dprint.json | 5 +- generateSandpackFiles.js | 46 +++++++++++++++++ package.json | 5 +- tsconfig.json | 8 ++- 16 files changed, 145 insertions(+), 110 deletions(-) delete mode 100644 docs/codeStrings/static/requestAccounts.ts create mode 100644 docs/components/sandpack/RequestAccountsHTML.tsx rename docs/components/sandpack/{react => }/RequestAccountsReact.tsx (58%) rename docs/{codeStrings/react/requestAccounts.ts => components/sandpack/files/react/RequestAccounts.jsx} (52%) rename docs/{codeStrings/react/config.ts => components/sandpack/files/react/config.js} (57%) create mode 100644 docs/components/sandpack/files/static/requestAccounts.html create mode 100644 docs/components/sandpack/files/static/requestAccountsScript.js delete mode 100644 docs/components/sandpack/static/RequestAccountsHTML.tsx delete mode 100644 docs/html/test.html delete mode 100644 docs/js/test.js create mode 100644 generateSandpackFiles.js diff --git a/.gitignore b/.gitignore index e36586d..b113dd8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /node_modules /docs/dist +/generated \ No newline at end of file diff --git a/docs/codeStrings/static/requestAccounts.ts b/docs/codeStrings/static/requestAccounts.ts deleted file mode 100644 index 5d27c55..0000000 --- a/docs/codeStrings/static/requestAccounts.ts +++ /dev/null @@ -1,49 +0,0 @@ -export const requestAccountsHTML = ` - - - - - Connect to Coinbase Wallet - - - -
- - -
- -`; - -export const requestAccountsJS = `import CoinbaseWalletSDK from 'https://esm.sh/@coinbase/wallet-sdk'; - -document.addEventListener('DOMContentLoaded', () => { - const baseSepoliaChainId = 84532; - - const coinbaseWallet = new CoinbaseWalletSDK({ - appName: "My App Name", - appChainIds: [baseSepoliaChainId] // Replace with your chain IDs if needed - }); - - const provider = coinbaseWallet.makeWeb3Provider({ options: "smartWalletOnly" }); - - const connectButton = document.getElementById('connectButton'); - const connectedAddressParagraph = document.getElementById('connectedAddress'); - const addressSpan = document.getElementById('address'); - - // Event listener for the connect button - connectButton.addEventListener('click', async () => { - try { - // Request accounts from the provider - const accounts = await provider.request({ method: 'eth_requestAccounts' }); - if (accounts.length > 0) { - // Update the UI to show the connected address - addressSpan.textContent = accounts[0]; - connectedAddressParagraph.style.display = 'block'; - connectButton.style.display = 'none'; - } - } catch (error) { - console.error('Error connecting to Coinbase Wallet:', error); - } - }); -}); -`; diff --git a/docs/components/sandpack/RequestAccountsHTML.tsx b/docs/components/sandpack/RequestAccountsHTML.tsx new file mode 100644 index 0000000..1899f70 --- /dev/null +++ b/docs/components/sandpack/RequestAccountsHTML.tsx @@ -0,0 +1,14 @@ +import { Sandpack } from "@codesandbox/sandpack-react"; +import { staticRequestAccounts, staticRequestAccountsScript } from "../../../generated/sandpackFiles"; + +export default function RequestAccountsHTML() { + return ( + + ); +} diff --git a/docs/components/sandpack/react/RequestAccountsReact.tsx b/docs/components/sandpack/RequestAccountsReact.tsx similarity index 58% rename from docs/components/sandpack/react/RequestAccountsReact.tsx rename to docs/components/sandpack/RequestAccountsReact.tsx index dcb935f..bb3fd6e 100644 --- a/docs/components/sandpack/react/RequestAccountsReact.tsx +++ b/docs/components/sandpack/RequestAccountsReact.tsx @@ -1,8 +1,5 @@ -"use client"; import { Sandpack } from "@codesandbox/sandpack-react"; - -import config from "../../../codeStrings/react/config"; -import requestAccountsApp from "../../../codeStrings/react/requestAccounts"; +import { reactConfig, reactRequestAccounts } from "../../../generated/sandpackFiles"; export default function RequestAccountsReact() { return ( @@ -14,8 +11,8 @@ export default function RequestAccountsReact() { }, }} files={{ - "/App.js": requestAccountsApp, - "/config.js": config, + "App.js": reactRequestAccounts, + "config.js": reactConfig, }} /> ); diff --git a/docs/codeStrings/react/requestAccounts.ts b/docs/components/sandpack/files/react/RequestAccounts.jsx similarity index 52% rename from docs/codeStrings/react/requestAccounts.ts rename to docs/components/sandpack/files/react/RequestAccounts.jsx index 5f301a9..2e02e79 100644 --- a/docs/codeStrings/react/requestAccounts.ts +++ b/docs/components/sandpack/files/react/RequestAccounts.jsx @@ -1,5 +1,5 @@ -const requestAccountsApp = `import {sdk} from "./config"; -import {useState} from "react"; +import { useState } from "react"; +import { sdk } from "./config"; export default function App() { const [address, setAddress] = useState(undefined); @@ -8,18 +8,18 @@ export default function App() { const handleClick = async () => { const accounts = await provider.request({ method: "eth_requestAccounts" }); setAddress(accounts[0]); - } + }; return ( - <> - {!address && } - {address &&

Connected address: {address}

} - + <> + {!address && ( + + )} + {address &&

Connected address: {address}

} + ); -}`; - -export default requestAccountsApp; +} diff --git a/docs/codeStrings/react/config.ts b/docs/components/sandpack/files/react/config.js similarity index 57% rename from docs/codeStrings/react/config.ts rename to docs/components/sandpack/files/react/config.js index f574df0..c11ac11 100644 --- a/docs/codeStrings/react/config.ts +++ b/docs/components/sandpack/files/react/config.js @@ -1,10 +1,8 @@ -const config = `import { CoinbaseWalletSDK } from "@coinbase/wallet-sdk"; +import { CoinbaseWalletSDK } from "@coinbase/wallet-sdk"; const baseSepoliaChainId = 84532; export const sdk = new CoinbaseWalletSDK({ appName: "My App Name", appChainIds: [baseSepoliaChainId], -})`; - -export default config; +}); diff --git a/docs/components/sandpack/files/static/requestAccounts.html b/docs/components/sandpack/files/static/requestAccounts.html new file mode 100644 index 0000000..64d0435 --- /dev/null +++ b/docs/components/sandpack/files/static/requestAccounts.html @@ -0,0 +1,17 @@ + + + + + + Connect to Coinbase Wallet + + + +
+ + +
+ + diff --git a/docs/components/sandpack/files/static/requestAccountsScript.js b/docs/components/sandpack/files/static/requestAccountsScript.js new file mode 100644 index 0000000..59e9838 --- /dev/null +++ b/docs/components/sandpack/files/static/requestAccountsScript.js @@ -0,0 +1,32 @@ +import CoinbaseWalletSDK from "https://esm.sh/@coinbase/wallet-sdk"; + +document.addEventListener("DOMContentLoaded", () => { + const baseSepoliaChainId = 84532; + + const coinbaseWallet = new CoinbaseWalletSDK({ + appName: "My App Name", + appChainIds: [baseSepoliaChainId], // Replace with your chain IDs if needed + }); + + const provider = coinbaseWallet.makeWeb3Provider({ options: "smartWalletOnly" }); + + const connectButton = document.getElementById("connectButton"); + const connectedAddressParagraph = document.getElementById("connectedAddress"); + const addressSpan = document.getElementById("address"); + + // Event listener for the connect button + connectButton.addEventListener("click", async () => { + try { + // Request accounts from the provider + const accounts = await provider.request({ method: "eth_requestAccounts" }); + if (accounts.length > 0) { + // Update the UI to show the connected address + addressSpan.textContent = accounts[0]; + connectedAddressParagraph.style.display = "block"; + connectButton.style.display = "none"; + } + } catch (error) { + console.error("Error connecting to Coinbase Wallet:", error); + } + }); +}); diff --git a/docs/components/sandpack/static/RequestAccountsHTML.tsx b/docs/components/sandpack/static/RequestAccountsHTML.tsx deleted file mode 100644 index 9192a13..0000000 --- a/docs/components/sandpack/static/RequestAccountsHTML.tsx +++ /dev/null @@ -1,15 +0,0 @@ -"use client"; -import { Sandpack } from "@codesandbox/sandpack-react"; -import { requestAccountsHTML, requestAccountsJS } from "../../../codeStrings/static/requestAccounts"; - -export default function RequestAccountsHTML() { - return ( - - ); -} diff --git a/docs/html/test.html b/docs/html/test.html deleted file mode 100644 index e69de29..0000000 diff --git a/docs/js/test.js b/docs/js/test.js deleted file mode 100644 index cee46a1..0000000 --- a/docs/js/test.js +++ /dev/null @@ -1,16 +0,0 @@ -const sdk = useMemo(() => - new CoinbaseWalletSDK({ - appName: "My App Name", - appChainIds: [8453], - }), []); - -console.log("loaded!!!!!"); - -// Ensure the DOM is fully loaded before trying to access elements -document.addEventListener("DOMContentLoaded", function() { - // Attach the event listener to the button with id 'testButton' - document.getElementById("testButton").addEventListener( - "click", - () => provider.request({ method: "eth_requestAccounts" }), - ); -}); diff --git a/docs/pages/sdk/CoinbaseWalletProvider/request/eth_requestAccounts.mdx b/docs/pages/sdk/CoinbaseWalletProvider/request/eth_requestAccounts.mdx index c899071..258ba90 100644 --- a/docs/pages/sdk/CoinbaseWalletProvider/request/eth_requestAccounts.mdx +++ b/docs/pages/sdk/CoinbaseWalletProvider/request/eth_requestAccounts.mdx @@ -1,5 +1,5 @@ -import RequestAccountsReact from '../../../../components/sandpack/react/RequestAccountsReact'; -import RequestAccountsHTML from '../../../../components/sandpack/static/RequestAccountsHTML'; +import RequestAccountsReact from '../../../../components/sandpack/RequestAccountsReact'; +import RequestAccountsHTML from '../../../../components/sandpack/RequestAccountsHTML'; # eth_requestAccounts Defined in [EIP-1102](https://eips.ethereum.org/EIPS/eip-1102) diff --git a/dprint.json b/dprint.json index 4220195..1766f6b 100644 --- a/dprint.json +++ b/dprint.json @@ -1,6 +1,8 @@ { "json": { }, + "markup": { + }, "markdown": { }, "typescript": { @@ -12,6 +14,7 @@ "plugins": [ "https://plugins.dprint.dev/json-0.19.2.wasm", "https://plugins.dprint.dev/markdown-0.16.4.wasm", - "https://plugins.dprint.dev/typescript-0.90.4.wasm" + "https://plugins.dprint.dev/typescript-0.90.4.wasm", + "https://plugins.dprint.dev/g-plane/markup_fmt-v0.11.0.wasm" ] } diff --git a/generateSandpackFiles.js b/generateSandpackFiles.js new file mode 100644 index 0000000..e0d45b7 --- /dev/null +++ b/generateSandpackFiles.js @@ -0,0 +1,46 @@ +const fs = require("fs"); +const path = require("path"); + +const sandpackDir = path.join(__dirname, "docs", "components", "sandpack", "files"); +const outputFile = path.join(__dirname, "generated", "sandpackFiles.ts"); + +function readDirectoryRecursively(dir) { + const results = {}; + const list = fs.readdirSync(dir); + + list.forEach(file => { + const filePath = path.join(dir, file); + const stat = fs.statSync(filePath); + + if (stat && stat.isDirectory()) { + results[file] = readDirectoryRecursively(filePath); + } else { + results[file] = fs.readFileSync(filePath, "utf8"); + } + }); + + return results; +} + +const sandpackExamples = readDirectoryRecursively(sandpackDir); + +// Generate TypeScript content +let tsContent = `// This file is auto-generated. Do not edit manually.\n\n`; + +Object.entries(sandpackExamples).forEach(([framework, examples]) => { + Object.entries(examples).forEach(([exampleName, files]) => { + const name = exampleName.split(".")[0]; + const varName = `${framework.split(".")[0]}${name.charAt(0).toUpperCase() + name.slice(1)}`; + tsContent += `export const ${varName} = ${JSON.stringify(files, null, 2)};\n\n`; + }); +}); + +// Ensure the output directory exists +const outputDir = path.dirname(outputFile); +if (!fs.existsSync(outputDir)) { + fs.mkdirSync(outputDir, { recursive: true }); +} + +fs.writeFileSync(outputFile, tsContent); + +console.log("Sandpack examples TypeScript file generated successfully!"); diff --git a/package.json b/package.json index 029be9d..bfdb96f 100644 --- a/package.json +++ b/package.json @@ -3,8 +3,9 @@ "version": "0.0.0", "type": "module", "scripts": { - "dev": "vocs dev", - "build": "vocs build", + "generate": "bun generateSandpackFiles.js", + "dev": "bun generate && vocs dev", + "build": "bun generate && vocs build", "preview": "vocs preview", "format": "dprint fmt", "prepare": "bun x simple-git-hooks" diff --git a/tsconfig.json b/tsconfig.json index d2636aa..ca099d0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -20,5 +20,11 @@ "noUnusedParameters": true, "noFallthroughCasesInSwitch": true }, - "include": ["**/*.ts", "**/*.tsx"] + "include": [ + "**/*.ts", + "**/*.tsx", + "generateSandpackFiles.js", + "docs/components/sandpack/files/react/config.js", + "docs/components/sandpack/files/react/RequestAccounts.jsx" + ] } From 49e1bf7f6b0752d538a65f06ce12c5f1336b7e64 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Thu, 8 Aug 2024 14:07:18 -0400 Subject: [PATCH 7/7] WIP: pushing for feedback --- docs/components/App.tsx | 19 ---- docs/components/Plain.tsx | 16 ---- .../sdk/CoinbaseWalletProvider/disconnect.mdx | 0 .../sdk/CoinbaseWalletProvider/overview.mdx | 11 ++- .../request/overview.mdx | 86 +++++++++++++++++++ docs/pages/sdk/recommendedTools.mdx | 0 vocs.config.tsx | 1 + 7 files changed, 94 insertions(+), 39 deletions(-) delete mode 100644 docs/components/App.tsx delete mode 100644 docs/components/Plain.tsx create mode 100644 docs/pages/sdk/CoinbaseWalletProvider/disconnect.mdx create mode 100644 docs/pages/sdk/CoinbaseWalletProvider/request/overview.mdx create mode 100644 docs/pages/sdk/recommendedTools.mdx diff --git a/docs/components/App.tsx b/docs/components/App.tsx deleted file mode 100644 index 3b0244d..0000000 --- a/docs/components/App.tsx +++ /dev/null @@ -1,19 +0,0 @@ -"use client"; - -import type { ReactNode } from "react"; - -function App({ children }: { children: ReactNode }) { - const isServer = typeof window === "undefined"; - if (isServer) { - return null; - } - return ( - - - {children} - - - ); -} - -export default App; diff --git a/docs/components/Plain.tsx b/docs/components/Plain.tsx deleted file mode 100644 index 3ed58f9..0000000 --- a/docs/components/Plain.tsx +++ /dev/null @@ -1,16 +0,0 @@ -function Plain() { - const htmlContent = { - __html: ` - - - - - - -`, - }; - - return
; -} - -export default Plain; diff --git a/docs/pages/sdk/CoinbaseWalletProvider/disconnect.mdx b/docs/pages/sdk/CoinbaseWalletProvider/disconnect.mdx new file mode 100644 index 0000000..e69de29 diff --git a/docs/pages/sdk/CoinbaseWalletProvider/overview.mdx b/docs/pages/sdk/CoinbaseWalletProvider/overview.mdx index 716357b..4748204 100644 --- a/docs/pages/sdk/CoinbaseWalletProvider/overview.mdx +++ b/docs/pages/sdk/CoinbaseWalletProvider/overview.mdx @@ -1,5 +1,8 @@ # Overview - -CoinbaseWalletProvider is an [Ethereum Javascript provider](https://eips.ethereum.org/EIPS/eip-1193) provider. -Most RPC requests received are passed directly to the wallet, creating a popup window, in the case of Smart Wallet. -In this section we document the known RPC requests which the SDK is intended to service. \ No newline at end of file +## Introduction +CoinbaseWalletProvider is an [JavaScript Ethereum provider](https://eips.ethereum.org/EIPS/eip-1193). +It allows JavaScript applications to make Ethereum RPC requests, via its `request` method. +These requests will be handled in one of three ways +1. Sent to the Wallet (Wallet mobile app, extension, or popup window). +2. Handled locally +3. Passed onto default RPC provider for the given chain, if it exists. diff --git a/docs/pages/sdk/CoinbaseWalletProvider/request/overview.mdx b/docs/pages/sdk/CoinbaseWalletProvider/request/overview.mdx new file mode 100644 index 0000000..9241a6b --- /dev/null +++ b/docs/pages/sdk/CoinbaseWalletProvider/request/overview.mdx @@ -0,0 +1,86 @@ +# Overview +The `request` method allows apps to make make Ethereum RPC requests to the wallet. + +## Specification + +```ts twoslash +interface RequestArguments { + readonly method: string; + readonly params?: readonly unknown[] | object; +} + +interface ProviderRpcError extends Error { + code: number; + data?: unknown; +} + +interface CoinbaseWalletProvider { + /** + * @param {RequestArguments} args request arguments. + * @returns A promise that resolves with the result. + * @throws {ProviderRpcError} incase of error. + * @fires CoinbaseWalletProvider#connect When the provider successfully connects. + */ + request: (args: RequestArguments) => Promise +} +``` +### Example +:::code-group +```ts twoslash [example.ts] +import {provider} from "./setup"; + +const addresses = await provider.request({method: 'eth_requestAccounts'}); +const txHash = await provider.request({ + method: 'eth_sendTransaction', + params: [{from: addresses[0], to: addresses[0], value: 1}] + } +); +``` + +```ts twoslash [setup.ts] filename="setup.ts" +import { CoinbaseWalletSDK } from '@coinbase/wallet-sdk' + +const baseSepoliaChainId = 84532; + +export const sdk = new CoinbaseWalletSDK({ + appName: 'My App Name', + appChainIds: [baseSepoliaChainId] +}); + +const provider = sdk.makeWeb3Provider(); +``` +::: + +## Request Handling +Requests are hanlded in one of three ways +1. Sent to the Wallet application (Wallet mobile app, extension, or popup window). +2. Handled locally by the SDK. +3. Passed onto default RPC provider for the given chain, if it exists. + +### 1. Sent to the Wallet application +The following RPC requests are sent to the Wallet application: +- eth_ecRecover +- personal_sign +- personal_ecRecover +- eth_signTransaction +- eth_sendTransaction +- eth_signTypedData_v1 +- eth_signTypedData_v3 +- eth_signTypedData_v4 +- eth_signTypedData +- wallet_addEthereumChain +- wallet_watchAsset +- wallet_sendCalls +- wallet_showCallsStatus + +### 2. Handled Locally by the SDK +The following requests are handled locally by the SDK, with no external calls. +- eth_requestAccounts +- eth_accounts +- eth_coinbase +- net_version +- eth_chainId +- wallet_getCapabilities +- wallet_switchEthereumChain + + diff --git a/docs/pages/sdk/recommendedTools.mdx b/docs/pages/sdk/recommendedTools.mdx new file mode 100644 index 0000000..e69de29 diff --git a/vocs.config.tsx b/vocs.config.tsx index 045a6b3..a5f6b23 100644 --- a/vocs.config.tsx +++ b/vocs.config.tsx @@ -134,6 +134,7 @@ export default defineConfig({ { text: "request", items: [ + { text: "Overview", link: "/sdk/CoinbaseWalletProvider/request/overview" }, { text: "eth_requestAccounts", link: "/sdk/CoinbaseWalletProvider/request/eth_requestAccounts" }, ], },