UNPKG

@fork-anyone/node-nim

Version:

NetEase IM nodejs wrapper based on NetEase IM C++ SDK

118 lines (109 loc) 4.4 kB
const fetch = require('node-fetch') const fs = require('fs') const path = require('path') const compareVersions = require('compare-versions') const download = require('download') // Global variables const default_arch = 'universal' const platform = process.env.npm_config_platform || process.platform; const current_arch = process.env.npm_config_arch || process.arch const arch = platform === 'darwin' ? default_arch : current_arch const channel = 'message' const product = 'nim' const savePath = path.join(__dirname, '..', 'temporary') if (process.env.npm_config_ignoredownloadsdk) { console.log('ignore download product') process.exit(0) } let version let downloadUrl = process.env.npm_config_nimsdkurl if (process.env.npm_package_version) { version = process.env.npm_package_version.split('-')[0] } if (process.env.npm_config_nimsdkversion) { version = process.env.npm_config_nimsdkversion } if (process.env.npm_package_config_nimsdkversion) { version = process.env.npm_package_config_nimsdkversion } async function downloadSDK(custom_sdk_url) { if (custom_sdk_url) { downloadUrl = custom_sdk_url } // fetch publish list const res = await fetch('https://admin.netease.im/public-service/free/publish/list') const publish_json = await res.json() // get sdk list if (!downloadUrl) { let latestVersion = '0.0.0' let latestDownloadUrl = '' Object.keys(publish_json.data[channel]).forEach((temp) => { if (compareVersions.compare(latestVersion, temp, '<')) { publish_json.data[channel][temp].forEach((member) => { if (member.filename.includes(product) && member.filename.includes(platform) && member.filename.includes(arch)) { latestVersion = temp latestDownloadUrl = member.cdnlink } }) } if (version === temp) { publish_json.data[channel][temp].forEach((member) => { if (member.filename.includes(product) && member.filename.includes(platform) && member.filename.includes(arch)) { downloadUrl = member.cdnlink } }) } }) if (!downloadUrl || downloadUrl.length === 0) { console.log(`[node-nim] Product [${product}] version ${version} not found, use latest version ${latestVersion}`) downloadUrl = latestDownloadUrl } console.log(`[node-nim] Downloading product: ${product}, platform: ${platform}, arch: ${arch}`) } if (!downloadUrl) { console.error(`[node-nim] Downloading product: ${product}, platform: ${platform}, arch: ${arch} not found`) return } console.info(`[node-nim] Downloading prebuilt SDK from ${downloadUrl} to ${savePath}`) // remove temporary download folder and target folder const target = path.join(__dirname, '..', 'build', 'Release') if (fs.existsSync(savePath)) { fs.rmSync(savePath, { recursive: true }) } if (fs.existsSync(target)) { fs.rmSync(target, { recursive: true }) } // download sdk try { await download(downloadUrl, savePath, { extract: true, filter: (file) => { return !file.path.includes('._') } }) // create build/Release folder if (!fs.existsSync(target)) { fs.mkdirSync(target, { recursive: true }) } // move sdk/* files to build/Release const from = path.join(savePath, platform === 'win32' ? 'bin' : 'lib') const files = fs.readdirSync(from) files.forEach((file) => { console.info(`[node-nim] move ${file} to ${target}`) fs.renameSync(path.join(from, file), path.join(target, file)) }) // remove temporary download folder fs.rmSync(savePath, { recursive: true }) console.info(`[node-nim] Downloading prebuilt SDK complete`) } catch (err) { console.error(`[node-nim] Failed to download, error: ${err}`) } } if (require.main === module) { const args = process.argv const downloadUrlIndex = args.indexOf('--nimSdkUrl'); const url = downloadUrlIndex !== -1 ? args[downloadUrlIndex + 1] : ''; downloadSDK(url) } exports.downloadSDK = downloadSDK downloadSDK()