'use strict'; // You can use your favorite http client package to make REST calls, however, the node fetch API is pre-installed with the bots-node-sdk. // Documentation can be found at https://www.npmjs.com/package/node-fetch // Un-comment the next line if you want to make REST calls using node-fetch. const fetch = require("node-fetch") module.exports = { metadata: () => ({ name: 'complete.training.CurrencyConverter', properties: { variable: { required: true, type: 'string' }, baseCurrency: { required: true, type: 'string' }, targetCurrencies: { required: true, type: 'string' }, amount: { required: true, type: 'int' } }, supportedActions: ['success', 'failure'] }), invoke: (context, done) => { const { variable } = context.properties() const { baseCurrency } = context.properties() const { targetCurrencies } = context.properties() const { amount } = context.properties() context.logger().info("Input parameter values: variable: " + variable + ", baseCurrency: " + baseCurrency + ", targetCurrencies: " + targetCurrencies + ", amount: " + amount) var tmpTargetCurrencies = targetCurrencies + "," + baseCurrency var fixerIoAPIKey = "" var reqUrl = "http://data.fixer.io/api/latest?access_key=" + fixerIoAPIKey + "&;base=EUR&symbols=" + tmpTargetCurrencies //hide API key from logs context.logger().info("fixer.io request URL:" + reqUrl.replace(fixerIoAPIKey, "*********")) fetch(reqUrl) .then((response) => { if (response.status === 200) { return response.json() } else { context.logger().warn("HTTP status code: " + response.statusCode) context.transition('failure') done() } }) .then((data) => { context.logger().info("Successful REST call.") if (data.success) { var _conversionArray = [] for (let property in data.rates) { if (property.toUpperCase() != baseCurrency.toUpperCase()) { let _conversionRate = data.rates[property] / data.rates[baseCurrency.toUpperCase()] let obj = {} obj.symbol = property obj.conversionRate = _conversionRate obj.amount = _conversionRate * amount context.logger().info(baseCurrency.toUpperCase() + " to " + property + "") _conversionArray.push(obj) } } context.logger().info("converted currencies: " + _conversionArray.toString()) let result = {} result.date = data.date result.base = {} result.base.symbol = baseCurrency result.base.amount = amount result.conversion = _conversionArray context.setVariable(variable, result) context.transition('success') context.keepTurn(true) } else { if (data.hasOwnProperty("error")) { context.logger().warn("Error type: " + data.error.type) context.logger().warn("Error message: " + data.error.info) } context.transition('failure') } done() }) .catch((err) => { done(err) } ); } };