UNPKG

@sphereon/ssi-sdk-web3.headless-provider

Version:

67 lines (56 loc) 2.58 kB
import { TransactionRequest } from '@ethersproject/abstract-provider' import { TypedDataDomain, TypedDataField } from '@ethersproject/abstract-signer' import { IAgentContext, IKeyManager } from '@veramo/core' export type rpcMethods = 'eth_call' | 'eth_getBalance' export interface IWeb3Provider { isMetaMask?: boolean request(args: { method: 'eth_call'; params: any[] }): Promise<any> request(args: { method: 'eth_getBalance'; params: string[] }): Promise<string> request(args: { method: 'eth_accounts'; params: [] }): Promise<string[]> request(args: { method: 'eth_requestAccounts'; params: [] }): Promise<string[]> request(args: { method: 'net_version'; params: [] }): Promise<number> request(args: { method: 'eth_chainId'; params: [] }): Promise<string> request(args: { method: 'personal_sign'; params: string[] }): Promise<string> request(args: { method: 'eth_signTypedData' | 'eth_signTypedData_v1'; params: [object[], string] }): Promise<string> request(args: { method: 'eth_signTypedData_v3' | 'eth_signTypedData_v4'; params: string[] }): Promise<string> request(args: { method: 'eth_sendTransaction'; params: TransactionRequest[] }): Promise<string> request(args: { method: rpcMethods | string; params?: any[] }): Promise<any> emit(eventName: string, ...args: any[]): void on(eventName: string, listener: (eventName: string) => void): void } export type IRequiredContext = IAgentContext<IKeyManager> export interface PendingRequest { requestInfo: { method: string; params: any[] } reject: (err: { message?: string; code?: number }) => void authorize: () => Promise<void> } export interface ChainConnection { chainId: number rpcUrl: string } export interface Web3ProviderConfig { debug?: boolean logger: typeof console.log } export interface TypedDataSigner { _signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string> } export enum Web3Method { RequestAccounts = 'eth_requestAccounts', Accounts = 'eth_accounts', SendTransaction = 'eth_sendTransaction', SwitchEthereumChain = 'wallet_switchEthereumChain', AddEthereumChain = 'wallet_addEthereumChain', SignMessage = 'personal_sign', SignTypedData = 'eth_signTypedData', SignTypedDataV1 = 'eth_signTypedData_v1', SignTypedDataV3 = 'eth_signTypedData_v3', SignTypedDataV4 = 'eth_signTypedData_v4', } export function without<T>(list: T[], item: T): T[] { const idx = list.indexOf(item) if (idx >= 0) { return list.slice(0, idx).concat(list.slice(idx + 1)) } return list }