@protontech/autofill 0.0.22991789
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/README.md +1 -0
- package/cli.d.ts +2 -0
- package/cli.js +128 -0
- package/constants/heuristics.d.ts +15 -0
- package/constants/heuristics.js +21 -0
- package/constants/selectors.d.ts +18 -0
- package/constants/selectors.js +52 -0
- package/debug.d.ts +1 -0
- package/debug.js +17 -0
- package/dictionary/generate.d.ts +1 -0
- package/dictionary/generate.js +42 -0
- package/dictionary/generated/dictionary.d.ts +51 -0
- package/dictionary/generated/dictionary.js +51 -0
- package/dictionary/source/dictionary.d.ts +11 -0
- package/dictionary/source/dictionary.js +375 -0
- package/dictionary/source/patterns.d.ts +3 -0
- package/dictionary/source/patterns.js +3 -0
- package/features/abstract.field.d.ts +123 -0
- package/features/abstract.field.js +63 -0
- package/features/abstract.form.d.ts +98 -0
- package/features/abstract.form.js +281 -0
- package/features/field.email.d.ts +18 -0
- package/features/field.email.js +43 -0
- package/features/field.otp.d.ts +36 -0
- package/features/field.otp.js +116 -0
- package/features/field.password.d.ts +35 -0
- package/features/field.password.js +104 -0
- package/features/field.username-hidden.d.ts +15 -0
- package/features/field.username-hidden.js +40 -0
- package/features/field.username.d.ts +16 -0
- package/features/field.username.js +41 -0
- package/features/form.combined.d.ts +1 -0
- package/features/form.combined.js +6 -0
- package/index.d.ts +14 -0
- package/index.js +15 -0
- package/package.json +29 -0
- package/rulesets.d.ts +2 -0
- package/rulesets.js +10 -0
- package/trainees/field.email.d.ts +2 -0
- package/trainees/field.email.js +16 -0
- package/trainees/field.identity.d.ts +2 -0
- package/trainees/field.identity.js +9 -0
- package/trainees/field.otp.d.ts +2 -0
- package/trainees/field.otp.js +16 -0
- package/trainees/field.password.current.d.ts +2 -0
- package/trainees/field.password.current.js +16 -0
- package/trainees/field.password.new.d.ts +2 -0
- package/trainees/field.password.new.js +16 -0
- package/trainees/field.username-hidden.d.ts +2 -0
- package/trainees/field.username-hidden.js +22 -0
- package/trainees/field.username.d.ts +2 -0
- package/trainees/field.username.js +16 -0
- package/trainees/form.login.d.ts +2 -0
- package/trainees/form.login.js +16 -0
- package/trainees/form.noop.d.ts +1 -0
- package/trainees/form.noop.js +7 -0
- package/trainees/form.password-change.d.ts +2 -0
- package/trainees/form.password-change.js +16 -0
- package/trainees/form.recovery.d.ts +2 -0
- package/trainees/form.recovery.js +16 -0
- package/trainees/form.register.d.ts +2 -0
- package/trainees/form.register.js +16 -0
- package/trainees/index.d.ts +9 -0
- package/trainees/index.js +72 -0
- package/trainees/results/result.email.d.ts +2 -0
- package/trainees/results/result.email.js +17 -0
- package/trainees/results/result.login.d.ts +2 -0
- package/trainees/results/result.login.js +110 -0
- package/trainees/results/result.new-password.d.ts +2 -0
- package/trainees/results/result.new-password.js +36 -0
- package/trainees/results/result.otp.d.ts +2 -0
- package/trainees/results/result.otp.js +43 -0
- package/trainees/results/result.password-change.d.ts +2 -0
- package/trainees/results/result.password-change.js +110 -0
- package/trainees/results/result.password.d.ts +2 -0
- package/trainees/results/result.password.js +36 -0
- package/trainees/results/result.recovery.d.ts +2 -0
- package/trainees/results/result.recovery.js +110 -0
- package/trainees/results/result.register.d.ts +2 -0
- package/trainees/results/result.register.js +110 -0
- package/trainees/results/result.username-hidden.d.ts +2 -0
- package/trainees/results/result.username-hidden.js +15 -0
- package/trainees/results/result.username.d.ts +2 -0
- package/trainees/results/result.username.js +16 -0
- package/types/index.d.ts +38 -0
- package/types/index.js +20 -0
- package/utils/attributes.d.ts +9 -0
- package/utils/attributes.js +13 -0
- package/utils/clustering.d.ts +1 -0
- package/utils/clustering.js +81 -0
- package/utils/combinators.d.ts +6 -0
- package/utils/combinators.js +4 -0
- package/utils/dom.d.ts +25 -0
- package/utils/dom.js +104 -0
- package/utils/exclusion.d.ts +3 -0
- package/utils/exclusion.js +59 -0
- package/utils/extract.d.ts +13 -0
- package/utils/extract.js +59 -0
- package/utils/fathom.d.ts +38 -0
- package/utils/fathom.js +68 -0
- package/utils/field.d.ts +14 -0
- package/utils/field.js +50 -0
- package/utils/flags.d.ts +25 -0
- package/utils/flags.js +60 -0
- package/utils/form.d.ts +7 -0
- package/utils/form.js +25 -0
- package/utils/identity.d.ts +24 -0
- package/utils/identity.js +63 -0
- package/utils/memoize.d.ts +5 -0
- package/utils/memoize.js +12 -0
- package/utils/prepass.d.ts +2 -0
- package/utils/prepass.js +31 -0
- package/utils/re.d.ts +58 -0
- package/utils/re.js +64 -0
- package/utils/text.d.ts +3 -0
- package/utils/text.js +8 -0
- package/utils/visible.d.ts +13 -0
- package/utils/visible.js +143 -0
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
const dictionary = {
|
|
2
|
+
LOGIN: {
|
|
3
|
+
i18n: {
|
|
4
|
+
en: ["login", "signin", "signon", "authenticate", "connect", "new session"],
|
|
5
|
+
fr: ["connexion", "se connecter", "s'identifier", "authentifier", "entrer", "nouvelle session"],
|
|
6
|
+
es: ["introduce", "introducir", "entrar", "iniciar sesión", "acceder", "nueva sesión"],
|
|
7
|
+
de: ["anmelden", "anmeldung", "anmeldedaten"],
|
|
8
|
+
pt: ["iniciar sessão", "conectar", "entrar", "nova sessão"],
|
|
9
|
+
cz: ["přihlásit"],
|
|
10
|
+
it: ['accedi']
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
REGISTER: {
|
|
14
|
+
i18n: {
|
|
15
|
+
en: ["register", "sign up", "create account", "join", "new account", "get started"],
|
|
16
|
+
fr: ["inscrire", "créer un compte", "rejoindre", "commencer", "nouveau compte", "s'inscrire"],
|
|
17
|
+
es: ["registrarse", "crear cuenta", "unirse", "empezar", "nueva cuenta"],
|
|
18
|
+
de: ["registrieren", "neues konto", "konto erstellen"],
|
|
19
|
+
pt: ["registrar", "criar conta", "juntar", "começar", "nova conta"],
|
|
20
|
+
it: ['crea account', 'creare account', 'registrati']
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
RECOVERY: {
|
|
24
|
+
i18n: {
|
|
25
|
+
en: ["help", "recover", "restore", "reset", "trouble", "problem"],
|
|
26
|
+
fr: ["aide", "récupérer", "restaurer", "réinitialiser"],
|
|
27
|
+
es: ["ayuda", "recuperar", "restaurar", "restablecer"],
|
|
28
|
+
de: ["hilfe", "wiederherstellen", "zurücksetzen"],
|
|
29
|
+
pt: ["ajuda", "recuperar", "restaurar", "redefinir"],
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
MULTI_STEP: {
|
|
33
|
+
i18n: {
|
|
34
|
+
en: ["step", "stage", "progress"],
|
|
35
|
+
fr: ["étape", "progression"],
|
|
36
|
+
es: ["paso", "etapa", "progreso"],
|
|
37
|
+
de: ["schritt", "phase", "fortschritt"],
|
|
38
|
+
pt: ["progresso"],
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
TROUBLE: {
|
|
42
|
+
i18n: {
|
|
43
|
+
en: ["forgot", "problem", "issue", "trouble", "need help"],
|
|
44
|
+
fr: ["oublié", "incident", "difficulté"],
|
|
45
|
+
es: ["olvidado", "incidencia", "ayuda"],
|
|
46
|
+
de: ["vergessen", "schwierigkeit", "hilfe"],
|
|
47
|
+
pt: ["esquecido", "questão"],
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
PASSWORD: {
|
|
51
|
+
i18n: {
|
|
52
|
+
en: ["password", "secret", "passphrase", "pass code", "key", "secret code"],
|
|
53
|
+
fr: ["mot de passe", "clé secrète", "phrase secrète", "code secret"],
|
|
54
|
+
es: ["contraseña", "clave secreta"],
|
|
55
|
+
de: ["passwort", "geheimnis", "zugangscode"],
|
|
56
|
+
pt: ["senha", "chave secreta", "de segurança"],
|
|
57
|
+
cz: ["heslo"],
|
|
58
|
+
},
|
|
59
|
+
attr: {
|
|
60
|
+
values: ["pwd", "pw", "mdp", "pass", "fmt"],
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
PASSWORD_OUTLIER: {
|
|
64
|
+
i18n: {
|
|
65
|
+
en: ["national id", "social security", "userid"],
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
USERNAME: {
|
|
69
|
+
i18n: {
|
|
70
|
+
en: ["username", "identifier", "identity", "screenname", "handle", "nickname"],
|
|
71
|
+
fr: ["pseudo", "utilisateur", "identifiant"],
|
|
72
|
+
es: ["usuario", "identificador", "usuari"],
|
|
73
|
+
de: ["nutzername", "anmelde", "benutzer"],
|
|
74
|
+
},
|
|
75
|
+
attr: {
|
|
76
|
+
values: ["appleid", "identifyemail", "acct", "userid", "accountid", "loginid", "loginname", "customerid"],
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
USERNAME_OUTLIER: {
|
|
80
|
+
i18n: {
|
|
81
|
+
en: ["first name", "last name", "middle name", "company name", "title"],
|
|
82
|
+
fr: ["prénom", "nom de famille", "titre"],
|
|
83
|
+
es: ["nombre", "apellido"],
|
|
84
|
+
de: ["vorname", "nachname"],
|
|
85
|
+
pt: ["primeiro nome", "sobrenome"],
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
EMAIL: {
|
|
89
|
+
i18n: {
|
|
90
|
+
en: ["email"],
|
|
91
|
+
fr: ["courriel"],
|
|
92
|
+
es: ["correo"],
|
|
93
|
+
pt: ["correio"],
|
|
94
|
+
},
|
|
95
|
+
attr: {
|
|
96
|
+
values: ["usermail"],
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
TEL: {
|
|
100
|
+
i18n: {
|
|
101
|
+
en: ["telephone", "phonenumber", "mobile", "cellnumber", "cellphone"],
|
|
102
|
+
fr: ["numero de tel"],
|
|
103
|
+
es: ["movil", "teléfono"],
|
|
104
|
+
de: ["telefon", "mobil"],
|
|
105
|
+
pt: ["celular", "telefone"],
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
CAPTCHA: {
|
|
109
|
+
i18n: {},
|
|
110
|
+
attr: {
|
|
111
|
+
values: ["captcha", "recaptcha", "hcaptcha", "solve-media", "funcaptcha", "keycaptcha"],
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
SUBMIT_ACTION: {
|
|
115
|
+
i18n: {
|
|
116
|
+
en: ["submit", "go"],
|
|
117
|
+
fr: ["valider"],
|
|
118
|
+
es: ["enviar"],
|
|
119
|
+
de: ["senden"],
|
|
120
|
+
pt: ["enviar"],
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
CREATE_ACTION: {
|
|
124
|
+
i18n: {
|
|
125
|
+
en: ["new", "set", "create"],
|
|
126
|
+
fr: ["nouveau", "créer"],
|
|
127
|
+
es: ["nuevo", "crear"],
|
|
128
|
+
de: ["neu", "erstellen"],
|
|
129
|
+
pt: ["novo", "criar"],
|
|
130
|
+
it: ['creare']
|
|
131
|
+
},
|
|
132
|
+
attr: {
|
|
133
|
+
endsWith: ["1", "fst"],
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
RESET_ACTION: {
|
|
137
|
+
i18n: {
|
|
138
|
+
en: ["change", "update", "reset"],
|
|
139
|
+
fr: ["mettre à jour", "réinitialiser"],
|
|
140
|
+
es: ["cambiar", "actualizar", "restablecer"],
|
|
141
|
+
de: ["ändern", "aktualisieren", "zurücksetzen"],
|
|
142
|
+
pt: ["alterar", "atualizar", "redefinir"],
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
CONFIRM_ACTION: {
|
|
146
|
+
i18n: {
|
|
147
|
+
en: ["confirm", "repeat", "verify", "retype", "again"],
|
|
148
|
+
fr: ["répéter", "vérifier", "saisir à nouveau"],
|
|
149
|
+
es: ["repetir", "verificar", "volver a escribir"],
|
|
150
|
+
de: ["bestätigen", "wiederholen", "verifizieren", "erneut eingeben"],
|
|
151
|
+
pt: ["digitar novamente"],
|
|
152
|
+
},
|
|
153
|
+
attr: {
|
|
154
|
+
endsWith: ["2", "bis", "snd"],
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
STEP_ACTION: {
|
|
158
|
+
i18n: {
|
|
159
|
+
en: ["continue", "next", "proceed", "accept", "back", "finish", "complete", "get started"],
|
|
160
|
+
fr: ["suivant", "prochain", "précédent", "terminer"],
|
|
161
|
+
es: ["continuar", "siguiente", "anterior", "finalizar"],
|
|
162
|
+
de: ["weiter", "fortfahren", "abschließen", "zurück", "fertigstellen"],
|
|
163
|
+
pt: ["proximo", "terminar", "completar"],
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
REMEMBER_ACTION: {
|
|
167
|
+
i18n: {
|
|
168
|
+
en: ["keep", "remember", "stay"],
|
|
169
|
+
fr: ["rester", "se souvenir de"],
|
|
170
|
+
es: ["mantener", "recordarme"],
|
|
171
|
+
de: ["angemeldet bleiben", "mich erinnern"],
|
|
172
|
+
pt: ["manter me", "lembrar de mim"],
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
SEARCH_ACTION: {
|
|
176
|
+
i18n: {
|
|
177
|
+
en: ["search", "query"],
|
|
178
|
+
fr: ["recherche"],
|
|
179
|
+
es: ["buscar"],
|
|
180
|
+
de: ["suche"],
|
|
181
|
+
pt: [],
|
|
182
|
+
},
|
|
183
|
+
},
|
|
184
|
+
CURRENT_VALUE: {
|
|
185
|
+
i18n: {
|
|
186
|
+
en: ["previous", "current", "old", "existing", "last", "before"],
|
|
187
|
+
fr: ["précédent", "actuel", "ancien", "existant", "dernier"],
|
|
188
|
+
es: ["anterior", "actual", "viejo", "existente", "último"],
|
|
189
|
+
de: ["vorherige", "aktuelle", "alte", "bestehende", "letzte"],
|
|
190
|
+
pt: ["anterior", "atual", "antigo", "existente", "último"],
|
|
191
|
+
},
|
|
192
|
+
attr: {
|
|
193
|
+
values: ["curr", "prev"],
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
HIDDEN: {
|
|
197
|
+
i18n: {},
|
|
198
|
+
attr: {
|
|
199
|
+
values: ["offscreen", "move-offscreen", "sr-only", "display-none", "screen-reader-only", "a11y-hide"],
|
|
200
|
+
exact: ["hidden", "is-hidden"],
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
OAUTH: {
|
|
204
|
+
i18n: {},
|
|
205
|
+
attr: {
|
|
206
|
+
values: ["apple", "facebook", "google", "twitch"],
|
|
207
|
+
},
|
|
208
|
+
},
|
|
209
|
+
TOS: {
|
|
210
|
+
i18n: {
|
|
211
|
+
en: ["terms of", "guideline", "consent", "acknowledge", "understand", "agree", "privacy", "policy"],
|
|
212
|
+
fr: ["conditions", "consentement", "accord", "confidentialité"],
|
|
213
|
+
es: ["términos", "condiciones", "consentimiento", "acuerdo", "privacidad"],
|
|
214
|
+
de: ["nutzungsbedingungen", "einwilligung", "zustimmung", "datenschutzrichtlinie"],
|
|
215
|
+
pt: ["termos de uso", "consentimento", "acordo", "política de privacidade"],
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
MFA_ACTION: {
|
|
219
|
+
i18n: {
|
|
220
|
+
en: ["Enter code", "verify", "enter auth code", "confirm"],
|
|
221
|
+
fr: [],
|
|
222
|
+
es: [],
|
|
223
|
+
de: [],
|
|
224
|
+
pt: [],
|
|
225
|
+
},
|
|
226
|
+
},
|
|
227
|
+
MFA: {
|
|
228
|
+
i18n: {
|
|
229
|
+
en: [
|
|
230
|
+
"2FA",
|
|
231
|
+
"2step",
|
|
232
|
+
"multi factor",
|
|
233
|
+
"two factor",
|
|
234
|
+
"two step",
|
|
235
|
+
"auth code",
|
|
236
|
+
"authenticator",
|
|
237
|
+
"authentication app",
|
|
238
|
+
"authentication code",
|
|
239
|
+
"security code",
|
|
240
|
+
"verification",
|
|
241
|
+
"generator app",
|
|
242
|
+
],
|
|
243
|
+
fr: ["2 étapes", "multi-facteur", "double facteur", "double étape", "authentificateur"],
|
|
244
|
+
es: ["2 pasos", "doble paso", "doble factor", "verificacion", "generadora"],
|
|
245
|
+
de: ["2-Schritte", "Multi-Faktor", "Zwei-Faktor", "Zwei-Schritte", "Authentifikator", "Authentifizierungs"],
|
|
246
|
+
pt: ["2 etapas", "autenticador", "dois passos", "dois fatores", "multifator", "verificação", "autenticador"],
|
|
247
|
+
},
|
|
248
|
+
attr: {
|
|
249
|
+
values: ["twofactor", "twostep", "challenge", "two-factor", "loginCode", "2fa", "twofa", "tfacode", "phone_verification", "approvals_code"],
|
|
250
|
+
exact: ["tfa", "mfa"],
|
|
251
|
+
},
|
|
252
|
+
},
|
|
253
|
+
OTP: {
|
|
254
|
+
i18n: {},
|
|
255
|
+
attr: {
|
|
256
|
+
values: ["onetime", "1time", "totp", "otp", "totpPin", "otc"],
|
|
257
|
+
},
|
|
258
|
+
},
|
|
259
|
+
OTP_OUTLIER: {
|
|
260
|
+
i18n: {
|
|
261
|
+
en: ["resend", "new code", "send"],
|
|
262
|
+
fr: ["nouveau code", "envoyer"],
|
|
263
|
+
es: ["reenviar", "nuevo código", "enviar"],
|
|
264
|
+
de: ["neu senden", "neuer Code", "senden"],
|
|
265
|
+
pt: ["reenviar", "novo código", "enviar"],
|
|
266
|
+
},
|
|
267
|
+
attr: {
|
|
268
|
+
values: ["sms", "email", "phone-pin", "tel-pin", "email-pin", "phone_verification_pin"],
|
|
269
|
+
},
|
|
270
|
+
},
|
|
271
|
+
NEWSLETTER: {
|
|
272
|
+
i18n: {
|
|
273
|
+
en: ["newsletter", "mailing", "bulletin"],
|
|
274
|
+
es: ["boletin"],
|
|
275
|
+
},
|
|
276
|
+
attr: {
|
|
277
|
+
values: ["newsletter", "mailing-list", "email-form", "subscription"],
|
|
278
|
+
},
|
|
279
|
+
},
|
|
280
|
+
IDENTITY_FULLNAME: {
|
|
281
|
+
i18n: {},
|
|
282
|
+
attr: {
|
|
283
|
+
values: ["full-name", "your-name", "address-name", "address-contact", "contact-person"],
|
|
284
|
+
exact: ["name"],
|
|
285
|
+
},
|
|
286
|
+
},
|
|
287
|
+
IDENTITY_FIRSTNAME: {
|
|
288
|
+
i18n: {},
|
|
289
|
+
attr: { values: ["first-name", "given-name", "first-n"], exact: ["f-name"] },
|
|
290
|
+
},
|
|
291
|
+
IDENTITY_MIDDLENAME: {
|
|
292
|
+
i18n: {},
|
|
293
|
+
attr: { values: ["middle-name", "additional-name", "middle-n"], exact: ["m-name"] },
|
|
294
|
+
},
|
|
295
|
+
IDENTITY_LASTNAME: {
|
|
296
|
+
i18n: {},
|
|
297
|
+
attr: { values: ["last-name", "surname", "family-name", "family-n", "last-n"], exact: ["l-name", "s-name"] },
|
|
298
|
+
},
|
|
299
|
+
IDENTITY_TELEPHONE: {
|
|
300
|
+
i18n: {},
|
|
301
|
+
attr: {
|
|
302
|
+
values: ["phone", "mobile", "telephone", "tel-local", "tel-national", "national-number", "contact-number"],
|
|
303
|
+
exact: ["tel"],
|
|
304
|
+
},
|
|
305
|
+
},
|
|
306
|
+
IDENTITY_TELEPHONE_PREFIX: {
|
|
307
|
+
i18n: {},
|
|
308
|
+
attr: { values: ["prefix", "code", "country"] },
|
|
309
|
+
},
|
|
310
|
+
IDENTITY_ADDRESS: {
|
|
311
|
+
i18n: {},
|
|
312
|
+
attr: {
|
|
313
|
+
values: [
|
|
314
|
+
"address-line-one",
|
|
315
|
+
"address-line1",
|
|
316
|
+
"address-lines",
|
|
317
|
+
"address1",
|
|
318
|
+
"bill-addr",
|
|
319
|
+
"billing-addr",
|
|
320
|
+
"mailing-addr",
|
|
321
|
+
"preferred-address",
|
|
322
|
+
"street-address",
|
|
323
|
+
],
|
|
324
|
+
exact: ["address", "addr", "street", "line1", "mail-addr"],
|
|
325
|
+
},
|
|
326
|
+
},
|
|
327
|
+
IDENTITY_ADDRESS_LINES: {
|
|
328
|
+
i18n: {},
|
|
329
|
+
attr: {
|
|
330
|
+
endsWith: ["line2", "line-two", "line3", "line-three"],
|
|
331
|
+
},
|
|
332
|
+
},
|
|
333
|
+
IDENTITY_STATE: {
|
|
334
|
+
i18n: {},
|
|
335
|
+
attr: {
|
|
336
|
+
values: ["address-level-1", "address-state", "address-province", "state-province"],
|
|
337
|
+
exact: ["state", "province", "region", "county"],
|
|
338
|
+
},
|
|
339
|
+
},
|
|
340
|
+
IDENTITY_CITY: {
|
|
341
|
+
i18n: {},
|
|
342
|
+
attr: {
|
|
343
|
+
values: ["address-level-2", "address-city", "address-town", "personal-city"],
|
|
344
|
+
exact: ["city", "town", "locality"],
|
|
345
|
+
},
|
|
346
|
+
},
|
|
347
|
+
IDENTITY_ZIPCODE: {
|
|
348
|
+
i18n: {},
|
|
349
|
+
attr: {
|
|
350
|
+
values: ["zip-code", "postal-code", "post-code", "address-zip", "address-postal", "address-postal-code", "address-zip-code"],
|
|
351
|
+
exact: ["zip"],
|
|
352
|
+
},
|
|
353
|
+
},
|
|
354
|
+
IDENTITY_ORGANIZATION: {
|
|
355
|
+
i18n: {},
|
|
356
|
+
attr: {
|
|
357
|
+
values: ["company-name", "organization", "organization-name"],
|
|
358
|
+
exact: ["organization"],
|
|
359
|
+
},
|
|
360
|
+
},
|
|
361
|
+
IDENTITY_COUNTRY: {
|
|
362
|
+
i18n: {},
|
|
363
|
+
attr: {
|
|
364
|
+
values: ["country-name", "address-country", "address-country-name"],
|
|
365
|
+
exact: ["country"],
|
|
366
|
+
},
|
|
367
|
+
},
|
|
368
|
+
IDENTITY_COUNTRY_CODE: {
|
|
369
|
+
i18n: {},
|
|
370
|
+
attr: {
|
|
371
|
+
values: ["country-code"],
|
|
372
|
+
},
|
|
373
|
+
},
|
|
374
|
+
};
|
|
375
|
+
export default dictionary;
|
|
@@ -0,0 +1,123 @@
|
|
|
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>;
|
|
@@ -0,0 +1,63 @@
|
|
|
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;
|
|
@@ -0,0 +1,98 @@
|
|
|
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)[];
|