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>;
}