import { EthChainDefinition, EthEvent, EthEventParams, EthMethod, EthMethodParams, EthRequest, EthResult } from 'eth-provider-types'; import { JsonRpcRequest, PendingJsonRpcResponse } from 'json-rpc-engine'; import type { BitskiProviderStateStore } from './store'; import { PaymasterDefinition, WaasDefinition } from './utils/transaction'; export interface User { id: string; accounts?: string[]; } export interface EthChainDefinitionWithRpcUrl extends EthChainDefinition { rpcUrls: [firstUrl: string, ...restUrls: string[]]; } export interface BitskiProviderStore { clear(): void | Promise; keys?(): string[] | Promise; getItem(key: string): unknown | undefined | Promise; setItem(key: string, value: unknown): void | Promise; clearItem(key: string): void | Promise; onUpdate?(fn: () => void): any; destroy?(): void; } export interface InternalBitskiProviderConfig { fetch: typeof fetch; additionalHeaders: Record; paymaster?: PaymasterDefinition | PaymasterDefinition[]; prependMiddleware?: ProviderMiddleware[]; pollingInterval?: number; disableCaching?: boolean; disableValidation?: boolean; additionalSigningContext?: Record; appId?: string; /** @deprecated switch to appId */ clientId?: string; apiBaseUrl: string; signerBaseUrl: string; transactionCallbackUrl?: string; signerQueryParams?: URLSearchParams; waas?: WaasDefinition; store: BitskiProviderStore; sign: SignFn; getUser?(): Promise; getAccessToken?(): Promise; clearAccessToken?(): Promise; } type Optional = Omit & Partial; export type BitskiProviderConfig = Optional, 'apiBaseUrl' | 'signerBaseUrl' | 'fetch' | 'additionalHeaders' | 'sign' | 'getUser' | 'store'> & { signerMethod?: 'popup' | 'iframe' | 'redirect'; }; /** * Each provider request is made with a context object. The context object contains * information such as the current chain the request should be made on and the * configuration of the provider. This allows us to "switch" chains just by using * a different context. */ export interface RequestContext { chain: EthChainDefinitionWithRpcUrl; paymaster?: PaymasterDefinition | PaymasterDefinition[]; config: InternalBitskiProviderConfig; store: BitskiProviderStateStore; extra?: Extra; emit: (eventName: T, ...params: EthEventParams[T]) => void; request({ method, params }: EthRequest, opts?: { skipCache?: boolean; }): EthResult; addDestructor(fn: () => void): void; } export interface EthSignMethodParams extends EthMethodParams { personal_sign: [data: string, address: string]; } export type ProviderMiddleware = (req: JsonRpcRequest & { context: RequestContext; }, res: PendingJsonRpcResponse, next: () => Promise) => Promise; export type EthSignMethod = EthMethod.eth_sendTransaction | EthMethod.eth_signTransaction | EthMethod.eth_sign | EthMethod.eth_signTypedData | EthMethod.eth_signTypedData_v1 | EthMethod.eth_signTypedData_v3 | EthMethod.eth_signTypedData_v4 | 'personal_sign'; export type SignFn = (method: T, params: EthSignMethodParams[T], context: RequestContext) => Promise; export {};