import type { DaoCoreConfig } from "../../config/types.daocore.js";
import type { ChannelAccountSnapshot } from "./types.core.js";
export declare function createAccountListHelpers(channelKey: string, options?: {
    normalizeAccountId?: (id: string) => string;
    allowUnlistedDefaultAccount?: boolean;
    implicitDefaultAccount?: {
        channelKeys?: readonly string[];
        envVars?: readonly string[];
    };
    hasImplicitDefaultAccount?: (cfg: DaoCoreConfig) => boolean;
}): {
    listConfiguredAccountIds: (cfg: DaoCoreConfig) => string[];
    listAccountIds: (cfg: DaoCoreConfig) => string[];
    resolveDefaultAccountId: (cfg: DaoCoreConfig) => string;
};
export declare function hasConfiguredAccountValue(value: unknown): boolean;
export declare function listCombinedAccountIds(params: {
    configuredAccountIds: Iterable<string>;
    additionalAccountIds?: Iterable<string>;
    implicitAccountId?: string | undefined;
    fallbackAccountIdWhenEmpty?: string | undefined;
}): string[];
export declare function resolveListedDefaultAccountId(params: {
    accountIds: readonly string[];
    configuredDefaultAccountId?: string | undefined;
    allowUnlistedDefaultAccount?: boolean;
    ambiguousFallbackAccountId?: string | undefined;
    normalizeListedAccountId?: ((accountId: string) => string) | undefined;
}): string;
export declare function mergeAccountConfig<TConfig extends Record<string, unknown>>(params: {
    channelConfig: TConfig | undefined;
    accountConfig: Partial<TConfig> | undefined;
    omitKeys?: string[];
    nestedObjectKeys?: string[];
}): TConfig;
export declare function resolveMergedAccountConfig<TConfig extends Record<string, unknown>>(params: {
    channelConfig: TConfig | undefined;
    accounts: Record<string, Partial<TConfig>> | undefined;
    accountId: string;
    omitKeys?: string[];
    normalizeAccountId?: (accountId: string) => string;
    nestedObjectKeys?: string[];
}): TConfig;
type AccountSnapshotInput = {
    accountId?: string | null;
    enabled?: boolean | null;
    name?: string | null | undefined;
};
export declare function describeAccountSnapshot(params: {
    account: AccountSnapshotInput;
    configured?: boolean | undefined;
    extra?: Record<string, unknown> | undefined;
}): ChannelAccountSnapshot;
export declare function describeWebhookAccountSnapshot(params: {
    account: AccountSnapshotInput;
    configured?: boolean | undefined;
    mode?: string | undefined;
    extra?: Record<string, unknown> | undefined;
}): ChannelAccountSnapshot;
export {};
