import type { Account } from "./account.js"; import type { Adapter } from "./adapter.js"; import { ConfigError } from "./errors.js"; import { type RuntimeOperationHost } from "./runtime-operation.js"; import type { Router } from "./router.js"; export interface AccountTransactionHost extends RuntimeOperationHost { config: Record; router?: Router; } export interface AccountTransactionDependencies { serialize(config: Record): string; write(file: string, content: string, backup: boolean): void; } export interface AccountTransactionOptions { host: AccountTransactionHost; adapter: Adapter; accountId: string; nextConfig?: Account.Config; configKey: string; configPath: string; runtimeStarted: boolean; forceStop?: boolean; /** 宿主可在触碰账号运行态前证明磁盘来源仍是当前进程已应用的版本。 */ assertSourceCurrent?(configPath: string, source: string | undefined): void; onPersisted(configPath: string, content: string): void; dependencies?: Partial; } export declare class AccountMutationConflictError extends ConfigError { constructor(message?: string, options?: { cause?: Error; }); } /** 磁盘配置在账号运行态切换期间被外部操作更新。 */ export declare class AccountConfigDriftError extends AccountMutationConflictError { constructor(cause?: Error); } /** * 原子切换一个账号的运行态与磁盘配置。 * * 操作期间复用 isReloading 作为 readiness 与并发锁,并发布 account_configuration * 作为公开诊断原因;运行态或写盘失败时会重建旧账号并恢复旧文件。回滚也失败时 * 同时保留所有证据。 */ export declare function mutateAccountAtomically(options: AccountTransactionOptions): Promise;