Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TypeScript typings #34

Closed
wojtekmaj opened this issue Jun 23, 2023 · 1 comment
Closed

TypeScript typings #34

wojtekmaj opened this issue Jun 23, 2023 · 1 comment

Comments

@wojtekmaj
Copy link

wojtekmaj commented Jun 23, 2023

Since I had to write these anyway, I'm sharing TypeScript typings for this package in case somebody needs them. It would be also a neat base for potential TypeScript migration in the future.

They are far from being ideal; I was not able to find a definite documentation for each and every call, so this is my "best guess" so that I have ANYTHING to work with.

/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars */

declare module 'jotform' {
  type ControlOptions = string; // optionone|optiontwo|optionthree…
  type ControlValues = string; // valueone|valuetwo|valuethree…
  type EnableDisableFlag = 'enable' | 'disable';
  type EnableDisableUppercaseFlag = 'Enable' | 'Disable';
  type HintOptions = string; // optionone,optiontwo,optionthree…
  type HorizontalAlign = 'Auto' | 'Center' | 'Left' | 'Right' | string; // TODO: Add all possible values
  type ISODate = string;
  type NumberLikeString = `${number}`;
  type Special =
    | 'Canadian Provinces'
    | 'Countries'
    | 'Days'
    | 'Gender'
    | 'Last 100 Years'
    | 'Months'
    | 'None'
    | 'Time Zones'
    | 'US States Abbr'
    | 'US States';
  type StringifiedJson<T> = string;
  type Url = string;
  type Validation =
    | 'Alphabetic'
    | 'AlphaNumeric'
    | 'Currency'
    | 'Cyrillic'
    | 'Email'
    | 'Numeric'
    | 'Url'
    | 'None';
  type VerticalAlign = 'Top' | 'Middle' | 'Bottom' | string; // TODO: Add all possible values
  type Weekday = 'Sunday' | 'Monday' | 'Tuesday' | 'Wednesday' | 'Thursday' | 'Friday' | 'Saturday';
  type WidgetType = 'native' | string; // TODO: Add all possible values
  type YesNoFlag = 'Yes' | 'No';
  type ZeroOneFlag = '0' | '1';

  export type Options = {
    apiKey?: string;
    debug?: boolean;
    url?: string;
    version?: string;
    timeout?: number;
  };

  type Filter = Record<string, any>;

  type Query = {
    direction?: 'ASC' | 'DESC';
    filter?: Filter;
    limit?: number;
    offset?: number;
    orderby?: any;
  };

  export type User = {
    username: string;
    name: string;
    email: string;
    website: Url | null;
    time_zone: string;
    account_type: Url;
    status: 'ACTIVE' | string; // TODO: Add all possible values
    created_at: ISODate;
    updated_at: ISODate | null;
    region: 'EMEA' | string; // TODO: Add all possible values
    is_verified: ZeroOneFlag;
    usage: Url;
    euOnly: ZeroOneFlag;
    new_users_campaign: string;
    loginToGetSubmissions: ZeroOneFlag;
    loginToViewUploadedFiles: ZeroOneFlag;
    loginToViewSubmissionRSS: ZeroOneFlag;
    showJotFormPowered: ZeroOneFlag;
    defaultTheme: string;
    submission_inbox_group: string;
    avatarUrl: Url;
    formListingsTestUser: ZeroOneFlag;
    company_logo: Url;
    company: string;
    tablesIntroVideoShown: YesNoFlag;
    disableViewLimits: boolean;
    allowBoards: boolean;
    allowDigest: boolean;
    allowPrefills: boolean;
    allowWorkflowFeatures: boolean;
    allowAutoDeleteSubmissions: boolean;
    teamsBetaUser: ZeroOneFlag;
    paymentNewProductManagement: boolean;
    allowEncryptionV2: boolean;
  };

  export type Usage = {
    submissions: string;
    ssl_submissions: string;
    payments: string;
    uploads: string;
    total_submissions: string;
    signed_documents: string;
    pdf_attachment_submissions: string;
    mobile_submissions: string;
    views: string;
    api: number;
    form_count: string;
  };

  export type Form<K extends string = string> = {
    id: K;
    username: string;
    title: string;
    height: NumberLikeString;
    status: 'ENABLED' | 'DELETED' | string; // TODO: Add all possible values
    created_at: ISODate;
    updated_at: ISODate | null;
    last_submission: string | null;
    new: ZeroOneFlag;
    count: NumberLikeString;
    type: 'LEGACY' | 'CARD';
    favorite: ZeroOneFlag;
    archived: ZeroOneFlag;
    url: Url;
  };

