UNPKG

@particle-network/auth-core-modal

Version:

Auth Core provides MPC (Multi-Party Computation)-based threshold signatures.

167 lines (159 loc) 13.1 kB
"use client"; import { svg_icon_default } from "./chunk-VCVXJFMF.js"; import { power_footer_default } from "./chunk-S2Q2HZA6.js"; import { getLoginLogos, isServer, useConnect, useCustomNavigate, useLogin_default, useParticleAuth } from "./chunk-NJW64X5G.js"; import "./chunk-LQ53OFQ3.js"; // src/pages/index/index.tsx import { isConnected, isSocialAuthType } from "@particle-network/auth-core"; import { message } from "antd"; import base64url from "base64url"; import qs from "qs"; import React2, { useEffect, useState } from "react"; // src/components/socialLoading/index.tsx import React from "react"; import { useTranslation } from "react-i18next"; // src/common/images/loading2.png var loading2_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAACgCAYAAACLz2ctAAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAA4bSURBVHic7d1djFznWQfw//OcM2dmv2xvklLHxgktbgoOoVSVuOCCptxwAzdpvSSe3Y3dlESCJlAVCohIHguR9gKJNkWgGkHW9u7a2q1EaVRKb6BUAoFELghqhIqFnCa4Drazu96P2Tkf75+L98ys15n1zu6e/fDu84smu7HPxyvlr+c973vecwYwxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY8w6yHY3wBSBQvrfRITb25a1sQDuGpRarfn/8wxOnz5NCCDY2YG0AO4ytRr12DEIJv1/H38UPAPg9GkQ2HkV0gK4CxGUyePQqf7X9JFDHyMAXP++D+BOC6QFcBebOM4AQAAAH+wHXwPwyCEsCyQwieOTx912ddUWwF2uVqPe92+XS0ePHgUAzF3zwWsGEngNjxz6GP8JcLWauK1unwVwDyAoX30e0cFr0Pf1gFcAvL/PB/EyLuPgtaME3gBwLBuYlGwr26ZbeTKzPQTCF74qjal+pHMRNI6gcyF07hr04LWKzvdA53u6tfcgwlqN4Va2zQK4hzx3VpLeQ4i76pD9N6CLFehipaQPRNA4KutcCD32/bdL/7iFIbQA7jGfqElaWZxcnFmEJCVoUgq0PgVNp0JdvOEDOXcV0deeZWkr2mMB3IMGJgeyNx7FAgCks4HGEXR/FOj+ZiBDaP/U9fJWhNACuEfVauLeegjzAOAroWojhKazgcYz0DgK9GCKSj6Vs2lsFLzHsUadvIo+ZLeCpL6PwAy6o/2cxjR6ogOM599lFN83v1mjY6uAe5zUxGEKc0mdTENoGqomATSbV03moMIgiCP01GrclKxYAA0GJiUrJftv9QHIAtF0AdodinblgYwqCH/+Jno349wWQAPAh7D/g5ipLIr6SiiaBtBmIKdvzEavPsvuos9rATQtn6hJGqY9tyrN4AXQyqJoJQ9kPUHPy8+zXOQ5LYBmmYFJqc8q5iuLotniUhCbPx+4gb4iR8YWQPMez/y1zDrtrpcV6lQ0U18Jy4vQLFgopeFsf1HnsgCatv77KmYbDi6KoVnDV8AsD2RSCst/+2n2FXEeC6Bpq/ZdScsN3HQqGik0U9EsgEYBNIqhs436/trjG79nbAE0KxqYlDiOKjNZAI0SqGtAXUPybln0Aw/N7t/oOSyA5q5Ojcg0Q9SdipYCaJZ/ogAaaalv4jg3ND9oATSrmlW86xTqFBqpqIuXPnNBfUMDEgugWdVzZyVxGk9lAs0SaCnwYXQK7S5rNPHMzH3rPbYF0HTk6fP7biJG1gxe85Ml0KRevn+9S7csgKZjpV7cpIgGYVlKKlpKpBXE/nj+/vUc0wJoOjZwVmYo2S2XQF3ig0cRpYimjdKB9VRBC6BZk6561/VQoWFe+W7/vT/BgbUezwJo1mRgUmIm9RknUKZQ1/wotJ41+ieOM1rL8SyAZs2CrOsdpqJh3v1SREOBliCVNMSapmUsgGbNBiYlBrIpp0mr+2UqylRUQ6xpSsYCaNbl5tTb1ygldSk0TJemZShJZeIZdhxCC6BZlxe+/aFGmHKOAqUkGgqUkl8PzjUe6PQ4FkCzbpTonUChTkvqBBpkPoRpqPs7XTltATTrVh2XqZRIwjRVZlBKqkHeFffOze3r5BgWQLMh6tysU2ggopRSPiIWrWTRgx3tv9kNNLtbFpSv+qkYqMtSdRnUZYmK097zQ+xZbX8LoNmQ4QsyT2HMDBoKNBDklRAaBDi02v4WQLNhlaDrzaVpGH8tyAzq0mTV50YsgGbD5oHpoFX9/GhYFQrIvldOsnK3fS2AZsNOjchiCs4zk3w0vFQJw3ThrrfmLICmEMLSNAWq0lyi5UfGwtACaDZfj2CqWfnUwVfCDEpxd12oagE0hbjehSkVKJ2vftoMo4TdE8fZtdJ+FkBTiOfOSqIMZpeu/0SbgUTXyitkLICmMIm4qdZo2PlPINA4i1d8gN0CaAojTG8yy5SZ3DYShlKyFZfqWwBNYdIwrlMCPwIGNIAPIlBa8ZacBdAU5tRI/7RK5quey3w3nEGFrnelJ+YsgKZgesuPgIPWaFgFGsXTbaugBdAUig4pHbRVCcVXQnVlC6DZfE4505qQFiidr4SlJGg7ENnSb0Y0u1+QcSELoHT+62ApGQEgDaXta9ysAppCSSWaVyeqPluq+SdQafuMiFVAU6hFzicliRQiJADJK6EAbQNoFdAUqgc9oEBx2/1g5ndG2m1vFdAUqu5mk9BVlOIrnwqYAaC074KtAppCpWFfzDuqnwoUyNqujLYAmkLN/+hyTIEyH3w0FyWoEwug2XwvfPtDDQWU9J9mJYSibQDtGtAUjnQKqJ8HBKgASH9NeCergKZQf/c8y4CqCFSa14GEUpC2294qoCnUu++iTHEqzldA5KNhIZJ221sATeHy6z4fvPynW6G3tS7YFGo+nhK/GkaU4hQChXMqhLTb3gJoCrWvt3/f8mkYydcGcq7d9tYFm0JlcXwAIupHvZLfCckASNxue6uApmBSEaK1GsZXwkApbBtAq4CmUBQ5IKRSwHwikICDUq+3294CaAomXfRzgNQMaC1KcGy029oCaAoVwD1Il0/DiJ+GcQAo0Uy77S2AplCOcp+oiADiAEh+Ky6OYAE0m2vsxHQ/BF2Ar3yBUzgfxMVTIzLdbh8LoCmM0+4PBOJnVthaiu+gkHdW2scCaAoj1EMgFXCAaGv1C+EsgGbzqbjDhCiw7B4wNNNrK+6zRW0zu9zEcXY58scln3yG8/eA4aBA6X9W2s8qoClEo9w4rNBuCKhOWvN/Aq1Xx2Rqpf0sgKYQwvAxwimQz/8B9L+4N+62nwXQFIKSfUQp6oMHQEABkGSyYvcLWABNAc4N37pfndwPASBCOub3gIGupPSfd9vXAmg2TNj1EYGogwOcr3wQIYn/HZiU+t32tQCajXPZR/0TmADENd8FQ0Iur7arTcOYDbl4ikdC6IeRvw9GoEr4p+HCIH19tf2tApoNSZPso/7VG/lzv3RUAI688eRY5Qer7W8BNBsidL+MfP0f4B9E9z/lXzvZ3wJo1m38JH8KadLjiNaot/kccJAF/9LJMSyAZt2Ypk+AyAcfrRdREpT/OnFRbnRyDAugWZfRauMYyUfltuA5ACDoBP/c6XEsgGZdSPm4KvT24AkAAvMHusPXOj2OTcOYNZs4xfeJ4nGCSkJBPwXjX8ur3/nVs7LQ6bGsApo1ayTJrwUQzW/4UgAISEcuZHrj79dyLAugWZPzQ42fEcdfIoRLK58dACUdvjc8dnB+LcezAJo1UadPCpxi2eBDAYIMG99a6/EsgKZjo9XGYyL4WWBpwtkPPhwy4tLwhb7/W+sxLYCmYyLyLPOBq9w28eyAeWj06nqOaQE0HRmtNgYB+UlZet6ydetNiFeHRmVN135NNg1jVjX+Gb4fgidAKPyyK7/ixeenPhPPfHO9x7YKaFbFxeQLQukTab7sXiDMl97Djf/m5I+1fflkJyyA5q5Gq41PCeTn6C/66Pte+nu+kP8YHIv+ZiPHty7YrGhikEdF5LNodreEglQQSmAhKcV/stFzWABNWxO/wd4E6UvNaz2h/96PfO2fAu7CqZHeFd940CkLoGmrcSt+EcAhoX/VLmTplbsZ3euDY+WvF3EeuwY07zE+mH7G0X0cuGOpFUAh50SyLxZ1LgugWWa0mv6Ko/t1wKfNj3lb650J6ktDYz0/Kup8FkDTcmFw8cOg+7wI1L/dVPwrXlrx46XqePS9Is/Z9ttrzN5z8UkeSsP4LwF5cFnFAyAiJPmDwbGoWvR5rQIaXPw0D2WN+K8E8mD+VslW8JyvgFeDLPndzTh3sBkHNfeOc8MLh5HIKxQcFkIEEAr8P76HnIO4z1bHu69sxvktgHvYxDAPI8MI8vAB+euF8vD5MGa/Pzza9e+b1QbrgveoiWEeTlx63oGHhZLfZZPWqFcICPGl4fGuf9jMdthE9B50aYg/Hbt0lOQRQfObzUWR3/EAoaT7i+p4dGGz22IB3GPGB9NPpi6+KOAR+i+Wzu/z+nu8+ffK/PnQeOXPtqI9Ng2zh4ydiD8HwQvLF5QSzS5YRAiHl6vj0ctb1Sa7BtwDRqvcR0lqJD7VDB7yuT5p/u59eSvDB1gAd72LTy4cyZB8XSCH87T5Akiy9U0yAjrHLw+Plb+y1e2zLngXGxtMfscBnwccBEq/pEBbDxPlK5pvqdPPVcdL39mONloF3IXODdUfClz4sgN/QSBcWk6greD5qRa+HWTZJ5+6VH5ru9pqFXCXGRtMfo/kF/yc3tIAg5IPNND8iR9qWnriqUuybeEDrALuGqPVxmOAjBE4QlmaTMZta/ryTQnya9Wx8ovb1dbbWQDvcWMn6g9Tgj+g4ATgBxf5WGPZtZ4QJPkWlF8aGitf3LYG38G64HtUHrw/pKDa7FZvX0LV6oLzByhF8HoqperTF+SH29nuO1kA7zFjJ/gwNHvRwQ0tBU+W0rfsVbn+j0h+cWi8/NL2tXplFsB7xGg1floEwyR+EdIMXLO6tV6YsXSt5+M3Ksz+uDre9eb2tfzu7Bpwhxs7EZ8keBrAwwRI8dd5+V8vvZ8Fras+AnxTKH+0FYsJNsoq4A42Wo1/G8CfLv/TvPIBeG8lxBWS55PMnT91qevKFjd3XawC7mj8rffWCGn9y9fDZhHEOU2zM0/dI8FrsgDuaHJg1S0gI1rKzjw1cm8Fr8kCuIMJ8A0CJ9v81RUAXwlK2Tfu1eA1WQB3MC1lZ7Ik+AkAjwMABN8Vh3PV8WhkG5tl9ppXTvLAKye5andsjDHGGGOMMcYYY4wxxpg7/D8gh+ljqac71wAAAABJRU5ErkJggg=="; // src/components/socialLoading/index.less var socialLoading_default = ".social-loading-content {\n text-align: center;\n padding-bottom: 40px;\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n padding: 0;\n}\n.social-loading-content .wrap {\n flex: 1;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n}\n.social-loading-content .wrap .social-logo-content {\n width: 105px;\n height: 105px;\n border-radius: 100%;\n position: relative;\n}\n.social-loading-content .wrap .social-logo-content.failed {\n cursor: pointer;\n}\n.social-loading-content .wrap .social-logo-content .logo {\n width: 100%;\n height: 100%;\n}\n.social-loading-content .wrap .social-logo-content .logo img {\n width: 100%;\n height: auto;\n}\n.social-loading-content .wrap .social-logo-content .spin {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n animation: social-loading-spin 1.4s linear infinite;\n}\n.social-loading-content .wrap .social-logo-content .spin img {\n width: 100%;\n height: 100%;\n}\n.social-loading-content .wrap .social-logo-content .refresh-btn {\n font-size: 19px;\n position: absolute;\n bottom: 10px;\n right: 27px;\n}\n.social-loading-content .wrap .title {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.social-loading-content .wrap .desc {\n width: 70%;\n line-height: 1.2;\n color: var(--secondary-text-color);\n}\n@keyframes social-loading-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n"; // src/components/socialLoading/index.tsx var SocialLoading = ({ authType, isFailed = true }) => { const { t } = useTranslation(); const [spin, setSpin] = React.useState(!isFailed); const { socialAuthLogin } = useLogin_default(); const { modalOptions } = useParticleAuth(); return /* @__PURE__ */ React.createElement("div", { className: "social-loading-content" }, /* @__PURE__ */ React.createElement("style", null, socialLoading_default), /* @__PURE__ */ React.createElement("div", { className: "wrap" }, /* @__PURE__ */ React.createElement( "div", { className: `social-logo-content ${isFailed ? "failed" : ""}`, onClick: () => { if (!isFailed || spin) return; setSpin(true); socialAuthLogin({ socialType: authType }); } }, /* @__PURE__ */ React.createElement("div", { className: "logo" }, /* @__PURE__ */ React.createElement("img", { src: getLoginLogos(modalOptions.themeType)[authType] || "", alt: "logo" })), spin && /* @__PURE__ */ React.createElement("div", { className: "spin" }, /* @__PURE__ */ React.createElement("img", { src: loading2_default, alt: "loading" })), isFailed && !spin && /* @__PURE__ */ React.createElement("div", { className: "refresh-btn" }, /* @__PURE__ */ React.createElement(svg_icon_default, { className: "refresh-icon", name: "refresh_icon" })) ), /* @__PURE__ */ React.createElement("div", { className: "title" }, !isFailed ? t("login.logging_you_in") : t("login.request_failed")), isFailed && /* @__PURE__ */ React.createElement("div", { className: "desc" }, t("login.something_wrong"))), /* @__PURE__ */ React.createElement(power_footer_default, { className: "footer-box-v2" })); }; var socialLoading_default2 = SocialLoading; // src/pages/index/index.less var index_default = ".index-container {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n color: var(--text-color);\n}\n"; // src/pages/index/index.tsx var Index = () => { const { connect } = useConnect(); const navigate = useCustomNavigate(); const { setConnectionStatus, socialConnectCallback, setAuthCoreModal } = useParticleAuth(); const [socialLoginLoading, setSocialLoginLoading] = React2.useState(false); const [authType, setAuthType] = useState(""); const [socialLoginFailed, setSocialLoginFailed] = useState(false); const onConnectCompleted = (detail) => { var _a, _b; if ((_a = window.particle) == null ? void 0 : _a.ethereum) { window.particle.ethereum.isSocialConnecting = false; } if ((_b = window.particle) == null ? void 0 : _b.solana) { window.particle.solana.isSocialConnecting = false; } window.dispatchEvent( new CustomEvent("particle:socialConnectCompleted", { detail }) ); }; const thirdpartyLogin = async () => { var _a; try { const query = qs.parse(!isServer() ? window.location.search : "", { ignoreQueryPrefix: true }); const particleThirdpartyParamsContent = query == null ? void 0 : query.particleThirdpartyParams; if (!particleThirdpartyParamsContent) { if (!isConnected()) { setConnectionStatus("disconnected"); } return; } delete query.particleThirdpartyParams; const replaceUrl = (window.location.origin + window.location.pathname + "?" + qs.stringify(query)).replace( /\?$/, "" ); window.history.replaceState({}, document.title, replaceUrl); document.title = document.title || replaceUrl; const particleThirdpartyParams = JSON.parse(base64url.decode(particleThirdpartyParamsContent)); const { code, nonce, appState, error } = particleThirdpartyParams; const appStateObj = appState ? JSON.parse(base64url.decode(appState)) : {}; const { authorization, chain, purpose, verifyToken } = appStateObj; if (error) { if (!isConnected()) { setConnectionStatus("disconnected"); } if (!purpose) { (_a = socialConnectCallback == null ? void 0 : socialConnectCallback.onError) == null ? void 0 : _a.call(socialConnectCallback, new Error(error)); } else { message.error(error); } if (purpose !== "bindLoginAccount") { setSocialLoginFailed(true); } return; } const authType2 = nonce.split("@")[0]; setAuthType(authType2); if (purpose === "bindLoginAccount") { navigate("/login-account/bind-loading", { state: { authType: authType2, verifyToken, code, nonce }, replace: true }); } else { if (isSocialAuthType(authType2)) { setSocialLoginLoading(true); setAuthCoreModal({ particleModalVisible: true }); } console.log(`auth-core-modal: social:${authType2} connect start`); await connect({ socialType: authType2, code, nonce, authorization, chain }); } } catch (error) { console.error("after redirect, login or bind", error); if (!isConnected()) { setConnectionStatus("disconnected"); } onConnectCompleted({ result: Object.freeze(error) }); } setSocialLoginLoading(false); }; useEffect(() => { thirdpartyLogin(); }, []); return /* @__PURE__ */ React2.createElement("div", { className: "index-container" }, /* @__PURE__ */ React2.createElement("style", null, index_default), socialLoginLoading && /* @__PURE__ */ React2.createElement(socialLoading_default2, { authType, isFailed: socialLoginFailed })); }; var index_default2 = Index; export { index_default2 as default }; //# sourceMappingURL=index-WUVRRSCN.js.map