From 0b586b35dce5f99a7ff3ca11b1446a7f57e12ee5 Mon Sep 17 00:00:00 2001 From: Chase Fleming <1666730+chasefleming@users.noreply.github.com> Date: Mon, 27 Jan 2025 11:46:12 -0800 Subject: [PATCH 1/2] Setup eth accounts handler --- .../src/create-provider.ts | 2 +- .../src/rpc/handlers/eth-accounts.test.ts | 31 +++++++++++++++++++ .../src/rpc/handlers/eth-accounts.ts | 10 ++++-- .../src/rpc/rpc-processor.ts | 11 +++---- 4 files changed, 45 insertions(+), 9 deletions(-) create mode 100644 packages/fcl-ethereum-provider/src/rpc/handlers/eth-accounts.test.ts diff --git a/packages/fcl-ethereum-provider/src/create-provider.ts b/packages/fcl-ethereum-provider/src/create-provider.ts index 39ef0c610..ec0dc8bc9 100644 --- a/packages/fcl-ethereum-provider/src/create-provider.ts +++ b/packages/fcl-ethereum-provider/src/create-provider.ts @@ -31,7 +31,7 @@ export function createProvider(config: { gateway?: string }): Eip1193Provider { const accountManager = new AccountManager(config.user) - const rpcProcessor = new RpcProcessor() + const rpcProcessor = new RpcProcessor(accountManager) const eventProcessor = new EventDispatcher() const provider = new FclEthereumProvider(rpcProcessor, eventProcessor) return provider diff --git a/packages/fcl-ethereum-provider/src/rpc/handlers/eth-accounts.test.ts b/packages/fcl-ethereum-provider/src/rpc/handlers/eth-accounts.test.ts new file mode 100644 index 000000000..9bc803889 --- /dev/null +++ b/packages/fcl-ethereum-provider/src/rpc/handlers/eth-accounts.test.ts @@ -0,0 +1,31 @@ +import {ethAccounts} from "./eth-accounts" +import {AccountManager} from "../../accounts/account-manager" + +describe("ethAccounts handler", () => { + let accountManagerMock: jest.Mocked + + beforeEach(() => { + accountManagerMock = { + getAccounts: jest.fn(), + subscribe: jest.fn(), + } as unknown as jest.Mocked + }); + + it("should return accounts from the AccountManager", () => { + accountManagerMock.getAccounts.mockReturnValue(["0x1234...", "0x5678..."]) + + const accounts = ethAccounts(accountManagerMock) + + expect(accounts).toEqual(["0x1234...", "0x5678..."]) + expect(accountManagerMock.getAccounts).toHaveBeenCalled() + }); + + it("should return an empty array if no accounts are available", () => { + accountManagerMock.getAccounts.mockReturnValue([]) + + const accounts = ethAccounts(accountManagerMock) + + expect(accounts).toEqual([]) + expect(accountManagerMock.getAccounts).toHaveBeenCalled() + }); +}); diff --git a/packages/fcl-ethereum-provider/src/rpc/handlers/eth-accounts.ts b/packages/fcl-ethereum-provider/src/rpc/handlers/eth-accounts.ts index 168081895..3efcf5e9b 100644 --- a/packages/fcl-ethereum-provider/src/rpc/handlers/eth-accounts.ts +++ b/packages/fcl-ethereum-provider/src/rpc/handlers/eth-accounts.ts @@ -1,3 +1,9 @@ -export function eth_accounts() { - throw new Error("Not implemented") +import {AccountManager} from "../../accounts/account-manager" + +export function ethAccounts(accountManager: AccountManager): string[] { + return accountManager.getAccounts() } + +export function ethRequestAccounts() { + throw new Error("Not implemented") +} \ No newline at end of file diff --git a/packages/fcl-ethereum-provider/src/rpc/rpc-processor.ts b/packages/fcl-ethereum-provider/src/rpc/rpc-processor.ts index 48e8204af..eda4bbc6b 100644 --- a/packages/fcl-ethereum-provider/src/rpc/rpc-processor.ts +++ b/packages/fcl-ethereum-provider/src/rpc/rpc-processor.ts @@ -1,15 +1,14 @@ import {ProviderRequest} from "../types/provider" -import {eth_accounts} from "./handlers/eth-accounts" - -const handlers = { - eth_accounts, -} +import {ethAccounts} from "./handlers/eth-accounts" +import {AccountManager} from "../accounts/account-manager" export class RpcProcessor { - constructor() {} + constructor(private accountManager: AccountManager) {} async handleRequest({method, params}: ProviderRequest): Promise { switch (method) { + case "eth_accounts": + return ethAccounts(this.accountManager) case "eth_requestAccounts": throw new Error("Not implemented") default: From 20f861671e92b6f30d4b6579c71401b8fad93772 Mon Sep 17 00:00:00 2001 From: Chase Fleming <1666730+chasefleming@users.noreply.github.com> Date: Mon, 27 Jan 2025 11:51:28 -0800 Subject: [PATCH 2/2] Run prettier --- .../src/rpc/handlers/eth-accounts.test.ts | 8 ++++---- .../src/rpc/handlers/eth-accounts.ts | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/fcl-ethereum-provider/src/rpc/handlers/eth-accounts.test.ts b/packages/fcl-ethereum-provider/src/rpc/handlers/eth-accounts.test.ts index 9bc803889..2d8135b8e 100644 --- a/packages/fcl-ethereum-provider/src/rpc/handlers/eth-accounts.test.ts +++ b/packages/fcl-ethereum-provider/src/rpc/handlers/eth-accounts.test.ts @@ -9,7 +9,7 @@ describe("ethAccounts handler", () => { getAccounts: jest.fn(), subscribe: jest.fn(), } as unknown as jest.Mocked - }); + }) it("should return accounts from the AccountManager", () => { accountManagerMock.getAccounts.mockReturnValue(["0x1234...", "0x5678..."]) @@ -18,7 +18,7 @@ describe("ethAccounts handler", () => { expect(accounts).toEqual(["0x1234...", "0x5678..."]) expect(accountManagerMock.getAccounts).toHaveBeenCalled() - }); + }) it("should return an empty array if no accounts are available", () => { accountManagerMock.getAccounts.mockReturnValue([]) @@ -27,5 +27,5 @@ describe("ethAccounts handler", () => { expect(accounts).toEqual([]) expect(accountManagerMock.getAccounts).toHaveBeenCalled() - }); -}); + }) +}) diff --git a/packages/fcl-ethereum-provider/src/rpc/handlers/eth-accounts.ts b/packages/fcl-ethereum-provider/src/rpc/handlers/eth-accounts.ts index 3efcf5e9b..4848ce600 100644 --- a/packages/fcl-ethereum-provider/src/rpc/handlers/eth-accounts.ts +++ b/packages/fcl-ethereum-provider/src/rpc/handlers/eth-accounts.ts @@ -6,4 +6,4 @@ export function ethAccounts(accountManager: AccountManager): string[] { export function ethRequestAccounts() { throw new Error("Not implemented") -} \ No newline at end of file +}