import { Dispatch, Store } from 'redux';
import { InjectedIntl } from 'react-intl';
declare global {
    interface String {
        insertAt: any;
    }
}
/**
 * SheerID Javascript Library types and interfaces
 */
/**
 *  The interface exposed on the window object
 */
export interface SheerIdJsApi {
    getMetadata(): Metadata;
    setMetadata(metadata: Metadata): void;
    resetMetadata(): void;
    setOptions(options: Options): void;
    resetOptions(): void;
    BirthdateField: new (element: HTMLElement) => DiscreteField;
    StudentTypeaheadField: new (element: HTMLElement) => DiscreteField;
    VerificationForm: new (element: HTMLElement, programId: DatabaseId) => void;
    addHook(hook: Hook): RegisteredHooks;
    hooks: Hook[];
    conversion: Conversion;
    setViewModel(viewModel: ViewModel | {}): void;
    resetViewModel(): void;
    overrideComponent: (componentName: OverrideableComponentName, newComponent: StepComponent) => void;
    resetOverriddenComponents: () => void;
    loadInModal(url: VerificationUrl, userConfig: IframeUserConfiguration): void;
    loadInlineIframe(containerElement: HTMLElement, url: VerificationUrl, userConfig: IframeUserConfiguration): void;
    postVerificationSizeUpdates(options: PostMessagesOptions): void;
    getMessages(locale: Locale, programThemeMessages?: ProgramThemeMessages, segment?: Segment): Promise<StringMap>;
}
export interface RequestOrganizationApi {
    RequestOrganizationForm: new (element: HTMLElement, programId: DatabaseId) => void;
    setOptions(options: Options): void;
}
/**
 * @description Require only properties of type T
 * @private
 * Example:
    type A = { foo: string }

    function bar(newObject: PropertiesOf<A>) {...}

    bar({ foo: 'baz' }) // valid
    bar({ otherProp: 'stuff' }) // invalid
 */
export declare type PropertiesOf<T, Keys extends keyof T = keyof T> = Pick<T, Exclude<keyof T, Keys>> & {
    [K in Keys]-?: Required<Pick<T, K>>;
}[Keys];
/**
 * @private
 */
export declare type StringMap = {
    [a: string]: string;
};
/**
 * @example 5bbd127d9781852f68e14ddc
 * @template 24 digit hexadecimal
 */
export declare type DatabaseId = string;
/**
 * @example { 'someKey': 'someValue' }
 */
export declare type Metadata = {
    [key: string]: string | boolean;
};
/**
 * @description Configurable options that can be passed when initializing this library.
 */
export declare type Options = {
    restApi?: RestApiOptions;
    logLevel?: LogLevel;
    mockStep?: MockStep;
    mockSubSegment?: SubSegment;
    mockErrorId?: ErrorId;
    mockPreviousStep?: VerificationStep;
    doFetchTheme?: boolean;
    locale?: Locale;
    messages?: object;
    messagesWithLocale?: object;
    urlStudentFaq?: string;
    urlSeniorFaq?: string;
    urlAgeFaq?: string;
    urlMilitaryFaq?: string;
    urlTeacherFaq?: string;
    urlMemberFaq?: string;
    urlFirstResponderFaq?: string;
    urlMedicalFaq?: string;
    urlEmploymentFaq?: string;
    urlIdentityFaq?: string;
    urlLicensedProfessionalFaq?: string;
    urlAddSchoolFaq?: string;
    urlAddSchoolForm?: string;
    customCss?: ProgramTheme['customCss'];
    logoUrl?: ProgramTheme['logoUrl'];
    privacyPolicyUrl?: ProgramTheme['privacyPolicyUrl'];
    cookies?: CookieOptions;
    useFingerprinting?: boolean;
    marketConsent?: MarketConsentOptions;
    customMetadata?: MetadataConfig;
    verificationId?: string;
    minimumOrganizationSearchLength?: number;
    httpRequestTimeout?: number;
};
export declare type RestApiOptions = {
    serviceUrl: string;
    resources: RestResources;
};
/**
 * @description Control how cookies behave
 * @field `expires` Number of days for cookie to expire in. Use 0 to expire in same browser session.
 * @field `secure` Whether the cookie is set securely.
 */
export declare type CookieOptions = {
    expires: number;
    secure: boolean;
    enabled: boolean;
    path?: string;
    domain?: string;
    sameSite?: 'lax' | 'strict' | 'none';
};
export declare type MarketConsentOptions = {
    enabled: boolean;
    required: boolean;
    message: string;
};
export declare type MetadataConfig = {
    enabled: boolean;
    keys: string[];
};
export declare type RestResources = {
    verification: string;
    program: ProgramResources;
    conversion: ConversionResources;
};
export declare type ProgramResources = {
    base: string;
    theme: string;
    organization: string;
};
/**
 * @description Configuration for a verification being displayed on an iframe.
 */
export declare type IframeUserConfiguration = {
    closeButtonText?: string;
    mobileRedirect?: boolean;
    mobileThreshold?: string | number;
    stopPropagation?: boolean;
};
/**
 * @description URL of a verification to be displayed.
 */
export declare type VerificationUrl = string;
/**
 * @description Options for the message events send by a verification loaded on an iframe.
 * These event are used to resize a modal containing a verification.
 */
export declare type PostMessagesOptions = {
    origin: VerificationUrl;
    interval: number;
};
/**
 * @description URLs related to conversion endpoints.
 */
export declare type ConversionResources = {
    base: string;
};
export declare type LogLevel = 'info' | 'log' | 'warn' | 'error';
/**
 * @description Interface for individual field instances, such as BirthdateField
 * @example new sheerid.BirthdateField().setValue('2000-01-01');
 */
export interface DiscreteField {
    getValue(): any;
    setValue(value: any): void;
    onChange(callback: Function): void;
    setIsErrored(value: boolean): void;
    render(): void;
}
/**
 * @todo document constraints here
 */
export declare type Email = string;
/**
 * @example (111) 222-3333 | 1112223333 | 111-222-3333
 * TODO - Update this when PhoneNumberValidator regex changes.
 */
export declare type PhoneNumber = string;
/**
 * @example 2013-03-06
 * @template ISO-8601 'YYYY-MM-DD'
 */
export declare type BirthDate = string;
/**
 * @example 1234567 | A01205257
 */
export declare type MemberId = string;
/**
 * @description TODO
 */
export declare type DischargeDate = string;
/**
 * @description TODO
 */
export declare type MilitaryStatus = 'ACTIVE_DUTY' | 'VETERAN' | 'RESERVIST' | 'MILITARY_RETIREE' | 'MILITARY_FAMILY';
/**
 * @description TODO
 */
export declare type FirstResponderStatus = 'FIREFIGHTER' | 'EMT' | 'POLICE';
export declare type MedicalProfessionalStatus = 'NURSE' | 'DOCTOR' | 'OTHER_HEALTH_WORKER';
export declare type LicensedProfessionalStatus = string;
/**
 * @description TODO
 */
export declare type OrganizationId = number;
/**
 * @description TODO
 */
export declare type OrganizationName = string;
/**
 * @description All possible fields
 */
export declare type FieldId = 'firstName' | 'lastName' | 'memberId' | 'organization' | 'birthDate' | 'email' | 'phoneNumber' | 'postalCode' | 'address1' | 'city' | 'state' | 'dischargeDate' | 'status' | 'statuses' | 'docUpload' | 'country' | 'smsCode' | 'socialSecurityNumber' | 'marketConsentValue' | 'carrierConsentValue' | 'driverLicenseNumber';
export declare type FormValidationOptions = {
    minAge?: number;
    maxAge?: number;
    smsLoopEnabled?: boolean;
    currentStep?: VerificationStep;
    viewModel?: ViewModel;
};
/**
 * @description TODO
 */
export declare type ExtendedFieldId = FieldId | string;
/**
 * @description The object that contains all possible field ids for setting & displaying field errors, if any
 */
