@protontech/autofill 0.0.22991789 → 0.0.33690782

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/constants/features.d.ts +1 -0
  2. package/constants/features.js +1 -0
  3. package/constants/heuristics.d.ts +5 -4
  4. package/constants/heuristics.js +5 -10
  5. package/constants/selectors.d.ts +13 -7
  6. package/constants/selectors.js +29 -17
  7. package/debug.d.ts +24 -1
  8. package/debug.js +15 -13
  9. package/dictionary/generate.js +30 -21
  10. package/dictionary/generated/dictionary.d.ts +18 -4
  11. package/dictionary/generated/dictionary.js +31 -17
  12. package/dictionary/source/dictionary.d.ts +4 -3
  13. package/dictionary/source/dictionary.js +155 -89
  14. package/dictionary/source/patterns.js +2 -2
  15. package/features/feature.d.ts +17 -0
  16. package/features/feature.js +72 -0
  17. package/features/feature.spec.d.ts +1 -0
  18. package/features/feature.spec.js +55 -0
  19. package/features/v1/abstract.field.d.ts +20401 -0
  20. package/features/v1/abstract.field.js +95 -0
  21. package/features/v1/abstract.form.d.ts +1226 -0
  22. package/features/v1/abstract.form.js +336 -0
  23. package/features/v1/field.email.d.ts +62 -0
  24. package/features/v1/field.email.js +27 -0
  25. package/features/v1/field.otp.d.ts +142 -0
  26. package/features/v1/field.otp.js +105 -0
  27. package/features/v1/field.password.d.ts +162 -0
  28. package/features/v1/field.password.js +81 -0
  29. package/features/v1/field.username-hidden.d.ts +62 -0
  30. package/features/v1/field.username-hidden.js +25 -0
  31. package/features/v1/field.username.d.ts +72 -0
  32. package/features/v1/field.username.js +31 -0
  33. package/features/v1/index.d.ts +4427 -0
  34. package/features/v1/index.js +22 -0
  35. package/features/v1/index.spec.d.ts +1 -0
  36. package/features/v1/index.spec.js +30 -0
  37. package/index.d.ts +5 -2
  38. package/index.js +10 -3
  39. package/models/perceptron/index.d.ts +2 -0
  40. package/models/perceptron/index.js +27 -0
  41. package/models/perceptron/params/email-model.json +53 -0
  42. package/models/perceptron/params/login-model.json +465 -0
  43. package/models/perceptron/params/new-password-model.json +133 -0
  44. package/models/perceptron/params/otp-model.json +117 -0
  45. package/models/perceptron/params/password-change-model.json +465 -0
  46. package/models/perceptron/params/password-model.json +133 -0
  47. package/models/perceptron/params/recovery-model.json +465 -0
  48. package/models/perceptron/params/register-model.json +465 -0
  49. package/models/perceptron/params/username-hidden-model.json +53 -0
  50. package/models/perceptron/params/username-model.json +61 -0
  51. package/models/prod_20240829/index.d.ts +2 -0
  52. package/models/prod_20240829/index.js +27 -0
  53. package/models/prod_20240829/params/email-model.json +45 -0
  54. package/models/prod_20240829/params/login-model.json +421 -0
  55. package/models/prod_20240829/params/new-password-model.json +125 -0
  56. package/models/prod_20240829/params/otp-model.json +153 -0
  57. package/models/prod_20240829/params/password-change-model.json +421 -0
  58. package/models/prod_20240829/params/password-model.json +125 -0
  59. package/models/prod_20240829/params/recovery-model.json +421 -0
  60. package/models/prod_20240829/params/register-model.json +421 -0
  61. package/models/prod_20240829/params/username-hidden-model.json +41 -0
  62. package/models/prod_20240829/params/username-model.json +45 -0
  63. package/models/random_forest/index.d.ts +2 -0
  64. package/models/random_forest/index.js +27 -0
  65. package/models/random_forest/params/email-model.json +1456 -0
  66. package/models/random_forest/params/login-model.json +4194 -0
  67. package/models/random_forest/params/new-password-model.json +1448 -0
  68. package/models/random_forest/params/otp-model.json +2004 -0
  69. package/models/random_forest/params/password-change-model.json +1422 -0
  70. package/models/random_forest/params/password-model.json +1292 -0
  71. package/models/random_forest/params/recovery-model.json +2754 -0
  72. package/models/random_forest/params/register-model.json +3678 -0
  73. package/models/random_forest/params/username-hidden-model.json +1108 -0
  74. package/models/random_forest/params/username-model.json +1052 -0
  75. package/models/v1/index.d.ts +2 -0
  76. package/models/v1/index.js +35 -0
  77. package/package.json +14 -15
  78. package/rules/v1/index.d.ts +3 -0
  79. package/rules/v1/index.js +69 -0
  80. package/rulesets.d.ts +2 -2
  81. package/rulesets.js +11 -10
  82. package/types/index.d.ts +72 -17
  83. package/types/index.js +35 -2
  84. package/utils/attributes.js +1 -1
  85. package/utils/clustering.js +18 -5
  86. package/utils/credit-card.d.ts +32 -0
  87. package/utils/credit-card.js +259 -0
  88. package/utils/credit-card.samples.spec.d.ts +1 -0
  89. package/utils/credit-card.samples.spec.js +452 -0
  90. package/utils/credit-card.spec.d.ts +1 -0
  91. package/utils/credit-card.spec.js +296 -0
  92. package/utils/dom.d.ts +3 -2
  93. package/utils/dom.js +12 -7
  94. package/utils/exclusion.d.ts +1 -0
  95. package/utils/exclusion.js +22 -10
  96. package/utils/extract.d.ts +1 -0
  97. package/utils/extract.js +26 -7
  98. package/utils/fathom.d.ts +10 -23
  99. package/utils/fathom.js +7 -12
  100. package/utils/field.d.ts +12 -4
  101. package/utils/field.js +25 -14
  102. package/utils/flags.d.ts +9 -3
  103. package/utils/flags.js +27 -9
  104. package/utils/form.d.ts +16 -5
  105. package/utils/form.js +35 -14
  106. package/utils/identity.d.ts +12 -21
  107. package/utils/identity.js +66 -41
  108. package/utils/identity.samples.spec.d.ts +1 -0
  109. package/utils/identity.samples.spec.js +28 -0
  110. package/utils/iframe.d.ts +2 -0
  111. package/utils/iframe.js +22 -0
  112. package/utils/overrides.d.ts +19 -0
  113. package/utils/overrides.js +40 -0
  114. package/utils/prepass.js +6 -4
  115. package/utils/re.d.ts +19 -4
  116. package/utils/re.js +22 -7
  117. package/utils/re.spec.d.ts +1 -0
  118. package/utils/re.spec.js +62 -0
  119. package/utils/shadow-dom.d.ts +8 -0
  120. package/utils/shadow-dom.js +53 -0
  121. package/utils/shadow-dom.spec.d.ts +1 -0
  122. package/utils/shadow-dom.spec.js +215 -0
  123. package/utils/visible.d.ts +3 -2
  124. package/utils/visible.js +42 -22
  125. package/cli.d.ts +0 -2
  126. package/cli.js +0 -128
  127. package/features/abstract.field.d.ts +0 -123
  128. package/features/abstract.field.js +0 -63
  129. package/features/abstract.form.d.ts +0 -98
  130. package/features/abstract.form.js +0 -281
  131. package/features/field.email.d.ts +0 -18
  132. package/features/field.email.js +0 -43
  133. package/features/field.otp.d.ts +0 -36
  134. package/features/field.otp.js +0 -116
  135. package/features/field.password.d.ts +0 -35
  136. package/features/field.password.js +0 -104
  137. package/features/field.username-hidden.d.ts +0 -15
  138. package/features/field.username-hidden.js +0 -40
  139. package/features/field.username.d.ts +0 -16
  140. package/features/field.username.js +0 -41
  141. package/features/form.combined.d.ts +0 -1
  142. package/features/form.combined.js +0 -6
  143. package/trainees/field.email.d.ts +0 -2
  144. package/trainees/field.email.js +0 -16
  145. package/trainees/field.identity.d.ts +0 -2
  146. package/trainees/field.identity.js +0 -9
  147. package/trainees/field.otp.d.ts +0 -2
  148. package/trainees/field.otp.js +0 -16
  149. package/trainees/field.password.current.d.ts +0 -2
  150. package/trainees/field.password.current.js +0 -16
  151. package/trainees/field.password.new.d.ts +0 -2
  152. package/trainees/field.password.new.js +0 -16
  153. package/trainees/field.username-hidden.d.ts +0 -2
  154. package/trainees/field.username-hidden.js +0 -22
  155. package/trainees/field.username.d.ts +0 -2
  156. package/trainees/field.username.js +0 -16
  157. package/trainees/form.login.d.ts +0 -2
  158. package/trainees/form.login.js +0 -16
  159. package/trainees/form.noop.d.ts +0 -1
  160. package/trainees/form.noop.js +0 -7
  161. package/trainees/form.password-change.d.ts +0 -2
  162. package/trainees/form.password-change.js +0 -16
  163. package/trainees/form.recovery.d.ts +0 -2
  164. package/trainees/form.recovery.js +0 -16
  165. package/trainees/form.register.d.ts +0 -2
  166. package/trainees/form.register.js +0 -16
  167. package/trainees/index.d.ts +0 -9
  168. package/trainees/index.js +0 -72
  169. package/trainees/results/result.email.d.ts +0 -2
  170. package/trainees/results/result.email.js +0 -17
  171. package/trainees/results/result.login.d.ts +0 -2
  172. package/trainees/results/result.login.js +0 -110
  173. package/trainees/results/result.new-password.d.ts +0 -2
  174. package/trainees/results/result.new-password.js +0 -36
  175. package/trainees/results/result.otp.d.ts +0 -2
  176. package/trainees/results/result.otp.js +0 -43
  177. package/trainees/results/result.password-change.d.ts +0 -2
  178. package/trainees/results/result.password-change.js +0 -110
  179. package/trainees/results/result.password.d.ts +0 -2
  180. package/trainees/results/result.password.js +0 -36
  181. package/trainees/results/result.recovery.d.ts +0 -2
  182. package/trainees/results/result.recovery.js +0 -110
  183. package/trainees/results/result.register.d.ts +0 -2
  184. package/trainees/results/result.register.js +0 -110
  185. package/trainees/results/result.username-hidden.d.ts +0 -2
  186. package/trainees/results/result.username-hidden.js +0 -15
  187. package/trainees/results/result.username.d.ts +0 -2
  188. package/trainees/results/result.username.js +0 -16
  189. package/utils/memoize.d.ts +0 -5
  190. package/utils/memoize.js +0 -12
