UNPKG

sui-svelte-wallet-kit

Version:

Svelte 5 wallet kit for Sui: connect wallets, manage accounts, SuiNS, balance, sign transactions/messages

181 lines (180 loc) 5.87 kB
/** * Multisig Types * Simplified configuration types for multisig setup */ import type { PublicKey } from '@mysten/sui/cryptography'; import type { Transaction } from '@mysten/sui/transactions'; import type { SuiNetwork } from '../SuiModule/types.js'; export declare enum MultisigErrorCode { INVALID_CONFIG = "INVALID_CONFIG", INVALID_THRESHOLD = "INVALID_THRESHOLD", INVALID_SIGNER = "INVALID_SIGNER", SIGNER_NOT_RESOLVED = "SIGNER_NOT_RESOLVED", WALLET_NOT_CONNECTED = "WALLET_NOT_CONNECTED", PUBLIC_KEY_PARSE_ERROR = "PUBLIC_KEY_PARSE_ERROR", PROPOSAL_NOT_READY = "PROPOSAL_NOT_READY", INSUFFICIENT_SIGNATURES = "INSUFFICIENT_SIGNATURES", SIGNER_MISMATCH = "SIGNER_MISMATCH", EXECUTION_FAILED = "EXECUTION_FAILED" } export declare class MultisigError extends Error { code: MultisigErrorCode; cause?: Error | undefined; constructor(code: MultisigErrorCode, message: string, cause?: Error | undefined); } /** Key types for public key signers */ export type SignerKeyType = 'ed25519' | 'secp256k1' | 'secp256r1' | 'passkey' | 'zklogin'; /** Internal signer type after resolution */ export type ResolvedSignerType = 'ed25519' | 'secp256k1' | 'secp256r1' | 'zklogin' | 'passkey'; /** Passkey signer - uses connected passkey wallet */ export interface PasskeySigner { type: 'passkey'; weight?: number; name?: string; /** Passkey address for persistence */ address?: string; } /** ZkLogin signer - uses connected zkLogin wallet */ export interface ZkLoginSigner { type: 'zklogin'; weight?: number; name?: string; /** zkLogin address for persistence */ address?: string; } /** Wallet signer - resolves from connected wallet by address */ export interface WalletSigner { type: 'wallet'; address: string; weight?: number; name?: string; } /** Public key signer - uses raw public key directly */ export interface PublicKeySigner { type: 'publicKey'; publicKey: string; keyType: SignerKeyType; weight?: number; name?: string; /** Optional: wallet address for display purposes */ address?: string; } /** Union type for all signer definitions */ export type MultisigSigner = PasskeySigner | ZkLoginSigner | WalletSigner | PublicKeySigner; /** Mode 1: Pre-configured multisig with fixed signers */ export interface MultisigPreConfig { mode: 'preconfigured'; threshold: number; signers: MultisigSigner[]; name?: string; network?: SuiNetwork; } /** Mode 2: Dynamic multisig where users can add/remove signers */ export interface MultisigDynamicConfig { mode: 'dynamic'; network?: SuiNetwork; /** Optional: load existing config from localStorage */ storageKey?: string; /** Optional: initial threshold (default: 1) */ defaultThreshold?: number; } /** Union type for all config modes */ export type MultisigConfig = MultisigPreConfig | MultisigDynamicConfig; /** A signer after public key resolution */ export interface ResolvedSigner { id: string; type: ResolvedSignerType; weight: number; name?: string; publicKey?: PublicKey; /** Public key as base64 string for display */ publicKeyBase64?: string; /** For zkLogin signers */ addressSeed?: string; issuer?: string; /** Wallet address for display */ address?: string; /** Resolution status */ resolved: boolean; error?: string; } /** Reactive state for multisig */ export interface MultisigState { config: MultisigConfig | null; threshold: number; mode: 'preconfigured' | 'dynamic' | null; signers: ResolvedSigner[]; resolvedCount: number; totalWeight: number; address: string | null; addressReady: boolean; isReady: boolean; error: string | null; } /** Status of a signer's signature */ export interface SignerSignatureStatus { signerId: string; signed: boolean; signature?: string; error?: string; } /** Result of transaction execution */ export interface ExecuteResult { digest: string; effects: any; events?: any[]; error?: string; } /** Proposal for collecting signatures */ export interface MultisigProposal { id: string; transaction: Transaction; txBytes: Uint8Array; multisigAddress: string; threshold: number; signatures: Map<string, string>; signedWeight: number; canExecute: boolean; signWithCurrentWallet: () => Promise<void>; signWithSigner: (signerId: string, signature: string) => void; execute: () => Promise<ExecuteResult>; getSignerStatus: (signerId: string) => SignerSignatureStatus; getSignerStatuses: () => SignerSignatureStatus[]; } /** Return type for useMultisig hook */ export interface UseMultisigReturn { state: MultisigState; address: string | null; isReady: boolean; signers: ResolvedSigner[]; mode: 'preconfigured' | 'dynamic' | null; threshold: number; resolvedCount: number; totalWeight: number; createProposal: (tx: Transaction) => Promise<MultisigProposal>; refreshSigners: () => Promise<void>; addSignerFromCurrentWallet: (options?: { weight?: number; name?: string; }) => Promise<void>; addSigner: (signer: MultisigSigner) => Promise<void>; updateSignerWeight: (signerId: string, weight: number) => void; removeSigner: (signerId: string) => void; setThreshold: (threshold: number) => void; saveConfig: () => void; loadConfig: () => void; clearConfig: () => void; } /** Context for resolving signers */ export interface ResolverContext { passkeyPublicKey?: PublicKey; passkeyAddress?: string; zkLoginPublicIdentifier?: PublicKey; zkLoginAddressSeed?: string; zkLoginIssuer?: string; zkLoginAddress?: string; connectedWallets: Map<string, { address: string; publicKey?: PublicKey; }>; }