  export type FormQuestionBase<K extends string = string> = {
    hidden?: YesNoFlag;
    name: string;
    order: NumberLikeString;
    protected?: YesNoFlag;
    qid: K;
    text: string;
    type: string;
  };

  export type FormQuestionControlBase<K extends string = string> = FormQuestionBase<K> & {
    labelAlign: HorizontalAlign;
    readonly?: YesNoFlag;
    required?: YesNoFlag;
    subLabel?: string;
    useCalculations?: YesNoFlag;
  };

  export type FormQuestionComplexBase<K extends string = string> = FormQuestionBase<K> & {
    labelAlign: HorizontalAlign;
    readonly?: YesNoFlag;
    required?: YesNoFlag;
  };

  export type FormQuestionAddress<K extends string = string> = FormQuestionComplexBase<K> & {
    compoundHint: HintOptions;
    countryDropdownDefaultText: string;
    customCountryDropdown: YesNoFlag;
    customCountryOptions: string;
    customStateOptions?: '';
    description?: string;
    hasAutocomplete: YesNoFlag;
    hasGeolocation: YesNoFlag;
    requiredInputs: ControlOptions;
    selectedCountry: string;
    states: 'americanStates' | 'textbox';
    subfields: ControlOptions;
    sublabels: {
      addr_line1: string;
      addr_line2: string;
      city: string;
      state: string;
      postal: string;
      country: string;
    };
    type: 'control_address';
  };

  export type FormQuestionButton<K extends string = string> = FormQuestionBase<K> & {
    buttonAlign: HorizontalAlign;
    buttonStyle?: 'None' | string; // TODO: Add all possible values
    clear?: YesNoFlag;
    clearText?: string;
    encryptIcon?: YesNoFlag;
    print?: YesNoFlag;
    printText?: string;
    type: 'control_button';
  };

  export type FormQuestionCheckbox<K extends string = string> = FormQuestionControlBase<K> & {
    allowOther?: YesNoFlag;
    calcValues?: ControlValues;
    description?: string;
    maxSelection?: NumberLikeString | '';
    minSelection?: NumberLikeString | '';
    options: ControlOptions;
    otherText?: string;
    selected?: string;
    shuffle?: YesNoFlag;
    special?: Special;
    spreadCols?: NumberLikeString;
    type: 'control_checkbox';
  };

  export type FormQuestionDatetime<K extends string = string> = FormQuestionComplexBase<K> & {
    ageVerification: YesNoFlag;
    allowTime: YesNoFlag;
    autoCalendar: YesNoFlag;
    dateSeparator: '-' | '/' | '.';
    days: ControlOptions; // Localized names of days
    description?: string;
    defaultDate: 'none' | 'current' | `custom_${string}-${string}-${string}`;
    defaultTime: 'none' | 'current' | `custom_${string}:${string}`;
    format: string;
    limitDate: StringifiedJson<{
      days: {
        monday: boolean;
        tuesday: boolean;
        wednesday: boolean;
        thursday: boolean;
        friday: boolean;
        saturday: boolean;
        sunday: boolean;
      };
      future: true;
      past: boolean;
      custom: boolean;
      ranges: boolean;
      start: ISODate | '';
      end: ISODate | '';
    }>;
    liteMode: YesNoFlag;
    minAge: NumberLikeString;
    months: ControlOptions; // Localized names of months
    onlyFuture: YesNoFlag;
    startWeekOn: Weekday;
    step: NumberLikeString;
    sublabels: {
      day: string;
      month: string;
      year: string;
      last: string;
      hour: string;
      minutes: string;
      litemode: string;
    };
    timeFormat: 'AM/PM' | '24 Hour';
    today: string; // Localized "Today"
    validateLiteDate: YesNoFlag;
    type: 'control_datetime';
  };

  export type FormQuestionDivider<K extends string = string> = FormQuestionBase<K> & {
    color: string;
    height: NumberLikeString;
    lineStyle: 'solid' | 'dotted' | 'dashed';
    margin: NumberLikeString;
    protected?: never;
    spaceAbove: NumberLikeString;
    spaceBelow: NumberLikeString;
    type: 'control_divider';
  };

