UNPKG

@keplr-wallet/types

Version:

321 lines (293 loc) • 8.92 kB
import { ChainInfo, ChainInfoWithoutEndpoints } from "../chain-info"; import { EthSignType } from "../ethereum"; import { BroadcastMode, AminoSignResponse, StdSignDoc, OfflineAminoSigner, StdSignature, DirectSignResponse, OfflineDirectSigner, } from "../cosmjs"; import { SecretUtils } from "../secretjs"; import Long from "long"; import { SettledResponses } from "../settled"; import { DirectAuxSignResponse } from "../cosmjs-alt"; import { IEthereumProvider } from "./ethereum"; import { IStarknetProvider } from "./starknet"; import type { Call, DeployAccountSignerDetails, InvocationsSignerDetails, } from "starknet"; import { IBitcoinProvider, SignPsbtOptions, SupportedPaymentType, } from "./bitcoin"; export interface Key { // Name of the selected key store. readonly name: string; readonly algo: string; readonly pubKey: Uint8Array; readonly address: Uint8Array; readonly bech32Address: string; readonly ethereumHexAddress: string; // Indicate whether the selected account is from the nano ledger. // Because current cosmos app in the nano ledger doesn't support the direct (proto) format msgs, // this can be used to select the amino or direct signer. readonly isNanoLedger: boolean; readonly isKeystone: boolean; } export type ICNSAdr36Signatures = { chainId: string; bech32Prefix: string; bech32Address: string; addressHash: "cosmos" | "ethereum"; pubKey: Uint8Array; signatureSalt: number; signature: Uint8Array; }[]; export type KeplrMode = "core" | "extension" | "mobile-web" | "walletconnect"; export interface KeplrIntereactionOptions { readonly sign?: KeplrSignOptions; } export interface KeplrSignOptions { readonly preferNoSetFee?: boolean; readonly preferNoSetMemo?: boolean; readonly disableBalanceCheck?: boolean; } export interface Keplr { readonly version: string; /** * mode means that how Keplr is connected. * If the connected Keplr is browser's extension, the mode should be "extension". * If the connected Keplr is on the mobile app with the embeded web browser, the mode should be "mobile-web". */ readonly mode: KeplrMode; defaultOptions: KeplrIntereactionOptions; ping(): Promise<void>; experimentalSuggestChain(chainInfo: ChainInfo): Promise<void>; enable(chainIds: string | string[]): Promise<void>; /** * Delete permissions granted to origin. * If chain ids are specified, only the permissions granted to each chain id are deleted (In this case, permissions such as getChainInfosWithoutEndpoints() are not deleted). * Else, remove all permissions granted to origin (In this case, permissions that are not assigned to each chain, such as getChainInfosWithoutEndpoints(), are also deleted). * * @param chainIds disable(Remove approve domain(s)) target chain ID(s). */ disable(chainIds?: string | string[]): Promise<void>; getKey(chainId: string): Promise<Key>; getKeysSettled(chainIds: string[]): Promise<SettledResponses<Key>>; signAmino( chainId: string, signer: string, signDoc: StdSignDoc, signOptions?: KeplrSignOptions ): Promise<AminoSignResponse>; signDirect( chainId: string, signer: string, signDoc: { /** SignDoc bodyBytes */ bodyBytes?: Uint8Array | null; /** SignDoc authInfoBytes */ authInfoBytes?: Uint8Array | null; /** SignDoc chainId */ chainId?: string | null; /** SignDoc accountNumber */ accountNumber?: Long | null; }, signOptions?: KeplrSignOptions ): Promise<DirectSignResponse>; signDirectAux( chainId: string, signer: string, signDoc: { bodyBytes?: Uint8Array | null; publicKey?: { typeUrl: string; value: Uint8Array; } | null; chainId?: string | null; accountNumber?: Long | null; sequence?: Long | null; tip?: { amount: { denom: string; amount: string; }[]; tipper: string; } | null; }, signOptions?: Exclude< KeplrSignOptions, "preferNoSetFee" | "disableBalanceCheck" > ): Promise<DirectAuxSignResponse>; sendTx( chainId: string, tx: Uint8Array, mode: BroadcastMode ): Promise<Uint8Array>; signICNSAdr36( chainId: string, contractAddress: string, owner: string, username: string, addressChainIds: string[] ): Promise<ICNSAdr36Signatures>; signArbitrary( chainId: string, signer: string, data: string | Uint8Array ): Promise<StdSignature>; verifyArbitrary( chainId: string, signer: string, data: string | Uint8Array, signature: StdSignature ): Promise<boolean>; signEthereum( chainId: string, signer: string, data: string | Uint8Array, type: EthSignType ): Promise<Uint8Array>; getOfflineSigner( chainId: string, signOptions?: KeplrSignOptions ): OfflineAminoSigner & OfflineDirectSigner; getOfflineSignerOnlyAmino( chainId: string, signOptions?: KeplrSignOptions ): OfflineAminoSigner; getOfflineSignerAuto( chainId: string, signOptions?: KeplrSignOptions ): Promise<OfflineAminoSigner | OfflineDirectSigner>; suggestToken( chainId: string, contractAddress: string, viewingKey?: string ): Promise<void>; getSecret20ViewingKey( chainId: string, contractAddress: string ): Promise<string>; getEnigmaUtils(chainId: string): SecretUtils; // Related to Enigma. // But, recommended to use `getEnigmaUtils` rather than using below. getEnigmaPubKey(chainId: string): Promise<Uint8Array>; getEnigmaTxEncryptionKey( chainId: string, nonce: Uint8Array ): Promise<Uint8Array>; enigmaEncrypt( chainId: string, contractCodeHash: string, // eslint-disable-next-line @typescript-eslint/ban-types msg: object ): Promise<Uint8Array>; enigmaDecrypt( chainId: string, ciphertext: Uint8Array, nonce: Uint8Array ): Promise<Uint8Array>; /** * Sign the sign doc with ethermint's EIP-712 format. * The difference from signEthereum(..., EthSignType.EIP712) is that this api returns a new sign doc changed by the user's fee setting and the signature for that sign doc. * Encoding tx to EIP-712 format should be done on the side using this api. * Not compatible with cosmjs. * The returned signature is (r | s | v) format which used in ethereum. * v should be 27 or 28 which is used in the ethereum mainnet regardless of chain. * @param chainId * @param signer * @param eip712 * @param signDoc * @param signOptions */ experimentalSignEIP712CosmosTx_v0( chainId: string, signer: string, eip712: { types: Record<string, { name: string; type: string }[] | undefined>; domain: Record<string, any>; primaryType: string; }, signDoc: StdSignDoc, signOptions?: KeplrSignOptions ): Promise<AminoSignResponse>; getChainInfosWithoutEndpoints(): Promise<ChainInfoWithoutEndpoints[]>; getChainInfoWithoutEndpoints( chainId: string ): Promise<ChainInfoWithoutEndpoints>; /** Change wallet extension user name **/ changeKeyRingName(opts: { defaultName: string; editable?: boolean; }): Promise<string>; sendEthereumTx(chainId: string, tx: Uint8Array): Promise<string>; suggestERC20(chainId: string, contractAddress: string): Promise<void>; getStarknetKey(chainId: string): Promise<{ name: string; hexAddress: string; pubKey: Uint8Array; address: Uint8Array; isNanoLedger: boolean; }>; getStarknetKeysSettled(chainIds: string[]): Promise< SettledResponses<{ name: string; hexAddress: string; pubKey: Uint8Array; address: Uint8Array; isNanoLedger: boolean; }> >; signStarknetDeployAccountTransaction( chainId: string, transaction: DeployAccountSignerDetails ): Promise<{ transaction: DeployAccountSignerDetails; signature: string[]; }>; signStarknetTx( chainId: string, transactions: Call[], details: InvocationsSignerDetails ): Promise<{ transactions: Call[]; details: InvocationsSignerDetails; signature: string[]; }>; getBitcoinKey(chainId: string): Promise<{ name: string; pubKey: Uint8Array; address: string; paymentType: SupportedPaymentType; isNanoLedger: boolean; }>; getBitcoinKeysSettled(chainIds: string[]): Promise< SettledResponses<{ name: string; pubKey: Uint8Array; address: string; paymentType: SupportedPaymentType; isNanoLedger: boolean; }> >; signPsbt( chainId: string, psbtHex: string, options?: SignPsbtOptions ): Promise<string>; signPsbts( chainId: string, psbtsHexes: string[], options?: SignPsbtOptions ): Promise<string[]>; readonly ethereum: IEthereumProvider; readonly starknet: IStarknetProvider; readonly bitcoin: IBitcoinProvider; }