caravan-x
Version:
A terminal-based utility for managing Caravan multisig wallets in regtest mode. This tool simplifies development and testing with Caravan by providing an easy-to-use interface
226 lines (225 loc) • 4.7 kB
TypeScript
/**
* Configuration for Bitcoin RPC connection
*/
export interface BitcoinRpcConfig {
protocol: string;
host: string;
port: number;
user: string;
pass: string;
dataDir: string;
}
/**
* Main application configuration
*/
export interface AppConfig {
bitcoin: BitcoinRpcConfig;
appDir: string;
caravanDir: string;
keysDir: string;
}
/**
* Default application configuration
*/
export declare const DEFAULT_CONFIG: AppConfig;
/**
* Other configuration types for Caravan-X
* Supports Docker mode, Manual mode, snapshots, and shared configs
*/
/**
* Setup mode for Caravan-X
*/
export declare enum SetupMode {
DOCKER = "docker",
MANUAL = "manual"
}
/**
* Pre-configured test scenario
*/
export interface TestScenario {
id: string;
name: string;
description: string;
blockHeight: number;
wallets: ScenarioWallet[];
transactions: ScenarioTransaction[];
}
/**
* Wallet configuration for a test scenario
*/
export interface ScenarioWallet {
name: string;
type: "singlesig" | "multisig";
addressType?: string;
balance?: number;
utxos?: {
txid: string;
vout: number;
amount: number;
confirmations: number;
}[];
quorum?: {
requiredSigners: number;
totalSigners: number;
};
extendedPublicKeys?: any[];
}
/**
* Transaction configuration for a test scenario
*/
export interface ScenarioTransaction {
from: string;
to: string;
amount: number;
confirmed: boolean;
rbf?: boolean;
cpfp?: boolean;
feeRate?: number;
}
/**
* Blockchain snapshot configuration
*/
export interface BlockchainSnapshot {
id: string;
name: string;
description?: string;
createdAt: string;
blockHeight: number;
blockHash: string;
wallets: string[];
filePath: string;
metadata?: {
tags?: string[];
scenario?: string;
};
}
/**
* Docker configuration
*/
export interface DockerConfig {
enabled: boolean;
image: string;
containerName: string;
ports: {
rpc: number;
p2p: number;
nginx?: number;
};
volumes: {
bitcoinData: string;
coordinator: string;
};
network: string;
autoStart: boolean;
}
/**
* Shared configuration that can be versioned and shared
*/
export interface SharedConfig {
version: string;
name: string;
description?: string;
mode: SetupMode;
bitcoin: {
network: "regtest" | "signet" | "testnet";
rpcPort: number;
p2pPort: number;
rpcUser: string;
rpcPassword: string;
};
docker?: DockerConfig;
initialState: {
blockHeight: number;
preGenerateBlocks: boolean;
wallets: ScenarioWallet[];
transactions: ScenarioTransaction[];
};
coordinator?: {
enabled: boolean;
port: number;
autoStart: boolean;
};
nginx?: {
enabled: boolean;
port: number;
proxyRpc: boolean;
proxyCoordinator: boolean;
};
snapshots?: {
enabled: boolean;
autoSnapshot: boolean;
snapshotInterval?: number;
};
scenarios?: string[];
walletName?: string;
}
/**
* Extended app configuration
*/
export interface EnhancedAppConfig {
bitcoin: {
protocol: string;
host: string;
port: number;
user: string;
pass: string;
dataDir: string;
};
appDir: string;
caravanDir: string;
keysDir: string;
mode: SetupMode;
sharedConfig?: SharedConfig;
docker?: DockerConfig;
snapshots: {
enabled: boolean;
directory: string;
autoSnapshot: boolean;
};
scenariosDir: string;
activeScenario?: string;
}
/**
* Configuration profile that can be saved and loaded
*/
export interface ConfigProfile {
id: string;
name: string;
mode: SetupMode;
createdAt: string;
lastUsedAt: string;
config: EnhancedAppConfig;
}
/**
* Profiles index file structure
*/
export interface ProfilesIndex {
activeProfileId: string | null;
profiles: {
id: string;
name: string;
mode: SetupMode;
createdAt: string;
lastUsedAt: string;
configPath: string;
}[];
}
/**
* Startup user choices
*/
export interface StartupChoices {
baseDirectory: string;
mode: SetupMode;
useExistingConfig: boolean;
selectedProfileId?: string;
}
/**
* Default Docker configuration
*/
export declare const DEFAULT_DOCKER_CONFIG: DockerConfig;
/**
* Pre-configured test scenarios
*/
export declare const BUILT_IN_SCENARIOS: {
[key: string]: TestScenario;
};