export type StorefrontAddressScope = "shipping" | "billing" | "customer" | "root";
export type StorefrontAddressValidationIssue = {
    scope: StorefrontAddressScope;
    field: string;
    code: string;
    message?: string;
};
export type StorefrontAddressValidationResult = readonly StorefrontAddressValidationIssue[] | null | undefined;
export declare const hasStorefrontAddressValidationIssues: (result: StorefrontAddressValidationResult) => result is readonly StorefrontAddressValidationIssue[];
export declare const getStorefrontAddressValidationMessage: (result: StorefrontAddressValidationResult, fallbackMessage?: string) => string;
export declare class StorefrontAddressValidationError extends Error {
    readonly issues: StorefrontAddressValidationIssue[];
    constructor(issues: readonly StorefrontAddressValidationIssue[], message?: string);
}
export declare const toStorefrontAddressValidationError: (result: StorefrontAddressValidationResult, fallbackMessage?: string) => StorefrontAddressValidationError | null;
export declare const assertStorefrontAddressValidation: (result: StorefrontAddressValidationResult, fallbackMessage?: string) => void;
export type StorefrontCartAddressContext = {
    scope: "shipping" | "billing";
};
export type StorefrontCartAddressAdapter<TInput, TPayload = TInput, TStoredAddress = unknown> = {
    normalize?: (input: TInput, context: StorefrontCartAddressContext) => TInput;
    validate?: (input: TInput, context: StorefrontCartAddressContext) => StorefrontAddressValidationResult;
    toPayload?: (input: TInput, context: StorefrontCartAddressContext) => TPayload;
    fromAddress?: (input?: TStoredAddress | null, context?: StorefrontCartAddressContext) => TInput;
};
export type StorefrontCustomerCreateAddressContext = {
    mode: "create";
};
export type StorefrontCustomerUpdateAddressContext = {
    mode: "update";
};
export type StorefrontCustomerAddressAdapter<TCreateInput, TCreateParams = TCreateInput, TUpdateInput = TCreateInput & {
    addressId?: string;
}, TUpdateParams = TCreateParams> = {
    normalizeCreate?: (input: TCreateInput, context: StorefrontCustomerCreateAddressContext) => TCreateInput;
    validateCreate?: (input: TCreateInput, context: StorefrontCustomerCreateAddressContext) => StorefrontAddressValidationResult;
    toCreateParams?: (input: TCreateInput, context: StorefrontCustomerCreateAddressContext) => TCreateParams;
    normalizeUpdate?: (input: TUpdateInput, context: StorefrontCustomerUpdateAddressContext) => TUpdateInput;
    validateUpdate?: (input: TUpdateInput, context: StorefrontCustomerUpdateAddressContext) => StorefrontAddressValidationResult;
    toUpdateParams?: (input: TUpdateInput, context: StorefrontCustomerUpdateAddressContext) => TUpdateParams;
};
//# sourceMappingURL=address.d.ts.map