export declare type FieldValidationErrors = {
    [P in FieldId]: ErrorId;
};
/**
 * @description TODO
 */
export declare type ExtendedFieldValidationErrors = StringMap;
/**
 * @description TODO
 */
export declare type FieldContent = string | number | File | FormSelectChoice<Country, string> | Organization | boolean;
/**
 * @private
 */
export declare type Organization = {
    id: OrganizationId;
    name: OrganizationName;
    country?: Country;
    type?: OrganizationType;
    idExtended?: string;
    source?: OrganizationRemoteSource;
};
/**
 * @private
 */
export declare type OrganizationRemoteSource = 'EMPLOYER';
/**
 * @private
 */
export declare type OrganizationSearchResp = Organization[];
/**
 * @description A model to back many of this library's `<select>` elements.
 * For compatibility, a default for value of `string` or `number` is allowed.
 * Made generic to allow arbitrary types (e.g. `FormSelectChoice<Locale, string>`)
 */
export declare type FormSelectChoice<v = string | number, l = string> = {
    value: v;
    label: l;
};
export declare type InputSelectOnKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => void;
export interface FormFieldComponentProps<T = any> {
    onChange: Function;
    value: T;
    intl?: InjectedIntl;
    autoFocus?: boolean;
    isErrored?: boolean;
    errorId?: ErrorId;
    isRequired?: boolean;
    onKeyDown?: Function;
    placeholder?: string;
    verificationService?: VerificationService;
}
/**
 * @description Configurable refs that can be defined when rendering FormField components.
 */
export declare type FieldRef = {
    fieldId: FieldId | ExtendedFieldId;
    ref: HTMLElement;
};
export interface VerificationServiceProps {
    verificationService: VerificationService;
}
export interface InputSelectComponentProps {
    onChange: Function;
    options: FormSelectChoice[];
    value: any;
    isErrored?: boolean;
    isRequired?: boolean;
    onKeyDown?: InputSelectOnKeyDown;
    placeholder?: string;
    label?: string | JSX.Element;
    intl: InjectedIntl;
}
export declare type ErrorId = 'apiRateLimitExceeded' | 'dischargeDateBeforeBirthDate' | 'docReviewLimitExceeded' | 'inactiveProgram' | 'expiredProgram' | 'expiredEmailLoopToken' | 'expiredSMSCode' | 'expiredVerification' | 'fraudRulesReject' | 'futureBirthDate' | 'futureDischargeDate' | 'internalServerError' | 'invalidAddress' | 'invalidApiToken' | 'invalidBirthDate' | 'invalidCity' | 'invalidCountry' | 'invalidDischargeDate' | 'invalidDocUploadToken' | 'invalidEmail' | 'invalidFileSizeEmpty' | 'invalidFileSizeMax' | 'invalidFirstName' | 'invalidFirstResponderStatus' | 'invalidLastName' | 'invalidMemberId' | 'invalidMilitaryStatus' | 'invalidNumberOfFiles' | 'invalidOptIn' | 'invalidOrganization' | 'invalidPhoneNumber' | 'invalidPostalCode' | 'invalidProgram' | 'invalidRequest' | 'invalidSMSCode' | 'invalidSocialSecurityNumber' | 'invalidState' | 'invalidStatus' | 'invalidStatuses' | 'invalidDriverLicenseNumber' | 'invalidStep' | 'marketConsentRequired' | 'maxMetadataLengthExceeded' | 'maxMetadataValuesExceeded' | 'maxSMSCodeLimitExceeded' | 'incorrectSMSCodeAttemptLimitExceeded' | 'noProgram' | 'noRemainingRewardCodes' | 'notApproved' | 'notFound' | 'noValidFiles' | 'noVerification' | 'outsideAgePerson' | 'simulatedError' | 'unauthorizedDomain' | 'underagePerson' | 'unknownError' | 'unsupportedDocMimeType' | 'verificationLimitExceeded' | 'invalidEmailLoopToken' | NetworkErrorId;
export declare type NetworkErrorId = 'failedToFetch' | 'requestTimeout';
export declare type ExtendedErrorId = string | undefined;
export declare type RejectionReasons = 'DOCUMENT_UNREADABLE' | 'DOCUMENT_PASSWORD_PROTECTED' | 'DOCUMENT_LIKELY_FRAUD' | 'DOCUMENT_UNSUPPORTED' | 'DOCUMENT_HANDWRITTEN' | 'MISSING_INFORMATION' | 'MISSING_INFORMATION_PERSON_NAME' | 'MISSING_INFORMATION_ORGANIZATION_NAME' | 'DOCUMENT_EXPIRED' | 'DOCUMENT_OUTDATED' | 'MISMATCH_PERSON_NAME' | 'MISMATCH_ORGANIZATION' | 'MISMATCH_STATUS' | 'INELIGIBLE_ORGANIZATION' | 'MISSING_INFORMATION_UNIVERSITY_ENROLLMENT' | 'INELIGIBLE_PERSON_HIGH_SCHOOL_STUDENT' | 'MISSING_INFORMATION_AFFILIATION_US_ARMED_FORCES' | 'MISMATCH_COMPANY_NAME_OR_ADDRESS' | 'PAYSTUB_OUTDATED_LAST_30_DAYS' | 'MISSING_INFORMATION_BIRTHDATE' | 'MISMATCH_BIRTHDATE' | 'DOCUMENT_OUTDATED_FACULTY' | 'MISSING_OR_MISMATCH_JOB_TITLE' | 'OTHER_CONTACT_US';
export declare type VerificationStep = 'collectStudentPersonalInfo' | 'collectTeacherPersonalInfo' | 'collectMemberPersonalInfo' | 'collectMilitaryStatus' | 'collectActiveMilitaryPersonalInfo' | 'collectInactiveMilitaryPersonalInfo' | 'collectSeniorPersonalInfo' | 'collectAgePersonalInfo' | 'collectFirstResponderPersonalInfo' | 'collectMedicalProfessionalPersonalInfo' | 'collectEmployeePersonalInfo' | 'collectDriverLicensePersonalInfo' | 'collectGeneralIdentityPersonalInfo' | 'collectHybridIdentityPersonalInfo' | 'collectLicensedProfessionalPersonalInfo' | 'collectSocialSecurityNumber' | 'cancelSocialSecurityNumber' | 'docUpload' | 'pending' | 'docReviewLimitExceeded' | 'success' | 'error' | 'sso' | 'smsLoop' | 'emailLoop' | 'cancelEmailLoop';
export declare type VerificationStepMap<T> = {
    [P in VerificationStep]: T;
};
export declare type MockStep = VerificationStep | 'loading';
export declare type OverrideableComponentName = 'StepStudentPersonalInfoComponent' | 'StepSeniorPersonalInfoComponent' | 'StepAgePersonalInfoComponent' | 'StepTeacherPersonalInfoComponent' | 'StepMemberPersonalInfoComponent' | 'StepCollectMilitaryStatusComponent' | 'StepActiveMilitaryPersonalInfoComponent' | 'StepInactiveMilitaryPersonalInfoComponent' | 'StepFirstResponderPersonalInfoComponent' | 'StepMedicalProfessionalPersonalInfoComponent' | 'StepEmploymentPersonalInfoComponent' | 'StepDriverLicensePersonalInfoComponent' | 'StepGeneralIdentityPersonalInfoComponent' | 'StepHybridIdentityPersonalInfoComponent' | 'StepLicensedProfessionalPersonalInfoComponent' | 'StepSuccessComponent' | 'StepDocUploadComponent' | 'StepPendingComponent' | 'StepPendingEmailLoopComponent' | 'StepErrorComponent' | 'StepSSOComponent' | 'StepSMSLoopComponent' | 'StepEmailLoopComponent' | 'StepSocialSecurity' | 'RequestOrganizationSuccessComponent' | 'RequestOrganizationErrorComponent' | 'RequestOrganizationSearchComponent';
export declare type StepComponent = React.FunctionComponent<{
    verificationService: VerificationService;
}>;
export declare type Segment = 'student' | 'military' | 'teacher' | 'member' | 'senior' | 'age' | 'firstResponder' | 'medical' | 'employment' | 'identity' | 'licensedProfessional';
export declare type SubSegment = 'college' | 'highSchool' | 'activeDuty' | 'reservist' | 'veteran' | 'retiree' | 'militaryFamily' | 'police' | 'emt' | 'fireFighter' | 'nurse' | 'doctor' | 'driverLicense' | 'generalIdentity' | 'hybridIdentity' | 'licensedCosmetologists' | 'licensedRealState';
export declare type OrganizationType = 'UNIVERSITY' | 'POST_SECONDARY' | 'MEMBERSHIP' | 'MILITARY' | 'FIRST_RESPONDER' | 'MEDICAL' | 'NON_PROFIT' | 'CORPORATE' | 'K12' | 'AGE_ID' | 'HIGH_SCHOOL' | 'NONE';
export declare type NewVerificationRequest = {
    programId: DatabaseId;
    trackingId?: string;
};
/**
 * @description The request to submit when verification is on the step "collectStudentPersonalInfo"
 */
