import type { FlowContext, StepType } from '../types.js'; import { WizardFlow } from './WizardFlow.js'; /** * Flow strategy for transaction-based actions. * * Handles both single-role actions (sendSatoshis, burn) where the * creator provides inputs and signs locally, and multi-role actions * (receive, request) where the creator publishes an invitation for * another party to complete. */ export class TransactionWizardFlow extends WizardFlow { readonly type = 'transaction' as const; getStepTypes(context: FlowContext): StepType[] { const steps: StepType[] = []; if (context.availableRoles.length > 1) steps.push('role-select'); if (context.hasVariables) steps.push('variables'); if (context.shouldCollectInputs) steps.push('inputs'); steps.push('review'); steps.push('publish'); return steps; } canFinalize(context: FlowContext): boolean { return ( context.requirementsComplete && context.wizardCollectedInputs && !context.hasSignedAndBroadcasted ); } getFinalActionLabel(context: FlowContext): string { return this.canFinalize(context) ? 'Sign & Broadcast' : 'Done'; } }