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.

238 lines (237 loc) 10.2 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] = "93718500-82bb-402c-93d6-987a1bba8830", e._sentryDebugIdIdentifier = "sentry-dbid-93718500-82bb-402c-93d6-987a1bba8830"); } catch (e) {} import { n as addResourceBundles, o as createLogger, r as useTranslation } from "./translation-BFxyJ1c5.js"; import { a as stylesheets, n as EmbedShell, t as resolveEnvironment } from "./resolveEnvironment-CguBRdxx.js"; import { r as Loader, t as Button } from "./Button-oj6H8OrC.js"; import { r as httpPost, s as useApiContext } from "./http-D1NDkBxF.js"; import { t as _rolldown_dynamic_import_helper_default } from "./_rolldown_dynamic_import_helper-rq_tsyLP.js"; import { t as Alert } from "./Alert-C6gL3JIt.js"; import { t as emitAdyenSdkEvent } from "./emitEvent-Cdd95HOT.js"; import { t as useOnboardingStatus } from "./useOnboardingStatus-C4cuWhT6.js"; import { t as OnboardingStatuses } from "./view-verification-status-CYHM_Ggf.js"; import register from "preact-custom-element"; import { useCallback, useEffect, useMemo, useRef, useState } from "preact/hooks"; import { Fragment, jsx, jsxs } from "preact/jsx-runtime"; import { useMutation } from "@tanstack/preact-query"; //#region src/api/onboardingStatus/useGenerateOnboardingLink.ts var generateOnboardingLink = async (legalEntityId, baseUrl, data) => { return httpPost({ baseUrl, path: `legalEntities/${legalEntityId}/onboardingStatus` }, data); }; var useGenerateOnboardingLink = (options) => { const { rootLegalEntityId, baseUrl } = useApiContext(); return useMutation({ mutationFn: (data) => generateOnboardingLink(rootLegalEntityId.value, baseUrl.value, data), ...options }); }; //#endregion //#region src/utils/coerceError.ts var coerceError = (err) => { if (err instanceof Error) return err; if (typeof err === "object") { if (err !== null && "message" in err && typeof err.message === "string") return new Error(err.message); } return /* @__PURE__ */ new Error("Unknown error"); }; //#endregion //#region src/components/EmbeddedDropins/ViewVerificationStatus/content.ts var contentMap = { [OnboardingStatuses.AWAITING_DATA]: { description: ["onboardingRedirectAwaitingDescriptionP1"], ctaButton: "onboardingRedirectAwaitingCtaButton" }, [OnboardingStatuses.IN_REVIEW]: { description: ["onboardingRedirectInReviewDescriptionP1"], ctaButton: "onboardingRedirectInReviewCtaButton" }, [OnboardingStatuses.UNSUCCESSFUL]: { description: ["onboardingRedirectUnsuccessfulDescriptionP1"], ctaButton: "onboardingRedirectUnsuccessfulCtaButton" }, [OnboardingStatuses.REJECTED]: { description: ["onboardingRedirectRejectedDescriptionP1"] }, [OnboardingStatuses.VERIFIED]: { description: ["onboardingRedirectVerifiedDescriptionP1"] } }; function getContentByStatus(status) { return contentMap[status]; } var ViewVerificationStatusComponent_module_default = { verification: "adyen-kyc-verification", "verification-description": "adyen-kyc-verification-description", verificationDescription: "adyen-kyc-verification-description" }; //#endregion //#region src/components/EmbeddedDropins/ViewVerificationStatus/ViewVerificationStatusComponent.tsx var FINAL_STATUSES = [OnboardingStatuses.VERIFIED, OnboardingStatuses.REJECTED]; var logger = createLogger(); function ViewVerificationStatusComponent({ legalEntityId, hideExplanation = false, returnUrl, redirectTarget = "_blank", themeId, onStatusChange, onError, onRedirect }) { const { i18n, t } = useTranslation("verificationStatus"); addResourceBundles(i18n, [{ ns: "verificationStatus", importFn: (lang) => _rolldown_dynamic_import_helper_default(/* @__PURE__ */ Object.assign({ "./language/bg-BG.json": () => import("./bg-BG-DxgO5P4C.js"), "./language/cs-CZ.json": () => import("./cs-CZ-BKxJwZfp.js"), "./language/da-DK.json": () => import("./da-DK-CUdNKP_y.js"), "./language/de-DE.json": () => import("./de-DE-Cb9uR42z.js"), "./language/el-GR.json": () => import("./el-GR-BIJ5syl-.js"), "./language/en-US.json": () => import("./en-US-CJI3UFnZ.js"), "./language/es-ES.json": () => import("./es-ES-I6sgbCZT.js"), "./language/et-EE.json": () => import("./et-EE-CmMB9hVL.js"), "./language/fi-FI.json": () => import("./fi-FI-DFDdEnkT.js"), "./language/fr-FR.json": () => import("./fr-FR-Cjf6-Jyc.js"), "./language/hr-HR.json": () => import("./hr-HR-FCvgQhQb.js"), "./language/hu-HU.json": () => import("./hu-HU-BrwdCVwT.js"), "./language/it-IT.json": () => import("./it-IT-Kc1R4_Rn.js"), "./language/ja-JP.json": () => import("./ja-JP-BfhqPamw.js"), "./language/lt-LT.json": () => import("./lt-LT-CTP-6_vr.js"), "./language/lv-LV.json": () => import("./lv-LV-CJlW1MAb.js"), "./language/nl-NL.json": () => import("./nl-NL-CDG5kf8l.js"), "./language/no-NO.json": () => import("./no-NO-BD0f30Fb.js"), "./language/pl-PL.json": () => import("./pl-PL-NX01GGDD.js"), "./language/pt-BR.json": () => import("./pt-BR-uWioJEmF.js"), "./language/pt-PT.json": () => import("./pt-PT-Bq9v0R1E.js"), "./language/ro-RO.json": () => import("./ro-RO-CHnLb9tp.js"), "./language/sk-SK.json": () => import("./sk-SK-Bs5RASpX.js"), "./language/sl-SI.json": () => import("./sl-SI-B-faWNpM.js"), "./language/sv-SE.json": () => import("./sv-SE-DaOsGDdk.js") }), `./language/${lang}.json`, 3) }]); const { rootLegalEntityId: currentLegalEntityId } = useApiContext(); currentLegalEntityId.value = legalEntityId; const config = { locale: i18n.language, returnUrl, themeId }; const [onboardingStatus, setOnboardingStatus] = useState(); const [alertContent, setAlertContent] = useState(); const content = useMemo(() => { if (!onboardingStatus) return; const statusContent = getContentByStatus(onboardingStatus); if (statusContent) return statusContent; logger.error(`there is no content for status "${onboardingStatus}"`); }, [onboardingStatus]); const handleError = useCallback((rawError, userMessage) => { const error = coerceError(rawError); logger.error(error); setAlertContent(userMessage); onError?.({ error, userMessage: t(($) => $[userMessage]) }); }, [t, onError]); const updateOnboardingStatus = useCallback((newStatus) => { if (!newStatus) return; setOnboardingStatus(newStatus); if (newStatus !== onboardingStatus) onStatusChange?.(newStatus); }, [onStatusChange, onboardingStatus]); const { isLoading, data, isError } = useOnboardingStatus({ refetchInterval: (res) => { const status = res.state.data?.status; setOnboardingStatus(status); return status === void 0 || !FINAL_STATUSES.includes(status) ? 3e3 : false; } }); useEffect(() => { setAlertContent(void 0); updateOnboardingStatus(data?.status); }, [data, updateOnboardingStatus]); const generateOnboardingLink = useGenerateOnboardingLink({ onSuccess: ({ redirectUrl }) => { if (!redirectUrl) { handleError(/* @__PURE__ */ new Error("No redirectUrl returned"), "onboardingRedirectLinkError"); return; } openUrl(redirectUrl, config); }, onError: (error) => { handleError(error, "onboardingRedirectLinkError"); } }); const openUrl = (url, config) => { if (!window.open(url, redirectTarget)) { handleError(/* @__PURE__ */ new Error("Could not open redirect in new tab"), "onboardingRedirectOpenError"); return; } onRedirect?.({ ...config, onboardingLink: url }); }; const showAlert = alertContent || isError; const hideButton = onboardingStatus === OnboardingStatuses.REJECTED || onboardingStatus === OnboardingStatuses.VERIFIED || !content?.ctaButton; if (!showAlert && (isLoading || !content)) return /* @__PURE__ */ jsx(Loader, {}); return /* @__PURE__ */ jsx("section", { className: ViewVerificationStatusComponent_module_default.verification, children: showAlert ? /* @__PURE__ */ jsx(Alert, { title: t(($) => $[alertContent ?? "onboardingRedirectLinkError"]), variant: "error" }) : /* @__PURE__ */ jsxs(Fragment, { children: [!hideExplanation && content?.description.map((key) => /* @__PURE__ */ jsx("p", { className: ViewVerificationStatusComponent_module_default.verificationDescription, children: t(($) => $[key]) }, key)), !hideButton && /* @__PURE__ */ jsx(Button, { onClick: () => { generateOnboardingLink.mutate(config); }, variant: "link", loading: generateOnboardingLink.isPending, children: t(($) => $[content.ctaButton]) })] }) }); } //#endregion //#region src/embeds/verification-status/adyen-verification-status.tsx var AdyenVerificationStatus = ({ rootlegalentityid, fetchToken, environment, locale, settings = {}, experiments = {}, hideexplanation, returnurl, redirecttarget, themeid }) => { const eventEmitterRef = useRef(null); const handleOnChange = (data) => { emitAdyenSdkEvent(eventEmitterRef, "change", data); }; const handleOnError = (data) => { emitAdyenSdkEvent(eventEmitterRef, "error", data); }; const handleOnRedirect = (data) => { emitAdyenSdkEvent(eventEmitterRef, "redirect", data); }; return /* @__PURE__ */ jsx("div", { ref: eventEmitterRef, style: "width:100%;", children: /* @__PURE__ */ jsx(EmbedShell, { componentName: "adyen-verification-status", rootLegalEntityId: rootlegalentityid, settings, features: experiments, getSdkToken: fetchToken, locale, baseUrl: resolveEnvironment(environment), children: /* @__PURE__ */ jsx(ViewVerificationStatusComponent, { legalEntityId: rootlegalentityid, hideExplanation: hideexplanation, returnUrl: returnurl, redirectTarget: redirecttarget, themeId: themeid, onStatusChange: handleOnChange, onError: handleOnError, onRedirect: handleOnRedirect }) }) }); }; register(AdyenVerificationStatus, "adyen-verification-status", [ "rootlegalentityid", "fetchToken", "environment", "locale", "settings", "experiments", "hideexplanation", "returnurl", "redirecttarget", "themeid" ], { shadow: true, adoptedStyleSheets: stylesheets }); //#endregion export { AdyenVerificationStatus };