export declare type StudentPersonalInfoRequest = {
    birthDate: BirthDate;
} & WithOrganization & WithCoreFields;
export declare type StudentPersonalInfoViewModel = StudentPersonalInfoRequest & WithLocaleAndCountry & WithFieldsToSkipValidation;
/**
 * @description The request to submit when verification is on the step "collectSeniorPersonalInfo"
 */
export declare type SeniorPersonalInfoRequest = {
    birthDate: BirthDate;
    postalCode: string;
} & WithCoreFields;
export declare type SeniorPersonalInfoViewModel = SeniorPersonalInfoRequest & WithLocaleAndCountry & WithFieldsToSkipValidation;
/**
 * @description The request to submit when verification is on the step "collectAgePersonalInfo"
 */
export declare type AgePersonalInfoRequest = {
    birthDate: BirthDate;
    postalCode: string;
    phoneNumber: PhoneNumber;
    country: Country;
} & WithCoreFields;
export declare type AgePersonalInfoViewModel = AgePersonalInfoRequest & WithLocaleAndCountry & WithFieldsToSkipValidation;
/**
 * @description The request to submit when verification is on the step "collectMilitaryStatus"
 */
export declare type MilitaryStatusRequest = {
    status: MilitaryStatus;
};
/**
 * @description The request to submit when verification is on the step "collectActiveMilitaryPersonalInfo"
 */
export declare type ActiveMilitaryPersonalInfoRequest = {
    birthDate: BirthDate;
    country?: Country;
} & WithOrganization & WithCoreFields;
export declare type ActiveMilitaryPersonalInfoViewModel = {
    status: MilitaryStatus;
} & ActiveMilitaryPersonalInfoRequest & WithLocaleAndCountry & WithFieldsToSkipValidation;
/**
 * @description The request to submit when verification is on the step "collectInactiveMilitaryPersonalInfo"
 */
export declare type InactiveMilitaryPersonalInfoRequest = {
    birthDate: BirthDate;
    dischargeDate: DischargeDate;
    country?: Country;
} & WithOrganization & WithCoreFields;
export declare type InactiveMilitaryPersonalInfoViewModel = {
    status: MilitaryStatus;
} & InactiveMilitaryPersonalInfoRequest & WithLocaleAndCountry & WithFieldsToSkipValidation;
/**
 * @description The request to submit when verification is on the step "collectTeacherPersonalInfo"
 */
export declare type TeacherPersonalInfoRequest = {
    birthDate?: BirthDate;
    postalCode?: string;
} & WithOrganization & WithCoreFields;
export declare type TeacherPersonalInfoViewModel = TeacherPersonalInfoRequest & WithLocaleAndCountry & WithFieldsToSkipValidation;
/**
 * @description The request to submit when verification is on the step "collectMemberPersonalInfo"
 */
export declare type MemberPersonalInfoRequest = {
    memberId?: MemberId;
    birthDate?: BirthDate;
    phoneNumber?: PhoneNumber;
} & WithOrganization & WithCoreFields;
export declare type MemberPersonalInfoViewModel = MemberPersonalInfoRequest & WithLocaleAndCountry & WithFieldsToSkipValidation;
/**
 * @description The request to submit when verification is on the step "collectFirstResponderPersonalInfo"
 * Provide postalCode when organization.id = 0 for better verification results.
 */
export declare type FirstResponderPersonalInfoRequest = {
    birthDate: BirthDate;
    status: FirstResponderStatus;
    postalCode?: string;
    country?: Country;
} & WithOrganization & WithCoreFields;
export declare type FirstResponderPersonalInfoViewModel = FirstResponderPersonalInfoRequest & WithLocaleAndCountry & WithFieldsToSkipValidation;
export declare type MedicalStatusRequest = {
    status: MedicalProfessionalStatus;
};
/**
 * @description The request to submit when verification is on the step "collectMedicalProfessionalPersonalInfo"
 */
export declare type MedicalProfessionalPersonalInfoRequest = {
    birthDate: BirthDate;
    postalCode: string;
    status: MedicalProfessionalStatus;
    country: Country;
} & WithOrganization & WithCoreFields;
export declare type MedicalProfessionalPersonalInfoViewModel = MedicalProfessionalPersonalInfoRequest & WithLocaleAndCountry & WithFieldsToSkipValidation;
/**
 * @description The request to submit when verification is on the step "collectEmployeePersonalInfo"
 */
export declare type EmploymentPersonalInfoRequest = {
    postalCode: string;
    phoneNumber?: PhoneNumber;
    shouldCollectAddress?: Boolean;
} & WithAddress & WithOrganization & WithCoreFields;
export declare type SMSLoopVerificationRequest = {
    smsCode: string;
    deviceFingerprintHash?: string;
};
export declare type EmailLoopVerificationRequest = {
    emailToken: string;
    deviceFingerprintHash?: string;
};
export declare type EmploymentPersonalInfoViewModel = EmploymentPersonalInfoRequest & WithLocaleAndCountry & WithFieldsToSkipValidation;
/**
 * @description The request to submit when verification is on the step "collectDriverLicensePersonalInfo"
 */
export declare type DriverLicensePersonalInfoRequest = {
    driverLicenseNumber: string;
    state: string;
} & WithCoreFields;
export declare type DriverLicensePersonalInfoViewModel = DriverLicensePersonalInfoRequest & WithLocaleAndCountry & WithFieldsToSkipValidation;
export declare type GeneralIdentityPersonalInfoRequest = {
    birthDate: BirthDate;
    postalCode: string;
} & WithAddress & WithCoreFields;
export declare type GeneralIdentityPersonalInfoViewModel = GeneralIdentityPersonalInfoRequest & WithLocaleAndCountry & WithFieldsToSkipValidation;
export declare type HybridIdentityPersonalInfoRequest = {
    birthDate: BirthDate;
    postalCode: string;
    driverLicenseNumber: string;
} & WithAddress & WithCoreFields;
export declare type HybridIdentityPersonalInfoViewModel = HybridIdentityPersonalInfoRequest & WithLocaleAndCountry & WithFieldsToSkipValidation;
/**
 * @description The request to submit when verification is on the step "collectLicensedProfessionalPersonalInfo"
 */
export declare type LicensedProfessionalPersonalInfoRequest = {
    birthDate: BirthDate;
    postalCode: string;
    statuses: LicensedProfessionalStatus[];
} & WithCoreFields & WithOrganization;
export declare type LicensedProfessionalPersonalInfoViewModel = LicensedProfessionalPersonalInfoRequest & WithLocaleAndCountry & WithFieldsToSkipValidation;
export declare type SocialSecurityRequest = {
    socialSecurityNumber: number;
};
export declare type SocialSecurityResponse = {
    verificationId: DatabaseId;
    submissionUrl: string;
    cancelUrl: string;
    currentStep: 'collectSocialSecurityNumber';
    errorIds?: [ErrorId];
} & WithLocaleAndSegment;
export declare type SocialSecurityViewModel = {
    socialSecurityNumber: string;
    metadata?: Metadata;
} & WithLocaleAndCountry & WithFieldsToSkipValidation;
/**
 * @description The request to submit when verification is on the step "docUpload"
 */
