diff options
Diffstat (limited to 'toolkit/components/formautofill/shared/CreditCardRecord.sys.mjs')
-rw-r--r-- | toolkit/components/formautofill/shared/CreditCardRecord.sys.mjs | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/toolkit/components/formautofill/shared/CreditCardRecord.sys.mjs b/toolkit/components/formautofill/shared/CreditCardRecord.sys.mjs new file mode 100644 index 0000000000..97235e8cdd --- /dev/null +++ b/toolkit/components/formautofill/shared/CreditCardRecord.sys.mjs @@ -0,0 +1,66 @@ +/* eslint-disable no-useless-concat */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +import { CreditCard } from "resource://gre/modules/CreditCard.sys.mjs"; +import { FormAutofillNameUtils } from "resource://gre/modules/shared/FormAutofillNameUtils.sys.mjs"; + +/** + * The CreditCardRecord class serves to handle and normalize internal credit card records. + * Unlike the CreditCard class, which represents actual card data, CreditCardRecord is used + * for processing and consistent data representation. + */ +export class CreditCardRecord { + static normalizeFields(creditCard) { + this.#normalizeCCNameFields(creditCard); + this.#normalizeCCNumberFields(creditCard); + this.#normalizeCCExpirationDateFields(creditCard); + this.#normalizeCCTypeFields(creditCard); + } + + static #normalizeCCNameFields(creditCard) { + if (!creditCard["cc-name"]) { + creditCard["cc-name"] = FormAutofillNameUtils.joinNameParts({ + given: creditCard["cc-given-name"] ?? "", + middle: creditCard["cc-additional-name"] ?? "", + family: creditCard["cc-family-name"] ?? "", + }); + } + + delete creditCard["cc-given-name"]; + delete creditCard["cc-additional-name"]; + delete creditCard["cc-family-name"]; + } + + static #normalizeCCNumberFields(creditCard) { + if (!("cc-number" in creditCard)) { + return; + } + + if (!CreditCard.isValidNumber(creditCard["cc-number"])) { + delete creditCard["cc-number"]; + return; + } + + const card = new CreditCard({ number: creditCard["cc-number"] }); + creditCard["cc-number"] = card.number; + } + + static #normalizeCCExpirationDateFields(creditCard) { + let normalizedExpiration = CreditCard.normalizeExpiration({ + expirationMonth: creditCard["cc-exp-month"], + expirationYear: creditCard["cc-exp-year"], + expirationString: creditCard["cc-exp"], + }); + + creditCard["cc-exp-month"] = normalizedExpiration.month ?? ""; + creditCard["cc-exp-year"] = normalizedExpiration.year ?? ""; + delete creditCard["cc-exp"]; + } + + static #normalizeCCTypeFields(creditCard) { + // Let's overwrite the credit card type with auto-detect algorithm + creditCard["cc-type"] = CreditCard.getType(creditCard["cc-number"]) ?? ""; + } +} |