@privy-io/cross-app-connect
Version:
Privy cross app wallet connectors for wagmi and RainbowKit
156 lines (151 loc) • 5.66 kB
TypeScript
import { EIP1193Events, Chain, Transport, EIP1193RequestFn, EIP1474Methods, TransactionRequest, SendTransactionParameters, Hex, SignTypedDataParameters } from 'viem';
import { PublicZksyncRpcSchema, SendEip712TransactionParameters } from 'viem/zksync';
/**
* Options for creating an EIP1193 provider for a Privy cross-app wallet
*/
interface CreatePrivyWalletProviderOptions {
/**
* The Privy app ID of the cross-app wallet provider.
*/
providerAppId: string;
/**
* The chain ID to use for the provider. If not provided, the chain ID will default to the first chain in the `chains` array.
*/
chainId?: number;
/**
* The chains that the provider will support.
*/
chains: readonly [Chain, ...Chain[]];
/**
* The transports to use for the provider. If not provided, the provider will default to using HTTP.
*/
transports?: Record<number, Transport>;
/**
* @experimental Interfaces are subject to change in the future.
* Informs the provider to use the smart wallet and
* transforms the provider functions.
*/
smartWalletMode?: boolean;
}
type AdditionalRpcMethods = [
{
/**
* @description Returns an estimate of the transaction fee for a given transaction
*
*/
Method: 'zks_estimateFee';
Parameters: [transaction: TransactionRequest];
ReturnType: PublicZksyncRpcSchema[0]['ReturnType'];
}
];
type CustomRpcMethods = [
{
/**
* @description Creates, signs, and sends a new transaction to the network
* @link https://eips.ethereum.org/EIPS/eip-1474
* @example
* provider.request({ method: 'privy_sendSmartWalletTx', params: [{ from: '0x...', to: '0x...', value: '0x...' }] })
* // => '0x...'
*/
Method: 'privy_sendSmartWalletTx';
Parameters: [transaction: SendEip712TransactionParameters] | [transaction: SendTransactionParameters];
ReturnType: Hex;
},
{
/**
* @description Signs a transaction, for the developer to send to the network
* @link https://eips.ethereum.org/EIPS/eip-1474
* @example
* provider.request({ method: 'privy_signSmartWalletTx', params: [{ from: '0x...', to: '0x...', value: '0x...' }] })
* // => '0x...'
*/
Method: 'privy_signSmartWalletTx';
Parameters: [transaction: SendEip712TransactionParameters] | [transaction: SendTransactionParameters];
ReturnType: Hex;
},
{
/**
* @description Signs a message using the smart wallet
* @link https://eips.ethereum.org/EIPS/eip-1474
* @example
* provider.request({ method: 'privy_signSmartWalletMessage', params: ['Test message'] })
* // => '0x...'
*/
Method: 'privy_signSmartWalletMessage';
Parameters: [message: string] | [message: {
raw: Hex;
}];
ReturnType: Hex;
},
{
/**
* @description Signs a typed data message using the smart wallet
* @link https://eips.ethereum.org/EIPS/eip-1474
* @example
* provider.request({ method: 'privy_signSmartWalletTypedData', params: ['0xAddress', { from: '0x...', to: '0x...', value: '0x...' }] })
* // => '0x...'
*/
Method: 'privy_signSmartWalletTypedData';
Parameters: [address: Hex, typedData: SignTypedDataParameters];
ReturnType: Hex;
}
];
type EIP1474MethodsExtended = [...EIP1474Methods, ...AdditionalRpcMethods, ...CustomRpcMethods];
type RequestFn = EIP1193RequestFn<EIP1474MethodsExtended>;
type PrivyEIP1193Provider = EIP1193Events & {
request: RequestFn;
};
/**
* @experimental
*
* Creates a _mostly_ EIP1193 compatible provider for a Privy cross-app wallet.
*
* @param opts {CreatePrivyWalletProviderOptions} Options for creating the provider.
*
* @returns A Privy cross-app wallet provider.
*/
declare const toPrivyWalletProvider: (opts: CreatePrivyWalletProviderOptions) => PrivyEIP1193Provider;
type ConnectionOpts = {
smartWalletMode?: boolean;
};
interface CreatePrivyCrossAppClientOptions {
providerAppId: string;
chains: readonly [Chain, ...Chain[]];
chainId?: number;
connectionOpts?: ConnectionOpts;
}
declare const createPrivyCrossAppClient: ({ providerAppId, chains, chainId, apiUrl, connectionOpts, }: CreatePrivyCrossAppClientOptions) => PrivyCrossAppClient;
declare class PrivyCrossAppClient {
providerAppId: string;
private _apiUrl;
/**
* The chain ID the client should use.
*/
private chainId;
private _providerDetailsLoaded;
private _providerConnectUrl;
private _providerTransactUrl;
private readonly _connectionOpts;
/**
* The chains that the provider will support.
*/
private readonly chains;
private _sharedSecret;
private _publicKey;
private _address;
constructor(providerAppId: string, chains: readonly [Chain, ...Chain[]], chainId?: number, apiUrl?: string, connectionOpts?: ConnectionOpts);
private get STORAGE_CONNECTION_KEY();
private get STORAGE_CHAIN_ID_KEY();
private loadProviderDetails;
getProviderConnectUrl(): Promise<string>;
getProviderTransactUrl(): Promise<string>;
clearConnection(): void;
get chain(): Chain;
get address(): `0x${string}` | undefined;
requestConnection(): Promise<void>;
switchChain({ id }: {
id: number;
}): void;
sendRequest(method: string, params: any): Promise<string>;
}
export { type PrivyEIP1193Provider, createPrivyCrossAppClient, toPrivyWalletProvider };