/**
 * 
 * @date 2023-02-16 16:30:18
 * @author 鲜伟坚
 */
import * as crypto from 'crypto'
class CryptoUtils {

    /**
    * MD5
    */
    static md5(text: string): string {
        return crypto
            .createHash('md5')
            .update(text)
            .digest('hex')
    }

    /**
     * 统一平台签名算法
     */
    static getTYApiSing(p: Object): string {
        let str = Object.keys(p).sort().filter(k => {
            // 排除 key 和 appId
            if (['key', 'appId', 'appsecret'].includes(k)) {
                return false
            }

            // 保留数字类型的字段
            if (typeof (p[k]) === 'number') {
                return true
            }

            // 排除空字符串的字段
            if (typeof (p[k]) === 'string') {
                return !!p[k]
            }

            return false
        }).map(k => `${k}=${p[k]}`).join('&')

        str += `&${p['appsecret']}`
        return CryptoUtils.md5(str).toUpperCase()
    }

}

export { CryptoUtils }