@protontech/autofill 0.0.33690782 → 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.
- package/features/feature.d.ts +1 -0
- package/features/feature.js +9 -2
- package/features/v1/index.d.ts +1 -0
- package/index.d.ts +2 -0
- package/index.js +1 -0
- package/models/perceptron/index.d.ts +2 -2
- package/models/perceptron/index.js +34 -19
- package/models/perceptron/params/email-model.json +4 -4
- package/models/perceptron/params/login-model.json +94 -94
- package/models/perceptron/params/new-password-model.json +18 -18
- package/models/perceptron/params/otp-model.json +13 -13
- package/models/perceptron/params/password-change-model.json +77 -77
- package/models/perceptron/params/password-model.json +20 -20
- package/models/perceptron/params/recovery-model.json +70 -70
- package/models/perceptron/params/register-model.json +97 -97
- package/models/perceptron/params/username-hidden-model.json +8 -8
- package/models/perceptron/params/username-model.json +4 -4
- package/models/random_forest/index.d.ts +2 -2
- package/models/random_forest/index.js +34 -19
- package/package.json +6 -3
- package/rules/v1/index.d.ts +2 -1
- package/rules/v1/index.js +12 -15
- package/rulesets.d.ts +9 -2
- package/rulesets.js +5 -1
- package/types/index.d.ts +4 -6
- package/types/index.js +3 -3
- package/models/prod_20240829/index.d.ts +0 -2
- package/models/prod_20240829/index.js +0 -27
- package/models/prod_20240829/params/email-model.json +0 -45
- package/models/prod_20240829/params/login-model.json +0 -421
- package/models/prod_20240829/params/new-password-model.json +0 -125
- package/models/prod_20240829/params/otp-model.json +0 -153
- package/models/prod_20240829/params/password-change-model.json +0 -421
- package/models/prod_20240829/params/password-model.json +0 -125
- package/models/prod_20240829/params/recovery-model.json +0 -421
- package/models/prod_20240829/params/register-model.json +0 -421
- package/models/prod_20240829/params/username-hidden-model.json +0 -41
- package/models/prod_20240829/params/username-model.json +0 -45
- package/models/v1/index.d.ts +0 -2
- package/models/v1/index.js +0 -35
package/package.json
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@protontech/autofill",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.33835493",
|
|
4
4
|
"private": false,
|
|
5
|
+
"scripts": {
|
|
6
|
+
"typecheck": "tsc --noEmit"
|
|
7
|
+
},
|
|
5
8
|
"dependencies": {
|
|
6
|
-
"@protontech/fathom": "0.0.
|
|
7
|
-
"@protontech/ml-inference": "0.0.
|
|
9
|
+
"@protontech/fathom": "0.0.33835493",
|
|
10
|
+
"@protontech/ml-inference": "0.0.33835493"
|
|
8
11
|
},
|
|
9
12
|
"devDependencies": {
|
|
10
13
|
"@types/jest": "^29.5.14",
|
package/rules/v1/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { FeatureProvider } from "@protontech/autofill/features/v1";
|
|
2
|
+
import type { AnyRule, DetectionClass } from "@protontech/autofill/types";
|
|
2
3
|
export declare const getBaseRules: (featureProvider: FeatureProvider) => readonly [import("@protontech/fathom").OutwardRule | import("@protontech/fathom").InwardRule, import("@protontech/fathom").OutwardRule | import("@protontech/fathom").InwardRule, ...(import("@protontech/fathom").OutwardRule | import("@protontech/fathom").InwardRule)[], import("@protontech/fathom").OutwardRule | import("@protontech/fathom").InwardRule];
|
|
3
4
|
export declare const getRulesProvider: (featureProvider: FeatureProvider) => Record<DetectionClass, readonly AnyRule[]>;
|
package/rules/v1/index.js
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
|
+
import { FEATURE_SEPARATOR } from "@protontech/autofill/constants/features";
|
|
2
|
+
import { formCandidateSelector } from "@protontech/autofill/constants/selectors";
|
|
3
|
+
import { computeFeatures } from "@protontech/autofill/features/feature";
|
|
4
|
+
import { FieldType, FormType } from "@protontech/autofill/types";
|
|
5
|
+
import { isCCInputField, isCCSelectField } from "@protontech/autofill/utils/credit-card";
|
|
6
|
+
import { featureScore, isNoopForm, outRuleWithCache, processFieldEffect, processFormEffect, withFnodeEl } from "@protontech/autofill/utils/fathom";
|
|
7
|
+
import { isClassifiableField, maybeEmail, maybeHiddenUsername, maybeOTP, maybePassword, maybeUsername } from "@protontech/autofill/utils/field";
|
|
8
|
+
import { isClassifiable } from "@protontech/autofill/utils/flags";
|
|
9
|
+
import { isIdentity } from "@protontech/autofill/utils/identity";
|
|
10
|
+
import { overrides } from "@protontech/autofill/utils/overrides";
|
|
11
|
+
import { isVisibleForm } from "@protontech/autofill/utils/visible";
|
|
1
12
|
import { dom, out, rule, type } from "@protontech/fathom";
|
|
2
|
-
import { FEATURE_SEPARATOR } from "../../constants/features";
|
|
3
|
-
import { formCandidateSelector } from "../../constants/selectors";
|
|
4
|
-
import { computeFeatures, FieldType, FormType } from "../../types";
|
|
5
|
-
import { isCCInputField, isCCSelectField } from "../../utils/credit-card";
|
|
6
|
-
import { featureScore, isNoopForm, outRuleWithCache, processFieldEffect, processFormEffect, withFnodeEl } from "../../utils/fathom";
|
|
7
|
-
import { isClassifiableField, maybeEmail, maybeHiddenUsername, maybeOTP, maybePassword, maybeUsername } from "../../utils/field";
|
|
8
|
-
import { isClassifiable } from "../../utils/flags";
|
|
9
|
-
import { isIdentity } from "../../utils/identity";
|
|
10
|
-
import { overrides } from "../../utils/overrides";
|
|
11
|
-
import { isVisibleForm } from "../../utils/visible";
|
|
12
13
|
const getRulesForFieldClass = (klass, featureComputer) => [
|
|
13
14
|
rule(type(`${klass}-field`), type(klass), {}),
|
|
14
15
|
...featureComputer.features.map((feat) => rule(type(klass), featureScore(`${klass}-field`, feat), { name: `${klass}${FEATURE_SEPARATOR}${feat.name}` })),
|
|
@@ -23,11 +24,7 @@ const noopRules = [
|
|
|
23
24
|
rule(type("form").when(isNoopForm), type(FormType.NOOP), {}),
|
|
24
25
|
...outRuleWithCache("form-candidate", FormType.NOOP, () => () => true),
|
|
25
26
|
];
|
|
26
|
-
const identityRules = [
|
|
27
|
-
rule(type("field").when(isIdentity), type("identity-field"), {}),
|
|
28
|
-
rule(type("identity-field"), type(FieldType.IDENTITY), {}),
|
|
29
|
-
...outRuleWithCache("field-candidate", FieldType.IDENTITY, () => () => true),
|
|
30
|
-
];
|
|
27
|
+
const identityRules = [rule(type("field").when(isIdentity), type("identity-field"), {}), rule(type("identity-field"), type(FieldType.IDENTITY), {}), ...outRuleWithCache("field-candidate", FieldType.IDENTITY, () => () => true)];
|
|
31
28
|
const ccRules = [
|
|
32
29
|
rule(type("field").when(isCCInputField), type("cc-field"), {}),
|
|
33
30
|
rule(type("field-candidate").when(isCCSelectField), type("cc-field"), {}),
|
package/rulesets.d.ts
CHANGED
|
@@ -1,2 +1,9 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
1
|
+
import type { Ruleset } from "@protontech/fathom";
|
|
2
|
+
import type { ModelName, ModelProvider } from "./types";
|
|
3
|
+
type RulesetRegistry<T extends ModelName = string> = {
|
|
4
|
+
providers: Record<T, ModelProvider>;
|
|
5
|
+
make: (key: T) => Ruleset;
|
|
6
|
+
};
|
|
7
|
+
export declare const rulesetMaker: (modelProvider: ModelProvider) => Ruleset;
|
|
8
|
+
export declare const createRulesetRegistry: <T extends ModelName>(providers: Record<T, ModelProvider>) => RulesetRegistry<T>;
|
|
9
|
+
export {};
|
package/rulesets.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ruleset } from "@protontech/fathom";
|
|
2
|
-
import { detectionClasses } from "./types";
|
|
3
2
|
import { getBaseRules, getRulesProvider } from "./rules/v1";
|
|
3
|
+
import { detectionClasses } from "./types";
|
|
4
4
|
import { prepass } from "./utils/prepass";
|
|
5
5
|
export const rulesetMaker = (modelProvider) => {
|
|
6
6
|
const featureProvider = Object.fromEntries(Object.keys(modelProvider).map((klass) => [klass, modelProvider[klass].featureComputer]));
|
|
@@ -9,3 +9,7 @@ export const rulesetMaker = (modelProvider) => {
|
|
|
9
9
|
const models = new Map(detectionClasses.map((klass) => [klass, modelProvider[klass].model]));
|
|
10
10
|
return ruleset(rules, models, prepass);
|
|
11
11
|
};
|
|
12
|
+
export const createRulesetRegistry = (providers) => ({
|
|
13
|
+
providers,
|
|
14
|
+
make: (key) => rulesetMaker(providers[key]),
|
|
15
|
+
});
|
package/types/index.d.ts
CHANGED
|
@@ -5,7 +5,6 @@ export type Coeff = [string, number];
|
|
|
5
5
|
export type PerceptronParams = {
|
|
6
6
|
coeffs: Coeff[];
|
|
7
7
|
bias: number;
|
|
8
|
-
cutoff: number;
|
|
9
8
|
};
|
|
10
9
|
export declare enum FormType {
|
|
11
10
|
LOGIN = "login",
|
|
@@ -34,7 +33,6 @@ export declare enum CCFieldType {
|
|
|
34
33
|
EXP_YEAR = "cc:exp-year",
|
|
35
34
|
EXP_MONTH = "cc:exp-month"
|
|
36
35
|
}
|
|
37
|
-
export declare const ccFields: Set<string>;
|
|
38
36
|
export declare enum IdentityFieldType {
|
|
39
37
|
FULLNAME = "id:fullname",
|
|
40
38
|
FIRSTNAME = "id:firstname",
|
|
@@ -49,13 +47,14 @@ export declare enum IdentityFieldType {
|
|
|
49
47
|
COUNTRY = "id:country",
|
|
50
48
|
EMAIL = "id:email"
|
|
51
49
|
}
|
|
50
|
+
export declare const fieldTypes: FieldType[];
|
|
51
|
+
export declare const formTypes: FormType[];
|
|
52
|
+
export declare const ccFields: Set<string>;
|
|
52
53
|
export declare const identityFields: Set<string>;
|
|
53
54
|
export declare const fieldClasses: readonly ["email", "otp", "password", "new-password", "username", "username-hidden"];
|
|
54
55
|
export declare const formClasses: readonly ["login", "password-change", "recovery", "register"];
|
|
55
56
|
export declare const detectionClasses: readonly ["email", "otp", "password", "new-password", "username", "username-hidden", "login", "password-change", "recovery", "register"];
|
|
56
57
|
export declare const abstractDetectionClasses: readonly ["field", "form"];
|
|
57
|
-
export declare const modelNames: readonly ["dev_perceptron", "dev_randomForest"];
|
|
58
|
-
export type ModelName = (typeof modelNames)[number];
|
|
59
58
|
export type FormClass = (typeof formClasses)[number];
|
|
60
59
|
export type FieldClass = (typeof fieldClasses)[number];
|
|
61
60
|
export type DetectionClass = (typeof detectionClasses)[number];
|
|
@@ -80,9 +79,8 @@ export interface FeatureComputer<F extends AbstractFeatures = AbstractFeatures>
|
|
|
80
79
|
compute(fnode: Fnode): ComputedFeatures<F>;
|
|
81
80
|
features: AbstractFeature[];
|
|
82
81
|
}
|
|
83
|
-
export declare const computeFeatures: <F extends AbstractFeatures>(featureComputer: FeatureComputer<F>, fnode: Fnode) => ComputedFeatures<F>;
|
|
84
82
|
export type ModelProviderRegistry = Record<ModelName, ModelProvider>;
|
|
85
|
-
export type
|
|
83
|
+
export type ModelName = string;
|
|
86
84
|
export type ModelProvider = {
|
|
87
85
|
[Klass in DetectionClass | HeuristicDetectionClass]: Klass extends HeuristicDetectionClass ? {
|
|
88
86
|
featureComputer: FeatureComputer;
|
package/types/index.js
CHANGED
|
@@ -28,7 +28,6 @@ export var CCFieldType;
|
|
|
28
28
|
CCFieldType["EXP_YEAR"] = "cc:exp-year";
|
|
29
29
|
CCFieldType["EXP_MONTH"] = "cc:exp-month";
|
|
30
30
|
})(CCFieldType || (CCFieldType = {}));
|
|
31
|
-
export const ccFields = new Set(Object.values(CCFieldType));
|
|
32
31
|
export var IdentityFieldType;
|
|
33
32
|
(function (IdentityFieldType) {
|
|
34
33
|
IdentityFieldType["FULLNAME"] = "id:fullname";
|
|
@@ -44,10 +43,11 @@ export var IdentityFieldType;
|
|
|
44
43
|
IdentityFieldType["COUNTRY"] = "id:country";
|
|
45
44
|
IdentityFieldType["EMAIL"] = "id:email";
|
|
46
45
|
})(IdentityFieldType || (IdentityFieldType = {}));
|
|
46
|
+
export const fieldTypes = Object.values(FieldType);
|
|
47
|
+
export const formTypes = Object.values(FormType);
|
|
48
|
+
export const ccFields = new Set(Object.values(CCFieldType));
|
|
47
49
|
export const identityFields = new Set(Object.values(IdentityFieldType));
|
|
48
50
|
export const fieldClasses = ["email", "otp", "password", "new-password", "username", "username-hidden"];
|
|
49
51
|
export const formClasses = ["login", "password-change", "recovery", "register"];
|
|
50
52
|
export const detectionClasses = [...fieldClasses, ...formClasses];
|
|
51
53
|
export const abstractDetectionClasses = ["field", "form"];
|
|
52
|
-
export const modelNames = ["dev_perceptron", "dev_randomForest"];
|
|
53
|
-
export const computeFeatures = (featureComputer, fnode) => featureComputer.compute(fnode);
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { newPerceptronInferrer } from "@protontech/ml-inference";
|
|
2
|
-
import * as emailParamsJson from "./params/email-model.json";
|
|
3
|
-
import * as loginParamsJson from "./params/login-model.json";
|
|
4
|
-
import * as newPasswordParamsJson from "./params/new-password-model.json";
|
|
5
|
-
import * as otpParamsJson from "./params/otp-model.json";
|
|
6
|
-
import * as passwordChangeParamsJson from "./params/password-change-model.json";
|
|
7
|
-
import * as PasswordParamsJson from "./params/password-model.json";
|
|
8
|
-
import * as RecoveryParamsJson from "./params/recovery-model.json";
|
|
9
|
-
import * as registerParamsJson from "./params/register-model.json";
|
|
10
|
-
import * as usernameHiddenParamsJson from "./params/username-hidden-model.json";
|
|
11
|
-
import * as usernameParamsJson from "./params/username-model.json";
|
|
12
|
-
const paramsProvider = {
|
|
13
|
-
email: emailParamsJson,
|
|
14
|
-
"new-password": newPasswordParamsJson,
|
|
15
|
-
"password-change": passwordChangeParamsJson,
|
|
16
|
-
"username-hidden": usernameHiddenParamsJson,
|
|
17
|
-
login: loginParamsJson,
|
|
18
|
-
otp: otpParamsJson,
|
|
19
|
-
password: PasswordParamsJson,
|
|
20
|
-
recovery: RecoveryParamsJson,
|
|
21
|
-
register: registerParamsJson,
|
|
22
|
-
username: usernameParamsJson,
|
|
23
|
-
};
|
|
24
|
-
export const getModelForClass = (klass) => {
|
|
25
|
-
const params = paramsProvider[klass];
|
|
26
|
-
return newPerceptronInferrer({ bias: params.bias, weights: new Map(params.coeffs) });
|
|
27
|
-
};
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"coeffs": [
|
|
3
|
-
[
|
|
4
|
-
"email--autocompleteUsername",
|
|
5
|
-
1.422879934310913
|
|
6
|
-
],
|
|
7
|
-
[
|
|
8
|
-
"email--autocompleteNickname",
|
|
9
|
-
0.06123584508895874
|
|
10
|
-
],
|
|
11
|
-
[
|
|
12
|
-
"email--autocompleteEmail",
|
|
13
|
-
6.039527416229248
|
|
14
|
-
],
|
|
15
|
-
[
|
|
16
|
-
"email--typeEmail",
|
|
17
|
-
15.077214241027832
|
|
18
|
-
],
|
|
19
|
-
[
|
|
20
|
-
"email--exactAttrEmail",
|
|
21
|
-
13.114316940307617
|
|
22
|
-
],
|
|
23
|
-
[
|
|
24
|
-
"email--attrEmail",
|
|
25
|
-
2.7811479568481445
|
|
26
|
-
],
|
|
27
|
-
[
|
|
28
|
-
"email--textEmail",
|
|
29
|
-
15.807499885559082
|
|
30
|
-
],
|
|
31
|
-
[
|
|
32
|
-
"email--labelEmail",
|
|
33
|
-
17.429636001586914
|
|
34
|
-
],
|
|
35
|
-
[
|
|
36
|
-
"email--placeholderEmail",
|
|
37
|
-
3.715912103652954
|
|
38
|
-
],
|
|
39
|
-
[
|
|
40
|
-
"email--searchField",
|
|
41
|
-
-15.843851089477539
|
|
42
|
-
]
|
|
43
|
-
],
|
|
44
|
-
"bias": -9.902606010437012
|
|
45
|
-
}
|
|
@@ -1,421 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"coeffs": [
|
|
3
|
-
[
|
|
4
|
-
"login--visibleFieldsCountScaled",
|
|
5
|
-
6.9117207527160645
|
|
6
|
-
],
|
|
7
|
-
[
|
|
8
|
-
"login--visibleInputsCountScaled",
|
|
9
|
-
3.822486400604248
|
|
10
|
-
],
|
|
11
|
-
[
|
|
12
|
-
"login--fieldsetsCountScaled",
|
|
13
|
-
-18.91722297668457
|
|
14
|
-
],
|
|
15
|
-
[
|
|
16
|
-
"login--textsCountScaled",
|
|
17
|
-
-10.360284805297852
|
|
18
|
-
],
|
|
19
|
-
[
|
|
20
|
-
"login--textareasCountScaled",
|
|
21
|
-
-5.995274066925049
|
|
22
|
-
],
|
|
23
|
-
[
|
|
24
|
-
"login--selectsCountScaled",
|
|
25
|
-
-6.1306281089782715
|
|
26
|
-
],
|
|
27
|
-
[
|
|
28
|
-
"login--optionsCountScaled",
|
|
29
|
-
-6.087420463562012
|
|
30
|
-
],
|
|
31
|
-
[
|
|
32
|
-
"login--radiosCountScaled",
|
|
33
|
-
-5.951887607574463
|
|
34
|
-
],
|
|
35
|
-
[
|
|
36
|
-
"login--identifiersCountScaled",
|
|
37
|
-
-2.899953842163086
|
|
38
|
-
],
|
|
39
|
-
[
|
|
40
|
-
"login--hiddenIdentifiersCountScaled",
|
|
41
|
-
8.090394973754883
|
|
42
|
-
],
|
|
43
|
-
[
|
|
44
|
-
"login--usernamesCountScaled",
|
|
45
|
-
2.0640110969543457
|
|
46
|
-
],
|
|
47
|
-
[
|
|
48
|
-
"login--emailsCountScaled",
|
|
49
|
-
-9.865800857543945
|
|
50
|
-
],
|
|
51
|
-
[
|
|
52
|
-
"login--hiddenCountScaled",
|
|
53
|
-
5.637701988220215
|
|
54
|
-
],
|
|
55
|
-
[
|
|
56
|
-
"login--hiddenPasswordsCountScaled",
|
|
57
|
-
9.23979377746582
|
|
58
|
-
],
|
|
59
|
-
[
|
|
60
|
-
"login--submitsCountScaled",
|
|
61
|
-
-2.284073829650879
|
|
62
|
-
],
|
|
63
|
-
[
|
|
64
|
-
"login--hasTels",
|
|
65
|
-
-6.52845573425293
|
|
66
|
-
],
|
|
67
|
-
[
|
|
68
|
-
"login--hasOAuth",
|
|
69
|
-
6.302763938903809
|
|
70
|
-
],
|
|
71
|
-
[
|
|
72
|
-
"login--hasCaptchas",
|
|
73
|
-
2.9789769649505615
|
|
74
|
-
],
|
|
75
|
-
[
|
|
76
|
-
"login--hasFiles",
|
|
77
|
-
-6.02401876449585
|
|
78
|
-
],
|
|
79
|
-
[
|
|
80
|
-
"login--hasDate",
|
|
81
|
-
-19.489826202392578
|
|
82
|
-
],
|
|
83
|
-
[
|
|
84
|
-
"login--hasNumber",
|
|
85
|
-
-5.951311111450195
|
|
86
|
-
],
|
|
87
|
-
[
|
|
88
|
-
"login--oneVisibleField",
|
|
89
|
-
5.676862716674805
|
|
90
|
-
],
|
|
91
|
-
[
|
|
92
|
-
"login--twoVisibleFields",
|
|
93
|
-
7.535869598388672
|
|
94
|
-
],
|
|
95
|
-
[
|
|
96
|
-
"login--threeOrMoreVisibleFields",
|
|
97
|
-
-1.3183695077896118
|
|
98
|
-
],
|
|
99
|
-
[
|
|
100
|
-
"login--noPasswords",
|
|
101
|
-
-13.081375122070312
|
|
102
|
-
],
|
|
103
|
-
[
|
|
104
|
-
"login--onePassword",
|
|
105
|
-
10.25524616241455
|
|
106
|
-
],
|
|
107
|
-
[
|
|
108
|
-
"login--twoPasswords",
|
|
109
|
-
-11.755972862243652
|
|
110
|
-
],
|
|
111
|
-
[
|
|
112
|
-
"login--threeOrMorePasswords",
|
|
113
|
-
-6.044548988342285
|
|
114
|
-
],
|
|
115
|
-
[
|
|
116
|
-
"login--noIdentifiers",
|
|
117
|
-
-8.970521926879883
|
|
118
|
-
],
|
|
119
|
-
[
|
|
120
|
-
"login--oneIdentifier",
|
|
121
|
-
-2.0764057636260986
|
|
122
|
-
],
|
|
123
|
-
[
|
|
124
|
-
"login--twoIdentifiers",
|
|
125
|
-
-2.4918956756591797
|
|
126
|
-
],
|
|
127
|
-
[
|
|
128
|
-
"login--threeOrMoreIdentifiers",
|
|
129
|
-
-8.593513488769531
|
|
130
|
-
],
|
|
131
|
-
[
|
|
132
|
-
"login--autofocusedIsIdentifier",
|
|
133
|
-
8.622314453125
|
|
134
|
-
],
|
|
135
|
-
[
|
|
136
|
-
"login--autofocusedIsPassword",
|
|
137
|
-
14.90038013458252
|
|
138
|
-
],
|
|
139
|
-
[
|
|
140
|
-
"login--visibleRatio",
|
|
141
|
-
7.558108329772949
|
|
142
|
-
],
|
|
143
|
-
[
|
|
144
|
-
"login--inputRatio",
|
|
145
|
-
-4.814621925354004
|
|
146
|
-
],
|
|
147
|
-
[
|
|
148
|
-
"login--hiddenRatio",
|
|
149
|
-
-5.744090557098389
|
|
150
|
-
],
|
|
151
|
-
[
|
|
152
|
-
"login--identifierRatio",
|
|
153
|
-
10.3085298538208
|
|
154
|
-
],
|
|
155
|
-
[
|
|
156
|
-
"login--emailRatio",
|
|
157
|
-
1.5703213214874268
|
|
158
|
-
],
|
|
159
|
-
[
|
|
160
|
-
"login--usernameRatio",
|
|
161
|
-
-7.5780768394470215
|
|
162
|
-
],
|
|
163
|
-
[
|
|
164
|
-
"login--passwordRatio",
|
|
165
|
-
-1.3385310173034668
|
|
166
|
-
],
|
|
167
|
-
[
|
|
168
|
-
"login--requiredRatio",
|
|
169
|
-
1.6504578590393066
|
|
170
|
-
],
|
|
171
|
-
[
|
|
172
|
-
"login--checkboxRatio",
|
|
173
|
-
26.39185333251953
|
|
174
|
-
],
|
|
175
|
-
[
|
|
176
|
-
"login--pageLogin",
|
|
177
|
-
13.974407196044922
|
|
178
|
-
],
|
|
179
|
-
[
|
|
180
|
-
"login--formTextLogin",
|
|
181
|
-
8.543004989624023
|
|
182
|
-
],
|
|
183
|
-
[
|
|
184
|
-
"login--formAttrsLogin",
|
|
185
|
-
2.1100170612335205
|
|
186
|
-
],
|
|
187
|
-
[
|
|
188
|
-
"login--headingsLogin",
|
|
189
|
-
13.746389389038086
|
|
190
|
-
],
|
|
191
|
-
[
|
|
192
|
-
"login--layoutLogin",
|
|
193
|
-
0.20221181213855743
|
|
194
|
-
],
|
|
195
|
-
[
|
|
196
|
-
"login--rememberMeCheckbox",
|
|
197
|
-
8.348167419433594
|
|
198
|
-
],
|
|
199
|
-
[
|
|
200
|
-
"login--troubleLink",
|
|
201
|
-
12.179048538208008
|
|
202
|
-
],
|
|
203
|
-
[
|
|
204
|
-
"login--submitLogin",
|
|
205
|
-
13.702370643615723
|
|
206
|
-
],
|
|
207
|
-
[
|
|
208
|
-
"login--pageRegister",
|
|
209
|
-
-13.799778938293457
|
|
210
|
-
],
|
|
211
|
-
[
|
|
212
|
-
"login--formTextRegister",
|
|
213
|
-
-0.044963739812374115
|
|
214
|
-
],
|
|
215
|
-
[
|
|
216
|
-
"login--formAttrsRegister",
|
|
217
|
-
-19.146482467651367
|
|
218
|
-
],
|
|
219
|
-
[
|
|
220
|
-
"login--headingsRegister",
|
|
221
|
-
-10.542322158813477
|
|
222
|
-
],
|
|
223
|
-
[
|
|
224
|
-
"login--layoutRegister",
|
|
225
|
-
-2.3833038806915283
|
|
226
|
-
],
|
|
227
|
-
[
|
|
228
|
-
"login--newPasswordRegister",
|
|
229
|
-
-17.38996696472168
|
|
230
|
-
],
|
|
231
|
-
[
|
|
232
|
-
"login--newPasswordConfirmRegister",
|
|
233
|
-
-11.91733455657959
|
|
234
|
-
],
|
|
235
|
-
[
|
|
236
|
-
"login--submitRegister",
|
|
237
|
-
-12.17735481262207
|
|
238
|
-
],
|
|
239
|
-
[
|
|
240
|
-
"login--TOSRef",
|
|
241
|
-
-5.637410640716553
|
|
242
|
-
],
|
|
243
|
-
[
|
|
244
|
-
"login--pagePasswordReset",
|
|
245
|
-
-10.309855461120605
|
|
246
|
-
],
|
|
247
|
-
[
|
|
248
|
-
"login--formTextPasswordReset",
|
|
249
|
-
-6.101982116699219
|
|
250
|
-
],
|
|
251
|
-
[
|
|
252
|
-
"login--formAttrsPasswordReset",
|
|
253
|
-
-11.729959487915039
|
|
254
|
-
],
|
|
255
|
-
[
|
|
256
|
-
"login--headingsPasswordReset",
|
|
257
|
-
-12.499267578125
|
|
258
|
-
],
|
|
259
|
-
[
|
|
260
|
-
"login--layoutPasswordReset",
|
|
261
|
-
-2.965204954147339
|
|
262
|
-
],
|
|
263
|
-
[
|
|
264
|
-
"login--pageRecovery",
|
|
265
|
-
0.14035266637802124
|
|
266
|
-
],
|
|
267
|
-
[
|
|
268
|
-
"login--formTextRecovery",
|
|
269
|
-
0.03439144045114517
|
|
270
|
-
],
|
|
271
|
-
[
|
|
272
|
-
"login--formAttrsRecovery",
|
|
273
|
-
-22.603046417236328
|
|
274
|
-
],
|
|
275
|
-
[
|
|
276
|
-
"login--headingsRecovery",
|
|
277
|
-
-10.492897033691406
|
|
278
|
-
],
|
|
279
|
-
[
|
|
280
|
-
"login--layoutRecovery",
|
|
281
|
-
5.598866939544678
|
|
282
|
-
],
|
|
283
|
-
[
|
|
284
|
-
"login--identifierRecovery",
|
|
285
|
-
4.300655364990234
|
|
286
|
-
],
|
|
287
|
-
[
|
|
288
|
-
"login--submitRecovery",
|
|
289
|
-
-12.31758975982666
|
|
290
|
-
],
|
|
291
|
-
[
|
|
292
|
-
"login--formTextMFA",
|
|
293
|
-
-14.27755069732666
|
|
294
|
-
],
|
|
295
|
-
[
|
|
296
|
-
"login--formAttrsMFA",
|
|
297
|
-
-19.56307029724121
|
|
298
|
-
],
|
|
299
|
-
[
|
|
300
|
-
"login--inputsMFA",
|
|
301
|
-
-19.59412384033203
|
|
302
|
-
],
|
|
303
|
-
[
|
|
304
|
-
"login--inputsOTP",
|
|
305
|
-
-16.51680564880371
|
|
306
|
-
],
|
|
307
|
-
[
|
|
308
|
-
"login--newsletterForm",
|
|
309
|
-
-9.028794288635254
|
|
310
|
-
],
|
|
311
|
-
[
|
|
312
|
-
"login--searchForm",
|
|
313
|
-
-6.545746803283691
|
|
314
|
-
],
|
|
315
|
-
[
|
|
316
|
-
"login--multistepForm",
|
|
317
|
-
-1.8370318412780762
|
|
318
|
-
],
|
|
319
|
-
[
|
|
320
|
-
"login--multiAuthForm",
|
|
321
|
-
15.096943855285645
|
|
322
|
-
],
|
|
323
|
-
[
|
|
324
|
-
"login--visibleRatio,visibleFieldsCountScaled",
|
|
325
|
-
-6.863025188446045
|
|
326
|
-
],
|
|
327
|
-
[
|
|
328
|
-
"login--visibleRatio,identifiersCountScaled",
|
|
329
|
-
-11.385756492614746
|
|
330
|
-
],
|
|
331
|
-
[
|
|
332
|
-
"login--visibleRatio,passwordsCountScaled",
|
|
333
|
-
13.88270378112793
|
|
334
|
-
],
|
|
335
|
-
[
|
|
336
|
-
"login--visibleRatio,hiddenIdentifiersCountScaled",
|
|
337
|
-
-4.858383655548096
|
|
338
|
-
],
|
|
339
|
-
[
|
|
340
|
-
"login--visibleRatio,hiddenPasswordsCountScaled",
|
|
341
|
-
-12.938082695007324
|
|
342
|
-
],
|
|
343
|
-
[
|
|
344
|
-
"login--visibleRatio,multistepForm",
|
|
345
|
-
5.489163875579834
|
|
346
|
-
],
|
|
347
|
-
[
|
|
348
|
-
"login--identifierRatio,visibleFieldsCountScaled",
|
|
349
|
-
-20.94881820678711
|
|
350
|
-
],
|
|
351
|
-
[
|
|
352
|
-
"login--identifierRatio,identifiersCountScaled",
|
|
353
|
-
9.301095962524414
|
|
354
|
-
],
|
|
355
|
-
[
|
|
356
|
-
"login--identifierRatio,passwordsCountScaled",
|
|
357
|
-
-8.721858978271484
|
|
358
|
-
],
|
|
359
|
-
[
|
|
360
|
-
"login--identifierRatio,hiddenIdentifiersCountScaled",
|
|
361
|
-
-2.131696939468384
|
|
362
|
-
],
|
|
363
|
-
[
|
|
364
|
-
"login--identifierRatio,hiddenPasswordsCountScaled",
|
|
365
|
-
16.711109161376953
|
|
366
|
-
],
|
|
367
|
-
[
|
|
368
|
-
"login--identifierRatio,multistepForm",
|
|
369
|
-
11.259562492370605
|
|
370
|
-
],
|
|
371
|
-
[
|
|
372
|
-
"login--passwordRatio,visibleFieldsCountScaled",
|
|
373
|
-
11.20872974395752
|
|
374
|
-
],
|
|
375
|
-
[
|
|
376
|
-
"login--passwordRatio,identifiersCountScaled",
|
|
377
|
-
-8.333873748779297
|
|
378
|
-
],
|
|
379
|
-
[
|
|
380
|
-
"login--passwordRatio,passwordsCountScaled",
|
|
381
|
-
-3.4213614463806152
|
|
382
|
-
],
|
|
383
|
-
[
|
|
384
|
-
"login--passwordRatio,hiddenIdentifiersCountScaled",
|
|
385
|
-
21.96377182006836
|
|
386
|
-
],
|
|
387
|
-
[
|
|
388
|
-
"login--passwordRatio,hiddenPasswordsCountScaled",
|
|
389
|
-
34.9525146484375
|
|
390
|
-
],
|
|
391
|
-
[
|
|
392
|
-
"login--passwordRatio,multistepForm",
|
|
393
|
-
-12.636921882629395
|
|
394
|
-
],
|
|
395
|
-
[
|
|
396
|
-
"login--requiredRatio,visibleFieldsCountScaled",
|
|
397
|
-
13.960801124572754
|
|
398
|
-
],
|
|
399
|
-
[
|
|
400
|
-
"login--requiredRatio,identifiersCountScaled",
|
|
401
|
-
-5.709250450134277
|
|
402
|
-
],
|
|
403
|
-
[
|
|
404
|
-
"login--requiredRatio,passwordsCountScaled",
|
|
405
|
-
8.685138702392578
|
|
406
|
-
],
|
|
407
|
-
[
|
|
408
|
-
"login--requiredRatio,hiddenIdentifiersCountScaled",
|
|
409
|
-
-20.684762954711914
|
|
410
|
-
],
|
|
411
|
-
[
|
|
412
|
-
"login--requiredRatio,hiddenPasswordsCountScaled",
|
|
413
|
-
17.758085250854492
|
|
414
|
-
],
|
|
415
|
-
[
|
|
416
|
-
"login--requiredRatio,multistepForm",
|
|
417
|
-
14.86757755279541
|
|
418
|
-
]
|
|
419
|
-
],
|
|
420
|
-
"bias": -6.360585689544678
|
|
421
|
-
}
|