UNPKG

@adyen/kyc-components

Version:

This guide assumes that you have already an account with Adyen. A legalEntity needs to be created, and you need to have a `legalEntityId` to instatiate a Component.

113 lines (112 loc) 6.31 kB
try { let e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack; n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "750ef5b3-9958-40c2-b499-963bd1c1e4b7", e._sentryDebugIdIdentifier = "sentry-dbid-750ef5b3-9958-40c2-b499-963bd1c1e4b7"); } catch (e) {} import { t as TaskTypes } from "./taskTypes-NawDTp5n.js"; import { t as DecisionMakerTypes } from "./decision-maker-type-NR4GFAeT.js"; import { t as Scenarios } from "./get-scenarios-Bb-paHmJ.js"; import { computed, signal } from "@preact/signals"; //#region src/core/models/api/company-types-value.ts /** * These are the Company type values present in LEM (note these differ from the values present in KYC) */ var CompanyTypesValues = { PRIVATE_COMPANY: "privateCompany", PUBLIC_COMPANY: "listedPublicCompany", UNLISTED_PUBLIC_COMPANY: "unlistedPublicCompany", UNINCORPORATED_PARTNERSHIP: "unincorporatedPartnership", INCORPORATED_PARTNERSHIP: "partnershipIncorporated", INCORPORATED_ASSOCIATION: "associationIncorporated", GOVERNMENTAL_ORGANIZATION: "governmentalOrganization", NON_PROFIT_OR_CHARITABLE: "nonProfit", SOLE_PROPRIETORSHIP: "soleProprietorship" }; //#endregion //#region src/components/Individual/forms/IdNowVerificationModal/isIdNowModalOpen.ts var showIdNowModal = signal(false); var idNowModalChildEntityId = signal(); var idNowPostSubmit = signal(false); var shouldShowIdNowModal = computed(() => { const idNowModalChildEntityIdValue = !!idNowModalChildEntityId.value; return showIdNowModal.value && idNowModalChildEntityIdValue; }); //#endregion //#region src/components/Individual/helpers/bafinUtils.ts /** * Checks whether the legal entity has both required data points for IDnow verification: * birth city (placeOfBirth) and nationality. */ var hasRequiredDataForIdNow = (legalEntity) => Boolean(legalEntity.individual?.birthData?.placeOfBirth && legalEntity.individual?.nationality); /** * For an IDnow-qualified BAFIN signatory, returns an object describing which of the two required * data points (placeOfBirth, nationality) are still missing, or `null` when no action is needed. * * Returns `null` when any of the following conditions are true: * - The entity is not a signatory, or the L_BAFIN scenario is not active * - The `2_215` (live-selfie) remediation code is absent from problems * - Both placeOfBirth and nationality are already present */ var getIdNowMissingDataPoints = (problems, legalEntity, scenarios, roles) => { if (!roles.includes(DecisionMakerTypes.SIGNATORY) || !scenarios?.includes(Scenarios.L_BAFIN)) return null; if (!problems) return null; if (!problems.missingData?.some((item) => item.remediatingActions?.some((action) => action.code === "2_215"))) return null; const missingPlaceOfBirth = !legalEntity.individual?.birthData?.placeOfBirth; const missingNationality = !legalEntity.individual?.nationality; if (!missingPlaceOfBirth && !missingNationality) return null; return { missingPlaceOfBirth, missingNationality }; }; /** * For the BAFIN signatory flow, certain ID verification errors and remediation actions are not applicable. * This utility function takes a problems object and returns a new, deeply cloned object with all * ID verification-related issues removed. * * Specifically, it removes: * - 'missingData' entries related to ID document upload ('1_301'). * - The '1_301' remediation action from `remediationActions`. * - The entire `idVerificationMethod` object from `verificationErrors`. * - Any nested sub-errors with code '1_301' from `basicDetails` and `additionalPersonalDetails`. * * @param problems - The original entity problems object. * @returns A new `EntityProblems` object with BAFIN-specific modifications. */ var removeIdVerificationProblemsForBafinSignatory = (problems, decisionMakerLe) => { const newProblems = structuredClone(problems); if (newProblems.missingData?.some((item) => item.remediatingActions?.some((action) => action.code === "1_301" || action.code === "2_215"))) { if (hasRequiredDataForIdNow(decisionMakerLe)) setTimeout(() => { idNowModalChildEntityId.value = decisionMakerLe; showIdNowModal.value = true; }, 100); } if (Array.isArray(newProblems.missingData)) newProblems.missingData = newProblems.missingData.filter((item) => !item.remediatingActions?.some((action) => action.code === "1_301" || action.code === "2_215")); if (newProblems.remediationActions?.["1_301"]) delete newProblems.remediationActions["1_301"]; if (newProblems.remediationActions?.["2_215"]) delete newProblems.remediationActions["2_215"]; if (newProblems.verificationErrors?.idVerificationMethod) delete newProblems.verificationErrors.idVerificationMethod; ["basicDetails", "additionalPersonalDetails"].forEach((formName) => { const subErrors = newProblems.verificationErrors?.[formName]?.["1_30"]?.["1_3000"]; if (newProblems.verificationErrors?.[formName]?.["1_30"] && Array.isArray(subErrors)) newProblems.verificationErrors[formName]["1_30"]["1_3000"] = subErrors.filter((error) => error.code !== "1_301"); }); return newProblems; }; /** * Type guard to check if the data object is a LegalEntityAssociation. */ var isLegalEntityAssociation = (data) => "legalEntityId" in data; /** * Checks if the current context matches the specific flow for a BAFIN signatory. * This is true when the task is for a decision maker, their role is 'signatory', * and the BAFIN scenario is active. * * @param params - The parameters for the check. * @returns `true` if the conditions for the BAFIN signatory flow are met. */ var isBafinSignatoryFlow = ({ taskType, data, scenarios }) => { if (!data || !scenarios) return false; const isSignatory = isLegalEntityAssociation(data) ? data.type === DecisionMakerTypes.SIGNATORY : data.basicDetails?.role?.includes(DecisionMakerTypes.SIGNATORY); if (taskType === TaskTypes.DECISION_MAKER && isSignatory) return scenarios.includes(Scenarios.L_BAFIN); return false; }; //#endregion export { idNowPostSubmit as a, CompanyTypesValues as c, idNowModalChildEntityId as i, isBafinSignatoryFlow as n, shouldShowIdNowModal as o, removeIdVerificationProblemsForBafinSignatory as r, showIdNowModal as s, getIdNowMissingDataPoints as t };