@tencentcloud/chat-cs-uniapp
Version:
TCCC uniapp UIKit
115 lines (106 loc) • 4.47 kB
text/typescript
import qs from 'query-string';
export function getQuery() {
if (window.location.hash !== '') {
console.log(window.location);
const parseResult = qs.parse(window.location.hash.split('?')[1])
return {
webAppId: uni.getStorageSync('getQueryWebAppId') || parseResult?.webAppId,
clientData: uni.getStorageSync('getQueryClientData') || parseResult?.clientData,
userSig: uni.getStorageSync('getQueryUserSig') || parseResult?.userSig,
hideHeader: uni.getStorageSync('getQueryHideHeader') || parseResult?.hideHeader,
demoUserPhone: uni.getStorageSync('getQueryDemoUserPhone') || parseResult?.demoUserPhone,
globalSite: uni.getStorageSync('getQueryGlobalSite') || parseResult?.globalSite,
}
} else {
console.log(window.location);
const parseResult = qs.parse(window.location.search.split('?')[1])
return {
webAppId: uni.getStorageSync('getQueryWebAppId') || parseResult?.webAppId,
clientData: uni.getStorageSync('getQueryClientData') || parseResult?.clientData,
userSig: uni.getStorageSync('getQueryUserSig') || parseResult?.userSig,
hideHeader: uni.getStorageSync('getQueryHideHeader') || parseResult?.hideHeader,
demoUserPhone: uni.getStorageSync('getQueryDemoUserPhone') || parseResult?.demoUserPhone,
globalSite: uni.getStorageSync('getQueryGlobalSite') || parseResult?.globalSite,
}
}
}
export function isTestEnv() {
return process.env.NODE_ENV === 'development' || process.env.REACT_APP_NODE_ENV === 'test';
}
export function isPreEnv() {
return process.env.REACT_APP_NODE_ENV === 'pre';
}
interface ratingTemplate {
errorCode: string,
menuContent: string
menuId: string
menuName: string
menuSendRuleFlag: string
msg: string
nonce: string
requestId: string
}
export function parseRatingTemplate(ratingTemplate: ratingTemplate) {
return {
...JSON.parse(ratingTemplate.menuContent),
allowClientSendRating: parseInt(ratingTemplate.menuSendRuleFlag) === 4
}
}
export function dynamicLoadCaptcha() {
return new Promise((resolve, reject) => {
const captcha = document.getElementById('TCaptcha');
if (!captcha) {
const script = document.createElement('script');
script.src = 'https://ssl.captcha.qq.com/TCaptcha.js';
script.id = 'TCaptcha';
script.addEventListener('load', resolve);
script.addEventListener('error', reject);
document.body.appendChild(script);
} else {
resolve(undefined);
}
});
}
export function verify(appId: any) {
return dynamicLoadCaptcha()
.then(
() =>
new Promise((resolve, reject) => {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
new TencentCaptcha(appId, (res: any) => {
switch (res.ret) {
case 0:
resolve(res);
return;
case 2:
resolve(undefined);
return;
default:
reject(`verify failed, ret: ${JSON.stringify(res)}`);
return;
}
}, { loading: false }).show();
}),
)
.catch((error) => {
console.error('captcha', error);
if (error instanceof Error) {
return generateFallbackCaptchaResult(appId, 1005, error.message);
}
if (error?.target?.id === 'TCaptcha') {
return generateFallbackCaptchaResult(appId, 1001, 'jsload_error');
}
return generateFallbackCaptchaResult(appId, 1005, error?.toString() || 'unknown_error');
});
}
export function generateFallbackCaptchaResult(appId: string, errorCode: number, errorMessage: string) {
return {
ret: 0,
appid: appId,
randstr: `@${((window.crypto.getRandomValues(new Uint8Array(1)) as any) * 0.001).toString(36).substr(2)}`,
ticket: `terror_1001_${appId}_${Math.floor(new Date().getTime() / 1000)}`,
errorCode,
errorMessage,
};
}