# 工具类函数

# setup

初始化 axios,配置 axios 默认参数,简化使用。

axios.defaults.baseURL = SERVER_URL

# nonce

生成用于签名的 6 位随机数和毫秒时间戳。

//#region nonce
export default function genNonce() {
  const nonce = `${Math.floor(100000 + Math.random() * 900000)}`
  const timestamp = `${Math.floor(new Date().getTime() / 1000)}`
  return { nonce, timestamp }
}
//#endregion nonce

# sign

使用 Open API 统一签名算法,生成签名。

function genSignature(params: Object, secret: string) {
  let entries = Object.entries(params).sort()
  const querystring = entries
    .map(([key, value]) => {
      return [key, encodeURIComponent(value)]
    })
    .map(([key, value]) => {
      return `${key}=${value}`
    })
    .join('&')

  const hmac = crypto.createHmac('sha1', secret)
  hmac.update(querystring)
  const signature = hmac.digest('base64')
  return signature
}

type HTTPMethod = 'POST' | 'GET' | 'PUT' | 'DELETE'

export default function sign(
  method: HTTPMethod,
  path: string,
  nonce: string,
  timestamp: string
): string {
  const appId = APPID
  const signature = genSignature(
    {
      appId,
      method,
      nonce,
      path,
      timestamp,
    },
    APPSECRET
  )
  return signature
}

# authorization

按照约定规则,将请求签名和 APPID 拼接为请求头部 Authorization 字段的值。

export default function authorization(sign: string) {
  return `${APPID}:${sign}`
}