  export type FormQuestionDropdown<K extends string = string> = FormQuestionControlBase<K> & {
    autoFixed?: YesNoFlag;
    calcValues?: ControlValues;
    description?: string;
    emptyText?: string;
    multipleSelections?: YesNoFlag;
    options: ControlOptions;
    searchText?: string;
    selected?: string;
    shuffle?: YesNoFlag;
    size?: NumberLikeString;
    special?: Special;
    type: 'control_dropdown';
    visibleOptions?: NumberLikeString;
    width?: NumberLikeString;
  };

  export type FormQuestionEmail<K extends string = string> = FormQuestionControlBase<K> & {
    allowCustomDomains: YesNoFlag;
    allowedDomains: string;
    autoFixed?: YesNoFlag;
    confirmation: YesNoFlag;
    confirmationHint: string;
    confirmationSublabel: string;
    defaultValue: string;
    description?: string;
    disallowFree: YesNoFlag;
    domainCheck: YesNoFlag;
    hint: string;
    maxsize: NumberLikeString | '';
    shrink?: YesNoFlag;
    size?: NumberLikeString;
    validation?: Extract<Validation, 'Email'>;
    verificationCode: YesNoFlag;
    type: 'control_email';
  };

  export type FormQuestionFullname<K extends string = string> = FormQuestionComplexBase<K> & {
    compoundHint: HintOptions;
    description?: string;
    middle: YesNoFlag;
    prefix: YesNoFlag;
    prefixChoices: ControlOptions;
    sublabels: {
      prefix: string;
      first: string;
      middle: string;
      last: string;
      suffix: string;
    };
    suffix: YesNoFlag;
    type: 'control_fullname';
  };

  export type FormQuestionHead<K extends string = string> = FormQuestionBase<K> & {
    alt?: string;
    headerImage?: string;
    headerType: 'Default' | 'Large' | 'Small';
    imageAlign: HorizontalAlign;
    nextButtonText?: string;
    previousButtonText?: string;
    protected?: never;
    showQuestionCount?: YesNoFlag;
    subHeader: string;
    textAlign: HorizontalAlign;
    type: 'control_head';
    verticalTextAlign: VerticalAlign;
    width?: string;
  };

  export type FormQuestionHidden<K extends string = string> = FormQuestionBase<K> & {
    browserInfo: YesNoFlag;
    defaultValue: string;
    type: 'control_hidden';
    labelAlign: HorizontalAlign;
    selectedField: string;
    widgetType: WidgetType;
  };

  export type FormQuestionImage<K extends string = string> = FormQuestionBase<K> & {
    align?: HorizontalAlign;
    alt: string;
    description?: string;
    height: NumberLikeString;
    labelText: string;
    link: Url | '';
    protected?: never;
    src: Url;
    target: '_blank' | '_self' | '_parent' | '_top';
    type: 'control_image';
    width: NumberLikeString;
  };

  export type FormQuestionNumber<K extends string = string> = FormQuestionControlBase<K> & {
    autoFixed: YesNoFlag;
    defaultValue: string;
    description?: string;
    hint: string;
    maxsize: NumberLikeString | '';
    maxValue: NumberLikeString | '';
    minValue: NumberLikeString | '';
    shrink?: YesNoFlag;
    size?: NumberLikeString;
    type: 'control_number';
  };

  export type FormQuestionPagebreak<K extends string = string> = FormQuestionBase<K> & {
    autoNext: YesNoFlag;
    backText: string;
    backVisi: 'Visible' | 'Hidden';
    buttonStyle: 'None' | string; // TODO: Add all possible values
    nextText: string;
    nextVisi: 'Visible' | 'Hidden';
    pageInfo: string;
    type: 'control_pagebreak';
  };

  export type FormQuestionPhone<K extends string = string> = FormQuestionComplexBase<K> & {
    compoundHint: HintOptions;
    countryCode: YesNoFlag;
    description?: string;
    inputMask: EnableDisableFlag;
    inputMaskValue: string;
    sublabels: {
      country: string;
      area: string;
      phone: string;
      full: string;
      masked: string;
    };
    shrink?: YesNoFlag;
    size?: NumberLikeString;
    type: 'control_phone';
  };

  export type FormQuestionRadio<K extends string = string> = FormQuestionControlBase<K> & {
    allowOther?: YesNoFlag;
    calcValues?: ControlValues;
    description?: string;
    options: ControlOptions;
    otherText?: string;
    selected?: string;
    shuffle?: YesNoFlag;
    special?: Special;
    spreadCols?: NumberLikeString;
    type: 'control_radio';
  };