package/cli.js DELETED
@@ -1,128 +0,0 @@
1
- #!/usr/bin/env ts-node-script
2
- import { exec } from "child_process";
3
- import { Command } from "commander";
4
- import fs from "fs/promises";
5
- import path from "path";
6
- import prettier from "prettier";
7
- import { FORM_FEATURES } from "./features/abstract.form";
8
- import { EMAIL_FIELD_FEATURES } from "./features/field.email";
9
- import { OTP_FIELD_FEATURES } from "./features/field.otp";
10
- import { PW_FIELD_FEATURES } from "./features/field.password";
11
- import { USERNAME_FIELD_FEATURES } from "./features/field.username";
12
- import { HIDDEN_USER_FIELD_FEATURES } from "./features/field.username-hidden";
13
- const program = new Command();
14
- const FEATURE_MAP = {
15
- login: FORM_FEATURES,
16
- register: FORM_FEATURES,
17
- "password-change": FORM_FEATURES,
18
- recovery: FORM_FEATURES,
19
- username: USERNAME_FIELD_FEATURES,
20
- "username-hidden": HIDDEN_USER_FIELD_FEATURES,
21
- email: EMAIL_FIELD_FEATURES,
22
- password: PW_FIELD_FEATURES,
23
- "new-password": PW_FIELD_FEATURES,
24
- otp: OTP_FIELD_FEATURES,
25
- };
26
- program.version("0.0.1").description("CLI utilities for ProtonPass fathom");
27
- program
28
- .command("get-vector [id]")
29
- .description("Gets a human readable vector for a specific dataset entry")
30
- .requiredOption("--trainee <trainee>")
31
- .action(async (id, options) => {
32
- try {
33
- const file = await fs.readFile(`./dist/vectors/training_${options.trainee}.json`, "utf8");
34
- const training = JSON.parse(file).pages;
35
- const entry = training.find(({ filename }) => filename.startsWith(id));
36
- if (entry === undefined) {
37
- console.log("No entry found");
38
- }
39
- const featureSet = FEATURE_MAP[options.trainee];
40
- if (featureSet === undefined)
41
- throw new Error(`unknown feature set for trainee ${options.trainee}`);
42
- entry === null || entry === void 0 ? void 0 : entry.nodes.forEach(({ features, markup, isTarget }) => {
43
- console.log(`${markup} ${isTarget ? "✅" : "❌"}`);
44
- features.forEach((value, i) => {
45
- var _a;
46
- console.log(`↳ ${(_a = featureSet === null || featureSet === void 0 ? void 0 : featureSet[i]) !== null && _a !== void 0 ? _a : "unknown"} = ${value}`);
47
- });
48
- console.log("\n");
49
- });
50
- }
51
- catch (e) {
52
- console.warn("Could not read file - try training your trainee first", e);
53
- }
54
- });
55
- const buildCommand = (trainee) => `yarn train -- ${trainee} --delay 12 --iterations 5000 --learning-rate 0.5 --tabs 20`;
56
- const extractResults = (stdout) => {
57
- const jsonRegex = /{[\s\S]+}/;
58
- const jsonMatch = stdout.match(jsonRegex);
59
- if (!(jsonMatch === null || jsonMatch === void 0 ? void 0 : jsonMatch[0]))
60
- throw new Error("Could not parse weights");
61
- return JSON.parse(jsonMatch[0]);
62
- };
63
- const extractCutoff = (stdout) => {
64
- const cutoffRegex = /Optimal cutoff: (\d+(\.\d+)?)/;
65
- const cutoffMatch = stdout.match(cutoffRegex);
66
- if (!cutoffMatch)
67
- throw new Error("Could not parse cutoff");
68
- return parseFloat(cutoffMatch[1]);
69
- };
70
- const extractSummary = (stdout) => {
71
- const dataRegex = /Training precision:(?:.|\n)+?(?=Training per-tag results)/s;
72
- const ansiColorRegex = /\x1b\[[0-9;]*m/g;
73
- const dataMatch = stdout.match(dataRegex);
74
- if (!(dataMatch === null || dataMatch === void 0 ? void 0 : dataMatch[0]))
75
- throw new Error("Could not parse results");
76
- return dataMatch[0].replace(ansiColorRegex, "");
77
- };
78
- const train = async (trainee) => {
79
- const basePath = path.resolve(__dirname, "trainees/results");
80
- const id = trainee.toUpperCase();
81
- console.info(`\n[${id}]: Start training`);
82
- console.time(`[${id}]`);
83
- return new Promise((resolve) => {
84
- exec(buildCommand(trainee), async (error, stdout) => {
85
- console.timeEnd(`[${id}]`);
86
- if (error) {
87
- console.error(`[${id}]: Error during training: ${error.message}`);
88
- resolve();
89
- }
90
- const results = extractResults(stdout);
91
- results.cutoff = extractCutoff(stdout);
92
- const summary = extractSummary(stdout);
93
- console.log(summary);
94
- let output = `// ${trainee.toUpperCase()} (trained on ${new Date().toDateString()})\n`;
95
- output += summary
96
- .split("\n")
97
- .filter(Boolean)
98
- .map((line) => `// ${line}`)
99
- .join("\n");
100
- output += `\n\nimport { TrainingResults } from "src/types";\n\n`;
101
- output += `export const results: TrainingResults = ${JSON.stringify(results)};`;
102
- await fs.writeFile(path.resolve(basePath, `result.${trainee}.ts`), await prettier.format(output, {
103
- tabWidth: 2,
104
- useTabs: false,
105
- printWidth: 160,
106
- parser: "babel-ts",
107
- }));
108
- resolve();
109
- });
110
- });
111
- };
112
- program.command("train [trainee]").description("trains a specific trainee").action(train);
113
- program
114
- .command("train-all")
115
- .description("Sequentially trains all models and updates scores between each run")
116
- .option("--type <type>")
117
- .action(async (options) => {
118
- const type = options === null || options === void 0 ? void 0 : options.type;
119
- const formTrainees = !type || type === "form" ? ["login", "register", "password-change", "recovery"] : [];
120
- const fieldTrainees = !type || type === "field" ? ["username", "username-hidden", "email", "password", "new-password", "otp"] : [];
121
- for (const form of formTrainees) {
122
- await train(form);
123
- }
124
- for (const field of fieldTrainees) {
125
- await train(field);
126
- }
127
- });
128
- program.parse(process.argv);
@@ -1,123 +0,0 @@
1
- import { Fnode } from "@protontech/fathom";
2
- declare const getFieldFeature: (fnode: Fnode) => {
3
- fieldAttrs: string[];
4
- fieldText: string;
5
- labelText: string;
6
- formFnode: any;
7
- formFeatures: {
8
- fieldsCount: any;
9
- inputCount: any;
10
- fieldsetCount: any;
11
- textCount: any;
12
- textareaCount: any;
13
- selectCount: any;
14
- optionsCount: any;
15
- checkboxCount: any;
16
- radioCount: any;
17
- identifierCount: any;
18
- hiddenIdentifierCount: any;
19
- hiddenCount: any;
20
- passwordCount: any;
21
- hiddenPasswordCount: any;
22
- usernameCount: any;
23
- emailCount: any;
24
- submitCount: any;
25
- hasTels: number;
26
- hasOAuth: number;
27
- hasCaptchas: number;
28
- hasFiles: number;
29
- hasDate: number;
30
- hasNumber: number;
31
- oneVisibleField: number;
32
- twoVisibleFields: number;
33
- threeOrMoreVisibleFields: number;
34
- noPasswords: number;
35
- onePassword: number;
36
- twoPasswords: number;
37
- threeOrMorePasswords: number;
38
- noIdentifiers: number;
39
- oneIdentifier: number;
40
- twoIdentifiers: number;
41
- threeOrMoreIdentifiers: number;
42
- autofocusedIsIdentifier: number;
43
- autofocusedIsPassword: number;
44
- visibleInputsCount: number;
45
- inputRatio: number;
46
- hiddenRatio: number;
47
- visibleRatio: number;
48
- identifierRatio: number;
49
- emailRatio: number;
50
- usernameRatio: number;
51
- passwordRatio: number;
52
- checkboxRatio: number;
53
- requiredRatio: number;
54
- patternRatio: number;
55
- minMaxLengthRatio: number;
56
- pageLogin: number;
57
- formTextLogin: number;
58
- formAttrsLogin: number;
59
- headingsLogin: number;
60
- layoutLogin: number;
61
- rememberMeCheckbox: number;
62
- troubleLink: number;
63
- submitLogin: number;
64
- pageRegister: number;
65
- formTextRegister: number;
66
- formAttrsRegister: number;
67
- headingsRegister: number;
68
- layoutRegister: number;
69
- pwNewRegister: number;
70
- pwConfirmRegister: number;
71
- submitRegister: number;
72
- TOSRef: number;
73
- pagePwReset: number;
74
- formTextPwReset: number;
75
- formAttrsPwReset: number;
76
- headingsPwReset: number;
77
- layoutPwReset: number;
78
- pageRecovery: number;
79
- formTextRecovery: number;
80
- formAttrsRecovery: number;
81
- headingsRecovery: number;
82
- layoutRecovery: number;
83
- identifierRecovery: number;
84
- submitRecovery: number;
85
- formMFA: number;
86
- formTextMFA: number;
87
- formAttrsMFA: number;
88
- formOTPOutlier: number;
89
- linkOTPOutlier: number;
90
- inputsMFA: number;
91
- inputsOTP: number;
92
- newsletterForm: number;
93
- searchForm: number;
94
- multiStepForm: number;
95
- multiAuthForm: number;
96
- formInputIterator: {
97
- prev(input: HTMLElement): HTMLElement | null;
98
- next(input: HTMLElement): HTMLElement | null;
99
- };
100
- } | undefined;
101
- isFormLogin: boolean;
102
- isFormRegister: boolean;
103
- isFormPWChange: boolean;
104
- isFormRecovery: boolean;
105
- isFormNoop: boolean;
106
- value: string;
107
- visible: boolean;
108
- type: string | null;
109
- readonly: boolean;
110
- required: boolean;
111
- disabled: boolean;
112
- pattern: string;
113
- autocomplete: string | null;
114
- minLength: number;
115
- maxLength: number;
116
- tabIndex: number;
117
- prevField: HTMLElement | null;
118
- nextField: HTMLElement | null;
119
- searchField: boolean;
120
- identityField: boolean;
121
- };
122
- export default getFieldFeature;
123
- export type FieldFeatures = ReturnType<typeof getFieldFeature>;
@@ -1,63 +0,0 @@
1
- import { getFieldHaystacks } from "../utils/extract";
2
- import { getParentFormFnode, safeInt } from "../utils/fathom";
3
- import getFormFeatures from "./abstract.form";
4
- import { any } from "../utils/combinators";
5
- import { getFormClassification } from "../utils/fathom";
6
- import { flagAsHidden, removeHiddenFlag } from "../utils/flags";
7
- import { matchesIdentityField } from "../utils/identity";
8
- import { matchSearchAction } from "../utils/re";
9
- import { isVisible, isVisibleField } from "../utils/visible";
10
- const getFieldFeature = (fnode) => {
11
- var _a, _b;
12
- const field = fnode.element;
13
- const fieldHaystacks = getFieldHaystacks(field);
14
- const formFnode = getParentFormFnode(fnode);
15
- if (formFnode !== null && !formFnode.hasNoteFor("form"))
16
- formFnode.setNoteFor("form", getFormFeatures(formFnode));
17
- const formFeatures = formFnode === null || formFnode === void 0 ? void 0 : formFnode.noteFor("form");
18
- const formClassification = getFormClassification(formFnode);
19
- const value = field.value;
20
- const type = field.getAttribute("type");
21
- const readonly = field.readOnly;
22
- const required = field.required;
23
- const minLength = safeInt(field.minLength, 0);
24
- const maxLength = safeInt(field.maxLength, 250);
25
- const pattern = field.pattern;
26
- const autocomplete = field.getAttribute("autocomplete");
27
- const disabled = field.disabled;
28
- const typeValid = type !== "hidden";
29
- const tabIndex = field.tabIndex;
30
- const visible = typeValid ? isVisibleField(field) && isVisible(field, { opacity: false }) : false;
31
- if (typeValid)
32
- (visible ? removeHiddenFlag : flagAsHidden)(field);
33
- const searchField = visible && any(matchSearchAction)(fieldHaystacks.fieldAttrs.concat(fieldHaystacks.fieldText));
34
- const identityField = matchesIdentityField(fnode.element, { searchField, visible, isFormLogin: formClassification.login, type });
35
- const prevField = typeValid ? (_a = formFeatures === null || formFeatures === void 0 ? void 0 : formFeatures.formInputIterator.prev(field)) !== null && _a !== void 0 ? _a : null : null;
36
- const nextField = typeValid ? (_b = formFeatures === null || formFeatures === void 0 ? void 0 : formFeatures.formInputIterator.next(field)) !== null && _b !== void 0 ? _b : null : null;
37
- return {
38
- formFnode,
39
- formFeatures,
40
- isFormLogin: formClassification.login,
41
- isFormRegister: formClassification.register,
42
- isFormPWChange: formClassification.pwChange,
43
- isFormRecovery: formClassification.recovery,
44
- isFormNoop: formClassification.noop,
45
- value,
46
- visible,
47
- type,
48
- readonly,
49
- required,
50
- disabled,
51
- pattern,
52
- autocomplete,
53
- minLength,
54
- maxLength,
55
- tabIndex,
56
- prevField,
57
- nextField,
58
- searchField,
59
- identityField,
60
- ...fieldHaystacks,
61
- };
62
- };
63
- export default getFieldFeature;
@@ -1,98 +0,0 @@
1
- import { Fnode } from "@protontech/fathom";
2
- declare const getFormFeatures: (fnode: Fnode) => {
3
- fieldsCount: any;
4
- inputCount: any;
5
- fieldsetCount: any;
6
- textCount: any;
7
- textareaCount: any;
8
- selectCount: any;
9
- optionsCount: any;
10
- checkboxCount: any;
11
- radioCount: any;
12
- identifierCount: any;
13
- hiddenIdentifierCount: any;
14
- hiddenCount: any;
15
- passwordCount: any;
16
- hiddenPasswordCount: any;
17
- usernameCount: any;
18
- emailCount: any;
19
- submitCount: any;
20
- hasTels: number;
21
- hasOAuth: number;
22
- hasCaptchas: number;
23
- hasFiles: number;
24
- hasDate: number;
25
- hasNumber: number;
26
- oneVisibleField: number;
27
- twoVisibleFields: number;
28
- threeOrMoreVisibleFields: number;
29
- noPasswords: number;
30
- onePassword: number;
31
- twoPasswords: number;
32
- threeOrMorePasswords: number;
33
- noIdentifiers: number;
34
- oneIdentifier: number;
35
- twoIdentifiers: number;
36
- threeOrMoreIdentifiers: number;
37
- autofocusedIsIdentifier: number;
38
- autofocusedIsPassword: number;
39
- visibleInputsCount: number;
40
- inputRatio: number;
41
- hiddenRatio: number;
42
- visibleRatio: number;
43
- identifierRatio: number;
44
- emailRatio: number;
45
- usernameRatio: number;
46
- passwordRatio: number;
47
- checkboxRatio: number;
48
- requiredRatio: number;
49
- patternRatio: number;
50
- minMaxLengthRatio: number;
51
- pageLogin: number;
52
- formTextLogin: number;
53
- formAttrsLogin: number;
54
- headingsLogin: number;
55
- layoutLogin: number;
56
- rememberMeCheckbox: number;
57
- troubleLink: number;
58
- submitLogin: number;
59
- pageRegister: number;
60
- formTextRegister: number;
61
- formAttrsRegister: number;
62
- headingsRegister: number;
63
- layoutRegister: number;
64
- pwNewRegister: number;
65
- pwConfirmRegister: number;
66
- submitRegister: number;
67
- TOSRef: number;
68
- pagePwReset: number;
69
- formTextPwReset: number;
70
- formAttrsPwReset: number;
71
- headingsPwReset: number;
72
- layoutPwReset: number;
73
- pageRecovery: number;
74
- formTextRecovery: number;
75
- formAttrsRecovery: number;
76
- headingsRecovery: number;
77
- layoutRecovery: number;
78
- identifierRecovery: number;
79
- submitRecovery: number;
80
- formMFA: number;
81
- formTextMFA: number;
82
- formAttrsMFA: number;
83
- formOTPOutlier: number;
84
- linkOTPOutlier: number;
85
- inputsMFA: number;
86
- inputsOTP: number;
87
- newsletterForm: number;
88
- searchForm: number;
89
- multiStepForm: number;
90
- multiAuthForm: number;
91
- formInputIterator: {
92
- prev(input: HTMLElement): HTMLElement | null;
93
- next(input: HTMLElement): HTMLElement | null;
94
- };
95
- };
96
- export default getFormFeatures;
97
- export type FormFeatures = ReturnType<typeof getFormFeatures>;
98
- export declare const FORM_FEATURES: (keyof FormFeatures)[];