mirror of
https://github.com/bitwarden/browser
synced 2024-12-27 10:23:48 +01:00
Merge pull request #2255 from bitwarden/Refactor-Autofill-service
Tech-Debt: Refactor autofill service
This commit is contained in:
commit
ccd96d5d36
@ -21,116 +21,7 @@ import AutofillScript from '../models/autofillScript';
|
||||
|
||||
import { BrowserApi } from '../browser/browserApi';
|
||||
|
||||
const CardAttributes: string[] = ['autoCompleteType', 'data-stripe', 'htmlName', 'htmlID', 'label-tag',
|
||||
'placeholder', 'label-left', 'label-top', 'data-recurly'];
|
||||
|
||||
const CardAttributesExtended: string[] = [...CardAttributes, 'label-right'];
|
||||
|
||||
const IdentityAttributes: string[] = ['autoCompleteType', 'data-stripe', 'htmlName', 'htmlID', 'label-tag',
|
||||
'placeholder', 'label-left', 'label-top', 'data-recurly'];
|
||||
|
||||
const UsernameFieldNames: string[] = [
|
||||
// English
|
||||
'username', 'user name', 'email', 'email address', 'e-mail', 'e-mail address', 'userid', 'user id',
|
||||
'customer id', 'login id',
|
||||
// German
|
||||
'benutzername', 'benutzer name', 'email adresse', 'e-mail adresse', 'benutzerid', 'benutzer id'];
|
||||
|
||||
const FirstnameFieldNames: string[] = [
|
||||
// English
|
||||
'f-name', 'first-name', 'given-name', 'first-n',
|
||||
// German
|
||||
'vorname',
|
||||
];
|
||||
|
||||
const LastnameFieldNames: string[] = [
|
||||
// English
|
||||
'l-name', 'last-name', 's-name', 'surname', 'family-name', 'family-n', 'last-n',
|
||||
// German
|
||||
'nachname', 'familienname',
|
||||
];
|
||||
|
||||
const ExcludedAutofillTypes: string[] = ['radio', 'checkbox', 'hidden', 'file', 'button', 'image', 'reset', 'search'];
|
||||
|
||||
// Each index represents a language. These three arrays should all be the same length.
|
||||
// 0: English, 1: Danish, 2: German/Dutch, 3: French/Spanish/Italian, 4: Russian, 5: Portuguese
|
||||
const MonthAbbr = ['mm', 'mm', 'mm', 'mm', 'mm', 'mm'];
|
||||
const YearAbbrShort = ['yy', 'åå', 'jj', 'aa', 'гг', 'rr'];
|
||||
const YearAbbrLong = ['yyyy', 'åååå', 'jjjj', 'aa', 'гггг', 'rrrr'];
|
||||
|
||||
const OperationDelays = new Map<string, number>([
|
||||
['buzzsprout.com', 100],
|
||||
]);
|
||||
|
||||
/* tslint:disable */
|
||||
const IsoCountries: { [id: string]: string; } = {
|
||||
afghanistan: "AF", "aland islands": "AX", albania: "AL", algeria: "DZ", "american samoa": "AS", andorra: "AD",
|
||||
angola: "AO", anguilla: "AI", antarctica: "AQ", "antigua and barbuda": "AG", argentina: "AR", armenia: "AM",
|
||||
aruba: "AW", australia: "AU", austria: "AT", azerbaijan: "AZ", bahamas: "BS", bahrain: "BH", bangladesh: "BD",
|
||||
barbados: "BB", belarus: "BY", belgium: "BE", belize: "BZ", benin: "BJ", bermuda: "BM", bhutan: "BT",
|
||||
bolivia: "BO", "bosnia and herzegovina": "BA", botswana: "BW", "bouvet island": "BV", brazil: "BR",
|
||||
"british indian ocean territory": "IO", "brunei darussalam": "BN", bulgaria: "BG", "burkina faso": "BF",
|
||||
burundi: "BI", cambodia: "KH", cameroon: "CM", canada: "CA", "cape verde": "CV", "cayman islands": "KY",
|
||||
"central african republic": "CF", chad: "TD", chile: "CL", china: "CN", "christmas island": "CX",
|
||||
"cocos (keeling) islands": "CC", colombia: "CO", comoros: "KM", congo: "CG", "congo, democratic republic": "CD",
|
||||
"cook islands": "CK", "costa rica": "CR", "cote d'ivoire": "CI", croatia: "HR", cuba: "CU", cyprus: "CY",
|
||||
"czech republic": "CZ", denmark: "DK", djibouti: "DJ", dominica: "DM", "dominican republic": "DO", ecuador: "EC",
|
||||
egypt: "EG", "el salvador": "SV", "equatorial guinea": "GQ", eritrea: "ER", estonia: "EE", ethiopia: "ET",
|
||||
"falkland islands": "FK", "faroe islands": "FO", fiji: "FJ", finland: "FI", france: "FR", "french guiana": "GF",
|
||||
"french polynesia": "PF", "french southern territories": "TF", gabon: "GA", gambia: "GM", georgia: "GE",
|
||||
germany: "DE", ghana: "GH", gibraltar: "GI", greece: "GR", greenland: "GL", grenada: "GD", guadeloupe: "GP",
|
||||
guam: "GU", guatemala: "GT", guernsey: "GG", guinea: "GN", "guinea-bissau": "GW", guyana: "GY", haiti: "HT",
|
||||
"heard island & mcdonald islands": "HM", "holy see (vatican city state)": "VA", honduras: "HN", "hong kong": "HK",
|
||||
hungary: "HU", iceland: "IS", india: "IN", indonesia: "ID", "iran, islamic republic of": "IR", iraq: "IQ",
|
||||
ireland: "IE", "isle of man": "IM", israel: "IL", italy: "IT", jamaica: "JM", japan: "JP", jersey: "JE",
|
||||
jordan: "JO", kazakhstan: "KZ", kenya: "KE", kiribati: "KI", "republic of korea": "KR", "south korea": "KR",
|
||||
"democratic people's republic of korea": "KP", "north korea": "KP", kuwait: "KW", kyrgyzstan: "KG",
|
||||
"lao people's democratic republic": "LA", latvia: "LV", lebanon: "LB", lesotho: "LS", liberia: "LR",
|
||||
"libyan arab jamahiriya": "LY", liechtenstein: "LI", lithuania: "LT", luxembourg: "LU", macao: "MO",
|
||||
macedonia: "MK", madagascar: "MG", malawi: "MW", malaysia: "MY", maldives: "MV", mali: "ML", malta: "MT",
|
||||
"marshall islands": "MH", martinique: "MQ", mauritania: "MR", mauritius: "MU", mayotte: "YT", mexico: "MX",
|
||||
"micronesia, federated states of": "FM", moldova: "MD", monaco: "MC", mongolia: "MN", montenegro: "ME",
|
||||
montserrat: "MS", morocco: "MA", mozambique: "MZ", myanmar: "MM", namibia: "NA", nauru: "NR", nepal: "NP",
|
||||
netherlands: "NL", "netherlands antilles": "AN", "new caledonia": "NC", "new zealand": "NZ", nicaragua: "NI",
|
||||
niger: "NE", nigeria: "NG", niue: "NU", "norfolk island": "NF", "northern mariana islands": "MP", norway: "NO",
|
||||
oman: "OM", pakistan: "PK", palau: "PW", "palestinian territory, occupied": "PS", panama: "PA",
|
||||
"papua new guinea": "PG", paraguay: "PY", peru: "PE", philippines: "PH", pitcairn: "PN", poland: "PL",
|
||||
portugal: "PT", "puerto rico": "PR", qatar: "QA", reunion: "RE", romania: "RO", "russian federation": "RU",
|
||||
rwanda: "RW", "saint barthelemy": "BL", "saint helena": "SH", "saint kitts and nevis": "KN", "saint lucia": "LC",
|
||||
"saint martin": "MF", "saint pierre and miquelon": "PM", "saint vincent and grenadines": "VC", samoa: "WS",
|
||||
"san marino": "SM", "sao tome and principe": "ST", "saudi arabia": "SA", senegal: "SN", serbia: "RS",
|
||||
seychelles: "SC", "sierra leone": "SL", singapore: "SG", slovakia: "SK", slovenia: "SI", "solomon islands": "SB",
|
||||
somalia: "SO", "south africa": "ZA", "south georgia and sandwich isl.": "GS", spain: "ES", "sri lanka": "LK",
|
||||
sudan: "SD", suriname: "SR", "svalbard and jan mayen": "SJ", swaziland: "SZ", sweden: "SE", switzerland: "CH",
|
||||
"syrian arab republic": "SY", taiwan: "TW", tajikistan: "TJ", tanzania: "TZ", thailand: "TH", "timor-leste": "TL",
|
||||
togo: "TG", tokelau: "TK", tonga: "TO", "trinidad and tobago": "TT", tunisia: "TN", turkey: "TR",
|
||||
turkmenistan: "TM", "turks and caicos islands": "TC", tuvalu: "TV", uganda: "UG", ukraine: "UA",
|
||||
"united arab emirates": "AE", "united kingdom": "GB", "united states": "US",
|
||||
"united states outlying islands": "UM", uruguay: "UY", uzbekistan: "UZ", vanuatu: "VU", venezuela: "VE",
|
||||
vietnam: "VN", "virgin islands, british": "VG", "virgin islands, u.s.": "VI", "wallis and futuna": "WF",
|
||||
"western sahara": "EH", yemen: "YE", zambia: "ZM", zimbabwe: "ZW",
|
||||
};
|
||||
|
||||
const IsoStates: { [id: string]: string; } = {
|
||||
alabama: 'AL', alaska: 'AK', 'american samoa': 'AS', arizona: 'AZ', arkansas: 'AR', california: 'CA',
|
||||
colorado: 'CO', connecticut: 'CT', delaware: 'DE', 'district of columbia': 'DC',
|
||||
'federated states of micronesia': 'FM', florida: 'FL', georgia: 'GA', guam: 'GU', hawaii: 'HI', idaho: 'ID',
|
||||
illinois: 'IL', indiana: 'IN', iowa: 'IA', kansas: 'KS', kentucky: 'KY', louisiana: 'LA', maine: 'ME',
|
||||
'marshall islands': 'MH', maryland: 'MD', massachusetts: 'MA', michigan: 'MI', minnesota: 'MN', mississippi: 'MS',
|
||||
missouri: 'MO', montana: 'MT', nebraska: 'NE', nevada: 'NV', 'new hampshire': 'NH', 'new jersey': 'NJ',
|
||||
'new mexico': 'NM', 'new york': 'NY', 'north carolina': 'NC', 'north dakota': 'ND',
|
||||
'northern mariana islands': 'MP', ohio: 'OH', oklahoma: 'OK', oregon: 'OR', palau: 'PW', pennsylvania: 'PA',
|
||||
'puerto rico': 'PR', 'rhode island': 'RI', 'south carolina': 'SC', 'south dakota': 'SD', tennessee: 'TN',
|
||||
texas: 'TX', utah: 'UT', vermont: 'VT', 'virgin islands': 'VI', virginia: 'VA', washington: 'WA',
|
||||
'west virginia': 'WV', wisconsin: 'WI', wyoming: 'WY',
|
||||
};
|
||||
|
||||
var IsoProvinces: { [id: string]: string; } = {
|
||||
alberta: 'AB', 'british columbia': 'BC', manitoba: 'MB', 'new brunswick': 'NB', 'newfoundland and labrador': 'NL',
|
||||
'nova scotia': 'NS', ontario: 'ON', 'prince edward island': 'PE', quebec: 'QC', saskatchewan: 'SK',
|
||||
};
|
||||
// /* tslint:enable */
|
||||
|
||||
import { AutoFillConstants, CreditCardAutoFillConstants, IdentityAutoFillConstants } from './autofillConstants';
|
||||
export default class AutofillService implements AutofillServiceInterface {
|
||||
|
||||
constructor(private cipherService: CipherService, private userService: UserService,
|
||||
@ -437,7 +328,7 @@ export default class AutofillService implements AutofillServiceInterface {
|
||||
// No password fields on this page. Let's try to just fuzzy fill the username.
|
||||
pageDetails.fields.forEach((f: any) => {
|
||||
if (f.viewable && (f.type === 'text' || f.type === 'email' || f.type === 'tel') &&
|
||||
this.fieldIsFuzzyMatch(f, UsernameFieldNames)) {
|
||||
this.fieldIsFuzzyMatch(f, AutoFillConstants.UsernameFieldNames)) {
|
||||
usernames.push(f);
|
||||
}
|
||||
});
|
||||
@ -478,12 +369,12 @@ export default class AutofillService implements AutofillServiceInterface {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.isExcludedType(f.type, ExcludedAutofillTypes)) {
|
||||
if (this.isExcludedType(f.type, AutoFillConstants.ExcludedAutofillTypes)) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (let i = 0; i < CardAttributes.length; i++) {
|
||||
const attr = CardAttributes[i];
|
||||
for (let i = 0; i < CreditCardAutoFillConstants.CardAttributes.length; i++) {
|
||||
const attr = CreditCardAutoFillConstants.CardAttributes[i];
|
||||
if (!f.hasOwnProperty(attr) || !f[attr] || !f.viewable) {
|
||||
continue;
|
||||
}
|
||||
@ -491,56 +382,34 @@ export default class AutofillService implements AutofillServiceInterface {
|
||||
// ref https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill
|
||||
// ref https://developers.google.com/web/fundamentals/design-and-ux/input/forms/
|
||||
if (!fillFields.cardholderName && this.isFieldMatch(f[attr],
|
||||
['cc-name', 'card-name', 'cardholder-name', 'cardholder', 'name', 'nom'],
|
||||
['cc-name', 'card-name', 'cardholder-name', 'cardholder', 'tbName'])) {
|
||||
CreditCardAutoFillConstants.CardHolderFieldNames,
|
||||
CreditCardAutoFillConstants.CardHolderFieldNameValues)) {
|
||||
fillFields.cardholderName = f;
|
||||
break;
|
||||
} else if (!fillFields.number && this.isFieldMatch(f[attr],
|
||||
['cc-number', 'cc-num', 'card-number', 'card-num', 'number', 'cc', 'cc-no', 'card-no',
|
||||
'credit-card', 'numero-carte', 'carte', 'carte-credit', 'num-carte', 'cb-num'],
|
||||
['cc-number', 'cc-num', 'card-number', 'card-num', 'cc-no', 'card-no', 'numero-carte',
|
||||
'num-carte', 'cb-num'])) {
|
||||
CreditCardAutoFillConstants.CardNumberFieldNames,
|
||||
CreditCardAutoFillConstants.CardNumberFieldNameValues)) {
|
||||
fillFields.number = f;
|
||||
break;
|
||||
} else if (!fillFields.exp && this.isFieldMatch(f[attr],
|
||||
['cc-exp', 'card-exp', 'cc-expiration', 'card-expiration', 'cc-ex', 'card-ex',
|
||||
'card-expire', 'card-expiry', 'validite', 'expiration', 'expiry', 'mm-yy',
|
||||
'mm-yyyy', 'yy-mm', 'yyyy-mm', 'expiration-date', 'payment-card-expiration',
|
||||
'payment-cc-date'],
|
||||
['mm-yy', 'mm-yyyy', 'yy-mm', 'yyyy-mm', 'expiration-date',
|
||||
'payment-card-expiration'])) {
|
||||
CreditCardAutoFillConstants.CardExpiryFieldNames,
|
||||
CreditCardAutoFillConstants.CardExpiryFieldNameValues)) {
|
||||
fillFields.exp = f;
|
||||
break;
|
||||
} else if (!fillFields.expMonth && this.isFieldMatch(f[attr],
|
||||
['exp-month', 'cc-exp-month', 'cc-month', 'card-month', 'cc-mo', 'card-mo', 'exp-mo',
|
||||
'card-exp-mo', 'cc-exp-mo', 'card-expiration-month', 'expiration-month',
|
||||
'cc-mm', 'cc-m', 'card-mm', 'card-m', 'card-exp-mm', 'cc-exp-mm', 'exp-mm', 'exp-m',
|
||||
'expire-month', 'expire-mo', 'expiry-month', 'expiry-mo', 'card-expire-month',
|
||||
'card-expire-mo', 'card-expiry-month', 'card-expiry-mo', 'mois-validite',
|
||||
'mois-expiration', 'm-validite', 'm-expiration', 'expiry-date-field-month',
|
||||
'expiration-date-month', 'expiration-date-mm', 'exp-mon', 'validity-mo',
|
||||
'exp-date-mo', 'cb-date-mois', 'date-m'])) {
|
||||
CreditCardAutoFillConstants.ExpiryMonthFieldNames)) {
|
||||
fillFields.expMonth = f;
|
||||
break;
|
||||
} else if (!fillFields.expYear && this.isFieldMatch(f[attr],
|
||||
['exp-year', 'cc-exp-year', 'cc-year', 'card-year', 'cc-yr', 'card-yr', 'exp-yr',
|
||||
'card-exp-yr', 'cc-exp-yr', 'card-expiration-year', 'expiration-year',
|
||||
'cc-yy', 'cc-y', 'card-yy', 'card-y', 'card-exp-yy', 'cc-exp-yy', 'exp-yy', 'exp-y',
|
||||
'cc-yyyy', 'card-yyyy', 'card-exp-yyyy', 'cc-exp-yyyy', 'expire-year', 'expire-yr',
|
||||
'expiry-year', 'expiry-yr', 'card-expire-year', 'card-expire-yr', 'card-expiry-year',
|
||||
'card-expiry-yr', 'an-validite', 'an-expiration', 'annee-validite',
|
||||
'annee-expiration', 'expiry-date-field-year', 'expiration-date-year', 'cb-date-ann',
|
||||
'expiration-date-yy', 'expiration-date-yyyy', 'validity-year', 'exp-date-year', 'date-y'])) {
|
||||
CreditCardAutoFillConstants.ExpiryYearFieldNames)) {
|
||||
fillFields.expYear = f;
|
||||
break;
|
||||
} else if (!fillFields.code && this.isFieldMatch(f[attr],
|
||||
['cvv', 'cvc', 'cvv2', 'cc-csc', 'cc-cvv', 'card-csc', 'card-cvv', 'cvd', 'cid', 'cvc2',
|
||||
'cnv', 'cvn2', 'cc-code', 'card-code', 'code-securite', 'security-code', 'crypto',
|
||||
'card-verif', 'verification-code', 'csc', 'ccv'])) {
|
||||
CreditCardAutoFillConstants.CVVFieldNames)) {
|
||||
fillFields.code = f;
|
||||
break;
|
||||
} else if (!fillFields.brand && this.isFieldMatch(f[attr],
|
||||
['cc-type', 'card-type', 'card-brand', 'cc-brand', 'cb-type'])) {
|
||||
CreditCardAutoFillConstants.CardBrandFieldNames)) {
|
||||
fillFields.brand = f;
|
||||
break;
|
||||
}
|
||||
@ -634,36 +503,36 @@ export default class AutofillService implements AutofillServiceInterface {
|
||||
}
|
||||
|
||||
let exp: string = null;
|
||||
for (let i = 0; i < MonthAbbr.length; i++) {
|
||||
if (this.fieldAttrsContain(fillFields.exp, MonthAbbr[i] + '/' + YearAbbrShort[i]) &&
|
||||
for (let i = 0; i < CreditCardAutoFillConstants.MonthAbbr.length; i++) {
|
||||
if (this.fieldAttrsContain(fillFields.exp, CreditCardAutoFillConstants.MonthAbbr[i] + '/' + CreditCardAutoFillConstants.YearAbbrShort[i]) &&
|
||||
partYear != null) {
|
||||
exp = fullMonth + '/' + partYear;
|
||||
} else if (this.fieldAttrsContain(fillFields.exp, MonthAbbr[i] + '/' + YearAbbrLong[i])) {
|
||||
} else if (this.fieldAttrsContain(fillFields.exp, CreditCardAutoFillConstants.MonthAbbr[i] + '/' + CreditCardAutoFillConstants.YearAbbrLong[i])) {
|
||||
exp = fullMonth + '/' + fullYear;
|
||||
} else if (this.fieldAttrsContain(fillFields.exp, YearAbbrShort[i] + '/' + MonthAbbr[i]) &&
|
||||
} else if (this.fieldAttrsContain(fillFields.exp, CreditCardAutoFillConstants.YearAbbrShort[i] + '/' + CreditCardAutoFillConstants.MonthAbbr[i]) &&
|
||||
partYear != null) {
|
||||
exp = partYear + '/' + fullMonth;
|
||||
} else if (this.fieldAttrsContain(fillFields.exp, YearAbbrLong[i] + '/' + MonthAbbr[i])) {
|
||||
} else if (this.fieldAttrsContain(fillFields.exp, CreditCardAutoFillConstants.YearAbbrLong[i] + '/' + CreditCardAutoFillConstants.MonthAbbr[i])) {
|
||||
exp = fullYear + '/' + fullMonth;
|
||||
} else if (this.fieldAttrsContain(fillFields.exp, MonthAbbr[i] + '-' + YearAbbrShort[i]) &&
|
||||
} else if (this.fieldAttrsContain(fillFields.exp, CreditCardAutoFillConstants.MonthAbbr[i] + '-' + CreditCardAutoFillConstants.YearAbbrShort[i]) &&
|
||||
partYear != null) {
|
||||
exp = fullMonth + '-' + partYear;
|
||||
} else if (this.fieldAttrsContain(fillFields.exp, MonthAbbr[i] + '-' + YearAbbrLong[i])) {
|
||||
} else if (this.fieldAttrsContain(fillFields.exp, CreditCardAutoFillConstants.MonthAbbr[i] + '-' + CreditCardAutoFillConstants.YearAbbrLong[i])) {
|
||||
exp = fullMonth + '-' + fullYear;
|
||||
} else if (this.fieldAttrsContain(fillFields.exp, YearAbbrShort[i] + '-' + MonthAbbr[i]) &&
|
||||
} else if (this.fieldAttrsContain(fillFields.exp, CreditCardAutoFillConstants.YearAbbrShort[i] + '-' + CreditCardAutoFillConstants.MonthAbbr[i]) &&
|
||||
partYear != null) {
|
||||
exp = partYear + '-' + fullMonth;
|
||||
} else if (this.fieldAttrsContain(fillFields.exp, YearAbbrLong[i] + '-' + MonthAbbr[i])) {
|
||||
} else if (this.fieldAttrsContain(fillFields.exp, CreditCardAutoFillConstants.YearAbbrLong[i] + '-' + CreditCardAutoFillConstants.MonthAbbr[i])) {
|
||||
exp = fullYear + '-' + fullMonth;
|
||||
} else if (this.fieldAttrsContain(fillFields.exp, YearAbbrShort[i] + MonthAbbr[i]) &&
|
||||
} else if (this.fieldAttrsContain(fillFields.exp, CreditCardAutoFillConstants.YearAbbrShort[i] + CreditCardAutoFillConstants.MonthAbbr[i]) &&
|
||||
partYear != null) {
|
||||
exp = partYear + fullMonth;
|
||||
} else if (this.fieldAttrsContain(fillFields.exp, YearAbbrLong[i] + MonthAbbr[i])) {
|
||||
} else if (this.fieldAttrsContain(fillFields.exp, CreditCardAutoFillConstants.YearAbbrLong[i] + CreditCardAutoFillConstants.MonthAbbr[i])) {
|
||||
exp = fullYear + fullMonth;
|
||||
} else if (this.fieldAttrsContain(fillFields.exp, MonthAbbr[i] + YearAbbrShort[i]) &&
|
||||
} else if (this.fieldAttrsContain(fillFields.exp, CreditCardAutoFillConstants.MonthAbbr[i] + CreditCardAutoFillConstants.YearAbbrShort[i]) &&
|
||||
partYear != null) {
|
||||
exp = fullMonth + partYear;
|
||||
} else if (this.fieldAttrsContain(fillFields.exp, MonthAbbr[i] + YearAbbrLong[i])) {
|
||||
} else if (this.fieldAttrsContain(fillFields.exp, CreditCardAutoFillConstants.MonthAbbr[i] + CreditCardAutoFillConstants.YearAbbrLong[i])) {
|
||||
exp = fullMonth + fullYear;
|
||||
}
|
||||
|
||||
@ -688,7 +557,7 @@ export default class AutofillService implements AutofillServiceInterface {
|
||||
}
|
||||
|
||||
let doesContain = false;
|
||||
CardAttributesExtended.forEach(attr => {
|
||||
CreditCardAutoFillConstants.CardAttributesExtended.forEach(attr => {
|
||||
if (doesContain || !field.hasOwnProperty(attr) || !field[attr]) {
|
||||
return;
|
||||
}
|
||||
@ -714,12 +583,12 @@ export default class AutofillService implements AutofillServiceInterface {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.isExcludedType(f.type, ExcludedAutofillTypes)) {
|
||||
if (this.isExcludedType(f.type, AutoFillConstants.ExcludedAutofillTypes)) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (let i = 0; i < IdentityAttributes.length; i++) {
|
||||
const attr = IdentityAttributes[i];
|
||||
for (let i = 0; i < IdentityAutoFillConstants.IdentityAttributes.length; i++) {
|
||||
const attr = IdentityAutoFillConstants.IdentityAttributes[i];
|
||||
if (!f.hasOwnProperty(attr) || !f[attr] || !f.viewable) {
|
||||
continue;
|
||||
}
|
||||
@ -727,75 +596,71 @@ export default class AutofillService implements AutofillServiceInterface {
|
||||
// ref https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill
|
||||
// ref https://developers.google.com/web/fundamentals/design-and-ux/input/forms/
|
||||
if (!fillFields.name && this.isFieldMatch(f[attr],
|
||||
['name', 'full-name', 'your-name'], ['full-name', 'your-name'])) {
|
||||
IdentityAutoFillConstants.FullNameFieldNames, IdentityAutoFillConstants.FullNameFieldNameValues)) {
|
||||
fillFields.name = f;
|
||||
break;
|
||||
} else if (!fillFields.firstName && this.isFieldMatch(f[attr],
|
||||
FirstnameFieldNames)) {
|
||||
IdentityAutoFillConstants.FirstnameFieldNames)) {
|
||||
fillFields.firstName = f;
|
||||
break;
|
||||
} else if (!fillFields.middleName && this.isFieldMatch(f[attr],
|
||||
['m-name', 'middle-name', 'additional-name', 'middle-initial', 'middle-n', 'middle-i'])) {
|
||||
IdentityAutoFillConstants.MiddlenameFieldNames)) {
|
||||
fillFields.middleName = f;
|
||||
break;
|
||||
} else if (!fillFields.lastName && this.isFieldMatch(f[attr],
|
||||
LastnameFieldNames)) {
|
||||
IdentityAutoFillConstants.LastnameFieldNames)) {
|
||||
fillFields.lastName = f;
|
||||
break;
|
||||
} else if (!fillFields.title && this.isFieldMatch(f[attr],
|
||||
['honorific-prefix', 'prefix', 'title'])) {
|
||||
IdentityAutoFillConstants.TitleFieldNames)) {
|
||||
fillFields.title = f;
|
||||
break;
|
||||
} else if (!fillFields.email && this.isFieldMatch(f[attr],
|
||||
['e-mail', 'email-address'])) {
|
||||
IdentityAutoFillConstants.EmailFieldNames)) {
|
||||
fillFields.email = f;
|
||||
break;
|
||||
} else if (!fillFields.address && this.isFieldMatch(f[attr],
|
||||
['address', 'street-address', 'addr', 'street', 'mailing-addr', 'billing-addr',
|
||||
'mail-addr', 'bill-addr'], ['mailing-addr', 'billing-addr', 'mail-addr', 'bill-addr'])) {
|
||||
IdentityAutoFillConstants.AddressFieldNames, IdentityAutoFillConstants.AddressFieldNameValues)) {
|
||||
fillFields.address = f;
|
||||
break;
|
||||
} else if (!fillFields.address1 && this.isFieldMatch(f[attr],
|
||||
['address-1', 'address-line-1', 'addr-1', 'street-1'])) {
|
||||
IdentityAutoFillConstants.Address1FieldNames)) {
|
||||
fillFields.address1 = f;
|
||||
break;
|
||||
} else if (!fillFields.address2 && this.isFieldMatch(f[attr],
|
||||
['address-2', 'address-line-2', 'addr-2', 'street-2'])) {
|
||||
IdentityAutoFillConstants.Address2FieldNames)) {
|
||||
fillFields.address2 = f;
|
||||
break;
|
||||
} else if (!fillFields.address3 && this.isFieldMatch(f[attr],
|
||||
['address-3', 'address-line-3', 'addr-3', 'street-3'])) {
|
||||
IdentityAutoFillConstants.Address3FieldNames)) {
|
||||
fillFields.address3 = f;
|
||||
break;
|
||||
} else if (!fillFields.postalCode && this.isFieldMatch(f[attr],
|
||||
['postal', 'zip', 'zip2', 'zip-code', 'postal-code', 'post-code', 'address-zip',
|
||||
'address-postal', 'address-code', 'address-postal-code', 'address-zip-code'])) {
|
||||
IdentityAutoFillConstants.PostalCodeFieldNames)) {
|
||||
fillFields.postalCode = f;
|
||||
break;
|
||||
} else if (!fillFields.city && this.isFieldMatch(f[attr],
|
||||
['city', 'town', 'address-level-2', 'address-city', 'address-town'])) {
|
||||
IdentityAutoFillConstants.CityFieldNames)) {
|
||||
fillFields.city = f;
|
||||
break;
|
||||
} else if (!fillFields.state && this.isFieldMatch(f[attr],
|
||||
['state', 'province', 'provence', 'address-level-1', 'address-state',
|
||||
'address-province'])) {
|
||||
IdentityAutoFillConstants.StateFieldNames)) {
|
||||
fillFields.state = f;
|
||||
break;
|
||||
} else if (!fillFields.country && this.isFieldMatch(f[attr],
|
||||
['country', 'country-code', 'country-name', 'address-country', 'address-country-name',
|
||||
'address-country-code'])) {
|
||||
IdentityAutoFillConstants.CountryFieldNames)) {
|
||||
fillFields.country = f;
|
||||
break;
|
||||
} else if (!fillFields.phone && this.isFieldMatch(f[attr],
|
||||
['phone', 'mobile', 'mobile-phone', 'tel', 'telephone', 'phone-number'])) {
|
||||
IdentityAutoFillConstants.PhoneFieldNames)) {
|
||||
fillFields.phone = f;
|
||||
break;
|
||||
} else if (!fillFields.username && this.isFieldMatch(f[attr],
|
||||
['user-name', 'user-id', 'screen-name'])) {
|
||||
IdentityAutoFillConstants.UserNameFieldNames)) {
|
||||
fillFields.username = f;
|
||||
break;
|
||||
} else if (!fillFields.company && this.isFieldMatch(f[attr],
|
||||
['company', 'company-name', 'organization', 'organization-name'])) {
|
||||
IdentityAutoFillConstants.CompanyFieldNames)) {
|
||||
fillFields.company = f;
|
||||
break;
|
||||
}
|
||||
@ -820,7 +685,7 @@ export default class AutofillService implements AutofillServiceInterface {
|
||||
let filledState = false;
|
||||
if (fillFields.state && identity.state && identity.state.length > 2) {
|
||||
const stateLower = identity.state.toLowerCase();
|
||||
const isoState = IsoStates[stateLower] || IsoProvinces[stateLower];
|
||||
const isoState = IdentityAutoFillConstants.IsoStates[stateLower] || IdentityAutoFillConstants.IsoProvinces[stateLower];
|
||||
if (isoState) {
|
||||
filledState = true;
|
||||
this.makeScriptActionWithValue(fillScript, isoState, fillFields.state, filledFields);
|
||||
@ -834,7 +699,7 @@ export default class AutofillService implements AutofillServiceInterface {
|
||||
let filledCountry = false;
|
||||
if (fillFields.country && identity.country && identity.country.length > 2) {
|
||||
const countryLower = identity.country.toLowerCase();
|
||||
const isoCountry = IsoCountries[countryLower];
|
||||
const isoCountry = IdentityAutoFillConstants.IsoCountries[countryLower];
|
||||
if (isoCountry) {
|
||||
filledCountry = true;
|
||||
this.makeScriptActionWithValue(fillScript, isoCountry, fillFields.country, filledFields);
|
||||
@ -967,8 +832,7 @@ export default class AutofillService implements AutofillServiceInterface {
|
||||
return false;
|
||||
}
|
||||
|
||||
const ignoreList = ['onetimepassword', 'captcha', 'findanything', 'forgot'];
|
||||
if (ignoreList.some(i => cleanedValue.indexOf(i) > -1)) {
|
||||
if (AutoFillConstants.PasswordFieldIgnoreList.some(i => cleanedValue.indexOf(i) > -1)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1016,7 +880,7 @@ export default class AutofillService implements AutofillServiceInterface {
|
||||
(f.type === 'text' || f.type === 'email' || f.type === 'tel')) {
|
||||
usernameField = f;
|
||||
|
||||
if (this.findMatchingFieldIndex(f, UsernameFieldNames) > -1) {
|
||||
if (this.findMatchingFieldIndex(f, AutoFillConstants.UsernameFieldNames) > -1) {
|
||||
// We found an exact match. No need to keep looking.
|
||||
break;
|
||||
}
|
||||
|
739
src/services/autofillConstants.ts
Normal file
739
src/services/autofillConstants.ts
Normal file
@ -0,0 +1,739 @@
|
||||
export class AutoFillConstants {
|
||||
static readonly UsernameFieldNames: string[] = [
|
||||
// English
|
||||
"username",
|
||||
"user name",
|
||||
"email",
|
||||
"email address",
|
||||
"e-mail",
|
||||
"e-mail address",
|
||||
"userid",
|
||||
"user id",
|
||||
"customer id",
|
||||
"login id",
|
||||
// German
|
||||
"benutzername",
|
||||
"benutzer name",
|
||||
"email adresse",
|
||||
"e-mail adresse",
|
||||
"benutzerid",
|
||||
"benutzer id",
|
||||
];
|
||||
|
||||
static readonly PasswordFieldIgnoreList: string[] = [
|
||||
"onetimepassword",
|
||||
"captcha",
|
||||
"findanything",
|
||||
"forgot",
|
||||
];
|
||||
|
||||
static readonly ExcludedAutofillTypes: string[] = [
|
||||
"radio",
|
||||
"checkbox",
|
||||
"hidden",
|
||||
"file",
|
||||
"button",
|
||||
"image",
|
||||
"reset",
|
||||
"search",
|
||||
];
|
||||
}
|
||||
|
||||
export class CreditCardAutoFillConstants {
|
||||
static readonly CardAttributes: string[] = [
|
||||
"autoCompleteType",
|
||||
"data-stripe",
|
||||
"htmlName",
|
||||
"htmlID",
|
||||
"label-tag",
|
||||
"placeholder",
|
||||
"label-left",
|
||||
"label-top",
|
||||
"data-recurly",
|
||||
];
|
||||
|
||||
static readonly CardAttributesExtended: string[] = [
|
||||
...CreditCardAutoFillConstants.CardAttributes,
|
||||
"label-right",
|
||||
];
|
||||
|
||||
static readonly CardHolderFieldNames: string[] = [
|
||||
"cc-name",
|
||||
"card-name",
|
||||
"cardholder-name",
|
||||
"cardholder",
|
||||
"name",
|
||||
"nom",
|
||||
];
|
||||
|
||||
static readonly CardHolderFieldNameValues: string[] = [
|
||||
"cc-name",
|
||||
"card-name",
|
||||
"cardholder-name",
|
||||
"cardholder",
|
||||
"tbName",
|
||||
];
|
||||
|
||||
static readonly CardNumberFieldNames: string[] = [
|
||||
"cc-number",
|
||||
"cc-num",
|
||||
"card-number",
|
||||
"card-num",
|
||||
"number",
|
||||
"cc",
|
||||
"cc-no",
|
||||
"card-no",
|
||||
"credit-card",
|
||||
"numero-carte",
|
||||
"carte",
|
||||
"carte-credit",
|
||||
"num-carte",
|
||||
"cb-num",
|
||||
];
|
||||
|
||||
static readonly CardNumberFieldNameValues: string[] = [
|
||||
"cc-number",
|
||||
"cc-num",
|
||||
"card-number",
|
||||
"card-num",
|
||||
"cc-no",
|
||||
"card-no",
|
||||
"numero-carte",
|
||||
"num-carte",
|
||||
"cb-num",
|
||||
];
|
||||
|
||||
static readonly CardExpiryFieldNames: string[] = [
|
||||
"cc-exp",
|
||||
"card-exp",
|
||||
"cc-expiration",
|
||||
"card-expiration",
|
||||
"cc-ex",
|
||||
"card-ex",
|
||||
"card-expire",
|
||||
"card-expiry",
|
||||
"validite",
|
||||
"expiration",
|
||||
"expiry",
|
||||
"mm-yy",
|
||||
"mm-yyyy",
|
||||
"yy-mm",
|
||||
"yyyy-mm",
|
||||
"expiration-date",
|
||||
"payment-card-expiration",
|
||||
"payment-cc-date",
|
||||
];
|
||||
|
||||
static readonly CardExpiryFieldNameValues: string[] = [
|
||||
"mm-yy",
|
||||
"mm-yyyy",
|
||||
"yy-mm",
|
||||
"yyyy-mm",
|
||||
"expiration-date",
|
||||
"payment-card-expiration",
|
||||
];
|
||||
|
||||
static readonly ExpiryMonthFieldNames: string[] = [
|
||||
"exp-month",
|
||||
"cc-exp-month",
|
||||
"cc-month",
|
||||
"card-month",
|
||||
"cc-mo",
|
||||
"card-mo",
|
||||
"exp-mo",
|
||||
"card-exp-mo",
|
||||
"cc-exp-mo",
|
||||
"card-expiration-month",
|
||||
"expiration-month",
|
||||
"cc-mm",
|
||||
"cc-m",
|
||||
"card-mm",
|
||||
"card-m",
|
||||
"card-exp-mm",
|
||||
"cc-exp-mm",
|
||||
"exp-mm",
|
||||
"exp-m",
|
||||
"expire-month",
|
||||
"expire-mo",
|
||||
"expiry-month",
|
||||
"expiry-mo",
|
||||
"card-expire-month",
|
||||
"card-expire-mo",
|
||||
"card-expiry-month",
|
||||
"card-expiry-mo",
|
||||
"mois-validite",
|
||||
"mois-expiration",
|
||||
"m-validite",
|
||||
"m-expiration",
|
||||
"expiry-date-field-month",
|
||||
"expiration-date-month",
|
||||
"expiration-date-mm",
|
||||
"exp-mon",
|
||||
"validity-mo",
|
||||
"exp-date-mo",
|
||||
"cb-date-mois",
|
||||
"date-m",
|
||||
];
|
||||
|
||||
static readonly ExpiryYearFieldNames: string[] = [
|
||||
"exp-year",
|
||||
"cc-exp-year",
|
||||
"cc-year",
|
||||
"card-year",
|
||||
"cc-yr",
|
||||
"card-yr",
|
||||
"exp-yr",
|
||||
"card-exp-yr",
|
||||
"cc-exp-yr",
|
||||
"card-expiration-year",
|
||||
"expiration-year",
|
||||
"cc-yy",
|
||||
"cc-y",
|
||||
"card-yy",
|
||||
"card-y",
|
||||
"card-exp-yy",
|
||||
"cc-exp-yy",
|
||||
"exp-yy",
|
||||
"exp-y",
|
||||
"cc-yyyy",
|
||||
"card-yyyy",
|
||||
"card-exp-yyyy",
|
||||
"cc-exp-yyyy",
|
||||
"expire-year",
|
||||
"expire-yr",
|
||||
"expiry-year",
|
||||
"expiry-yr",
|
||||
"card-expire-year",
|
||||
"card-expire-yr",
|
||||
"card-expiry-year",
|
||||
"card-expiry-yr",
|
||||
"an-validite",
|
||||
"an-expiration",
|
||||
"annee-validite",
|
||||
"annee-expiration",
|
||||
"expiry-date-field-year",
|
||||
"expiration-date-year",
|
||||
"cb-date-ann",
|
||||
"expiration-date-yy",
|
||||
"expiration-date-yyyy",
|
||||
"validity-year",
|
||||
"exp-date-year",
|
||||
"date-y",
|
||||
];
|
||||
|
||||
static readonly CVVFieldNames: string[] = [
|
||||
"cvv",
|
||||
"cvc",
|
||||
"cvv2",
|
||||
"cc-csc",
|
||||
"cc-cvv",
|
||||
"card-csc",
|
||||
"card-cvv",
|
||||
"cvd",
|
||||
"cid",
|
||||
"cvc2",
|
||||
"cnv",
|
||||
"cvn2",
|
||||
"cc-code",
|
||||
"card-code",
|
||||
"code-securite",
|
||||
"security-code",
|
||||
"crypto",
|
||||
"card-verif",
|
||||
"verification-code",
|
||||
"csc",
|
||||
"ccv",
|
||||
];
|
||||
|
||||
static readonly CardBrandFieldNames: string[] = [
|
||||
"cc-type",
|
||||
"card-type",
|
||||
"card-brand",
|
||||
"cc-brand",
|
||||
"cb-type",
|
||||
];
|
||||
|
||||
// Each index represents a language. These three arrays should all be the same length.
|
||||
// 0: English, 1: Danish, 2: German/Dutch, 3: French/Spanish/Italian, 4: Russian, 5: Portuguese
|
||||
static readonly MonthAbbr = ["mm", "mm", "mm", "mm", "mm", "mm"];
|
||||
static readonly YearAbbrShort = ["yy", "åå", "jj", "aa", "гг", "rr"];
|
||||
static readonly YearAbbrLong = ["yyyy", "åååå", "jjjj", "aa", "гггг", "rrrr"];
|
||||
}
|
||||
|
||||
export class IdentityAutoFillConstants {
|
||||
static readonly IdentityAttributes: string[] = [
|
||||
"autoCompleteType",
|
||||
"data-stripe",
|
||||
"htmlName",
|
||||
"htmlID",
|
||||
"label-tag",
|
||||
"placeholder",
|
||||
"label-left",
|
||||
"label-top",
|
||||
"data-recurly",
|
||||
];
|
||||
|
||||
static readonly FullNameFieldNames: string[] = ["name", "full-name", "your-name"];
|
||||
|
||||
static readonly FullNameFieldNameValues: string[] = ["full-name", "your-name"];
|
||||
|
||||
static readonly TitleFieldNames: string[] = ["honorific-prefix", "prefix", "title"];
|
||||
|
||||
static readonly FirstnameFieldNames: string[] = [
|
||||
// English
|
||||
"f-name",
|
||||
"first-name",
|
||||
"given-name",
|
||||
"first-n",
|
||||
// German
|
||||
"vorname",
|
||||
];
|
||||
|
||||
static readonly MiddlenameFieldNames: string[] = [
|
||||
"m-name",
|
||||
"middle-name",
|
||||
"additional-name",
|
||||
"middle-initial",
|
||||
"middle-n",
|
||||
"middle-i",
|
||||
];
|
||||
|
||||
static readonly LastnameFieldNames: string[] = [
|
||||
// English
|
||||
"l-name",
|
||||
"last-name",
|
||||
"s-name",
|
||||
"surname",
|
||||
"family-name",
|
||||
"family-n",
|
||||
"last-n",
|
||||
// German
|
||||
"nachname",
|
||||
"familienname",
|
||||
];
|
||||
|
||||
static readonly EmailFieldNames: string[] = ["e-mail", "email-address"];
|
||||
|
||||
static readonly AddressFieldNames: string[] = [
|
||||
"address",
|
||||
"street-address",
|
||||
"addr",
|
||||
"street",
|
||||
"mailing-addr",
|
||||
"billing-addr",
|
||||
"mail-addr",
|
||||
"bill-addr",
|
||||
];
|
||||
|
||||
static readonly AddressFieldNameValues: string[] = [
|
||||
"mailing-addr",
|
||||
"billing-addr",
|
||||
"mail-addr",
|
||||
"bill-addr",
|
||||
];
|
||||
|
||||
static readonly Address1FieldNames: string[] = [
|
||||
"address-1",
|
||||
"address-line-1",
|
||||
"addr-1",
|
||||
"street-1",
|
||||
];
|
||||
|
||||
static readonly Address2FieldNames: string[] = [
|
||||
"address-2",
|
||||
"address-line-2",
|
||||
"addr-2",
|
||||
"street-2",
|
||||
];
|
||||
|
||||
static readonly Address3FieldNames: string[] = [
|
||||
"address-3",
|
||||
"address-line-3",
|
||||
"addr-3",
|
||||
"street-3",
|
||||
];
|
||||
|
||||
static readonly PostalCodeFieldNames: string[] = [
|
||||
"postal",
|
||||
"zip",
|
||||
"zip2",
|
||||
"zip-code",
|
||||
"postal-code",
|
||||
"post-code",
|
||||
"address-zip",
|
||||
"address-postal",
|
||||
"address-code",
|
||||
"address-postal-code",
|
||||
"address-zip-code",
|
||||
];
|
||||
|
||||
static readonly CityFieldNames: string[] = [
|
||||
"city",
|
||||
"town",
|
||||
"address-level-2",
|
||||
"address-city",
|
||||
"address-town",
|
||||
];
|
||||
|
||||
static readonly StateFieldNames: string[] = [
|
||||
"state",
|
||||
"province",
|
||||
"provence",
|
||||
"address-level-1",
|
||||
"address-state",
|
||||
"address-province",
|
||||
];
|
||||
|
||||
static readonly CountryFieldNames: string[] = [
|
||||
"country",
|
||||
"country-code",
|
||||
"country-name",
|
||||
"address-country",
|
||||
"address-country-name",
|
||||
"address-country-code",
|
||||
];
|
||||
|
||||
static readonly PhoneFieldNames: string[] = [
|
||||
"phone",
|
||||
"mobile",
|
||||
"mobile-phone",
|
||||
"tel",
|
||||
"telephone",
|
||||
"phone-number",
|
||||
];
|
||||
|
||||
static readonly UserNameFieldNames: string[] = ["user-name", "user-id", "screen-name"];
|
||||
|
||||
static readonly CompanyFieldNames: string[] = [
|
||||
"company",
|
||||
"company-name",
|
||||
"organization",
|
||||
"organization-name",
|
||||
];
|
||||
|
||||
static readonly IsoCountries: { [id: string]: string } = {
|
||||
afghanistan: "AF",
|
||||
"aland islands": "AX",
|
||||
albania: "AL",
|
||||
algeria: "DZ",
|
||||
"american samoa": "AS",
|
||||
andorra: "AD",
|
||||
angola: "AO",
|
||||
anguilla: "AI",
|
||||
antarctica: "AQ",
|
||||
"antigua and barbuda": "AG",
|
||||
argentina: "AR",
|
||||
armenia: "AM",
|
||||
aruba: "AW",
|
||||
australia: "AU",
|
||||
austria: "AT",
|
||||
azerbaijan: "AZ",
|
||||
bahamas: "BS",
|
||||
bahrain: "BH",
|
||||
bangladesh: "BD",
|
||||
barbados: "BB",
|
||||
belarus: "BY",
|
||||
belgium: "BE",
|
||||
belize: "BZ",
|
||||
benin: "BJ",
|
||||
bermuda: "BM",
|
||||
bhutan: "BT",
|
||||
bolivia: "BO",
|
||||
"bosnia and herzegovina": "BA",
|
||||
botswana: "BW",
|
||||
"bouvet island": "BV",
|
||||
brazil: "BR",
|
||||
"british indian ocean territory": "IO",
|
||||
"brunei darussalam": "BN",
|
||||
bulgaria: "BG",
|
||||
"burkina faso": "BF",
|
||||
burundi: "BI",
|
||||
cambodia: "KH",
|
||||
cameroon: "CM",
|
||||
canada: "CA",
|
||||
"cape verde": "CV",
|
||||
"cayman islands": "KY",
|
||||
"central african republic": "CF",
|
||||
chad: "TD",
|
||||
chile: "CL",
|
||||
china: "CN",
|
||||
"christmas island": "CX",
|
||||
"cocos (keeling) islands": "CC",
|
||||
colombia: "CO",
|
||||
comoros: "KM",
|
||||
congo: "CG",
|
||||
"congo, democratic republic": "CD",
|
||||
"cook islands": "CK",
|
||||
"costa rica": "CR",
|
||||
"cote d'ivoire": "CI",
|
||||
croatia: "HR",
|
||||
cuba: "CU",
|
||||
cyprus: "CY",
|
||||
"czech republic": "CZ",
|
||||
denmark: "DK",
|
||||
djibouti: "DJ",
|
||||
dominica: "DM",
|
||||
"dominican republic": "DO",
|
||||
ecuador: "EC",
|
||||
egypt: "EG",
|
||||
"el salvador": "SV",
|
||||
"equatorial guinea": "GQ",
|
||||
eritrea: "ER",
|
||||
estonia: "EE",
|
||||
ethiopia: "ET",
|
||||
"falkland islands": "FK",
|
||||
"faroe islands": "FO",
|
||||
fiji: "FJ",
|
||||
finland: "FI",
|
||||
france: "FR",
|
||||
"french guiana": "GF",
|
||||
"french polynesia": "PF",
|
||||
"french southern territories": "TF",
|
||||
gabon: "GA",
|
||||
gambia: "GM",
|
||||
georgia: "GE",
|
||||
germany: "DE",
|
||||
ghana: "GH",
|
||||
gibraltar: "GI",
|
||||
greece: "GR",
|
||||
greenland: "GL",
|
||||
grenada: "GD",
|
||||
guadeloupe: "GP",
|
||||
guam: "GU",
|
||||
guatemala: "GT",
|
||||
guernsey: "GG",
|
||||
guinea: "GN",
|
||||
"guinea-bissau": "GW",
|
||||
guyana: "GY",
|
||||
haiti: "HT",
|
||||
"heard island & mcdonald islands": "HM",
|
||||
"holy see (vatican city state)": "VA",
|
||||
honduras: "HN",
|
||||
"hong kong": "HK",
|
||||
hungary: "HU",
|
||||
iceland: "IS",
|
||||
india: "IN",
|
||||
indonesia: "ID",
|
||||
"iran, islamic republic of": "IR",
|
||||
iraq: "IQ",
|
||||
ireland: "IE",
|
||||
"isle of man": "IM",
|
||||
israel: "IL",
|
||||
italy: "IT",
|
||||
jamaica: "JM",
|
||||
japan: "JP",
|
||||
jersey: "JE",
|
||||
jordan: "JO",
|
||||
kazakhstan: "KZ",
|
||||
kenya: "KE",
|
||||
kiribati: "KI",
|
||||
"republic of korea": "KR",
|
||||
"south korea": "KR",
|
||||
"democratic people's republic of korea": "KP",
|
||||
"north korea": "KP",
|
||||
kuwait: "KW",
|
||||
kyrgyzstan: "KG",
|
||||
"lao people's democratic republic": "LA",
|
||||
latvia: "LV",
|
||||
lebanon: "LB",
|
||||
lesotho: "LS",
|
||||
liberia: "LR",
|
||||
"libyan arab jamahiriya": "LY",
|
||||
liechtenstein: "LI",
|
||||
lithuania: "LT",
|
||||
luxembourg: "LU",
|
||||
macao: "MO",
|
||||
macedonia: "MK",
|
||||
madagascar: "MG",
|
||||
malawi: "MW",
|
||||
malaysia: "MY",
|
||||
maldives: "MV",
|
||||
mali: "ML",
|
||||
malta: "MT",
|
||||
"marshall islands": "MH",
|
||||
martinique: "MQ",
|
||||
mauritania: "MR",
|
||||
mauritius: "MU",
|
||||
mayotte: "YT",
|
||||
mexico: "MX",
|
||||
"micronesia, federated states of": "FM",
|
||||
moldova: "MD",
|
||||
monaco: "MC",
|
||||
mongolia: "MN",
|
||||
montenegro: "ME",
|
||||
montserrat: "MS",
|
||||
morocco: "MA",
|
||||
mozambique: "MZ",
|
||||
myanmar: "MM",
|
||||
namibia: "NA",
|
||||
nauru: "NR",
|
||||
nepal: "NP",
|
||||
netherlands: "NL",
|
||||
"netherlands antilles": "AN",
|
||||
"new caledonia": "NC",
|
||||
"new zealand": "NZ",
|
||||
nicaragua: "NI",
|
||||
niger: "NE",
|
||||
nigeria: "NG",
|
||||
niue: "NU",
|
||||
"norfolk island": "NF",
|
||||
"northern mariana islands": "MP",
|
||||
norway: "NO",
|
||||
oman: "OM",
|
||||
pakistan: "PK",
|
||||
palau: "PW",
|
||||
"palestinian territory, occupied": "PS",
|
||||
panama: "PA",
|
||||
"papua new guinea": "PG",
|
||||
paraguay: "PY",
|
||||
peru: "PE",
|
||||
philippines: "PH",
|
||||
pitcairn: "PN",
|
||||
poland: "PL",
|
||||
portugal: "PT",
|
||||
"puerto rico": "PR",
|
||||
qatar: "QA",
|
||||
reunion: "RE",
|
||||
romania: "RO",
|
||||
"russian federation": "RU",
|
||||
rwanda: "RW",
|
||||
"saint barthelemy": "BL",
|
||||
"saint helena": "SH",
|
||||
"saint kitts and nevis": "KN",
|
||||
"saint lucia": "LC",
|
||||
"saint martin": "MF",
|
||||
"saint pierre and miquelon": "PM",
|
||||
"saint vincent and grenadines": "VC",
|
||||
samoa: "WS",
|
||||
"san marino": "SM",
|
||||
"sao tome and principe": "ST",
|
||||
"saudi arabia": "SA",
|
||||
senegal: "SN",
|
||||
serbia: "RS",
|
||||
seychelles: "SC",
|
||||
"sierra leone": "SL",
|
||||
singapore: "SG",
|
||||
slovakia: "SK",
|
||||
slovenia: "SI",
|
||||
"solomon islands": "SB",
|
||||
somalia: "SO",
|
||||
"south africa": "ZA",
|
||||
"south georgia and sandwich isl.": "GS",
|
||||
spain: "ES",
|
||||
"sri lanka": "LK",
|
||||
sudan: "SD",
|
||||
suriname: "SR",
|
||||
"svalbard and jan mayen": "SJ",
|
||||
swaziland: "SZ",
|
||||
sweden: "SE",
|
||||
switzerland: "CH",
|
||||
"syrian arab republic": "SY",
|
||||
taiwan: "TW",
|
||||
tajikistan: "TJ",
|
||||
tanzania: "TZ",
|
||||
thailand: "TH",
|
||||
"timor-leste": "TL",
|
||||
togo: "TG",
|
||||
tokelau: "TK",
|
||||
tonga: "TO",
|
||||
"trinidad and tobago": "TT",
|
||||
tunisia: "TN",
|
||||
turkey: "TR",
|
||||
turkmenistan: "TM",
|
||||
"turks and caicos islands": "TC",
|
||||
tuvalu: "TV",
|
||||
uganda: "UG",
|
||||
ukraine: "UA",
|
||||
"united arab emirates": "AE",
|
||||
"united kingdom": "GB",
|
||||
"united states": "US",
|
||||
"united states outlying islands": "UM",
|
||||
uruguay: "UY",
|
||||
uzbekistan: "UZ",
|
||||
vanuatu: "VU",
|
||||
venezuela: "VE",
|
||||
vietnam: "VN",
|
||||
"virgin islands, british": "VG",
|
||||
"virgin islands, u.s.": "VI",
|
||||
"wallis and futuna": "WF",
|
||||
"western sahara": "EH",
|
||||
yemen: "YE",
|
||||
zambia: "ZM",
|
||||
zimbabwe: "ZW",
|
||||
};
|
||||
|
||||
static readonly IsoStates: { [id: string]: string } = {
|
||||
alabama: "AL",
|
||||
alaska: "AK",
|
||||
"american samoa": "AS",
|
||||
arizona: "AZ",
|
||||
arkansas: "AR",
|
||||
california: "CA",
|
||||
colorado: "CO",
|
||||
connecticut: "CT",
|
||||
delaware: "DE",
|
||||
"district of columbia": "DC",
|
||||
"federated states of micronesia": "FM",
|
||||
florida: "FL",
|
||||
georgia: "GA",
|
||||
guam: "GU",
|
||||
hawaii: "HI",
|
||||
idaho: "ID",
|
||||
illinois: "IL",
|
||||
indiana: "IN",
|
||||
iowa: "IA",
|
||||
kansas: "KS",
|
||||
kentucky: "KY",
|
||||
louisiana: "LA",
|
||||
maine: "ME",
|
||||
"marshall islands": "MH",
|
||||
maryland: "MD",
|
||||
massachusetts: "MA",
|
||||
michigan: "MI",
|
||||
minnesota: "MN",
|
||||
mississippi: "MS",
|
||||
missouri: "MO",
|
||||
montana: "MT",
|
||||
nebraska: "NE",
|
||||
nevada: "NV",
|
||||
"new hampshire": "NH",
|
||||
"new jersey": "NJ",
|
||||
"new mexico": "NM",
|
||||
"new york": "NY",
|
||||
"north carolina": "NC",
|
||||
"north dakota": "ND",
|
||||
"northern mariana islands": "MP",
|
||||
ohio: "OH",
|
||||
oklahoma: "OK",
|
||||
oregon: "OR",
|
||||
palau: "PW",
|
||||
pennsylvania: "PA",
|
||||
"puerto rico": "PR",
|
||||
"rhode island": "RI",
|
||||
"south carolina": "SC",
|
||||
"south dakota": "SD",
|
||||
tennessee: "TN",
|
||||
texas: "TX",
|
||||
utah: "UT",
|
||||
vermont: "VT",
|
||||
"virgin islands": "VI",
|
||||
virginia: "VA",
|
||||
washington: "WA",
|
||||
"west virginia": "WV",
|
||||
wisconsin: "WI",
|
||||
wyoming: "WY",
|
||||
};
|
||||
|
||||
static readonly IsoProvinces: { [id: string]: string } = {
|
||||
alberta: "AB",
|
||||
"british columbia": "BC",
|
||||
manitoba: "MB",
|
||||
"new brunswick": "NB",
|
||||
"newfoundland and labrador": "NL",
|
||||
"nova scotia": "NS",
|
||||
ontario: "ON",
|
||||
"prince edward island": "PE",
|
||||
quebec: "QC",
|
||||
saskatchewan: "SK",
|
||||
};
|
||||
}
|
Loading…
Reference in New Issue
Block a user