blob: 7115024b7ff7eda88f2bf19286d48d27884fdf4c [file] [log] [blame]
var request = require('request');
function main(msg) {
// for creation -> CREATE
// for deletion -> DELETE
var lifecycleEvent = msg.lifecycleEvent;
var endpoint = msg.apihost;
var webparams = createWebParams(msg);
var url = `https://${endpoint}/api/v1/web/whisk.system/cloudantWeb/changesWebAction.http`;
if (lifecycleEvent !== 'CREATE' && lifecycleEvent !== 'DELETE') {
return Promise.reject('lifecycleEvent must be CREATE or DELETE');
}
else {
var method = lifecycleEvent === 'CREATE' ? 'put' : 'delete';
return requestHelper(url, webparams, method);
}
}
function requestHelper(url, input, method) {
return new Promise(function(resolve, reject) {
request({
method : method,
url : url,
json: input,
rejectUnauthorized: false
}, function(error, response, body) {
if (!error && response.statusCode === 200) {
resolve();
}
else {
if (response) {
console.log('cloudant: Error invoking whisk action:', response.statusCode, body);
reject(body);
}
else {
console.log('cloudant: Error invoking whisk action:', error);
reject(error);
}
}
});
});
}
function createWebParams(rawParams) {
var namespace = process.env.__OW_NAMESPACE;
var triggerName = ':' + namespace + ':' + parseQName(rawParams.triggerName, '/').name;
var webparams = Object.assign({}, rawParams);
delete webparams.lifecycleEvent;
delete webparams.bluemixServiceName;
delete webparams.apihost;
webparams.triggerName = triggerName;
return webparams;
}
function parseQName(qname, separator) {
var parsed = {};
var delimiter = separator || ':';
var defaultNamespace = '_';
if (qname && qname.charAt(0) === delimiter) {
var parts = qname.split(delimiter);
parsed.namespace = parts[1];
parsed.name = parts.length > 2 ? parts.slice(2).join(delimiter) : '';
} else {
parsed.namespace = defaultNamespace;
parsed.name = qname;
}
return parsed;
}
exports.main = main;