export declare type DocUploadRequest = {
    file1: File;
    file2?: File;
    file3?: File;
    metadata?: Metadata;
};
export declare type DocUploadViewModel = DocUploadRequest & {
    erroredFileNames?: string[];
} & WithLocaleAndCountry & WithFieldsToSkipValidation;
export declare type SSOViewModel = {
    isSSOActive: boolean;
    metadata?: Metadata;
} & WithLocaleAndCountry & WithFieldsToSkipValidation;
export declare type SMSLoopViewModel = {
    smsCode: string;
    phoneNumber: string;
    metadata?: Metadata;
    deviceFingerprintHash?: string;
} & WithLocaleAndCountry & WithFieldsToSkipValidation;
export declare type EmailLoopViewModel = {
    emailToken: string;
    metadata?: Metadata;
    deviceFingerprintHash?: string;
} & WithLocaleAndCountry & WithFieldsToSkipValidation;
export declare type RequestOrganizationViewModel = {
    localeChoice: FormSelectChoice<Locale, string>;
    countryChoice: FormSelectChoice<Country, string>;
    orgDomain: string;
    orgName: string;
    firstName: string;
    lastName: string;
    email: string;
    displayResults: boolean;
    searchByOrgName: boolean;
    completeRequest: boolean;
    eligibleOrgs: Organization[];
    ineligibleOrgs: Organization[];
    orgCountryError: string;
    orgDomainError: string;
    orgNameError: string;
    firstNameError: string;
    lastNameError: string;
    emailError: string;
    isSearching: boolean;
};
export declare type VerificationRequest = StudentPersonalInfoRequest | AgePersonalInfoRequest | SeniorPersonalInfoRequest | TeacherPersonalInfoRequest | MemberPersonalInfoRequest | MilitaryStatusRequest | ActiveMilitaryPersonalInfoRequest | InactiveMilitaryPersonalInfoRequest | DocUploadRequest | FirstResponderPersonalInfoRequest | MedicalProfessionalPersonalInfoRequest | EmploymentPersonalInfoRequest | SocialSecurityRequest | SMSLoopVerificationRequest | EmailLoopVerificationRequest | DriverLicensePersonalInfoRequest | GeneralIdentityPersonalInfoRequest | HybridIdentityPersonalInfoRequest | LicensedProfessionalPersonalInfoRequest;
export declare type ViewModel = StudentPersonalInfoViewModel | SeniorPersonalInfoViewModel | AgePersonalInfoViewModel | TeacherPersonalInfoViewModel | MemberPersonalInfoViewModel | ActiveMilitaryPersonalInfoViewModel | InactiveMilitaryPersonalInfoViewModel | DocUploadViewModel | SSOViewModel | FirstResponderPersonalInfoViewModel | MedicalProfessionalPersonalInfoViewModel | EmploymentPersonalInfoViewModel | SocialSecurityViewModel | SMSLoopViewModel | EmailLoopViewModel | DriverLicensePersonalInfoViewModel | GeneralIdentityPersonalInfoViewModel | HybridIdentityPersonalInfoViewModel | LicensedProfessionalPersonalInfoViewModel;
export declare type PersonalInfoViewModel = StudentPersonalInfoViewModel | SeniorPersonalInfoViewModel | AgePersonalInfoViewModel | TeacherPersonalInfoViewModel | MemberPersonalInfoViewModel | ActiveMilitaryPersonalInfoViewModel | InactiveMilitaryPersonalInfoViewModel | FirstResponderPersonalInfoViewModel | MedicalProfessionalPersonalInfoViewModel | EmploymentPersonalInfoViewModel | DriverLicensePersonalInfoViewModel | GeneralIdentityPersonalInfoViewModel | HybridIdentityPersonalInfoViewModel | LicensedProfessionalPersonalInfoViewModel;
export declare type WithOrganization = {
    organization: Organization;
};
export declare type WithAddress = {
    address1: string;
    city: string;
    state: string;
};
export declare type WithCoreFields = {
    firstName: string;
    lastName: string;
    email: Email;
    phoneNumber?: PhoneNumber;
    metadata?: Metadata;
    deviceFingerprintHash?: string;
    locale?: Locale;
};
export declare type WithFieldsToSkipValidation = {
    fieldsToSkipValidation?: FieldId[];
};
export declare type WithLocaleAndCountry = {
    countryChoice: FormSelectChoice<Country, string>;
    localeChoice: FormSelectChoice<Locale, string>;
};
export declare type AddSchoolRequestViewModel = {
    programId: string;
    firstName: string;
    lastName: string;
    email: string;
    schoolCountry: Country;
    schoolName: string;
    schoolDomain: string;
    trackingId?: string;
};
export declare type WithLocaleAndSegment = {
    segment: Segment;
    subSegment: SubSegment;
    locale: Locale;
};
/**
 * @description Base type for all responses
 */
export declare type VerificationResponse = {
    verificationId: DatabaseId;
    currentStep: VerificationStep;
    errorIds?: ErrorId[];
    maxAge?: number;
    minAge?: number;
} & WithLocaleAndSegment;
/**
 * @description Intersection type for all *PersonalInfo responses
 */
export declare type PersonalInfoResponse = StudentPersonalInfoResponse | SeniorPersonalInfoResponse | AgePersonalInfoResponse | TeacherPersonalInfoResponse | MemberPersonalInfoResponse | ActiveMilitaryPersonalInfoResponse | InactiveMilitaryPersonalInfoResponse | FirstResponderPersonalInfoResponse | MedicalProfessionalPersonalInfoResponse | EmploymentPersonalInfoResponse | DriverLicensePersonalInfoResponse | GeneralIdentityPersonalInfoResponse | HybridIdentityPersonalInfoResponse | LicensedProfessionalPersonalInfoResponse;
export declare type AllResponseTypes = PersonalInfoResponse | SSOResponse | DocUploadResponse | SMSLoopResponse | EmailLoopResponse | SuccessResponse | ErrorResponse | PendingResponse | SocialSecurityResponse | MilitaryStatusResponse;
/**
 * @description Response from REST API indicating that StudentPersonalInfoViewModel is expected to be submitted next.
 */
export declare type StudentPersonalInfoResponse = {
    submissionUrl: string;
    currentStep: 'collectStudentPersonalInfo';
    segment: 'student';
    subSegment: null;
    errorIds?: [ErrorId];
    instantMatchAttempts?: number;
} & VerificationResponse;
/**
 * @description Response from REST API indicating that SeniorPersonalInfoViewModel is expected to be submitted next.
 */
export declare type SeniorPersonalInfoResponse = {
    submissionUrl: string;
    currentStep: 'collectSeniorPersonalInfo';
    segment: 'senior';
    subSegment: null;
    errorIds?: [ErrorId];
    instantMatchAttempts?: number;
} & VerificationResponse;
/**
 * @description Response from REST API indicating that AgePersonalInfoViewModel is expected to be submitted next.
 */
export declare type AgePersonalInfoResponse = {
    submissionUrl: string;
    currentStep: 'collectAgePersonalInfo';
    segment: 'age';
    subSegment: null;
    errorIds?: [ErrorId];
    instantMatchAttempts?: number;
    minAge?: number;
    maxAge?: number;
} & VerificationResponse;
/**
 * @description Response from REST API indicating that TeacherPersonalInfoViewModel is expected to be submitted next.
 */