  export type FormQuestionText<K extends string = string> = FormQuestionBase<K> & {
    type: 'control_text';
  };

  export type FormQuestionTextbox<K extends string = string> = FormQuestionControlBase<K> & {
    autoFixed?: YesNoFlag;
    defaultValue?: string;
    description?: string;
    hint?: string;
    inputTextMask?: string;
    maxsize?: NumberLikeString | '';
    minsize?: NumberLikeString | '';
    shrink?: YesNoFlag;
    size?: NumberLikeString;
    type: 'control_textbox';
    validation?: Validation;
  };

  type FormQuestionTextareaV1<K extends string = string> = FormQuestionControlBase<K> & {
    cols: NumberLikeString;
    maxsize?: NumberLikeString | '';
    rows: NumberLikeString;
    type: 'control_textarea';
  };

  type FormQuestionTextareaV2<K extends string = string> = FormQuestionControlBase<K> & {
    autoFixed: YesNoFlag;
    cols: NumberLikeString; // Height in pixels, NOT rows
    defaultValue: string;
    description?: string;
    entryLimit: string;
    entryLimitMin: string;
    hint: string;
    maxsize?: NumberLikeString | '';
    mde: YesNoFlag;
    rows: NumberLikeString; // Height in pixels, NOT rows
    type: 'control_textarea';
    validation?: Validation;
    wysiwyg: EnableDisableUppercaseFlag;
  };

  export type FormQuestionTextarea<K extends string = string> =
    | FormQuestionTextareaV1<K>
    | FormQuestionTextareaV2<K>;

  export type FormQuestion<K extends string = string> =
    | FormQuestionAddress<K>
    | FormQuestionButton<K>
    | FormQuestionCheckbox<K>
    | FormQuestionDatetime<K>
    | FormQuestionDivider<K>
    | FormQuestionDropdown<K>
    | FormQuestionEmail<K>
    | FormQuestionFullname<K>
    | FormQuestionHead<K>
    | FormQuestionHidden<K>
    | FormQuestionImage<K>
    | FormQuestionNumber<K>
    | FormQuestionPagebreak<K>
    | FormQuestionPhone<K>
    | FormQuestionRadio<K>
    | FormQuestionText<K>
    | FormQuestionTextbox<K>
    | FormQuestionTextarea<K>;

  export type FormQuestions = { [K in string]: FormQuestion<K> };

  type SubmissionAnswerBase<T> = Omit<T, 'answer'> & {
    name: string;
    order: NumberLikeString;
    text: string;
    type: string;
    answer?: any;
  };

  type SubmissionAnswerAddress = SubmissionAnswerBase<{
    answer?: {
      addr_line1?: string;
      addr_line2?: string;
      city?: string;
      state?: string;
      postal?: string;
      country?: string;
    };
    prettyFormat?: string;
  }>;

  type SubmissionAnswerButton = SubmissionAnswerBase<{ answer?: never }>;

  type SubmissionAnswerCheckbox = SubmissionAnswerBase<{ answer?: string[] }>;

  type SubmissionAnswerDatetime = SubmissionAnswerBase<{ answer?: any }>; // TODO

  type SubmissionAnswerDivider = SubmissionAnswerBase<{ answer?: never }>;

  type SubmissionAnswerDropdown = SubmissionAnswerBase<{ answer?: string }>;

  type SubmissionAnswerEmail = SubmissionAnswerBase<{ answer?: string }>;

  type SubmissionAnswerFullname = SubmissionAnswerBase<{
    answer?: {
      prefix?: string;
      first?: string;
      middle?: string;
      last?: string;
      suffix?: string;
    };
    prettyFormat?: string;
  }>;

  type SubmissionAnswerHead = SubmissionAnswerBase<{ answer?: never }>;

  type SubmissionAnswerImage = SubmissionAnswerBase<{ answer?: never }>;

  type SubmissionAnswerNumber = SubmissionAnswerBase<{ answer?: any }>; // TODO

  type SubmissionAnswerPhone = SubmissionAnswerBase<{
    answer?: {
      country: string;
      area: string;
      phone: string;
      full: string;
      masked: string;
    };
    prettyFormat?: string;
  }>;

  type SubmissionAnswerRadio = SubmissionAnswerBase<{ answer?: string }>;

