import type { ScriptDescriptor, ExternalSignature, MMRProof } from './types.js'; import type { StoragePort } from './adapters.js'; /** Local storage error so corruption is surfaced, never treated as absence. */ export declare class MultisigStorageError extends Error { readonly code: 'corrupt' | 'unsupported-version'; constructor(code: 'corrupt' | 'unsupported-version', message: string); } export interface MultisigConfig { type: '2of2' | 'mofn'; threshold: number; publicKeys: string[]; ownPublicKey: string; address?: string; } export interface PendingMultisigTransaction { id: string; config: MultisigConfig; transactionHex: string; transactionDigest: string; signatures: Map; createdAt: number; expiresAt: number; status: 'pending' | 'ready' | 'broadcast' | 'expired' | 'failed'; } export interface MultisigExportData { version: number; id: string; config: MultisigConfig; transactionHex: string; transactionDigest: string; signatures: Array<{ publicKey: string; signature: string; signatureType: 'wots' | 'standard'; }>; createdAt: number; } export declare class MultisigManager { private pendingTransactions; readonly ready: Promise; private storage; constructor(storage?: StoragePort); /** * Load pending transactions from the durable record. * * Format detection (RFC-007 ยง4.2): the record carries an explicit version. * - `{ version: 1, transactions }` โ€” supported, opened as-is. * - `{ transactions }` (no version) โ€” legacy pre-G10 shape, migrated by * rewriting it under the versioned envelope (never silently dropped). * - any other version or an unrecognisable shape โ€” **refuses to open**: * valuable signing state is never silently reinitialised or treated as * an empty store. */ private load; private save; createMultisigScript(config: MultisigConfig): ScriptDescriptor; computeMultisigAddress(config: MultisigConfig): string; createPendingTransaction(config: MultisigConfig, transactionHex: string, transactionDigest: string, expirationHours?: number): Promise; addOwnSignature(transactionId: string, signature: string, proof?: MMRProof): Promise; importExternalSignature(transactionId: string, publicKey: string, signature: string, signatureType?: 'wots' | 'standard', proof?: MMRProof): Promise<{ valid: boolean; error?: string; }>; private updateStatus; getSignatures(transactionId: string): Promise; isReady(transactionId: string): Promise; getSignatureStatus(transactionId: string): Promise<{ required: number; collected: number; missing: string[]; status: string; }>; exportTransaction(transactionId: string): Promise; importTransaction(data: MultisigExportData): Promise; markBroadcast(transactionId: string): Promise; markFailed(transactionId: string, error?: string): Promise; getTransaction(transactionId: string): Promise; getAllPending(): Promise; cleanupExpired(): Promise; deleteTransaction(transactionId: string): Promise; }