Source: sdk-file/src/qq/decryptData.js

const HError = require('core-module/HError')

/**
 * QQ 加密数据解密
 * @function
 * @name decryptData
 * @since v2.4.0
 * @memberof BaaS
 * @param {string} encryptedData 加密的数据
 * @param {string} iv 加密算法的初始向量
 * @param {string} type 数据类型
 * @return {Promise<any>}
 */
const createDecryptDataFn = BaaS => (...params) => {
  const API = BaaS._config.API

  if (!validateParams(params)) {
    throw new HError(605)
  }

  let paramsObj = {
    encryptedData: params[0],
    iv: params[1]
  }

  return BaaS._baasRequest({
    url: API.QQ.DECRYPT + params[2] + '/',
    method: 'POST',
    data: paramsObj,
  }).then(res => {
    return res.data
  }, err => {
    let code = err.code
    if (code === 403) throw new HError(403, 'QQ 解密插件未开启')
    throw err
  })
}

const validateParams = (params) => {
  if (!(params instanceof Array) || params.length < 3) return false
  const requiredDataKeys = ['open-gid']
  return requiredDataKeys.indexOf(params[2]) !== -1
}

module.exports = function (BaaS) {
  BaaS.decryptData = createDecryptDataFn(BaaS)
}