import { Base as BaseModel } from '@airtable/blocks/models';
import { AtLeastOne } from '../../types/utilTypes';
import { ShopifyObjectType } from '../shopify';
import { SHOPIFY_OBJECT_FAMILY } from '../shopify/shopifyObjectFamilies';
import { AirtableModelAttributes } from './AirtableModel';
/**
 * Default max records allowed in a base for the Pro plan.
 */
export declare const DEFAULT_RECORD_MAX = 50000;
export declare function getAirtableBaseUrl(airtableBaseId: string): string;
export declare const DefaultDesyncOrder: readonly SHOPIFY_OBJECT_FAMILY[];
export interface BaseSyncConfig {
    shopify_object_types: ShopifyObjectType[];
    /**
     * The order in which we start looking for families to desync. desyncFloor will still be respected, of course.
     */
    desync_order: SHOPIFY_OBJECT_FAMILY[];
    shopify_object_families: AtLeastOne<{
        [type in SHOPIFY_OBJECT_FAMILY]: {
            /**
             * The number of records we won't go below when desyncing. This must be smaller than initialSyncCeiling.
             * As a general rule, the sum of all desyncFloors should be <= record_max
             */
            desyncFloor: number;
            /**
             * The max number of entities we'll sync. This value is used in the initial sync to Airtable. The
             * sum of all initialSyncCeilings should equal record_max. Note that this is an *initial* sync ceiling.
             * The records for a family can go beyond this value given the number of entities in other families.
             * We try to hit record_max as much as possible.
             */
            initialSyncCeiling: number;
        };
    }>;
    record_max: number;
}
declare const SerializedBaseProperties: readonly ["id", "name"];
declare type BaseProperties = typeof SerializedBaseProperties[number];
export declare type SerializedAirtableBase = AirtableModelAttributes<BaseModel, BaseProperties>;
/**
 * When a table is created for each of the Shopify Object types, this AirtableTableLink object captures the current information
 * and should store it onto the base. This allows for tables to potentially be renamed and for the system to still be resilient against
 * these changes.
 */
export declare type AirtableTableLinks = Partial<{
    [type in ShopifyObjectType]: {
        id: string;
        name: string;
    };
}>;
export declare function serializeBase(airtableTable: BaseModel): SerializedAirtableBase;
export declare function getParentMostSyncedType(shopifyObjectType: ShopifyObjectType, syncConfig: BaseSyncConfig): ShopifyObjectType | null;
export {};