export declare type TeacherPersonalInfoResponse = {
    submissionUrl: string;
    currentStep: 'collectTeacherPersonalInfo';
    segment: 'teacher';
    subSegment: null;
    errorIds?: [ErrorId];
    instantMatchAttempts?: number;
} & VerificationResponse;
export declare type MemberPersonalInfoResponse = {
    submissionUrl: string;
    currentStep: 'collectMemberPersonalInfo';
    segment: 'member';
    subSegment: null;
    errorIds?: [ErrorId];
    instantMatchAttempts?: number;
} & VerificationResponse;
/**
 * @description Response from REST API indicating that StudentPersonalInfoViewModel is expected to be submitted next.
 */
export declare type MilitaryStatusResponse = {
    submissionUrl: string;
    currentStep: 'collectMilitaryStatus';
    segment: 'military';
    errorIds?: [ErrorId];
    availableStatuses?: [MilitaryStatus];
} & VerificationResponse;
/**
 * @description Response from REST API indicating that StudentPersonalInfoViewModel is expected to be submitted next.
 */
export declare type ActiveMilitaryPersonalInfoResponse = {
    submissionUrl: string;
    currentStep: 'collectActiveMilitaryPersonalInfo';
    segment: 'military';
    errorIds?: [ErrorId];
    instantMatchAttempts?: number;
} & VerificationResponse;
/**
 * @description Response from REST API indicating that StudentPersonalInfoViewModel is expected to be submitted next.
 */
export declare type InactiveMilitaryPersonalInfoResponse = {
    submissionUrl: string;
    currentStep: 'collectInactiveMilitaryPersonalInfo';
    segment: 'military';
    errorIds?: [ErrorId];
    instantMatchAttempts?: number;
} & VerificationResponse;
export declare type FirstResponderPersonalInfoResponse = {
    submissionUrl: string;
    currentStep: 'collectFirstResponderPersonalInfo';
    segment: 'firstResponder';
    errorIds?: [ErrorId];
    availableStatuses?: [FirstResponderStatus];
    instantMatchAttempts?: number;
} & VerificationResponse;
export declare type MedicalProfessionalPersonalInfoResponse = {
    submissionUrl: string;
    currentStep: 'collectMedicalProfessionalPersonalInfo';
    segment: 'medical';
    errorIds?: [ErrorId];
    availableStatuses?: [MedicalProfessionalStatus];
    instantMatchAttempts?: number;
} & VerificationResponse;
export declare type EmploymentPersonalInfoResponse = {
    submissionUrl: string;
    currentStep: 'collectEmployeePersonalInfo';
    segment: 'employment';
    subSegment: null;
    errorIds?: [ErrorId];
    instantMatchAttempts?: number;
} & VerificationResponse;
/**
 * @description Response from REST API indicating that DriverLicensePersonalInfoViewModel is expected to be submitted next.
 */
export declare type DriverLicensePersonalInfoResponse = {
    submissionUrl: string;
    currentStep: 'collectDriverLicensePersonalInfo';
    segment: 'identity';
    errorIds?: [ErrorId];
    instantMatchAttempts?: number;
} & VerificationResponse;
export declare type GeneralIdentityPersonalInfoResponse = {
    submissionUrl: string;
    currentStep: 'collectGeneralIdentityPersonalInfo';
    segment: 'identity';
    errorIds?: [ErrorId];
    instantMatchAttempts?: number;
} & VerificationResponse;
export declare type HybridIdentityPersonalInfoResponse = {
    submissionUrl: string;
    currentStep: 'collectHybridIdentityPersonalInfo';
    segment: 'identity';
    errorIds?: [ErrorId];
    instantMatchAttempts?: number;
} & VerificationResponse;
export declare type LicensedProfessionalPersonalInfoResponse = {
    submissionUrl: string;
    currentStep: 'collectLicensedProfessionalPersonalInfo';
    segment: 'licensedProfessional';
    availableStatuses?: LicensedProfessionalStatus[];
    errorIds?: [ErrorId];
    instantMatchAttempts?: number;
} & VerificationResponse;
/**
 * @description Response from REST API indicating that DocUploadRequest is expected to be submitted next.
 */
export declare type DocUploadResponse = {
    verificationId: DatabaseId;
    submissionUrl: string;
    currentStep: 'docUpload';
    errorIds?: [ErrorId];
    rejectionReasons?: RejectionReasons[];
    maxReviewTime?: MaxReviewTime;
    estimatedReviewTime?: EstimatedReviewTime;
} & WithLocaleAndSegment;
/**
 * @description Response from REST API indicating that SSO is expected to be submitted next.
 */
export declare type SSOResponse = {
    verificationId: DatabaseId;
    loginUrl: string;
    cancelUrl: string;
    currentStep: 'sso';
    errorIds?: [ErrorId];
} & WithLocaleAndSegment;
export declare type SMSLoopResponse = {
    verificationId: DatabaseId;
    submissionUrl: string;
    errorIds?: [ErrorId];
    currentStep: 'smsLoop';
} & WithLocaleAndSegment;
export declare type EmailLoopResponse = {
    verificationId: DatabaseId;
    submissionUrl: string;
    errorIds?: [ErrorId];
    currentStep: 'emailLoop';
    canResendEmailLoop: boolean;
    cancelUrl: string;
} & WithLocaleAndSegment;
/**
 * @description Response from REST API. No further requests are expected.
 */
export declare type SuccessResponse = {
    verificationId: DatabaseId;
    currentStep: 'success';
    rewardCode: string;
    redirectUrl?: string;
} & WithLocaleAndSegment;
/**
 * @description Response from REST API. Unrecoverable error. No further requests are expected. Recommend starting over.
 */
export declare type ErrorResponse = {
    verificationId: DatabaseId;
    currentStep: 'error';
    subSegment: SubSegment | null;
    errorIds: [ErrorId];
    redirectUrl: string | null;
} & WithLocaleAndSegment;
/**
 * @description Response from REST API. Poll statusUrl for updates while document is reviewed.
 */
export declare type PendingResponse = {
    verificationId: DatabaseId;
    currentStep: 'pending';
    statusUrl: string;
    maxReviewTime?: MaxReviewTime;
    estimatedReviewTime?: EstimatedReviewTime;
} & WithLocaleAndSegment;
/**
 * @description Theme information about the Program that was created at my.sheerid.com
 */
export declare type ProgramTheme = {
    intl: {
        locale: Locale;
        messages: ProgramThemeMessages;
    };
    customCss: string;
    logoUrl?: string;
    privacyPolicyUrl?: string;
    isTestMode?: boolean;
    openOrgSearchEnabled?: boolean;
    isSmsNotifierConfigured?: boolean;
    remainingRewardCodes?: number | null;
    smsLoopEnabled?: boolean;
    threatMetrixEnabled?: boolean;
    idCheckAddOnEnabled?: boolean;
    config: {
        countries: Country[];
        states?: State[];
        locales: Locale[];
        maxReviewTime: MaxReviewTime;
        estimatedReviewTime: EstimatedReviewTime;
        marketConsent: MarketConsentOptions;
        customFaqLink: FaqUrl;
        customMetadata: MetadataConfig;
        orgSearchUrl: string;
        orgRemoteSource?: OrganizationRemoteSource;
        orgTypes: OrganizationType[];
        excludedOrganizationIds: number[];
        orgSearchCountryTags?: {
            [country in Country]?: string[];
        };
        offerType: 'noCode' | 'staticCode' | 'rewardPool' | undefined;
    };
};
export declare type EstimatedReviewTime = 'A_FEW_MINUTES' | 'A_HALF_HOUR' | 'A_FEW_HOURS' | 'A_FEW_DAYS';
export declare type MaxReviewTime = '2_MIN' | '20_MIN' | '2_HRS' | '24_HRS' | '2_DAY' | '3_DAY';
export declare type FaqUrl = string;
/**
 * @description List of countries supported by SheerID
 */
