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
TypeScript
/**
* 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;