11import EventEmitter from "eventemitter3" ;
22import { Address , toHex } from "viem" ;
3- import { Communicator } from "./communicator/communicator" ;
4- import { supportedMethods } from "./constants/supportedMethod" ;
3+ import { Communicator } from ".. /communicator/communicator" ;
4+ import { supportedMethods } from ".. /constants/supportedMethod" ;
55import {
66 MethodCategory ,
77 RequestArguments ,
88 IProvider ,
9- } from "./types/provider/provider" ;
10- import { Message } from "./types/communicator/message" ;
11- import { getFavicon } from "./utils/getIcon" ;
9+ ProviderInput ,
10+ } from "../types" ;
11+ import { Message } from "../types" ;
12+ import { getFavicon } from "../utils/getIcon" ;
13+ import RPCProvider from "./rpcProvider" ;
14+ import { BUNDLER_URL } from "../constants" ;
15+ import axios from "axios" ;
1216
1317function determineMethodCategory ( method : string ) : MethodCategory | undefined {
1418 for ( const c in supportedMethods ) {
@@ -21,22 +25,23 @@ function determineMethodCategory(method: string): MethodCategory | undefined {
2125}
2226
2327export class AbstractionProvider extends EventEmitter implements IProvider {
28+ public rpcProvider : RPCProvider ;
2429 communicator : Communicator ;
2530 accounts : Address [ ] = [ ] ;
2631 isAbstractionWallet : boolean = true ;
2732 chainId : number = 89 ;
2833
29- constructor ( keyUrl ?: string ) {
34+ constructor ( providerInput ?: ProviderInput ) {
3035 super ( ) ;
31- this . communicator = new Communicator ( null , keyUrl ) ;
36+ this . communicator = new Communicator ( null , providerInput ?. keyUrl ) ;
37+ this . rpcProvider = new RPCProvider ( providerInput ?. rpcInput ) ;
3238 }
3339
3440 public get connected ( ) {
3541 return this . accounts . length > 0 ;
3642 }
3743
3844 public async request < T > ( args : RequestArguments ) : Promise < T > {
39- console . log ( "request" , toHex ( this . chainId ) ) ;
4045 const methodCategory = determineMethodCategory ( args . method ) ?? "fetch" ;
4146 return ( this . handlers as any ) [ methodCategory ] ( args ) as unknown as T ;
4247 }
@@ -69,7 +74,7 @@ export class AbstractionProvider extends EventEmitter implements IProvider {
6974
7075 if ( handshakeResponse . payload == "rejected" ) {
7176 reject ( "User rejected the connection" ) ;
72- return
77+ return ;
7378 }
7479
7580 this . accounts = handshakeResponse . payload as Address [ ] ;
@@ -100,22 +105,31 @@ export class AbstractionProvider extends EventEmitter implements IProvider {
100105 ) ;
101106 if ( signResponse . payload == "rejected" ) {
102107 reject ( "User rejected the connection" ) ;
103- return
108+ return ;
104109 }
105110 resolve ( signResponse . payload ) ;
106111 } ) ;
107112 } ,
108- fetch : async ( args : RequestArguments ) => { } ,
113+ fetch : async ( args : RequestArguments ) => {
114+ return this . rpcProvider . requestRPC ( args ) ;
115+ } ,
109116 state : async ( args : RequestArguments ) => {
110117 switch ( args . method ) {
111- case "eth_chainId" :
112- return toHex ( this . chainId ) ;
113118 case "eth_accounts" :
114119 return this . accounts ;
115120 case "eth_coinbase" :
116121 return this . accounts [ 0 ] ;
117122 case "net_version" :
118123 return "0x1" ;
124+ case "wallet_getCallsStatus" :
125+ const data = {
126+ jsonrpc : "2.0" ,
127+ id : 1 ,
128+ method : "eth_getUserOperationReceipt" ,
129+ params : args . params ,
130+ } ;
131+ const response = await axios . post ( BUNDLER_URL , data ) ;
132+ return response . data
119133 default :
120134 return undefined ;
121135 }
0 commit comments