export declare type Country = keyof Countries;
export declare type State = keyof States;
export declare type Messages = DefaultMessages & ProgramThemeMessages & SegmentSpecificMessages;
export interface MessagesModule {
    defaultMessages: DefaultMessages;
    pluralizationsAndDateLocaleData: any;
    segmentMessages: {
        [S in Segment]: SegmentSpecificMessages;
    };
    requestOrganizationMessages: RequestOrganizationMessages;
}
/**
 * @description These strings are set by a user editing your program in my.sheerid.com
 */
export declare type ProgramThemeMessages = {
    companyName: string;
    errorId: {
        verificationLimitExceeded: string;
        noRemainingRewardCodes: string;
    };
    lowRewardPool: string | null;
    step: {
        personalInfo: {
            title: string;
        };
        success: {
            redirectUrl: string;
            redirectButtonText: string;
            subtitle: string;
            title: string;
        };
        docUpload: {
            title: string;
            subtitle: string;
        };
        error: {
            errorId: {
                verificationLimitExceeded: {
                    title: string;
                };
                noRemainingRewardCodes: {
                    title: string;
                    buttonText: string;
                };
                expiredProgram: {
                    title: string;
                    buttonText: string;
                };
                inactiveProgram: {
                    title: string;
                    buttonText: string;
                };
            };
        };
    };
};
/**
 * @description These strings vary by program segment
 */
export declare type SegmentSpecificMessages = {
    emailExplanation: string;
    schoolName?: string;
    step: {
        personalInfo: {
            title: string;
            subtitle: string;
            howDoesVerifyingWorkDetails: string;
            tryAgain: {
                title: string;
                subtitle: string;
            };
        };
        docUpload: {
            howDoesVerifyingWorkDetails: string;
            uploadInstructions: string;
            title: string;
            subtitle: string;
        };
        success: {
            title: string;
            subtitle: string;
            redirectButtonText: string;
        };
        sso?: {
            title?: string;
            subtitle?: string;
            subtitle2?: string;
            login?: string;
            cancel?: string;
        };
    };
};
/**
 * @description These strings are provided by default
 */
export declare type DefaultMessages = {
    address: string;
    addressPlaceholder: string;
    birthDate: string;
    branchOfService: string;
    branchOfServicePlaceholder: string;
    changeLanguage: string;
    city: string;
    cityPlaceholder: string;
    company: string;
    companyPlaceholder: string;
    copied: string;
    country: string;
    countryPlaceholder: string;
    countries: Countries;
    dateTime: DateTimeMessages;
    dischargeDate: string;
    driverLicenseNumber: string;
    driverLicenseNumberPlaceholder: string;
    driverLicenseState: string;
    emailAddress: string;
    emailAddressPlaceholder: string;
    error: string;
    errorId: {
        [P in ErrorId]: string;
    };
    firstName: string;
    firstNamePlaceholder: string;
    howDoesReviewWork: string;
    howDoesVerifyingWork: string;
    informationTransferredToUS: string;
    lastName: string;
    lastNamePlaceholder: string;
    limitExceededError: string;
    memberId: string;
    memberIdPlaceholder: string;
    optional: string;
    loading: string;
    locales: {
        [P in Locale]: string;
    };
    militaryStatus: string;
    noOptions: string;
    lowRewardPool: string;
    organization: string;
    organizationPlaceholder: string;
    personalInformation: any;
    personalOrSchoolIsFine: string;
    phoneNumber: string;
    phoneNumberExplanation: string;
    phoneNumberWarnMessage1: string;
    phoneNumberWarnMessage2: string;
    phoneUsPlaceholder: string;
    postalCode: string;
    postalCodeExplanation: string;
    postalCodePlaceholder: string;
    poweredBy: string;
    proceed: string;
    requestSchool: string;
    requiredFields: string;
    school: string;
    schoolName: string;
    schoolNamePlaceholder: string;
    sheeridFaqs: string;
    privacyPolicy: string;
    smsCodePlaceholder: string;
    state: string;
    statePlaceholder: string;
    states: States;
    status: string;
    statusPlaceholder: string;
    step: {
        success: {
            copyCouponCode: string;
            emailNotification: string;
            verificationOnly: string;
        };
        pending: {
            titleCountdown: string;
            titleReview: string;
            subtitle: string;
            subtitleAlt: string;
            docDiffLang: string;
            turnaroundTime: string;
            subtitle2: string;
            subtitle3: string;
            subtitleCountdown: string;
        };
        docUpload: {
            acceptableUploadExamples: string;
            acceptedTypes: string;
            addFile: string;
            cancelButtonLabel: string;
            fileInstructions: string;
            rejectionReasons: {};
            submitButtonLabel: string;
            rejectedSubtitle: string;
            nameChanged: string;
            uploadInfo: {
                affiliation: string;
                fullName: string;
                organization: string;
                student: {
                    school: string;
                    enrollmentDate: string;
                };
                teacher: {
                    school: string;
                    currentSchoolYear: string;
                };
                military: {
                    serviceBranch: string;
                    dischargeDate: string;
                    currentAffiliation: string;
                    uploadInstructionsDependent: string;
                };
                senior: {
                    birthDate: string;
                };
                age: {
                    birthDate: string;
                };
                firstResponder: {
                    organization: string;
                    currentAffiliation: string;
                    license: string;
                };
                medical: {
                    status: string;
                    validDate: string;
                };
                employment: {
                    company: string;
                    currentAffiliation: string;
                };
                identity: {
                    validDate: string;
                };
                licensedProfessional: {
                    licenseStatus: string;
                    validDate: string;
                };
            };
            acceptableUploads: {
                student: {
                    idCard: string;
                    classSchedule: string;
                    tuitionReceipt: string;
                };
                teacher: {
                    idCard: string;
                    payStub: string;
                };
                member: {
                    idCard: string;
                    payStub: string;
                };
                senior: {
                    birthCertificate: string;
                    driversLicense: string;
                    passport: string;
                    stateId: string;
                };
                age: {
                    birthCertificate: string;
                    driversLicense: string;
                    passport: string;
                    stateId: string;
                };
                military: {
                    activeDuty: string;
                    veteran: string;
                    reservistA: string;
                    retiree: string;
                    dependent: string;
                };
                medical: {
                    licenseCertificate: string;
                    idCard: string;
                    photoPayStub: string;
                };
                employment: {
                    employeeIdCard: string;
                    payStub: string;
                    officialLetter: string;
                };
                firstResponder: {
                    idCard: string;
                    payStub: string;
                    letter: string;
                };
                licensedProfessional: {
                    license: string;
                };
            };
        };
        sso: {
            title: string;
            subtitle: string;
            subtitle2: string;
            cancel: string;
            login: string;
        };
        collectSocialSecurityNumber: {
            selectOption: string;
            title: string;
            uploadDoc: string;
            uploadInstead: string;
            useSsn: string;
        };
        smsLoop: {
            titleWithNumber: string;
            titleWithoutNumber: string;
            verificationCode: string;
            errors: {
                codeVerification: string;
                codeExpired: string;
                codeResendLimit: string;
                resend: string;
            };
            successResend: string;
            incorrectNumber: {
                incorrectNumber1: string;
                incorrectNumber2: string;
                incorrectNumber3: string;
            };
            resendButton: string;
            submitButton: string;
        };
        emailLoop: {
            title: string;
            subtitleWithEmail: string;
            subtitleWithoutEmail: string;
            subtitle2: string;
            successResend: string;
            resendButton: string;
            errors: {
                resend: string;
            };
            skipEmail: string;
            skipEmail2: string;
            skipEmailCTA: string;
        };
        error: ProgramThemeMessages['step']['error'];
    };
    ssn: string;
    ssnPlaceholder: string;
    universityName: string;
    verificationPurposesOnly: string;
    verifyAndContinue: string;
    verifyMyStudentStatus: string;
    verifyMyTeacherStatus: string;
    verifyMyMembershipStatus: string;
    verifyMyMilitaryStatus: string;
    verifyMyIdentityStatus: string;
    verifyMyMedicalProfessionalStatus: string;
    verifyMyEmploymentStatus: string;
    verifyMyLicensedProfessionalStatus: string;
    FIREFIGHTER: string;
    POLICE: string;
    EMT: string;
    verifyMyFirstResponderStatus: string;
    VETERAN: string;
    MILITARY_RETIREE: string;
    RESERVIST: string;
    ACTIVE_DUTY: string;
    MILITARY_FAMILY: string;
    DOCTOR: string;
    NURSE: string;
    OTHER_HEALTH_WORKER: string;
    tryAgain: string;
    infoShared1: string;
    infoShared2: string;
    studentInfoShared: string;
    militaryInfoShared: string;
    firstResponderInfoShared: string;
};
declare type DateTimeMessages = {
    january: string;
    february: string;
    march: string;
    april: string;
    may: string;
    june: string;
    july: string;
    august: string;
    september: string;
    october: string;
    november: string;
    december: string;
    month: string;
    day: string;
    year: string;
    '2_MIN': string;
    '20_MIN': string;
    '2_HRS': string;
    '24_HRS': string;
    '2_DAY': string;
    '3_DAY': string;
    'A_FEW_MINUTES': string;
    'A_HALF_HOUR': string;
    'A_FEW_HOURS': string;
    'A_FEW_DAYS': string;
};
/**
 * @description These strings are provided for the Request Organization Form
 */
