From e10d0ec49bf78120dde5a16bce76c14c7cbc0352 Mon Sep 17 00:00:00 2001 From: ultraviolet10 Date: Fri, 14 Mar 2025 12:42:52 +0530 Subject: [PATCH 01/17] feat: app demo scaffold --- .../src/demo-components/CallBatchDemo.tsx | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 demos/react/src/demo-components/CallBatchDemo.tsx diff --git a/demos/react/src/demo-components/CallBatchDemo.tsx b/demos/react/src/demo-components/CallBatchDemo.tsx new file mode 100644 index 0000000000..24594a4d06 --- /dev/null +++ b/demos/react/src/demo-components/CallBatchDemo.tsx @@ -0,0 +1,41 @@ +import useClients from "../useClients" + +const CallBatchDemo = () => { + const { walletClient } = useClients() + + async function getCapabilities() { + // const caps = await walletClient?.getCapabilities() + } + + async function sendBatch() { + // const bundles = await walletClient?.sendCalls() + } + + async function getCallsStatus() { + // const stat = await walletClient?.getCallsStatus() + } + + return ( +
+
EIP-5792
+ + + + + + +
+ ) +} + +export default CallBatchDemo From 2c668cbf121ceb7f2a23d712d310ecba6c8a5527 Mon Sep 17 00:00:00 2001 From: ultraviolet10 Date: Mon, 28 Apr 2025 17:31:04 +0530 Subject: [PATCH 02/17] update viem package, add new component to demo --- demos/react/src/App.tsx | 2 ++ demos/react/src/demo-components/CallBatchDemo.tsx | 4 ---- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/demos/react/src/App.tsx b/demos/react/src/App.tsx index 5249a92101..207a6c4b51 100644 --- a/demos/react/src/App.tsx +++ b/demos/react/src/App.tsx @@ -1,4 +1,5 @@ import { useHappyWallet } from "@happy.tech/react" +import CallBatchDemo from "./demo-components/CallBatchDemo" import ChainSwitchingDemo from "./demo-components/ChainSwitchingDemo" import ConnectionDemo from "./demo-components/ConnectionDemo" import SessionKeyDemo from "./demo-components/SessionKeyDemo" @@ -24,6 +25,7 @@ function App() { + ) diff --git a/demos/react/src/demo-components/CallBatchDemo.tsx b/demos/react/src/demo-components/CallBatchDemo.tsx index 24594a4d06..bcb7b3e57f 100644 --- a/demos/react/src/demo-components/CallBatchDemo.tsx +++ b/demos/react/src/demo-components/CallBatchDemo.tsx @@ -1,8 +1,4 @@ -import useClients from "../useClients" - const CallBatchDemo = () => { - const { walletClient } = useClients() - async function getCapabilities() { // const caps = await walletClient?.getCapabilities() } From 8113f5701a79a032e64b255a74932f7b4e016382 Mon Sep 17 00:00:00 2001 From: ultraviolet10 Date: Mon, 12 May 2025 17:55:18 +0530 Subject: [PATCH 03/17] clean up demo scaffold --- .../src/demo-components/CallBatchDemo.tsx | 43 +++++++++++++------ 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/demos/react/src/demo-components/CallBatchDemo.tsx b/demos/react/src/demo-components/CallBatchDemo.tsx index bcb7b3e57f..1249e7380d 100644 --- a/demos/react/src/demo-components/CallBatchDemo.tsx +++ b/demos/react/src/demo-components/CallBatchDemo.tsx @@ -1,35 +1,54 @@ +import { useHappyWallet } from "@happy.tech/react" +import { parseEther } from "viem" +import { walletClient } from "../clients" + const CallBatchDemo = () => { + const { user } = useHappyWallet() async function getCapabilities() { - // const caps = await walletClient?.getCapabilities() + try { + const caps = await walletClient?.getCapabilities() + console.log({ caps }) + } catch (error) { + console.error(error) + } } async function sendBatch() { - // const bundles = await walletClient?.sendCalls() - } - - async function getCallsStatus() { - // const stat = await walletClient?.getCallsStatus() + try { + const batchCalls = await walletClient?.sendCalls({ + account: user?.address, + calls: [ + { + to: "0x70997970c51812dc3a010c7d01b50e0d17dc79c8", + value: parseEther("1"), + }, + ], + }) + console.log(batchCalls) + } catch (error) { + console.error(error) + } } return (
EIP-5792
- - -
) } From b95844d3fa5ef167b591b5dfbd1dd7b89ddaab40 Mon Sep 17 00:00:00 2001 From: ultraviolet10 Date: Fri, 14 Mar 2025 12:42:52 +0530 Subject: [PATCH 04/17] feat: app demo scaffold --- demos/react/src/demo-components/CallBatchDemo.tsx | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/demos/react/src/demo-components/CallBatchDemo.tsx b/demos/react/src/demo-components/CallBatchDemo.tsx index 1249e7380d..b1abb788d7 100644 --- a/demos/react/src/demo-components/CallBatchDemo.tsx +++ b/demos/react/src/demo-components/CallBatchDemo.tsx @@ -34,18 +34,14 @@ const CallBatchDemo = () => {
EIP-5792
- From 1b6727a5c04d11b935dc4a31acc4b6af30245201 Mon Sep 17 00:00:00 2001 From: ultraviolet10 Date: Mon, 12 May 2025 17:55:18 +0530 Subject: [PATCH 05/17] clean up demo scaffold --- demos/react/src/demo-components/CallBatchDemo.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/demos/react/src/demo-components/CallBatchDemo.tsx b/demos/react/src/demo-components/CallBatchDemo.tsx index b1abb788d7..1249e7380d 100644 --- a/demos/react/src/demo-components/CallBatchDemo.tsx +++ b/demos/react/src/demo-components/CallBatchDemo.tsx @@ -34,14 +34,18 @@ const CallBatchDemo = () => {
EIP-5792
- From 574dbf65fe45d48c810ebd47c032774f52ecd1a0 Mon Sep 17 00:00:00 2001 From: ultraviolet10 Date: Fri, 14 Mar 2025 13:04:20 +0530 Subject: [PATCH 06/17] feat(iframe): implement wallet_getCapabilities method --- apps/iframe/src/utils/createHappyUserFromWallet.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/iframe/src/utils/createHappyUserFromWallet.ts b/apps/iframe/src/utils/createHappyUserFromWallet.ts index f05fabe523..812691ad2d 100644 --- a/apps/iframe/src/utils/createHappyUserFromWallet.ts +++ b/apps/iframe/src/utils/createHappyUserFromWallet.ts @@ -17,7 +17,7 @@ export async function createHappyUserFromWallet(providerId: string, address: Add uid: address, // web3 details - address: accountAddress, + address: address, controllingAddress: address, } } From 0a16d8210cd307b148fd8f38185e97e66a4b1731 Mon Sep 17 00:00:00 2001 From: ultraviolet10 Date: Fri, 14 Mar 2025 13:05:07 +0530 Subject: [PATCH 07/17] fix: import reuse + format --- apps/iframe/src/utils/createHappyUserFromWallet.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/iframe/src/utils/createHappyUserFromWallet.ts b/apps/iframe/src/utils/createHappyUserFromWallet.ts index 812691ad2d..f05fabe523 100644 --- a/apps/iframe/src/utils/createHappyUserFromWallet.ts +++ b/apps/iframe/src/utils/createHappyUserFromWallet.ts @@ -17,7 +17,7 @@ export async function createHappyUserFromWallet(providerId: string, address: Add uid: address, // web3 details - address: address, + address: accountAddress, controllingAddress: address, } } From 9d458c545cef738f375b5b7bf2cddcf2410745ee Mon Sep 17 00:00:00 2001 From: ultraviolet10 Date: Mon, 12 May 2025 18:02:55 +0530 Subject: [PATCH 08/17] restack --- demos/react/src/demo-components/CallBatchDemo.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/demos/react/src/demo-components/CallBatchDemo.tsx b/demos/react/src/demo-components/CallBatchDemo.tsx index 1249e7380d..a4d35fbe73 100644 --- a/demos/react/src/demo-components/CallBatchDemo.tsx +++ b/demos/react/src/demo-components/CallBatchDemo.tsx @@ -1,4 +1,5 @@ import { useHappyWallet } from "@happy.tech/react" +import { toast } from "sonner" import { parseEther } from "viem" import { walletClient } from "../clients" @@ -7,6 +8,7 @@ const CallBatchDemo = () => { async function getCapabilities() { try { const caps = await walletClient?.getCapabilities() + toast.info("Check console for supported capabilities!") console.log({ caps }) } catch (error) { console.error(error) From 15c1d562631f6bb2cd68293909c846157e96e628 Mon Sep 17 00:00:00 2001 From: ultraviolet10 Date: Fri, 14 Mar 2025 13:04:20 +0530 Subject: [PATCH 09/17] feat(iframe): implement wallet_getCapabilities method --- apps/iframe/src/utils/createHappyUserFromWallet.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/iframe/src/utils/createHappyUserFromWallet.ts b/apps/iframe/src/utils/createHappyUserFromWallet.ts index f05fabe523..812691ad2d 100644 --- a/apps/iframe/src/utils/createHappyUserFromWallet.ts +++ b/apps/iframe/src/utils/createHappyUserFromWallet.ts @@ -17,7 +17,7 @@ export async function createHappyUserFromWallet(providerId: string, address: Add uid: address, // web3 details - address: accountAddress, + address: address, controllingAddress: address, } } From cfed326601348f7f183c54041bf2c59cf7d323dd Mon Sep 17 00:00:00 2001 From: ultraviolet10 Date: Fri, 14 Mar 2025 13:05:07 +0530 Subject: [PATCH 10/17] fix: import reuse + format --- apps/iframe/src/utils/createHappyUserFromWallet.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/iframe/src/utils/createHappyUserFromWallet.ts b/apps/iframe/src/utils/createHappyUserFromWallet.ts index 812691ad2d..f05fabe523 100644 --- a/apps/iframe/src/utils/createHappyUserFromWallet.ts +++ b/apps/iframe/src/utils/createHappyUserFromWallet.ts @@ -17,7 +17,7 @@ export async function createHappyUserFromWallet(providerId: string, address: Add uid: address, // web3 details - address: address, + address: accountAddress, controllingAddress: address, } } From 9467f7587f5cc2d82915e8bae2b7b168b1ae518a Mon Sep 17 00:00:00 2001 From: ultraviolet10 Date: Fri, 14 Mar 2025 20:04:09 +0530 Subject: [PATCH 11/17] feat: implement wallet_sendCalls request handler --- apps/iframe/src/utils/isSendCallsParams.ts | 23 +++++ bun.lockb | Bin 0 -> 899640 bytes .../BatchCalls/SendCallsDrawer.tsx | 86 ++++++++++++++++++ .../lib/interfaces/permissions.ts | 2 + 4 files changed, 111 insertions(+) create mode 100644 apps/iframe/src/utils/isSendCallsParams.ts create mode 100755 bun.lockb create mode 100644 demos/react/src/demo-components/BatchCalls/SendCallsDrawer.tsx diff --git a/apps/iframe/src/utils/isSendCallsParams.ts b/apps/iframe/src/utils/isSendCallsParams.ts new file mode 100644 index 0000000000..9db0d41daa --- /dev/null +++ b/apps/iframe/src/utils/isSendCallsParams.ts @@ -0,0 +1,23 @@ +import type { WalletSendCallsParameters } from "viem" +import { z } from "zod" + +export function isSendCallsParams(param: unknown): param is WalletSendCallsParameters { + const callSchema = z.object({ + chainId: z.union([z.string(), z.number()]).optional(), + to: z.string().optional(), + data: z.string().optional(), + value: z.union([z.string(), z.bigint()]).optional(), + }) + + const schema = z.tuple([ + z.object({ + calls: z.array(callSchema).readonly(), + capabilities: z.record(z.string(), z.any()).optional(), + chainId: z.union([z.string(), z.number()]).optional(), + from: z.string(), + version: z.string(), + }), + ]) + + return schema.safeParse(param).success +} diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..38488246bc26de8f1fd02bbecb525d5eef49925f GIT binary patch literal 899640 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
) }