UNPKG

connect-platform

Version:

A platform to build backened code mostly in a visual manner.

88 lines (71 loc) 2.99 kB
const axios = require('axios'); const core = require('../core'); const ct = require('../util/color-text'); global.connect_platform_service_dependencies = global.connect_platform_service_dependencies || {}; module.exports = (service) => { if (service.url.indexOf('://') == -1) service.url = 'http://' + service.url; console.log(`${ct(ct.blue + ct.bright, 'connecting to service')} ${service.name} ${ct(ct.reverse, `@${service.url}`)}`); axios.get(service.url + '/api').then(response => { if (response.data) { global.connect_platform_service_dependencies[service.name] = { signatures: [] }; response.data.forEach(signature => { let sig = Object.assign({}, signature, { path: `${service.name}:${signature.path}`, public: false, outputs: signature.outputs || [], }); sig.outputs.push('#error'); let method = (signature.method)?(signature.method.toLowerCase()):('get'); global.connect_platform_service_dependencies[service.name].signatures.push(sig); //TODO: this should be moved to its own separate module. // core.node(sig, (inputs, output, control, error) => { let path = signature.path; signature.inputs.forEach(input => { path = path.replace(':' + input, inputs[input]); }); let req; if (method == 'get') req = axios.get(service.url + path, { params: inputs }); if (method == 'post') req = axios.post(service.url + path, inputs); if (method == 'put') req = axios.put(service.url + path, inputs); if (method == 'delete') req = axios.delete(service.url + path, { params: inputs}); if (!req) { output('#error', 'protocol mismatch'); return; } req.then(response => { if (response.data) { if (typeof response.data === 'string') { if (signature.controlOutputs.includes(response.data)) { control(response.data); return; } } else { let keys = Object.keys(response.data); for (let key of keys) { if (signature.outputs.includes(key)) { output(key, response.data[key]); return; } } } output('#error', 'signature mismatch'); } output('#error', 'protocol mismatch'); }) .catch(err => { if (err.response && err.response.data) output('#error', err.response.data); else output('#error', err); }); }); }) } }).catch(error => { console.log(`${ct(ct.red + ct.bright, 'ERROR:: could not connect to')} ${service.name} ${ct(ct.reverse, `@${service.url}`)}`); console.log(error); }); }