kpay-install
Version:
Install the latest k-pay lib in your Fitbit app/clockface
105 lines (94 loc) • 3.81 kB
JavaScript
const [,, ...args] = process.argv
if(args.length < 4) {
console.error('Usage : kpay-install [apikey] [appName] [fitbit-developer-id] [fitbit-app-cluster-id] [(optional)libVersion]')
return
}
const fs = require('fs')
const unzip = require('unzip')
const request = require('request')
const mkdirp = require('mkdirp');
const readline = require('readline2');
const projectDir = process.env.INIT_CWD || require('path').resolve(".")
const apikey = args[0]
const appName = args[1]
const fitbitDeveloperId = args[2]
const fitbitAppClusterId = args[3]
var fitbitLibVersion = null;
if (args.length >= 5) {
fitbitLibVersion = args[4]
}
var requestUrl = `https://api.k-pay.io/api/merchant/downloadlib/?platform=fitbit&key=${apikey}&appname=${encodeURI(appName)}&fitbitDeveloperId=${encodeURI(fitbitDeveloperId)}&fitbitAppClusterId=${encodeURI(fitbitAppClusterId)}`;
if (fitbitLibVersion) {
requestUrl += `&fitbitLibVersion=${encodeURI(fitbitLibVersion)}`;
}
console.log(`Checking k-pay for ${appName}`)
request(requestUrl,
function (error, _, body) {
if (error) {
console.error("ERROR:" + error);
return;
}
var resp = JSON.parse(body);
if (resp && resp.success && resp.url) {
downloadAndInstallLib(resp.url);
}
else if (resp && resp.error) {
console.error("ERROR: " + resp.error);
}
else {
console.error("Unknown error...");
}
});
function downloadAndInstallLib(url) {
console.log(`Downloading k-pay lib for ${appName}`)
request(url)
.on('response', (response) => {
if(response.statusCode === 200) {
console.log(`Installing...`)
response.pipe(unzip.Parse())
.on('entry', (entry) => {
var fileName = entry.path
if (fileName === 'app/kpay/kpay_config.js' && fs.existsSync(projectDir + '/' + fileName)) {
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
rl.question('Do you want to overwrite your existing app/kpay/kpay_config.js? (y/N) ', (answer) => {
if(answer === 'y') {
entry.pipe(fs.createWriteStream(fileName))
}
else {
entry.autodrain()
}
rl.close()
})
}
else if (entry.type === 'Directory') {
if (fileName.includes('kpay') || !fs.existsSync(projectDir + '/' + fileName)) {
mkdirp.sync(projectDir + '/' + fileName)
}
if (fileName.includes('i18n') || !fs.existsSync(projectDir + '/' + fileName)) {
mkdirp.sync(projectDir + '/' + fileName)
}
entry.autodrain()
}
else if (entry.type === 'File') {
if (fileName.includes('kpay') || !fs.existsSync(projectDir + '/' + fileName)) {
entry.pipe(fs.createWriteStream(fileName))
}
if (fileName.includes('i18n') || !fs.existsSync(projectDir + '/' + fileName)) {
entry.pipe(fs.createWriteStream(fileName))
}
}
else {
entry.autodrain()
}
})
}
else {
console.error(`ERROR : ${response.body}`)
}
})
.on('error', (err) => console.error(err))
}