@cloudbase/node-sdk
Version:
tencent cloud base server sdk for node.js
80 lines (65 loc) • 1.94 kB
text/typescript
/* eslint-disable @typescript-eslint/naming-convention */
import * as tcbapicaller from '../utils/tcbapirequester'
import { IAnalyticsDataItem, IReportData } from '../../types'
import { E } from '../utils/utils'
import { ERROR } from '../const/code'
import { CloudBase } from '../cloudbase'
const reportTypes = ['mall']
function validateAnalyticsData(data: IReportData): boolean {
if (Object.prototype.toString.call(data).slice(8, -1) !== 'Object') {
return false
}
const { report_data, report_type } = data
if (!reportTypes.includes(report_type)) {
return false
}
if (Object.prototype.toString.call(report_data).slice(8, -1) !== 'Object') {
return false
}
if (report_data.action_time !== undefined && !Number.isInteger(report_data.action_time)) {
return false
}
if (typeof report_data.action_type !== 'string') {
return false
}
return true
}
export async function analytics(
cloudbase: CloudBase,
requestData: IReportData
): Promise<void> {
// 获取openid, wxappid
const {
WX_OPENID,
WX_APPID
} = CloudBase.getCloudbaseContext()
if (!validateAnalyticsData(requestData)) {
throw E({
...ERROR.INVALID_PARAM,
message:
'当前的上报数据结构不符合规范'
})
}
const action_time = requestData.report_data.action_time === undefined ? Math.floor(Date.now() / 1000) : requestData.report_data.action_time
const transformRequestData: IAnalyticsDataItem = {
analytics_scene: requestData.report_type,
analytics_data: {
openid: WX_OPENID,
wechat_mini_program_appid: WX_APPID,
...requestData.report_data,
action_time
}
}
const params = {
action: 'analytics.report',
requestData: transformRequestData
}
return await tcbapicaller.request({
config: cloudbase.config,
params,
method: 'post',
headers: {
'content-type': 'application/json'
}
})
}