export declare type RequestOrganizationMessages = {
    title: string;
    description: string;
    noCountry: string;
    searchByOrgName: string;
    completeRequest: string;
    submit: string;
    eligibleOrgs: string;
    ineligibleOrgs: string;
    none: string;
    changeLanguage?: DefaultMessages['changeLanguage'];
    poweredBy?: DefaultMessages['poweredBy'];
    country?: DefaultMessages['country'];
    countries?: DefaultMessages['countries'];
    locales?: DefaultMessages['locales'];
    copied: string;
    fields: {
        countryPlaceholder: string;
        domainLabel: string;
        domainPlaceholder: string;
        orgNameLabel: string;
        orgNamePlaceholder: string;
    };
    step: {
        success: {
            title: string;
            description: string;
        };
        error: {
            title: string;
            description: string;
            seeingProblem: string;
            contactUs: string;
        };
    };
    errorId: {
        invalidCountry: DefaultMessages['errorId']['invalidCountry'];
        invalidEmail: DefaultMessages['errorId']['invalidEmail'];
        invalidFirstName: DefaultMessages['errorId']['invalidFirstName'];
        invalidLastName: DefaultMessages['errorId']['invalidLastName'];
        requiredField: string;
        invalidField: string;
        invalidUrl: string;
        tooManyResults: string;
    };
    faq: string;
};
/**
 * @description View-Model Verification Service
 * @private
 */
export interface VerificationService extends VerificationServiceValues, VerificationServiceFunctions {
}
export interface VerificationServiceValues {
    readonly isLoading: boolean;
    readonly isErrored: boolean;
    readonly fieldValidationErrors: FieldValidationErrors;
    readonly messages: Messages;
    readonly verificationResponse: VerificationResponse;
    readonly viewModel: ViewModel;
    readonly programTheme: ProgramTheme;
    readonly previousViewModel: ViewModel;
    readonly previousVerificationResponse: VerificationResponse;
    readonly programId: DatabaseId;
    readonly orgList: Organization[];
    readonly formValidationOptions?: FormValidationOptions;
}
export interface VerificationServiceFunctions {
    readonly fetchNewVerificationRequest: (programId: DatabaseId, segment: Segment, previousViewModel: ViewModel, trackingId?: string, forceNewVerificationRequest?: boolean) => Promise<void>;
    readonly fetchExistingVerificationRequest: (programId: DatabaseId, verificationId: string, previousVerificationResponse?: VerificationResponse, previousViewModel?: ViewModel, needsLoading?: boolean) => Promise<void>;
    readonly updateViewModel: (viewModel: ViewModel) => void;
    readonly updateProgramTheme: (programTheme: ProgramTheme) => void;
    readonly updateFieldValidationErrors: (fieldValidationErrors: FieldValidationErrors) => void;
    readonly submitStep: (stepName: VerificationStep, viewModel: ViewModel, previousResponse: VerificationResponse) => Promise<void>;
    readonly updateLocale: (viewModel: ViewModel, programTheme: ProgramTheme, segment: Segment) => void;
}
/**
 * @description View-Model Request Organization Service
 * @private
 */
export declare type RequestOrganizationService = {
    viewModel: RequestOrganizationViewModel;
    programTheme: ProgramTheme;
    programId: DatabaseId;
    submitted: boolean;
    messages: RequestOrganizationMessages;
    error: string;
    locale: Locale;
    isLoading: number;
    isInitialized: boolean;
};
/**
 * @private
 */
export declare type ReduxState = {
    programId: DatabaseId;
    programTheme: ProgramTheme;
    isLoading: boolean;
    isErrored: boolean;
    viewModel: ViewModel;
    previousViewModel: ViewModel;
    previousVerificationResponse: VerificationResponse;
    verificationResponse: VerificationResponse;
    fieldValidationErrors: FieldValidationErrors;
    messages: StringMap;
    orgList: Organization[];
    formValidationOptions: FormValidationOptions;
};
export declare type VerificationStore = Store<ReduxState, VerificationServiceAction>;
/**
 * @description Create a bound action (wrapped in Redux's dispatch and ready to call)
 */
export declare type BoundActionCreator = (dispatch: Dispatch, getState?: Function) => BoundAction;
export declare type BoundAction = (...args: any[]) => Promise<object>;
export interface GenericAction {
    type: string;
    payload: any;
}
export interface SetMessagesAction {
    type: 'SET_MESSAGES';
    messages: StringMap;
}
export interface ProgramIdAction {
    type: 'PROGRAM_ID';
    programId: DatabaseId;
}
export interface VerificationResponseAction {
    type: 'VERIFICATION_RESPONSE';
    verificationResponse: VerificationResponse;
}
export interface FieldValidationErrorsAction {
    type: 'FIELD_VALIDATION_ERRORS';
    fieldValidationErrors: FieldValidationErrors;
}
export interface ViewModelAction {
    type: 'VIEW_MODEL';
    viewModel: ViewModel;
}
export interface FormValidationOptionsAction {
    type: 'FORM_VALIDATION_OPTIONS';
}
export interface PreLoadOrgsAction {
    type: 'PRE_LOAD_ORGS';
    orgList: Organization[];
}
export interface PreviousViewModelAction {
    type: 'PREVIOUS_VIEW_MODEL';
    previousViewModel: ViewModel;
}
export interface ProgramThemeAction {
    type: 'PROGRAM_THEME';
    programTheme: ProgramTheme;
}
export interface IsLoadingAction {
    type: 'IS_LOADING';
    isLoading: boolean;
}
export interface IsErroredAction {
    type: 'IS_ERRORED';
    isErrored: boolean;
}
export interface ResetStateAction {
    type: 'RESET_STATE';
}
export interface ForceUpdate {
    type: 'FORCE_UPDATE';
}
export declare type VerificationServiceAction = SetMessagesAction | ProgramIdAction | VerificationResponseAction | FieldValidationErrorsAction | ViewModelAction | PreLoadOrgsAction | PreviousViewModelAction | ProgramThemeAction | IsLoadingAction | IsErroredAction | ResetStateAction | FormValidationOptionsAction | ForceUpdate;
/**
 * @private
 * @deprecated Use a specific action interface (or create one) from below
 */
export declare type ReduxAction = VerificationServiceAction;
/**
 * @description Defines the structure of the hooks that have been added, and that the system knows about.
 * @private
 */
export declare type RegisteredHooks = {
    [key: string]: Hook[];
};
/**
 * @description Defines a list of hooks names that are available.
 *      Certain events throughout the software will call an arbitrary callback, by this name.
 *      These names are meant to be descriptive, to indicate when the callback (hook) will be called.
 */
