fix: improve imToken wallet error prompts
All checks were successful
Deploy to Frontend Servers / deploy (push) Successful in 1m8s
All checks were successful
Deploy to Frontend Servers / deploy (push) Successful in 1m8s
This commit is contained in:
@@ -252,6 +252,10 @@ export const enDict: Dict = {
|
|||||||
walletLoginFailed: "Wallet login failed",
|
walletLoginFailed: "Wallet login failed",
|
||||||
walletNoAccount:
|
walletNoAccount:
|
||||||
"No wallet account was returned. Unlock your wallet and select an account, then try again.",
|
"No wallet account was returned. Unlock your wallet and select an account, then try again.",
|
||||||
|
walletRequestCanceled:
|
||||||
|
"Wallet connection was canceled. Unlock your wallet, choose an account, and authorize this site, then try again.",
|
||||||
|
walletBnbChainRequired:
|
||||||
|
"Create or switch to a BNB Smart Chain (BSC) wallet in imToken, then try again.",
|
||||||
walletDisconnected: "Wallet disconnected",
|
walletDisconnected: "Wallet disconnected",
|
||||||
walletOtherMethods: "Other login methods",
|
walletOtherMethods: "Other login methods",
|
||||||
walletUseCurrent: "Use current wallet",
|
walletUseCurrent: "Use current wallet",
|
||||||
|
|||||||
@@ -254,6 +254,10 @@ export const idDict: Dict = {
|
|||||||
walletLoginFailed: "Login dompet gagal",
|
walletLoginFailed: "Login dompet gagal",
|
||||||
walletNoAccount:
|
walletNoAccount:
|
||||||
"Dompet tidak mengembalikan akun apa pun. Buka kunci dompet, pilih akun, lalu coba lagi.",
|
"Dompet tidak mengembalikan akun apa pun. Buka kunci dompet, pilih akun, lalu coba lagi.",
|
||||||
|
walletRequestCanceled:
|
||||||
|
"Koneksi dompet dibatalkan. Buka kunci dompet, pilih akun, dan izinkan situs ini, lalu coba lagi.",
|
||||||
|
walletBnbChainRequired:
|
||||||
|
"Buat atau beralih ke dompet BNB Smart Chain (BSC) di imToken, lalu coba lagi.",
|
||||||
walletDisconnected: "Dompet terputus",
|
walletDisconnected: "Dompet terputus",
|
||||||
walletOtherMethods: "Metode login lainnya",
|
walletOtherMethods: "Metode login lainnya",
|
||||||
walletUseCurrent: "Gunakan dompet saat ini",
|
walletUseCurrent: "Gunakan dompet saat ini",
|
||||||
|
|||||||
@@ -205,6 +205,10 @@ export const jaDict: Dict = {
|
|||||||
walletLoginFailed: "ウォレットログインに失敗しました",
|
walletLoginFailed: "ウォレットログインに失敗しました",
|
||||||
walletNoAccount:
|
walletNoAccount:
|
||||||
"ウォレットからアカウントが返されませんでした。ウォレットのロックを解除してアカウントを選択し、もう一度お試しください。",
|
"ウォレットからアカウントが返されませんでした。ウォレットのロックを解除してアカウントを選択し、もう一度お試しください。",
|
||||||
|
walletRequestCanceled:
|
||||||
|
"ウォレット接続がキャンセルされました。ウォレットのロックを解除し、アカウントを選択してこのサイトを承認してから、もう一度お試しください。",
|
||||||
|
walletBnbChainRequired:
|
||||||
|
"imToken で BNB Smart Chain(BSC)ウォレットを作成または切り替えてから、もう一度お試しください。",
|
||||||
walletDisconnected: "ウォレットを切断しました",
|
walletDisconnected: "ウォレットを切断しました",
|
||||||
walletNoBrowserWallet: "ブラウザウォレットが見つかりません",
|
walletNoBrowserWallet: "ブラウザウォレットが見つかりません",
|
||||||
walletNoBrowserWalletDesc:
|
walletNoBrowserWalletDesc:
|
||||||
|
|||||||
@@ -251,6 +251,10 @@ export const koDict: Dict = {
|
|||||||
walletLoginFailed: "지갑 로그인에 실패했습니다",
|
walletLoginFailed: "지갑 로그인에 실패했습니다",
|
||||||
walletNoAccount:
|
walletNoAccount:
|
||||||
"지갑에서 계정이 반환되지 않았습니다. 지갑 잠금을 해제하고 계정을 선택한 후 다시 시도하세요.",
|
"지갑에서 계정이 반환되지 않았습니다. 지갑 잠금을 해제하고 계정을 선택한 후 다시 시도하세요.",
|
||||||
|
walletRequestCanceled:
|
||||||
|
"지갑 연결이 취소되었습니다. 지갑 잠금을 해제하고 계정을 선택한 뒤 이 사이트를 승인한 후 다시 시도하세요.",
|
||||||
|
walletBnbChainRequired:
|
||||||
|
"imToken에서 BNB Smart Chain(BSC) 지갑을 만들거나 전환한 후 다시 시도하세요.",
|
||||||
walletDisconnected: "지갑 연결이 해제되었습니다",
|
walletDisconnected: "지갑 연결이 해제되었습니다",
|
||||||
walletOtherMethods: "다른 로그인 방법",
|
walletOtherMethods: "다른 로그인 방법",
|
||||||
walletUseCurrent: "현재 지갑 사용",
|
walletUseCurrent: "현재 지갑 사용",
|
||||||
|
|||||||
@@ -253,6 +253,10 @@ export const msDict: Dict = {
|
|||||||
walletLoginFailed: "Log masuk dompet gagal",
|
walletLoginFailed: "Log masuk dompet gagal",
|
||||||
walletNoAccount:
|
walletNoAccount:
|
||||||
"Dompet tidak mengembalikan sebarang akaun. Nyahkunci dompet, pilih akaun, kemudian cuba lagi.",
|
"Dompet tidak mengembalikan sebarang akaun. Nyahkunci dompet, pilih akaun, kemudian cuba lagi.",
|
||||||
|
walletRequestCanceled:
|
||||||
|
"Sambungan dompet dibatalkan. Nyahkunci dompet, pilih akaun dan benarkan laman ini, kemudian cuba lagi.",
|
||||||
|
walletBnbChainRequired:
|
||||||
|
"Cipta atau tukar kepada dompet BNB Smart Chain (BSC) dalam imToken, kemudian cuba lagi.",
|
||||||
walletDisconnected: "Dompet diputuskan",
|
walletDisconnected: "Dompet diputuskan",
|
||||||
walletOtherMethods: "Kaedah log masuk lain",
|
walletOtherMethods: "Kaedah log masuk lain",
|
||||||
walletUseCurrent: "Guna dompet semasa",
|
walletUseCurrent: "Guna dompet semasa",
|
||||||
|
|||||||
@@ -249,6 +249,10 @@ export const viDict: Dict = {
|
|||||||
walletLoginFailed: "Đăng nhập ví thất bại",
|
walletLoginFailed: "Đăng nhập ví thất bại",
|
||||||
walletNoAccount:
|
walletNoAccount:
|
||||||
"Ví không trả về tài khoản nào. Hãy mở khóa ví, chọn một tài khoản rồi thử lại.",
|
"Ví không trả về tài khoản nào. Hãy mở khóa ví, chọn một tài khoản rồi thử lại.",
|
||||||
|
walletRequestCanceled:
|
||||||
|
"Kết nối ví đã bị hủy. Hãy mở khóa ví, chọn tài khoản và cấp quyền cho trang này rồi thử lại.",
|
||||||
|
walletBnbChainRequired:
|
||||||
|
"Hãy tạo hoặc chuyển sang ví BNB Smart Chain (BSC) trong imToken, rồi thử lại.",
|
||||||
walletDisconnected: "Đã ngắt kết nối ví",
|
walletDisconnected: "Đã ngắt kết nối ví",
|
||||||
walletOtherMethods: "Phương thức đăng nhập khác",
|
walletOtherMethods: "Phương thức đăng nhập khác",
|
||||||
walletUseCurrent: "Dùng ví hiện tại",
|
walletUseCurrent: "Dùng ví hiện tại",
|
||||||
|
|||||||
@@ -233,6 +233,10 @@ export const zhDict: Dict = {
|
|||||||
walletLoginSuccess: "钱包已连接",
|
walletLoginSuccess: "钱包已连接",
|
||||||
walletLoginFailed: "钱包登录失败",
|
walletLoginFailed: "钱包登录失败",
|
||||||
walletNoAccount: "钱包没有返回账号。请先解锁钱包并选择一个账号后重试。",
|
walletNoAccount: "钱包没有返回账号。请先解锁钱包并选择一个账号后重试。",
|
||||||
|
walletRequestCanceled:
|
||||||
|
"钱包连接已取消。请解锁钱包,选择账号并授权本站后重试。",
|
||||||
|
walletBnbChainRequired:
|
||||||
|
"请先在 imToken 创建或切换到 BNB Smart Chain(BSC)钱包,然后重试。",
|
||||||
walletDisconnected: "钱包已断开",
|
walletDisconnected: "钱包已断开",
|
||||||
walletOtherMethods: "其他登录方式",
|
walletOtherMethods: "其他登录方式",
|
||||||
walletUseCurrent: "使用当前钱包登录",
|
walletUseCurrent: "使用当前钱包登录",
|
||||||
|
|||||||
@@ -47,13 +47,33 @@ function errorText(error: unknown): string {
|
|||||||
return parts.join("\n");
|
return parts.join("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function errorCode(error: unknown): string {
|
||||||
|
if (!error || typeof error !== "object") return "";
|
||||||
|
const code = (error as Record<string, unknown>).code;
|
||||||
|
return typeof code === "string" || typeof code === "number"
|
||||||
|
? String(code)
|
||||||
|
: "";
|
||||||
|
}
|
||||||
|
|
||||||
function isNoAccountError(error: unknown): boolean {
|
function isNoAccountError(error: unknown): boolean {
|
||||||
return /wallet must has at least one account|wallet must has one account|must have at least one account|no wallet account returned/i.test(
|
return /wallet must has at least one account|wallet must has one account|must have at least one account|no wallet account returned/i.test(
|
||||||
errorText(error),
|
errorText(error),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isUserCanceledError(error: unknown): boolean {
|
||||||
|
const text = errorText(error);
|
||||||
|
const code = errorCode(error);
|
||||||
|
return (
|
||||||
|
code === "4001" ||
|
||||||
|
/user[_ -]?cancell?ed|user rejected|request rejected|request denied|action rejected/i.test(
|
||||||
|
text,
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
function normalizeWalletError(error: unknown): Error {
|
function normalizeWalletError(error: unknown): Error {
|
||||||
|
if (isUserCanceledError(error)) return new Error("walletRequestCanceled");
|
||||||
if (isNoAccountError(error)) return new Error("walletNoAccount");
|
if (isNoAccountError(error)) return new Error("walletNoAccount");
|
||||||
if (error instanceof Error) return error;
|
if (error instanceof Error) return error;
|
||||||
const message = errorText(error);
|
const message = errorText(error);
|
||||||
@@ -210,7 +230,9 @@ export async function connectInjectedWallet(
|
|||||||
|
|
||||||
console.info("[wallet-login] ensuring BNB Chain (0x38)…");
|
console.info("[wallet-login] ensuring BNB Chain (0x38)…");
|
||||||
await ensureBnbChain(ethereum).catch((error: unknown) => {
|
await ensureBnbChain(ethereum).catch((error: unknown) => {
|
||||||
console.warn("[wallet-login] BNB Chain switch skipped", error);
|
console.warn("[wallet-login] BNB Chain switch failed", error);
|
||||||
|
if (kind === "imToken") throw new Error("walletBnbChainRequired");
|
||||||
|
throw normalizeWalletError(error);
|
||||||
});
|
});
|
||||||
return address;
|
return address;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user