增加email相关方法
This commit is contained in:
parent
c2a36696b2
commit
222f84307a
1
src/JCWallet.d.ts
vendored
1
src/JCWallet.d.ts
vendored
@ -29,6 +29,7 @@ declare namespace jsb {
|
|||||||
export function hexDeflate(str: string): string;
|
export function hexDeflate(str: string): string;
|
||||||
export function hexInflate(str: string): string;
|
export function hexInflate(str: string): string;
|
||||||
export function storeLocalPass(pass: string): void;
|
export function storeLocalPass(pass: string): void;
|
||||||
|
export function hashSvrPass(pass: string): string;
|
||||||
export function verifyLocalPass(pass: string): boolean;
|
export function verifyLocalPass(pass: string): boolean;
|
||||||
export function walletEncrypt(str: string): string;
|
export function walletEncrypt(str: string): string;
|
||||||
export function walletDecrypt(str: string): string;
|
export function walletDecrypt(str: string): string;
|
||||||
|
37
src/api/EmailApi.ts
Normal file
37
src/api/EmailApi.ts
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
import { WALLET_API_HOST } from "../config/constants";
|
||||||
|
import { GET_JSON, POST_JSON } from "../lib/Http";
|
||||||
|
|
||||||
|
// request /wallet/info/email to get if email is verified
|
||||||
|
export function isEmailVerified() {
|
||||||
|
const url = `${WALLET_API_HOST}/wallet/info/email`;
|
||||||
|
return GET_JSON(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function sendCode(data) {
|
||||||
|
const url = `${WALLET_API_HOST}/email/send_code`;
|
||||||
|
return POST_JSON(url, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function verifyEmailByCode(data) {
|
||||||
|
const url = `${WALLET_API_HOST}/email/verify_by_code`;
|
||||||
|
return POST_JSON(url, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function checkEmailRegister(data) {
|
||||||
|
const url = `${WALLET_API_HOST}/email/check`;
|
||||||
|
return POST_JSON(url, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function emailRegister(data) {
|
||||||
|
const url = `${WALLET_API_HOST}/email/regist`;
|
||||||
|
return POST_JSON(url, data);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param data {email, pass}
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function emailLogin(data) {
|
||||||
|
const url = `${WALLET_API_HOST}/wallet/login/email`;
|
||||||
|
return POST_JSON(url, data);
|
||||||
|
}
|
@ -5,8 +5,3 @@ export function alchemyPrePay(data: any) {
|
|||||||
const url = `${WALLET_API_HOST}/pay/alchemy/buy`;
|
const url = `${WALLET_API_HOST}/pay/alchemy/buy`;
|
||||||
return POST_JSON(url, data);
|
return POST_JSON(url, data);
|
||||||
}
|
}
|
||||||
// update email info of logined user
|
|
||||||
export function updateEmailVerify(data: { email: string }) {
|
|
||||||
const url = `${WALLET_API_HOST}/email/verify`;
|
|
||||||
return POST_JSON(url, data);
|
|
||||||
}
|
|
||||||
|
@ -50,9 +50,3 @@ export function uploadInfoForWebLogin(data) {
|
|||||||
const url = `${WALLET_API_HOST}/bridge/upload`;
|
const url = `${WALLET_API_HOST}/bridge/upload`;
|
||||||
return POST_JSON(url, data);
|
return POST_JSON(url, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
// request /wallet/info/email to get if email is verified
|
|
||||||
export function isEmailVerified() {
|
|
||||||
const url = `${WALLET_API_HOST}/wallet/info/email`;
|
|
||||||
return GET_JSON(url);
|
|
||||||
}
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
export const WALLET_STORAGE_KEY_NAME = "jc_wallet_data";
|
export const WALLET_STORAGE_KEY_NAME = "jc_wallet_data";
|
||||||
|
|
||||||
export const WALLET_API_HOST = "https://wallet.cebggame.com";
|
// export const WALLET_API_HOST = "https://wallet.cebggame.com";
|
||||||
|
export const WALLET_API_HOST = "http://192.168.100.184:3007";
|
||||||
|
|
||||||
export const MAX_TRY_COUNT = 6;
|
export const MAX_TRY_COUNT = 6;
|
||||||
|
|
||||||
|
26
src/index.ts
26
src/index.ts
@ -26,6 +26,7 @@ import { saveData } from "./manage/DataManage";
|
|||||||
import { parseUrl } from "./manage/SchemeManage";
|
import { parseUrl } from "./manage/SchemeManage";
|
||||||
import {
|
import {
|
||||||
loadInternalWallet,
|
loadInternalWallet,
|
||||||
|
loginByEmail,
|
||||||
restoreWalletByMnemonic,
|
restoreWalletByMnemonic,
|
||||||
walletPreLogin,
|
walletPreLogin,
|
||||||
} from "./manage/WalletManage";
|
} from "./manage/WalletManage";
|
||||||
@ -48,7 +49,6 @@ import {
|
|||||||
} from "./util/chain.util";
|
} from "./util/chain.util";
|
||||||
import { fromTokenMinimalUnit } from "./util/number.util";
|
import { fromTokenMinimalUnit } from "./util/number.util";
|
||||||
import { buildLoginSignMsg, signLogin } from "./util/sign.util";
|
import { buildLoginSignMsg, signLogin } from "./util/sign.util";
|
||||||
import { findUrlScheme } from "./util/string.util";
|
|
||||||
|
|
||||||
var global =
|
var global =
|
||||||
(typeof globalThis !== "undefined" && globalThis) ||
|
(typeof globalThis !== "undefined" && globalThis) ||
|
||||||
@ -56,7 +56,7 @@ var global =
|
|||||||
(typeof global !== "undefined" && global) ||
|
(typeof global !== "undefined" && global) ||
|
||||||
{};
|
{};
|
||||||
|
|
||||||
window.debug = false;
|
window.debug = true;
|
||||||
|
|
||||||
@singleton
|
@singleton
|
||||||
export default class JCWallet {
|
export default class JCWallet {
|
||||||
@ -86,12 +86,16 @@ export default class JCWallet {
|
|||||||
public nativeAccount = "";
|
public nativeAccount = "";
|
||||||
public feeAddressMap: Map<string, string> = new Map();
|
public feeAddressMap: Map<string, string> = new Map();
|
||||||
|
|
||||||
constructor({ type, chain }: { type: number; chain: number }) {
|
constructor({ type }: { type: number }) {
|
||||||
this.nativeSvr = new NativeSvr();
|
this.nativeSvr = new NativeSvr();
|
||||||
this.historySvr = new TranHistorySvr();
|
this.historySvr = new TranHistorySvr();
|
||||||
this.emailVerifySvr = new EmailVerifySvr();
|
this.emailVerifySvr = new EmailVerifySvr();
|
||||||
this.paySvr = new PaySvr();
|
this.paySvr = new PaySvr();
|
||||||
this.walletType = type;
|
this.walletType = type;
|
||||||
|
window.jc = { wallet: this };
|
||||||
|
}
|
||||||
|
|
||||||
|
private updateChain(chain: number) {
|
||||||
chain = chain || 80001;
|
chain = chain || 80001;
|
||||||
let data = AllChains.find((o) => o.id === chain);
|
let data = AllChains.find((o) => o.id === chain);
|
||||||
if (!data) {
|
if (!data) {
|
||||||
@ -101,20 +105,23 @@ export default class JCWallet {
|
|||||||
this.rpcUrl = data.rpc;
|
this.rpcUrl = data.rpc;
|
||||||
console.log(`rpc url: ${this.rpcUrl}`);
|
console.log(`rpc url: ${this.rpcUrl}`);
|
||||||
this.init({ chains: [chain], password: this.password });
|
this.init({ chains: [chain], password: this.password });
|
||||||
window.jc = { wallet: this };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public get isInternal() {
|
public get isInternal() {
|
||||||
return this.walletType === WalletType.INTERNAL;
|
return this.walletType === WalletType.INTERNAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async preLogin(channel: number) {
|
public preLogin(channel: number) {
|
||||||
let token = await walletPreLogin(channel);
|
return walletPreLogin(channel);
|
||||||
return token;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async initInternalWallet(pass: string) {
|
public emailLogin(email: string, password: string) {
|
||||||
|
return loginByEmail(email, password);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async initInternalWallet(chain: number, pass: string) {
|
||||||
this.walletType = WalletType.INTERNAL;
|
this.walletType = WalletType.INTERNAL;
|
||||||
|
this.updateChain(chain);
|
||||||
let address: string = await loadInternalWallet(pass);
|
let address: string = await loadInternalWallet(pass);
|
||||||
this.nativeAccount = address;
|
this.nativeAccount = address;
|
||||||
console.log("native wallet address: " + address);
|
console.log("native wallet address: " + address);
|
||||||
@ -142,8 +149,9 @@ export default class JCWallet {
|
|||||||
* init wallet connect
|
* init wallet connect
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
public async initThirdPartyWallet() {
|
public async initThirdPartyWallet(chain: number) {
|
||||||
this.walletType = WalletType.THIRD_PATH;
|
this.walletType = WalletType.THIRD_PATH;
|
||||||
|
this.updateChain(chain);
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
for (const d of AllChains) {
|
for (const d of AllChains) {
|
||||||
const id = d.id;
|
const id = d.id;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import "whatwg-fetch";
|
import "whatwg-fetch";
|
||||||
import { WalletEnv } from "../config/WalletEnv";
|
import { WalletEnv } from "../config/WalletEnv";
|
||||||
|
|
||||||
export async function request(url, option) {
|
export function request(url, option) {
|
||||||
let headers = new Headers();
|
let headers = new Headers();
|
||||||
headers.append("Content-Type", "application/json");
|
headers.append("Content-Type", "application/json");
|
||||||
let walletEnv = new WalletEnv();
|
let walletEnv = new WalletEnv();
|
||||||
@ -19,17 +19,17 @@ export async function request(url, option) {
|
|||||||
return fetch(url, optionInt);
|
return fetch(url, optionInt);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function GET(url: string) {
|
export function GET(url: string) {
|
||||||
return request(url, {});
|
return request(url, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function GET_JSON(url: string) {
|
export function GET_JSON(url: string) {
|
||||||
return GET(url).then((res) => {
|
return GET(url).then((res) => {
|
||||||
return res.json();
|
return res.json();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function POST(url, data) {
|
export function POST(url, data) {
|
||||||
let option = {
|
let option = {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
body: JSON.stringify(data),
|
body: JSON.stringify(data),
|
||||||
@ -37,7 +37,7 @@ export async function POST(url, data) {
|
|||||||
return request(url, option);
|
return request(url, option);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function DELETE(url, data) {
|
export function DELETE(url, data) {
|
||||||
let option = {
|
let option = {
|
||||||
method: "DELETE",
|
method: "DELETE",
|
||||||
body: JSON.stringify(data),
|
body: JSON.stringify(data),
|
||||||
@ -45,7 +45,7 @@ export async function DELETE(url, data) {
|
|||||||
return request(url, option);
|
return request(url, option);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function PUT(url, data) {
|
export function PUT(url, data) {
|
||||||
let option = {
|
let option = {
|
||||||
method: "PUT",
|
method: "PUT",
|
||||||
body: JSON.stringify(data),
|
body: JSON.stringify(data),
|
||||||
@ -53,19 +53,19 @@ export async function PUT(url, data) {
|
|||||||
return request(url, option);
|
return request(url, option);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function POST_JSON(url, data) {
|
export function POST_JSON(url, data) {
|
||||||
return POST(url, data).then((res) => {
|
return POST(url, data).then((res) => {
|
||||||
return res.json();
|
return res.json();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function DELETE_JSON(url, data) {
|
export function DELETE_JSON(url, data) {
|
||||||
return DELETE(url, data).then((res) => {
|
return DELETE(url, data).then((res) => {
|
||||||
return res.json();
|
return res.json();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function PUT_JSON(url, data) {
|
export function PUT_JSON(url, data) {
|
||||||
return PUT(url, data).then((res) => {
|
return PUT(url, data).then((res) => {
|
||||||
return res.json();
|
return res.json();
|
||||||
});
|
});
|
||||||
|
@ -17,6 +17,7 @@ import { md5Hash, sha1Hash } from "../util/crypto.util";
|
|||||||
import { retry } from "../util/promise.util";
|
import { retry } from "../util/promise.util";
|
||||||
import { MAX_TRY_COUNT, MAX_UPLOAD_COUNT } from "../config/constants";
|
import { MAX_TRY_COUNT, MAX_UPLOAD_COUNT } from "../config/constants";
|
||||||
import { ZError } from "../common/ZError";
|
import { ZError } from "../common/ZError";
|
||||||
|
import { emailLogin } from "../api/EmailApi";
|
||||||
|
|
||||||
export function newAccount(password: string, index: number) {
|
export function newAccount(password: string, index: number) {
|
||||||
const mnemonic = loadMnemonic(password);
|
const mnemonic = loadMnemonic(password);
|
||||||
@ -49,6 +50,7 @@ async function syncWalletEnv() {
|
|||||||
walletEnv.address = infoRes.data.address;
|
walletEnv.address = infoRes.data.address;
|
||||||
walletEnv.key = infoRes.data.key;
|
walletEnv.key = infoRes.data.key;
|
||||||
walletEnv.salt = infoRes.data.salt;
|
walletEnv.salt = infoRes.data.salt;
|
||||||
|
console.log(JSON.stringify(walletEnv));
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function walletPreLogin(channel: number) {
|
export async function walletPreLogin(channel: number) {
|
||||||
@ -70,17 +72,13 @@ export async function walletPreLogin(channel: number) {
|
|||||||
let res: any = await new NativeSvr().signWithTwitter();
|
let res: any = await new NativeSvr().signWithTwitter();
|
||||||
window.debug && console.log("native twitter res: " + res);
|
window.debug && console.log("native twitter res: " + res);
|
||||||
tokenRes = await twitterAuth(res);
|
tokenRes = await twitterAuth(res);
|
||||||
} else if (channel == 5) {
|
|
||||||
let res: any = await new NativeSvr().signWithEmail();
|
|
||||||
window.debug && console.log("native twitter res: " + res);
|
|
||||||
tokenRes = await twitterAuth(res);
|
|
||||||
} else {
|
} else {
|
||||||
let res: any = await new NativeSvr().signWithGoogle();
|
let res: any = await new NativeSvr().signWithGoogle();
|
||||||
window.debug && console.log("native google res: " + res);
|
window.debug && console.log("native google res: " + res);
|
||||||
tokenRes = await googleAuth(res);
|
tokenRes = await googleAuth(res);
|
||||||
}
|
}
|
||||||
window.debug && console.log("wallet token: " + tokenRes.data?.token);
|
|
||||||
window.debug && console.log(tokenRes);
|
window.debug && console.log(tokenRes);
|
||||||
|
window.debug && console.log("wallet token: " + tokenRes.data?.token);
|
||||||
if (tokenRes.errcode || !tokenRes.data?.token) {
|
if (tokenRes.errcode || !tokenRes.data?.token) {
|
||||||
throw new ZError(tokenRes.errcode, tokenRes.errmsg);
|
throw new ZError(tokenRes.errcode, tokenRes.errmsg);
|
||||||
}
|
}
|
||||||
@ -89,6 +87,18 @@ export async function walletPreLogin(channel: number) {
|
|||||||
return { token: walletEnv.token, address: walletEnv.address };
|
return { token: walletEnv.token, address: walletEnv.address };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function loginByEmail(email: string, password: string) {
|
||||||
|
password = jsb.hashSvrPass(password);
|
||||||
|
let tokenRes = await emailLogin({ email, password });
|
||||||
|
if (tokenRes.errcode || !tokenRes.data?.token) {
|
||||||
|
throw new ZError(tokenRes.errcode, tokenRes.errmsg);
|
||||||
|
}
|
||||||
|
let walletEnv = new WalletEnv();
|
||||||
|
walletEnv.token = tokenRes.data.token;
|
||||||
|
await syncWalletEnv();
|
||||||
|
return { token: walletEnv.token, address: walletEnv.address };
|
||||||
|
}
|
||||||
|
|
||||||
export async function loadInternalWallet(pass: string) {
|
export async function loadInternalWallet(pass: string) {
|
||||||
let walletEnv = new WalletEnv();
|
let walletEnv = new WalletEnv();
|
||||||
if (!walletEnv.key) {
|
if (!walletEnv.key) {
|
||||||
|
@ -1,5 +1,11 @@
|
|||||||
import { updateEmailVerify } from "../api/PayApi";
|
import {
|
||||||
import { isEmailVerified } from "../api/WalletApi";
|
checkEmailRegister,
|
||||||
|
emailRegister,
|
||||||
|
isEmailVerified,
|
||||||
|
sendCode,
|
||||||
|
verifyEmailByCode,
|
||||||
|
} from "../api/EmailApi";
|
||||||
|
|
||||||
import { singleton } from "../decorator/singleton.decorator";
|
import { singleton } from "../decorator/singleton.decorator";
|
||||||
|
|
||||||
@singleton
|
@singleton
|
||||||
@ -33,10 +39,21 @@ export class EmailVerifySvr {
|
|||||||
/**
|
/**
|
||||||
* Begins the process of verifying the user's email
|
* Begins the process of verifying the user's email
|
||||||
* @param email - the email to be verified
|
* @param email - the email to be verified
|
||||||
* @returns a Promise that resolves to the result of the updateEmailVerify API call
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public async beginVerifyEmail(email: string) {
|
public async sendEmailCode(email: string, type: number) {
|
||||||
return updateEmailVerify({ email });
|
return sendCode({ email, type });
|
||||||
|
}
|
||||||
|
|
||||||
|
public async updateEmailVerify(email: string, code: string) {
|
||||||
|
return verifyEmailByCode({ email, code });
|
||||||
|
}
|
||||||
|
|
||||||
|
public async isEmailRegister(email: string) {
|
||||||
|
return checkEmailRegister({ email });
|
||||||
|
}
|
||||||
|
|
||||||
|
public async registByEmail(email: string, password: string, code: string) {
|
||||||
|
return emailRegister({ email, password, code });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user