import { CURRENT_STEP_CONTRACT_VERSION } from '../steps/step-contract.js'; export type StepContractV3MigrationStep = Readonly<{ id?: unknown; name?: unknown; type: unknown; kind?: unknown; metadata?: Readonly>; [key: string]: unknown; }>; export type StepContractV3MigrationManifest = Readonly<{ stepContractVersion: 2 | 3; steps: readonly StepContractV3MigrationStep[]; [key: string]: unknown; }>; type StepContractV3MigratedMetadata = T extends Readonly> ? T extends Readonly<{ stepType: 'complete_registration'; }> ? Omit & Readonly<{ stepType: 'purchase_completed'; }> : T : T; type StepContractV3MigratedStep = T extends Readonly<{ id: 'subscription-started'; name: 'subscription-started'; type: 'complete_registration'; kind: 'subscription-handoff'; }> ? Omit & Readonly<{ type: 'purchase_completed'; }> & (T extends Readonly<{ metadata: infer M; }> ? Readonly<{ metadata: StepContractV3MigratedMetadata; }> : unknown) : T; type StepContractV3MigratedSteps = { [K in keyof T]: StepContractV3MigratedStep; }; export type StepContractV3MigratedManifest = T extends StepContractV3MigrationManifest ? Omit & Readonly<{ stepContractVersion: typeof CURRENT_STEP_CONTRACT_VERSION; steps: T['stepContractVersion'] extends 2 ? StepContractV3MigratedSteps : T['steps']; }> : never; export declare const isStepContractV2PurchaseTerminal: (step: Pick) => boolean; export declare function migrateStepContractV2ToV3(manifest: T): StepContractV3MigratedManifest; export {};