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..2d8135b8e --- /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..4848ce600 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() { +import {AccountManager} from "../../accounts/account-manager" + +export function ethAccounts(accountManager: AccountManager): string[] { + return accountManager.getAccounts() +} + +export function ethRequestAccounts() { throw new Error("Not implemented") } 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: