UNPKG

@cloudbase/node-sdk

Version:

tencent cloud base server sdk for node.js

80 lines (65 loc) 1.94 kB
/* 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' } }) }