index.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. "use strict";
  2. var __importDefault = (this && this.__importDefault) || function (mod) {
  3. return (mod && mod.__esModule) ? mod : { "default": mod };
  4. };
  5. Object.defineProperty(exports, "__esModule", { value: true });
  6. const httpRequest_1 = __importDefault(require("../utils/httpRequest"));
  7. const utils_1 = require("../utils/utils");
  8. const code_1 = require("../const/code");
  9. const cloudbase_1 = require("../cloudbase");
  10. const reportTypes = ['mall'];
  11. function validateAnalyticsData(data) {
  12. if (Object.prototype.toString.call(data).slice(8, -1) !== 'Object') {
  13. return false;
  14. }
  15. const { report_data, report_type } = data;
  16. if (reportTypes.includes(report_type) === false) {
  17. return false;
  18. }
  19. if (Object.prototype.toString.call(report_data).slice(8, -1) !== 'Object') {
  20. return false;
  21. }
  22. if (report_data.action_time !== undefined && !Number.isInteger(report_data.action_time)) {
  23. return false;
  24. }
  25. if (typeof report_data.action_type !== 'string') {
  26. return false;
  27. }
  28. return true;
  29. }
  30. async function analytics(cloudbase, requestData) {
  31. // 获取openid, wxappid
  32. const { WX_OPENID, WX_APPID, } = cloudbase_1.CloudBase.getCloudbaseContext();
  33. if (!validateAnalyticsData(requestData)) {
  34. throw utils_1.E(Object.assign({}, code_1.ERROR.INVALID_PARAM, { message: '当前的上报数据结构不符合规范' }));
  35. }
  36. const action_time = requestData.report_data.action_time === undefined ? Math.floor(Date.now() / 1000) : requestData.report_data.action_time;
  37. const transformRequestData = {
  38. analytics_scene: requestData.report_type,
  39. analytics_data: Object.assign({ openid: WX_OPENID, wechat_mini_program_appid: WX_APPID }, requestData.report_data, { action_time })
  40. };
  41. const params = {
  42. action: 'analytics.report',
  43. requestData: transformRequestData
  44. };
  45. return httpRequest_1.default({
  46. config: cloudbase.config,
  47. params,
  48. method: 'post',
  49. headers: {
  50. 'content-type': 'application/json'
  51. }
  52. });
  53. }
  54. exports.analytics = analytics;