UNPKG

@avalanche-sdk/client

Version:

A TypeScript SDK for interacting with the Avalanche network through JSON-RPC APIs. This SDK provides a comprehensive set of tools to interact with all Avalanche chains (P-Chain, X-Chain, C-Chain) and various APIs, including wallet functionality for transa

170 lines (158 loc) 4.83 kB
import { Account, Chain, Client, CreatePublicClientErrorType, Prettify, rpcSchema, RpcSchema, Transport, walletActions, WalletActions, WalletRpcSchema, } from "viem"; import { XPAccount } from "../accounts/avalancheAccount.js"; import { AvalancheWalletRpcSchema } from "../methods/wallet/avalancheWalletRPCSchema.js"; import { AvalancheCoreClient } from "./createAvalancheCoreClient.js"; import { AvalancheWalletCoreClient, AvalancheWalletCoreClientConfig, createAvalancheWalletCoreClient, } from "./createAvalancheWalletCoreClient.js"; import { avalancheWalletActions, AvalancheWalletActions, } from "./decorators/avalancheWallet.js"; import { cChainWalletActions, CChainWalletActions, } from "./decorators/cChainWallet.js"; import { Erc20Actions, erc20Actions } from "./decorators/erc20.js"; import { pChainWalletActions, PChainWalletActions, } from "./decorators/pChainWallet.js"; import { xChainWalletActions, XChainWalletActions, } from "./decorators/xChainWallet.js"; export type AvalancheWalletClientConfig< transport extends Transport = Transport, chain extends Chain | undefined = Chain | undefined, account extends Account | undefined = undefined, rpcSchema extends RpcSchema | undefined = undefined, raw extends boolean = false > = Prettify< AvalancheWalletCoreClientConfig<transport, chain, account, rpcSchema, raw> >; export type AvalancheWalletClient< transport extends Transport = Transport, chain extends Chain | undefined = Chain | undefined, account extends Account | undefined = undefined, rpcSchema extends RpcSchema | undefined = undefined > = Prettify< Client< transport, chain, account, rpcSchema extends RpcSchema ? [...WalletRpcSchema, ...AvalancheWalletRpcSchema, ...rpcSchema] : [...WalletRpcSchema, ...AvalancheWalletRpcSchema], WalletActions<chain, account> & AvalancheWalletActions > & { xpAccount?: XPAccount; pChainClient: AvalancheCoreClient; cChainClient: AvalancheCoreClient; xChainClient: AvalancheCoreClient; } & { erc20: AvalancheWalletCoreClient< transport, chain, account, rpcSchema, Erc20Actions >; cChain: AvalancheWalletCoreClient< transport, chain, account, rpcSchema, CChainWalletActions >; pChain: AvalancheWalletCoreClient< transport, chain, account, rpcSchema, PChainWalletActions >; xChain: AvalancheWalletCoreClient< transport, chain, account, rpcSchema, XChainWalletActions >; } >; export type CreateAvalancheWalletClientErrorType = CreatePublicClientErrorType; /** * Creates an Avalanche Wallet Client with a given transport configured for a Chain. * * The Avalanche Wallet Client is an interface to interact with the Core Wallet API through Avalanche-specific JSON-RPC API methods. * @see https://docs.core.app/docs/reference/json-rpc-api * * @param parameters - {@link AvalancheWalletClientConfig} * @returns A Avalanche Wallet Client. {@link AvalancheWalletClient} * * @example * ```ts * import { createAvalancheWalletClient } from '@avalanche-sdk/client' * import { avalanche } from '@avalanche-sdk/client/chains' * * const client = createAvalancheWalletClient({ * chain: avalanche, * transport: { type: "http" }, * }) * * const pubKey = await client.getAccountPubKey() * ``` */ export function createAvalancheWalletClient< transport extends Transport = Transport, chain extends Chain | undefined = Chain | undefined, account extends Account | undefined = undefined, rpcSchema extends RpcSchema | undefined = undefined >( parameters: AvalancheWalletClientConfig<transport, chain, account, rpcSchema> ): AvalancheWalletClient<transport, chain, account, rpcSchema> { const { key = "avalancheWallet", name = "Avalanche Wallet Client" } = parameters; const client = createAvalancheWalletCoreClient({ ...parameters, key, name, type: "avalancheWalletClient", rpcSchema: rpcSchema<AvalancheWalletRpcSchema & WalletRpcSchema>(), }); const avalancheWalletClient = client .extend(walletActions) .extend(avalancheWalletActions as any); const erc20Client = client.extend(walletActions).extend(erc20Actions as any); const cChainClient = client .extend(walletActions) .extend(cChainWalletActions as any); const pChainClient = client .extend(walletActions) .extend(pChainWalletActions as any); const xChainClient = client .extend(walletActions) .extend(xChainWalletActions as any); return { ...(avalancheWalletClient as any), erc20: erc20Client, cChain: cChainClient, pChain: pChainClient, xChain: xChainClient, } as AvalancheWalletClient<transport, chain, account, rpcSchema>; }