UNPKG

f1foo

Version:

An integration between Wufoo's WebHooks and Fellowship One's REST API.

61 lines (56 loc) 1.84 kB
var debug = require('debug')(require('../package.json').name + ':WufooTranslator') var async = require('async') var _ = require('lodash') function WufooTranslator () {} WufooTranslator.prototype.translate = function (postBody, callback) { process.nextTick(function () { if (validBody(postBody)) { debug('translating %j', postBody) var struct = JSON.parse(postBody.FieldStructure) async.reduce(struct.Fields, {}, function (memo, item, callback) { if (item.SubFields) { async.reduce(item.SubFields, {}, function (memo, item, callback) { memo[item.Label] = postBody[item.ID] callback(null, memo) }, function (err, items) { memo[item.Title] = items callback(err, memo) }) } else { memo[item.Title] = postBody[item.ID] callback(null, memo) } }, function (err, sub) { if (err) { return callback(err) } async.filter(_.keys(postBody), function (item, callback) { callback(!(/FieldStructure/.test(item) || /FormStructure/.test(item) || /Field[0-9]+/.test(item))) }, function (items) { async.reduce(items, sub, function (memo, item, callback) { if (!memo.metadata) memo.metadata = {} memo.metadata[item] = postBody[item] callback(null, memo) }, callback) }) }) } else { debug('Missing FieldStructure in %j', postBody) callback('Missing FieldStructure property') } }) } var validBody = function (body) { var valid = body && body.FieldStructure && typeof body.FieldStructure === 'string' try { if (valid) { JSON.parse(body.FieldStructure) } return valid } catch (e) { return false } } module.exports = WufooTranslator