export declare type Hook = {
    name: 'ON_VERIFICATION_READY';
    callback: (verificationResponse: VerificationResponse) => void;
} | {
    name: 'ON_VERIFICATION_SUCCESS';
    callback: (verificationResponse: SuccessResponse) => void;
} | {
    name: 'ON_VERIFICATION_STEP_CHANGE';
    callback: (verificationResponse: SuccessResponse) => void;
};
export declare type HookName = 'ON_VERIFICATION_READY' | 'ON_VERIFICATION_SUCCESS' | 'ON_VERIFICATION_STEP_CHANGE';
/**
 * @description The shape of the request payload to send when calling a conversion endpoint.
 */
export declare type ConversionRequest = {
    amount?: number;
    currency?: string;
    tags?: string[];
};
/**
 * @description The shape of the response object after calling a conversion endpoint.
 */
export declare type ConversionResponse = {
    id: string;
};
/**
 * @description Methods related to performing a conversion with SheerID.
 */
export interface Conversion {
    /**
     * @description Record a conversion to the REST API using verificationId
     */
    convertByVerificationId(verificationId: DatabaseId, conversionRequest: ConversionRequest): Promise<ConversionResponse>;
    /**
     * @description Record a conversion to the REST API using a previously-supplied trackingId
     */
    convertByTrackingId(accountId: DatabaseId, trackingId: string, conversionRequest: ConversionRequest): Promise<ConversionResponse>;
    /**
     * @description Listen to a SheerID iFrame form and store verificationId as a cookie.
     * Use as step 1 of 2, in combination with convert()
     */
    listenForVerificationId(): void;
    /**
     * @description Attempt to record a conversion using a verificationId retrieved from cookies
     * Use as step 2 of 2, in combination with listenForVerificationId
     */
    convert(conversionRequest: ConversionRequest): void;
}
export declare type Validator = (value: FieldContent, formOptions?: FormValidationOptions) => ErrorId | ExtendedErrorId;
/**
 * @deprecated
 */
export declare type Intl = any;
declare type Countries = {
    AD: string;
    AE: string;
    AF: string;
    AG: string;
    AI: string;
    AL: string;
    AM: string;
    AN: string;
    AO: string;
    AR: string;
    AS: string;
    AT: string;
    AU: string;
    AW: string;
    AZ: string;
    BA: string;
    BB: string;
    BD: string;
    BE: string;
    BF: string;
    BG: string;
    BH: string;
    BI: string;
    BJ: string;
    BM: string;
    BN: string;
    BO: string;
    BR: string;
    BS: string;
    BT: string;
    BV: string;
    BW: string;
    BY: string;
    BZ: string;
    CA: string;
    CD: string;
    CF: string;
    CG: string;
    CH: string;
    CI: string;
    CK: string;
    CL: string;
    CM: string;
    CN: string;
    CO: string;
    CR: string;
    CU: string;
    CV: string;
    CY: string;
    CZ: string;
    DE: string;
    DJ: string;
    DK: string;
    DM: string;
    DO: string;
    DZ: string;
    EC: string;
    EE: string;
    EG: string;
    EH: string;
    ER: string;
    ES: string;
    ET: string;
    FI: string;
    FJ: string;
    FK: string;
    FM: string;
    FO: string;
    FR: string;
    GA: string;
    GB: string;
    GD: string;
    GE: string;
    GF: string;
    GH: string;
    GI: string;
    GL: string;
    GM: string;
    GN: string;
    GP: string;
    GQ: string;
    GR: string;
    GS: string;
    GT: string;
    GU: string;
    GW: string;
    GY: string;
    HK: string;
    HM: string;
    HN: string;
    HR: string;
    HT: string;
    HU: string;
    ID: string;
    IE: string;
    IL: string;
    IN: string;
    IO: string;
    IQ: string;
    IR: string;
    IS: string;
    IT: string;
    JM: string;
    JO: string;
    JP: string;
    KE: string;
    KG: string;
    KH: string;
    KI: string;
    KM: string;
    KN: string;
    KP: string;
    KR: string;
    KW: string;
    KY: string;
    KZ: string;
    LA: string;
    LB: string;
    LC: string;
    LI: string;
    LK: string;
    LR: string;
    LS: string;
    LT: string;
    LU: string;
    LV: string;
    LY: string;
    MA: string;
    MC: string;
    MD: string;
    ME: string;
    MG: string;
    MH: string;
    MK: string;
    ML: string;
    MM: string;
    MN: string;
    MO: string;
    MP: string;
    MQ: string;
    MR: string;
    MS: string;
    MT: string;
    MU: string;
    MV: string;
    MW: string;
    MX: string;
    MY: string;
    MZ: string;
    NA: string;
    NC: string;
    NE: string;
    NF: string;
    NG: string;
    NI: string;
    NL: string;
    NO: string;
    NP: string;
    NR: string;
    NU: string;
    NZ: string;
    OM: string;
    PA: string;
    PE: string;
    PF: string;
    PG: string;
    PH: string;
    PK: string;
    PL: string;
    PM: string;
    PN: string;
    PR: string;
    PS: string;
    PT: string;
    PW: string;
    PY: string;
    QA: string;
    RE: string;
    RO: string;
    RS: string;
    RU: string;
    RW: string;
    SA: string;
    SB: string;
    SC: string;
    SD: string;
    SE: string;
    SG: string;
    SH: string;
    SI: string;
    SK: string;
    SL: string;
    SM: string;
    SN: string;
    SO: string;
    SR: string;
    SS: string;
    ST: string;
    SV: string;
    SY: string;
    SZ: string;
    TC: string;
    TD: string;
    TF: string;
    TG: string;
    TH: string;
    TJ: string;
    TK: string;
    TL: string;
    TM: string;
    TN: string;
    TO: string;
    TR: string;
    TT: string;
    TV: string;
    TW: string;
    TZ: string;
    UA: string;
    UG: string;
    UM: string;
    US: string;
    UY: string;
    UZ: string;
    VA: string;
    VC: string;
    VE: string;
    VG: string;
    VI: string;
    VN: string;
    VU: string;
    WF: string;
    WS: string;
    XK: string;
    YE: string;
    YT: string;
    ZA: string;
    ZM: string;
    ZW: string;
};
export declare type States = {
    AK: string;
    AL: string;
    AR: string;
    AZ: string;
    CA: string;
    CO: string;
    CT: string;
    DC: string;
    DE: string;
    FL: string;
    GA: string;
    HI: string;
    IA: string;
    ID: string;
    IL: string;
    IN: string;
    KS: string;
    KY: string;
    LA: string;
    MA: string;
    MD: string;
    ME: string;
    MI: string;
    MN: string;
    MO: string;
    MS: string;
    MT: string;
    NC: string;
    ND: string;
    NE: string;
    NH: string;
    NJ: string;
    NM: string;
    NV: string;
    NY: string;
    OH: string;
    OK: string;
    OR: string;
    PA: string;
    RI: string;
    SC: string;
    SD: string;
    TN: string;
    TX: string;
    UT: string;
    VA: string;
    VT: string;
    WA: string;
    WI: string;
    WV: string;
    WY: string;
};
/**
 * @description List of locales supported by SheerID
 */
export declare type Locale = 'ar' | 'bg' | 'cs' | 'da' | 'de' | 'el' | 'en-GB' | 'en-US' | 'es-ES' | 'es' | 'fi' | 'fr-CA' | 'fr' | 'ga' | 'hr' | 'hu' | 'id' | 'it' | 'iw' | 'ja' | 'ko' | 'lo' | 'lt' | 'ms' | 'nl' | 'no' | 'pl' | 'pt-BR' | 'pt' | 'ru' | 'sk' | 'sl' | 'sr' | 'sv' | 'th' | 'tr' | 'zh-HK' | 'zh';
export {};
