@protontech/autofill 0.0.22991789 → 0.0.33835493

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 (176) 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 +18 -0
  16. package/features/feature.js +79 -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 +4428 -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 +7 -2
  38. package/index.js +11 -3
  39. package/models/perceptron/index.d.ts +2 -0
  40. package/models/perceptron/index.js +42 -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/random_forest/index.d.ts +2 -0
  52. package/models/random_forest/index.js +42 -0
  53. package/models/random_forest/params/email-model.json +1456 -0
  54. package/models/random_forest/params/login-model.json +4194 -0
  55. package/models/random_forest/params/new-password-model.json +1448 -0
  56. package/models/random_forest/params/otp-model.json +2004 -0
  57. package/models/random_forest/params/password-change-model.json +1422 -0
  58. package/models/random_forest/params/password-model.json +1292 -0
  59. package/models/random_forest/params/recovery-model.json +2754 -0
  60. package/models/random_forest/params/register-model.json +3678 -0
  61. package/models/random_forest/params/username-hidden-model.json +1108 -0
  62. package/models/random_forest/params/username-model.json +1052 -0
  63. package/package.json +17 -15
  64. package/rules/v1/index.d.ts +4 -0
  65. package/rules/v1/index.js +66 -0
  66. package/rulesets.d.ts +9 -2
  67. package/rulesets.js +14 -9
  68. package/types/index.d.ts +70 -17
  69. package/types/index.js +34 -1
  70. package/utils/attributes.js +1 -1
  71. package/utils/clustering.js +18 -5
  72. package/utils/credit-card.d.ts +32 -0
  73. package/utils/credit-card.js +259 -0
  74. package/utils/credit-card.samples.spec.d.ts +1 -0
  75. package/utils/credit-card.samples.spec.js +452 -0
  76. package/utils/credit-card.spec.d.ts +1 -0
  77. package/utils/credit-card.spec.js +296 -0
  78. package/utils/dom.d.ts +3 -2
  79. package/utils/dom.js +12 -7
  80. package/utils/exclusion.d.ts +1 -0
  81. package/utils/exclusion.js +22 -10
  82. package/utils/extract.d.ts +1 -0
  83. package/utils/extract.js +26 -7
  84. package/utils/fathom.d.ts +10 -23
  85. package/utils/fathom.js +7 -12
  86. package/utils/field.d.ts +12 -4
  87. package/utils/field.js +25 -14
  88. package/utils/flags.d.ts +9 -3
  89. package/utils/flags.js +27 -9
  90. package/utils/form.d.ts +16 -5
  91. package/utils/form.js +35 -14
  92. package/utils/identity.d.ts +12 -21
  93. package/utils/identity.js +66 -41
  94. package/utils/identity.samples.spec.d.ts +1 -0
  95. package/utils/identity.samples.spec.js +28 -0
  96. package/utils/iframe.d.ts +2 -0
  97. package/utils/iframe.js +22 -0
  98. package/utils/overrides.d.ts +19 -0
  99. package/utils/overrides.js +40 -0
  100. package/utils/prepass.js +6 -4
  101. package/utils/re.d.ts +19 -4
  102. package/utils/re.js +22 -7
  103. package/utils/re.spec.d.ts +1 -0
  104. package/utils/re.spec.js +62 -0
  105. package/utils/shadow-dom.d.ts +8 -0
  106. package/utils/shadow-dom.js +53 -0
  107. package/utils/shadow-dom.spec.d.ts +1 -0
  108. package/utils/shadow-dom.spec.js +215 -0
  109. package/utils/visible.d.ts +3 -2
  110. package/utils/visible.js +42 -22
  111. package/cli.d.ts +0 -2
  112. package/cli.js +0 -128
  113. package/features/abstract.field.d.ts +0 -123
  114. package/features/abstract.field.js +0 -63
  115. package/features/abstract.form.d.ts +0 -98
  116. package/features/abstract.form.js +0 -281
  117. package/features/field.email.d.ts +0 -18
  118. package/features/field.email.js +0 -43
  119. package/features/field.otp.d.ts +0 -36
  120. package/features/field.otp.js +0 -116
  121. package/features/field.password.d.ts +0 -35
  122. package/features/field.password.js +0 -104
  123. package/features/field.username-hidden.d.ts +0 -15
  124. package/features/field.username-hidden.js +0 -40
  125. package/features/field.username.d.ts +0 -16
  126. package/features/field.username.js +0 -41
  127. package/features/form.combined.d.ts +0 -1
  128. package/features/form.combined.js +0 -6
  129. package/trainees/field.email.d.ts +0 -2
  130. package/trainees/field.email.js +0 -16
  131. package/trainees/field.identity.d.ts +0 -2
  132. package/trainees/field.identity.js +0 -9
  133. package/trainees/field.otp.d.ts +0 -2
  134. package/trainees/field.otp.js +0 -16
  135. package/trainees/field.password.current.d.ts +0 -2
  136. package/trainees/field.password.current.js +0 -16
  137. package/trainees/field.password.new.d.ts +0 -2
  138. package/trainees/field.password.new.js +0 -16
  139. package/trainees/field.username-hidden.d.ts +0 -2
  140. package/trainees/field.username-hidden.js +0 -22
  141. package/trainees/field.username.d.ts +0 -2
  142. package/trainees/field.username.js +0 -16
  143. package/trainees/form.login.d.ts +0 -2
  144. package/trainees/form.login.js +0 -16
  145. package/trainees/form.noop.d.ts +0 -1
  146. package/trainees/form.noop.js +0 -7
  147. package/trainees/form.password-change.d.ts +0 -2
  148. package/trainees/form.password-change.js +0 -16
  149. package/trainees/form.recovery.d.ts +0 -2
  150. package/trainees/form.recovery.js +0 -16
  151. package/trainees/form.register.d.ts +0 -2
  152. package/trainees/form.register.js +0 -16
  153. package/trainees/index.d.ts +0 -9
  154. package/trainees/index.js +0 -72
  155. package/trainees/results/result.email.d.ts +0 -2
  156. package/trainees/results/result.email.js +0 -17
  157. package/trainees/results/result.login.d.ts +0 -2
  158. package/trainees/results/result.login.js +0 -110
  159. package/trainees/results/result.new-password.d.ts +0 -2
  160. package/trainees/results/result.new-password.js +0 -36
  161. package/trainees/results/result.otp.d.ts +0 -2
  162. package/trainees/results/result.otp.js +0 -43
  163. package/trainees/results/result.password-change.d.ts +0 -2
  164. package/trainees/results/result.password-change.js +0 -110
  165. package/trainees/results/result.password.d.ts +0 -2
  166. package/trainees/results/result.password.js +0 -36
  167. package/trainees/results/result.recovery.d.ts +0 -2
  168. package/trainees/results/result.recovery.js +0 -110
  169. package/trainees/results/result.register.d.ts +0 -2
  170. package/trainees/results/result.register.js +0 -110
  171. package/trainees/results/result.username-hidden.d.ts +0 -2
  172. package/trainees/results/result.username-hidden.js +0 -15
  173. package/trainees/results/result.username.d.ts +0 -2
  174. package/trainees/results/result.username.js +0 -16
  175. package/utils/memoize.d.ts +0 -5
  176. 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)[];