  type SubmissionAnswerText = SubmissionAnswerBase<{ answer?: never }>;

  type SubmissionAnswerTextbox = SubmissionAnswerBase<{ answer?: string }>;

  type SubmissionAnswerTextarea = SubmissionAnswerBase<{ answer?: string }>;

  type SubmissionAnswer =
    | SubmissionAnswerButton
    | SubmissionAnswerCheckbox
    | SubmissionAnswerDatetime
    | SubmissionAnswerDivider
    | SubmissionAnswerDropdown
    | SubmissionAnswerEmail
    | SubmissionAnswerFullname
    | SubmissionAnswerHead
    | SubmissionAnswerImage
    | SubmissionAnswerNumber
    | SubmissionAnswerPhone
    | SubmissionAnswerRadio
    | SubmissionAnswerText
    | SubmissionAnswerTextbox
    | SubmissionAnswerTextarea;

  export type Submission<K1 extends string = string, K2 extends string = string> = {
    id: K2;
    form_id: K1;
    ip: string;
    created_at: ISODate;
    status: 'ACTIVE' | 'CUSTOM' | 'DELETED' | string; // TODO: Add all possible values
    new: ZeroOneFlag;
    flag: ZeroOneFlag;
    notes: string;
    updated_at: ISODate | null;
    answers: {
      [K in string]: SubmissionAnswer;
    };
  };

  export type Subuser = Record<string, any>; // TODO

  export type Folder<K extends string = string> = {
    id: K;
    path: string;
    owner: string;
    name: string;
    parent: string;
    color: string;
    forms: Form[];
    subfolders: Folder[];
  };

  export type FolderRoot = {
    id: string;
    path: string;
    owner: string;
    name: string;
    parent: 'root';
    color: string;
    forms: {
      [K in string]: Form<K>;
    };
    subfolders: Folder[];
  };

  export type Report<K extends string = string> = Record<string, any>; // TODO

  type FolderLayoutNode = {
    [K in string]: {
      nodes: FolderLayoutNode;
    };
  };

  export type Settings = {
    username: string;
    name: string;
    email: string;
    website: string | null;
    time_zone: string;
    account_type: Url;
    status: 'ACTIVE' | string; // TODO: Add all possible values
    created_at: ISODate;
    updated_at: ISODate | null;
    region: 'EMEA' | string; // TODO: Add all possible values
    is_verified: ZeroOneFlag;
    usage: Url;
    euOnly: ZeroOneFlag;
    new_users_campaign: string;
    loginToGetSubmissions: ZeroOneFlag;
    loginToViewUploadedFiles: ZeroOneFlag;
    loginToViewSubmissionRSS: ZeroOneFlag;
    showJotFormPowered: ZeroOneFlag;
    defaultTheme: string;
    submission_inbox_group: string;
    avatarUrl: Url;
    formListingsTestUser: ZeroOneFlag;
    company_logo: Url;
    company: string;
    tablesIntroVideoShown: YesNoFlag;
    folderLayout: StringifiedJson<FolderLayoutNode>;
    disableViewLimits: boolean;
  };

  export type HistoryEntry = Record<string, any>; // TODO

  export type FormFile<K1 extends string = string, K2 extends string = string> = {
    id: K2;
    name: string;
    type: string;
    size: string;
    username: string;
    form_id: K1;
    submission_id: string;
    uploaded: string;
    date: string;
    url: Url;
  };

  export type FormWebhook = string;

  type ConditionActionBase = {
    id: string;
    isError: boolean;
  };

  export type ConditionVisibilityActionSingle = ConditionActionBase & {
    visibility: 'Show' | 'Hide' | 'Require' | 'Unrequire';
    field: string;
  };

  export type ConditionVisibilityActionMultiple = ConditionActionBase & {
    visibility: 'ShowMultiple' | 'HideMultiple' | 'RequireMultiple' | 'UnrequireMultiple';
    fields: string[];
  };

  export type ConditionVisibilityAction =
    | ConditionVisibilityActionSingle
    | ConditionVisibilityActionMultiple;

  export type ConditionCalculationAction = ConditionActionBase & {
    equation: string;
    resultField: string;
  };

  export type ConditionAction = ConditionVisibilityAction | ConditionCalculationAction;

  export type ConditionTerm = {
    id: string;
    field: string;
    operator: 'contains' | 'notContains' | 'equals' | 'notEquals' | 'isEmpty' | 'isFilled';
    value: string;
    isError: boolean;
  };

