@nfid/identitykit
Version:
A React library for adding wallet connections to dApps.
273 lines (242 loc) • 10.4 kB
TypeScript
import * as react_jsx_runtime from 'react/jsx-runtime';
import React$1, { PropsWithChildren, HTMLProps, ComponentType } from 'react';
import { Delegation, PartialIdentity } from '@dfinity/identity';
import * as _dfinity_agent from '@dfinity/agent';
import { Agent as Agent$1, HttpAgent, Identity, SignIdentity } from '@dfinity/agent';
import { Signer } from '@slide-computer/signer';
import { AuthClientStorage } from '@dfinity/auth-client';
import { MenuButtonProps, MenuItemsProps, MenuProps as MenuProps$1 } from '@headlessui/react';
import * as _dfinity_principal from '@dfinity/principal';
import { Principal } from '@dfinity/principal';
import * as _dfinity_ledger_icp from '@dfinity/ledger-icp';
import { SubAccount } from '@dfinity/ledger-icp';
import { SignerAgent } from '@slide-computer/signer-agent';
declare enum IdentityKitTheme {
LIGHT = "light",
DARK = "dark",
SYSTEM = "system"
}
declare const DEFAULT_SIZES: {
width: number;
height: number;
};
type AgentOptions = {
delegation?: Delegation;
signerAgent: SignerAgent<Signer>;
agent: HttpAgent;
identity?: Identity | PartialIdentity;
};
declare class Agent implements Agent$1 {
private signerAgentStrategy;
private agentStrategy;
private delegation?;
private constructor();
static create({ delegation, signerAgent, agent }: AgentOptions): Promise<Agent>;
call(...params: Parameters<Agent$1["call"]>): ReturnType<Agent$1["call"]>;
query(...params: Parameters<Agent$1["query"]>): ReturnType<Agent$1["query"]>;
get rootKey(): ArrayBuffer | null;
fetchRootKey(): ReturnType<Agent$1["fetchRootKey"]>;
getPrincipal(): ReturnType<Agent$1["getPrincipal"]>;
status(): ReturnType<Agent$1["status"]>;
readState(...params: Parameters<Agent$1["readState"]>): ReturnType<Agent$1["readState"]>;
createReadStateRequest?(...params: Parameters<NonNullable<Agent$1["createReadStateRequest"]>>): ReturnType<NonNullable<Agent$1["createReadStateRequest"]>>;
}
type IdleManagerOptions = {
/**
* capture scroll events
* @default false
*/
captureScroll?: boolean;
/**
* scroll debounce time in ms
* @default 100
*/
scrollDebounce?: number;
/**
* Callback after the user has gone idle
*/
onIdle?: () => unknown;
/**
* timeout in ms
*/
idleTimeout?: number;
};
interface IdleOptions extends IdleManagerOptions {
/**
* Disables idle functionality for {@link IdleManager}
* @default false
*/
disableIdle?: boolean;
/**
* Disables default idle behavior - call logout
* @default false
*/
disableDefaultIdleCallback?: boolean;
}
interface SignerClientOptions {
signer: Signer;
/**
* Optional, used to generate random bytes
* @default uses browser/node Crypto by default
*/
crypto?: Pick<Crypto, "getRandomValues" | "randomUUID">;
/**
* Optional storage with get, set, and remove. Uses {@link IdbStorage} by default
*/
storage?: AuthClientStorage;
/**
* Options to handle idle timeouts
* @default after 30 minutes, invalidates the identity
*/
idleOptions?: IdleOptions;
derivationOrigin?: string;
onLogout?: () => Promise<unknown>;
}
declare const ED25519_KEY_LABEL = "Ed25519";
type BaseKeyType = "ECDSA" | typeof ED25519_KEY_LABEL;
declare enum DelegationType {
ACCOUNT = "ACCOUNT",
RELYING_PARTY = "RELYING_PARTY"
}
interface DelegationSignerClientOptions extends SignerClientOptions {
/**
* An identity to use as the base
*/
identity?: SignIdentity | PartialIdentity;
/**
* type to use for the base key
* @default 'ECDSA'
* If you are using a custom storage provider that does not support CryptoKey storage,
* you should use 'Ed25519' as the key type, as it can serialize to a string
*/
keyType?: BaseKeyType;
targets?: string[];
/**
* Expiration of the delegation in nanoseconds
*/
maxTimeToLive?: bigint;
}
interface AccountsSignerClientOptions extends SignerClientOptions {
}
type ObjectValuesType<T> = T[keyof T];
declare const IdentityKitAuthType: {
readonly DELEGATION: "DELEGATION";
readonly ACCOUNTS: "ACCOUNTS";
};
type IdentityKitAuthType = ObjectValuesType<typeof IdentityKitAuthType>;
type SignerConfig = {
id: string;
providerUrl: string;
label: string;
transportType: TransportType;
icon?: string;
description?: string;
};
declare enum TransportType {
NEW_TAB = 0,
EXTENSION = 1,
INTERNET_IDENTITY = 2,
STOIC = 3
}
interface ProviderProps<T extends IdentityKitAuthType = typeof IdentityKitAuthType.ACCOUNTS> extends PropsWithChildren {
authType?: T;
signers?: SignerConfig[];
featuredSigner?: SignerConfig | false;
discoverExtensionSigners?: boolean;
theme?: IdentityKitTheme;
signerClientOptions?: T extends typeof IdentityKitAuthType.DELEGATION ? Omit<DelegationSignerClientOptions, "signer" | "crypto" | "agent"> : Omit<AccountsSignerClientOptions, "signer" | "crypto" | "agent">;
onConnectFailure?: (e: Error) => unknown;
onConnectSuccess?: () => unknown;
onDisconnect?: () => unknown;
realConnectDisabled?: boolean;
crypto?: Pick<Crypto, "getRandomValues" | "randomUUID">;
window?: Window;
allowInternetIdentityPinAuthentication?: boolean;
windowOpenerFeatures?: string;
}
declare const Provider: <T extends IdentityKitAuthType>({ children, signerClientOptions, crypto, window, authType, realConnectDisabled, allowInternetIdentityPinAuthentication, discoverExtensionSigners, windowOpenerFeatures, ...props }: ProviderProps<T>) => react_jsx_runtime.JSX.Element;
type ConnectButtonProps = HTMLProps<HTMLButtonElement> & {
loading?: boolean;
};
declare function ConnectButton({ onClick, className, disabled, loading, children, }: ConnectButtonProps): react_jsx_runtime.JSX.Element;
type ConnectedButtonProps = MenuButtonProps & {
connectedAccount: string;
icpBalance?: number;
};
declare function ConnectedButton({ connectedAccount, icpBalance, className, children, ...props }: ConnectedButtonProps): react_jsx_runtime.JSX.Element;
type ItemProps = React$1.HTMLProps<HTMLDivElement>;
declare function Item({ className, children, ...props }: React$1.HTMLProps<HTMLDivElement>): react_jsx_runtime.JSX.Element;
type ItemTextProps = React.HTMLProps<HTMLSpanElement>;
type ItemsProps = MenuItemsProps & {
innerClassName?: string;
};
declare function Items({ className, innerClassName, children, ...props }: ItemsProps): react_jsx_runtime.JSX.Element;
type AddressItemProps = {
value: string;
} & ItemProps;
declare function AddressItem({ value, onClick, ...props }: AddressItemProps): react_jsx_runtime.JSX.Element;
type DisconnectItemProps = ItemProps;
declare function DisconnectItem(props: DisconnectItemProps): react_jsx_runtime.JSX.Element;
type MenuProps = MenuProps$1 & {
className?: string;
};
declare function Menu({ className, children, ...props }: MenuProps): react_jsx_runtime.JSX.Element;
type ButtonProps = MenuButtonProps;
declare function Button({ className, ...props }: MenuButtonProps): react_jsx_runtime.JSX.Element;
declare function ConnectWallet({ connectButtonComponent, connectedButtonComponent, dropdownMenuComponent, }: {
connectButtonComponent?: ComponentType<ConnectButtonProps>;
connectedButtonComponent?: ComponentType<ConnectedButtonProps>;
dropdownMenuComponent?: ComponentType<MenuProps & {
disconnect: () => unknown;
icpBalance?: number;
connectedAccount: string;
}>;
}): react_jsx_runtime.JSX.Element;
declare function formatIcp(value: number): string;
declare function useIdentity(): _dfinity_agent.Identity | undefined;
declare function useAccounts(): {
principal: Principal;
subAccount?: SubAccount;
}[] | undefined;
declare function useDelegationType(): DelegationType | undefined;
declare function useAgent(agentOptions?: Omit<Parameters<typeof HttpAgent.create>[0], "identity">): Agent | undefined;
declare function useBalance(): {
balance: number | undefined;
fetchBalance: (() => Promise<void>) | undefined;
};
declare function useIsInitializing(): boolean;
declare function useSignerConfig(): SignerConfig | undefined;
declare function useAuth(): {
user: {
principal: _dfinity_principal.Principal;
subAccount?: _dfinity_ledger_icp.SubAccount;
} | undefined;
isConnecting: boolean;
connect: (signerIdOrUrl?: string) => Promise<void>;
disconnect: () => Promise<void>;
};
/**
* @deprecated This function is deprecated. Please use separate hooks instead (useUser, useBalance etc).
*/
declare function useIdentityKit(): {
signer?: Signer;
user?: {
principal: Principal;
subaccount?: SubAccount;
};
icpBalance?: number;
authType: IdentityKitAuthType;
delegationType?: DelegationType;
accounts?: {
principal: Principal;
subAccount?: SubAccount;
}[];
identity?: Identity | PartialIdentity;
isInitializing: boolean;
isUserConnecting: boolean;
connect: (signerIdOrUrl?: string) => void;
disconnect: () => Promise<void>;
fetchIcpBalance?: () => Promise<void>;
};
export { ConnectWallet, ConnectButton as ConnectWalletButton, Menu as ConnectWalletDropdownMenu, AddressItem as ConnectWalletDropdownMenuAddressItem, Button as ConnectWalletDropdownMenuButton, DisconnectItem as ConnectWalletDropdownMenuDisconnectItem, Item as ConnectWalletDropdownMenuItem, Items as ConnectWalletDropdownMenuItems, ConnectedButton as ConnectedWalletButton, DEFAULT_SIZES, Provider as IdentityKitProvider, IdentityKitTheme, formatIcp, useAccounts, useAgent, useAuth, useBalance, useDelegationType, useIdentity, useIdentityKit, useIsInitializing, useSignerConfig as useSigner };
export type { ConnectButtonProps as ConnectWalletButtonProps, AddressItemProps as ConnectWalletDropdownMenuAddressItemProps, ButtonProps as ConnectWalletDropdownMenuButtonProps, DisconnectItemProps as ConnectWalletDropdownMenuDisconnectItemProps, ItemProps as ConnectWalletDropdownMenuItemProps, ItemTextProps as ConnectWalletDropdownMenuItemTextProps, ItemsProps as ConnectWalletDropdownMenuItemsProps, MenuProps as ConnectWalletDropdownMenuProps, ConnectButtonProps as ConnectedWalletButtonProps };