UNPKG

sui-svelte-wallet-kit

Version:

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

156 lines (155 loc) 5.2 kB
/** * MultisigWalletAdapter * Implements SuiWalletAdapter interface for multisig accounts */ import type { WalletAccount } from '@wallet-standard/core'; import type { SuiWalletAdapter, SignAndExecuteTransactionParams, SignPersonalMessageParams, SignMessageResult } from '../SuiModule/types.js'; import { MultisigService, type MultisigConfig, type SignerConfig, type SignerStatus } from '../MultisigService/index.js'; /** Wallet icon type (data URL format) */ export type WalletIconDataUrl = `data:image/svg+xml;base64,${string}` | `data:image/webp;base64,${string}` | `data:image/png;base64,${string}` | `data:image/gif;base64,${string}`; /** * Extended WalletAccount for multisig accounts */ export interface MultisigAccount extends WalletAccount { address: string; publicKey: Uint8Array; chains: readonly `sui:${string}`[]; features: readonly `${string}:${string}`[]; /** Multisig threshold */ threshold: number; /** Total weight of all signers */ totalWeight: number; } /** * Signer provider interface - adapters that can sign for multisig */ export interface SignerProvider { /** Signer ID matching SignerConfig.id */ signerId: string; /** Sign transaction bytes, return signature */ signTransaction(txBytes: Uint8Array): Promise<{ signature: string; }>; /** Sign personal message, return signature */ signPersonalMessage(message: Uint8Array): Promise<{ signature: string; }>; /** Check if signer is available */ isAvailable(): Promise<boolean>; } /** * Callback for requesting signature from a signer */ export type SignatureRequestCallback = (signer: SignerConfig, txBytes: Uint8Array) => Promise<{ signature: string; } | null>; /** * Extended MultisigConfig with adapter options */ export interface MultisigAdapterConfig extends MultisigConfig { network?: 'mainnet' | 'testnet' | 'devnet'; /** Custom icon for the multisig wallet */ icon?: WalletIconDataUrl; /** Signer providers for automatic signing */ signerProviders?: SignerProvider[]; /** Callback to request signature from user */ onSignatureRequest?: SignatureRequestCallback; /** Callback when address changes (due to config update) */ onAddressChange?: (oldAddress: string, newAddress: string) => void; } /** * MultisigWalletAdapter class */ export declare class MultisigWalletAdapter implements SuiWalletAdapter { readonly name = "Multisig"; readonly version: "1.0.0"; readonly icon: WalletIconDataUrl; readonly chains: readonly ["sui:mainnet", "sui:testnet", "sui:devnet"]; private config; private service; private _accounts; private _connected; private signerProviders; constructor(config: MultisigAdapterConfig); get accounts(): readonly MultisigAccount[]; get features(): { readonly 'standard:connect': { readonly connect: () => Promise<void>; }; readonly 'standard:disconnect': { readonly disconnect: () => Promise<void>; }; readonly 'sui:signAndExecuteTransaction': { readonly signAndExecuteTransaction: (params: SignAndExecuteTransactionParams) => Promise<any>; }; readonly 'sui:signPersonalMessage': { readonly signPersonalMessage: (params: SignPersonalMessageParams) => Promise<SignMessageResult>; }; readonly 'multisig:getConfig': { readonly getConfig: () => MultisigConfig; }; readonly 'multisig:getAvailableSigners': { readonly getAvailableSigners: () => Promise<SignerStatus[]>; }; }; /** * Connect to multisig wallet */ connect(): Promise<void>; /** * Disconnect from multisig wallet */ disconnect(): Promise<void>; /** * Sign and execute a transaction */ signAndExecuteTransaction(params: SignAndExecuteTransactionParams): Promise<any>; /** * Sign a personal message */ signPersonalMessage(params: SignPersonalMessageParams): Promise<SignMessageResult>; /** * Collect signatures from signers for transaction */ private collectSignatures; /** * Collect signatures from signers for personal message */ private collectMessageSignatures; /** * Get current multisig configuration */ getConfig(): MultisigConfig; /** * Get available signers with their status */ getAvailableSigners(): Promise<SignerStatus[]>; /** * Check if connected */ isConnected(): boolean; /** * Get MultisigService instance */ getService(): MultisigService; /** * Update multisig configuration */ updateConfig(newConfig: MultisigAdapterConfig): void; /** * Add a signer provider */ addSignerProvider(provider: SignerProvider): void; /** * Remove a signer provider */ removeSignerProvider(signerId: string): void; /** * Set up account from address */ private setupAccount; } /** * Create a MultisigWalletAdapter instance */ export declare function createMultisigWalletAdapter(config: MultisigAdapterConfig): MultisigWalletAdapter;