  type Condition = {
    action: StringifiedJson<ConditionAction[]>;
    disabled?: ZeroOneFlag;
    id: string;
    index: string;
    link: 'Any' | 'All';
    priority: NumberLikeString;
    terms: StringifiedJson<ConditionTerm[]>;
    type: 'field' | 'require' | string; // TODO: Add all possible values
  };

  type Email = {
    body: string;
    branding21Email: ZeroOneFlag | '';
    dirty: string;
    from: 'default' | string;
    hideEmptyFields: ZeroOneFlag;
    html: ZeroOneFlag;
    lastQuestionID: string;
    name: string;
    pdfattachment: string;
    replyTo: string;
    sendOnEdit: ZeroOneFlag;
    sendOnSubmit: ZeroOneFlag;
    subject: string;
    to: string;
    type: 'notification' | string; // TODO: Add all possible values
    uniqueID: string;
    uploadAttachment: string;
  };

  export type SubmissionSetting = Record<string, any>; // TODO

  export type Integrations = Record<string, any> & {
    webhooks?: {
     endpoints: StringifiedJson<string[]>;
    };
  }; // TODO

  type FormPropertiesBase<K extends string = string> = {
    activeRedirect?: 'thanktext' | 'thankurl';
    alignment: VerticalAlign;
    conditions?: Condition[];
    defaultAutoResponderEmailAssigned: YesNoFlag;
    defaultEmailAssigned: YesNoFlag;
    defaultTheme: string;
    emails: Email[];
    formOwnerAccountType: 'ENTERPRISE' | 'FREE' | string; // TODO: Add all possible values
    formOwnerName: string;
    hash: string;
    height: NumberLikeString;
    id: K;
    injectCSS: string;
    integrations: Integrations | never[];
    isEUForm: ZeroOneFlag;
    isHIPAA: ZeroOneFlag;
    lastQuestionID: string;
    owner: string;
    pagetitle: string;
    pageTitleChanged: YesNoFlag;
    slug: string;
    status: 'ENABLED' | string; // TODO: Add all possible values
    styleJSON: string;
    submissionSettings: SubmissionSetting[];
    thanktext: string;
    thankurl?: Url;
    thankYouIconSrc: Url;
    thankYouImageSrc: Url;
    thankYouPageLayout: 'smallImageUp' | string; // TODO: Add all possible values
    themeID: string;
    title: string;
    type: 'LEGACY' | string; // TODO: Add all possible values
  };

  export type FormPropertiesV3<K extends string = string> = FormPropertiesBase<K> & {
    allowFormFillerToContact: YesNoFlag;
    assigneeSubmissionPermission: 'submitOnly' | string; // TODO: Add all possible values
    assignLinkExpireDate: string;
    assignLinkExpireTimezone: string;
    assignSlug: string;
    datetimeMigrationIncludesBirthDate: ZeroOneFlag;
    datetimeMigrationStatus: 'done' | string; // TODO: Add all possible values
    defaultTheme: 'v1';
    isOrganizationSettingModalClosed: ZeroOneFlag;
  };

  type FormStrings = Record<string, string>;

  export type FormPropertiesV4<K extends string = string> = FormPropertiesBase<K> & {
    allowSubmissionEdit: YesNoFlag;
    background: string;
    cardThemeID: string;
    clearFieldOnHide: EnableDisableFlag;
    creationLanguage: string;
    defaultTheme: 'v2';
    errorNavigation: YesNoFlag;
    expireDate: 'No Limit' | any; // TODO: Add all possible values
    font: string;
    fontcolor: string;
    fontsize: NumberLikeString;
    formStrings: [FormStrings];
    formStringsChanged: YesNoFlag;
    formType: 'legacyForm' | string; // TODO: Add all possible values
    formWidth: NumberLikeString;
    hideEmptySubmissionFields: YesNoFlag;
    hideMailEmptyFields: EnableDisableFlag;
    hideNonInputSubmissionFields: YesNoFlag;
    hideSubmissionHeader: YesNoFlag;
    highlightLine: 'Enabled' | string; // TODO: Add all possible values
    isEncrypted: YesNoFlag;
    labelWidth: NumberLikeString;
    limitSubmission: 'No Limit' | any; // TODO: Add all possible values
    lineSpacing: NumberLikeString;
    messageOfLimitedForm: string;
    mobileGoButton: 'enable' | string; // TODO: Add all possible values
    newPaymentUIForNewCreatedForms: YesNoFlag;
    optioncolor: string;
    pageColor: string;
    preventCloningForm: YesNoFlag;
    responsive: YesNoFlag;
    sendpostdata: YesNoFlag;
    showJotFormLogo: YesNoFlag;
    showProgressBar: EnableDisableFlag;
    styles: string;
    submissionHeaders: string;
    submitError: 'jumpToFirstError' | string; // TODO: Add all possible values
    thankYouDownloadPDF: YesNoFlag;
    thankYouEditSubmission: YesNoFlag;
    thankYouFillAgain: YesNoFlag;
    thankYouSelectedPDFs: YesNoFlag;
    unique: 'None' | string; // TODO: Add all possible values
    uniqueField: '<Field Id>' | string; // TODO: Add all possible values
    usesNewPDF: YesNoFlag;
    v4: '1';
  };

