UNPKG

@cosmos-kit/react-lite

Version:
63 lines (62 loc) 2.75 kB
import { OfflineAminoSigner } from '@cosmjs/amino'; import { OfflineDirectSigner } from '@cosmjs/proto-signing'; import { MainWalletBase, WalletClient, WalletName } from '@cosmos-kit/core'; import { Origin, OverrideHandler, ParentMetadata } from '@dao-dao/cosmiframe'; import { RefCallback } from 'react'; export type FunctionKeys<T> = { [K in keyof T]: T[K] extends (...args: unknown[]) => unknown ? K : never; }[keyof T]; export type UseIframeSignerOverrides = Partial<{ [K in keyof (OfflineAminoSigner & OfflineDirectSigner)]: (...params: Parameters<(OfflineAminoSigner & OfflineDirectSigner)[K]>) => OverrideHandler | Promise<OverrideHandler>; }>; export type UseIframeOptions = { /** * Optionally attempt to use a specific wallet. Otherwise get the first active * wallet. */ walletName?: WalletName; /** * Optionally set the metadata that represents this parent to the iframe. */ metadata?: ParentMetadata; /** * If defined, the relevant override of a wallet client function will be * called with the parameters. The return value determines how the iframe * should handle the function. By default, if nothing is returned, an error * will be thrown with the message "Handled by outer wallet." */ walletClientOverrides?: Partial<{ [K in FunctionKeys<WalletClient>]: (...params: Parameters<WalletClient[K]>) => OverrideHandler | Promise<OverrideHandler>; }>; /** * If defined, the relevant override of a direct or amino signer will be * called with the parameters. The return value determines how the iframe * should handle the function. By default, if nothing is returned, an error * will be thrown with the message "Handled by outer wallet." */ signerOverrides?: UseIframeSignerOverrides | ((chainId: string) => UseIframeSignerOverrides) | ((chainId: string) => Promise<UseIframeSignerOverrides>); /** * Optionally only respond to requests from iframes of specific origin. If * undefined or empty, all origins are allowed. */ origins?: Origin[]; }; export type UseIframeReturn = { /** * The main wallet, or undefined if the wallet is not connected. */ wallet: MainWalletBase | undefined; /** * A ref callback to set the iframe element. */ iframeRef: RefCallback<HTMLIFrameElement | null>; /** * The iframe element. */ iframe: HTMLIFrameElement | null; /** * A function to trigger a keystore change event on the iframe app wallet. */ triggerKeystoreChange: () => void; }; export declare const useIframe: ({ walletName, metadata, walletClientOverrides, signerOverrides, origins, }?: UseIframeOptions) => UseIframeReturn;