@particle-network/auth-core-modal
Version:
Auth Core provides MPC (Multi-Party Computation)-based threshold signatures.
167 lines (159 loc) • 13.1 kB
JavaScript
"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,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";
// 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