  export type FormProperties<K extends string = string> = FormPropertiesV3<K> | FormPropertiesV4<K>;

  export function options(options: Options): void;

  export function getUser(): Promise<User>;

  export function getUsage(): Promise<Usage>;

  export function getForms(query?: Query): Promise<Form[]>;

  export function getSubmissions(
    query?: Query & {
      fullText?: any;
      nocache?: any;
    },
  ): Promise<Submission[]>;

  export function getSubusers(): Promise<Subuser[]>;

  export function getFolders(): Promise<FolderRoot | 'You do not have any folders'>;

  export function getReports(): Promise<Report[]>;

  export function getSettings(): Promise<Settings>;

  export function getHistory(query?: {
    action?: any;
    date?: any;
    sortBy?: any;
    startDate?: any;
    endDate?: any;
  }): Promise<HistoryEntry[]>;

  export function getForm<K extends string>(formID: K): Promise<Form<K>>;

  export function getFormQuestions(formID: string): Promise<FormQuestions>;

  export function getFormQuestion<K extends string>(
    formID: string,
    questionID: K,
  ): Promise<FormQuestion<K>>;

  export function getFormSubmissions<K extends string>(
    formID: K,
    query?: Query,
  ): Promise<Submission<K>[]>;

  export function createFormSubmission<K extends string>(
    formID: K,
    submission: {
      submission: Record<string, any>;
    },
  ): Promise<{ submissionID: string, URL: string }>;

  export function createFormSubmissions(
    formID: string,
    submissions: Record<string, any>[],
  ): Promise<{ submissionID: string, URL: string }[]>;

  export function getFormFiles<K extends string>(formID: K): Promise<FormFile<K>[]>;

  export function getFormWebhooks(formID: string): Promise<Record<string, FormWebhook>>;

  export function createFormWebhook(
    formID: string,
    webhookURL: string,
  ): Promise<Record<string, FormWebhook>>;

  export function deleteFormWebhook(formID: string, webhookID: string): Promise<any>;

  export function getSubmission<K extends string>(submissionID: K): Promise<Submission<string, K>>;

  export function editSubmission<K extends string>(
    submissionID: K,
    submission: Partial<Submission<string, K>>,
  ): Promise<{ submissionID: K; URL: Url }>;

  export function deleteSubmission(submissionID: string): Promise<any>;

  export function getReport<K extends string>(reportID: K): Promise<Report<K>>;

  export function getFolder<K extends string>(folderID: K): Promise<Folder<K>>;

  export function createForm(form: Partial<Form>): Promise<Form>;

  export function createForms(forms: Partial<Form>[]): Promise<any>;

  export function deleteForm(formID: string): Promise<any>;

  export function cloneForm(formID: string): Promise<Form>;

  export function addFormQuestion(
    formID: string,
    question: Partial<FormQuestion>,
  ): Promise<FormQuestion>;

  export function addFormQuestions(
    formID: string,
    questions: Partial<FormQuestion>[],
  ): Promise<any>;

  export function deleteFormQuestion(formID: string, questionID: string): Promise<any>;

  export function getFormProperties<K extends string>(formID: K): Promise<FormProperties<K>>;

  export function addFormProperty(formID: string, property: any): Promise<any>;

  export function addFormProperties(formID: string, properties: any): Promise<any>;

  export function getFormPropertyByKey(formID: string, propertyKey: string): Promise<any>;
}
@itsalysialynn
Copy link

Plus one to this feature request. And thank you kind stranger!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants