import { StatsContext } from '@segment/actions-core/*';
import { Payload } from './generated-types';
import { SubscriptionMetadata } from '@segment/actions-core/destination-kit';
export declare const SyncMode: {
    readonly Upsert: "upsert";
    readonly Add: "add";
    readonly Update: "update";
};
export type SyncMode = typeof SyncMode[keyof typeof SyncMode];
export declare const AssociationSyncMode: {
    readonly Upsert: "upsert";
    readonly Read: "read";
};
export type AssociationSyncMode = typeof AssociationSyncMode[keyof typeof AssociationSyncMode];
export declare const ObjReqType: {
    readonly Upsert: "upsert";
    readonly Create: "create";
    readonly Update: "update";
    readonly Read: "read";
};
export type ObjReqType = typeof ObjReqType[keyof typeof ObjReqType];
export declare const HSPropTypeFieldType: {
    readonly StringText: "string:text";
    readonly NumberNumber: "number:number";
    readonly DateTimeDate: "datetime:date";
    readonly DateDate: "date:date";
    readonly EnumerationBooleanCheckbox: "enumeration:booleancheckbox";
    readonly StringTextArea: "string:textarea";
};
export type HSPropTypeFieldType = typeof HSPropTypeFieldType[keyof typeof HSPropTypeFieldType];
export declare const HSPropType: {
    readonly Date: "date";
    readonly String: "string";
    readonly DateTime: "datetime";
    readonly Number: "number";
    readonly Enumeration: "enumeration";
};
export type HSPropType = typeof HSPropType[keyof typeof HSPropType];
export declare const HSPropFieldType: {
    readonly Text: "text";
    readonly Number: "number";
    readonly Date: "date";
    readonly BooleanCheckbox: "booleancheckbox";
    readonly Select: "select";
    readonly TextArea: "textarea";
};
export type HSPropFieldType = typeof HSPropFieldType[keyof typeof HSPropFieldType];
export declare const SchemaMatch: {
    readonly FullMatch: "full_match";
    readonly PropertiesMissing: "properties_missing";
    readonly NoMatch: "no_match";
    readonly Mismatch: "mismatch";
};
export type SchemaMatch = typeof SchemaMatch[keyof typeof SchemaMatch];
export declare const ReadType: {
    readonly ReturnRecordsWithIds: "return_records_with_ids";
    readonly ReturnRecordsWithoutIds: "return_records_without_ids";
};
export type ReadType = typeof ReadType[keyof typeof ReadType];
export interface Prop {
    name: string;
    type: HSPropType;
    fieldType: HSPropFieldType;
    typeFieldType: HSPropTypeFieldType;
}
export interface CachableSchema {
    object_details: {
        object_type: string;
        id_field_name: string;
    };
    properties: Prop[];
    sensitiveProperties: Prop[];
}
export interface SchemaDiff {
    match: SchemaMatch;
    missingProperties?: Prop[];
    missingSensitiveProperties?: Prop[];
}
export interface ReadPropsResp {
    results: Array<Result>;
    status: string;
    statusText: string;
    message?: string;
}
export interface Result {
    name: string;
    type: HSPropType;
    fieldType: HSPropFieldType;
    hasUniqueValue: boolean;
}
export interface ReadReq {
    idProperty: string;
    properties: string[];
    inputs: Array<{
        id: string;
    }>;
}
export interface UpsertReq {
    inputs: Array<{
        idProperty: string;
        id: string;
        properties: Record<string, string>;
    }>;
}
export interface CreateReq {
    inputs: Array<{
        idProperty: string;
        properties: Record<string, string>;
    }>;
}
export interface BatchObjResp {
    status: string;
    results: Array<{
        id: string;
        properties: Record<string, string | null>;
    }>;
}
export interface PayloadWithFromId extends Payload {
    object_details: Payload['object_details'] & {
        record_id: string;
    };
    associations?: Array<NonNullable<Payload['associations']>[number] & {
        from_record_id: string;
    }>;
    dissociations?: Array<NonNullable<Payload['dissociations']>[number] & {
        from_record_id: string;
    }>;
}
export interface AssociationPayload {
    object_details: {
        object_type: string;
        id_field_name: string;
        id_field_value: string;
        property_group?: string;
        from_record_id: string;
    };
    association_details: {
        association_label: string;
    };
}
export interface AssociationPayloadWithId extends AssociationPayload {
    object_details: AssociationPayload['object_details'] & {
        record_id: string;
    };
}
export interface AssociationsReq {
    inputs: {
        types: AssociationType[];
        from: {
            id: string;
        };
        to: {
            id: string;
        };
    }[];
}
export interface AssociationType {
    associationCategory: AssociationCategory;
    associationTypeId: string;
}
declare enum AssociationCategory {
    HUBSPOT_DEFINED = "HUBSPOT_DEFINED",
    USER_DEFINED = "USER_DEFINED",
    INTEGRATOR_DEFINED = "INTEGRATOR_DEFINED"
}
export interface GroupableFields {
    object_type: string;
    id_field_name: string;
}
export interface CreatePropsReq {
    inputs: Array<CreatePropsReqItem>;
}
export interface CreatePropsReqItem {
    name: string;
    label: string;
    groupName: string;
    type: string;
    dataSensitivity: 'sensitive' | undefined;
    fieldType: string;
    options?: Array<{
        label: string;
        value: string;
        hidden: boolean;
        description: string;
        displayOrder: number;
    }>;
}
export interface RequestData<Settings, Payload> {
    rawData: Payload;
    payload: Payload;
    syncMode: SyncMode;
    subscriptionMetadata: SubscriptionMetadata;
    statsContext?: StatsContext;
    settings: Settings;
}
export interface Association {
    object_type?: string;
    association_label?: string;
    id_field_name?: string;
    id_field_value?: string;
    from_record_id?: string;
}
export type AssociationsKey = 'associations' | 'dissociations';
export type AssociationsAction = 'create' | 'archive';
export interface ReadListResp {
    list: ReadListRespItem;
}
export interface ReadListRespItem {
    listId: string;
    processingType: string;
    objectTypeId: string;
    name: string;
    processingTypes: string;
}
export interface CreateListReq {
    name: string;
    objectTypeId: string;
    processingType: 'MANUAL';
}
export interface CreateListResp {
    list: {
        listId: string;
        objectTypeId: string;
        name: string;
    };
}
export interface CachableList {
    listId: string;
    objectType: string;
    objectTypeId: string;
    name: string;
}
export interface AddRemoveFromListReq {
    recordIdsToAdd?: string[];
    recordIdsToRemove?: string[];
}
export type EngageAudiencePayload = Payload & {
    traits_or_props: {
        [k: string]: unknown;
    };
    computation_key: string;
};
export type PayloadListType = 'is_engage_audience_payload' | 'is_non_engage_audience_payload' | 'is_not_audience_payload';
export {};
