UNPKG

prisme-flow

Version:

prisme platform flow engine

126 lines (116 loc) 3.41 kB
/** * Created by prisme.io on 09/06/2017. */ var request = require('request').defaults({ encoding: null }) var _ = require('underscore') var os = require('os') var fs = require('fs') // local vars, store temporary profiles var _profiles = {} module.exports = { getOrFetchProfile: function (facebookId, bot) { return new Promise(function (resolve, reject) { // if id is null, then spit out a test user if (facebookId == null) { resolve({ first_name: 'Test user first name', last_name: 'Test user last name' }) return } if (_profiles[facebookId] != null) { resolve(_profiles[facebookId]) } else { // ask facebook bot.getProfile(facebookId) .then(function (profile) { _profiles[facebookId] = profile resolve(profile) }) .catch(function (err) { reject('Unable to get profile info for ' + facebookId + (err.message != null ? ' - ' + err.message : '')) }) } }) }, downloadFile: function (url, token) { return new Promise(function (resolve, reject) { var options = { url: url } request(options, function (error, response, body) { if (error) { reject(error) } else { resolve(body) } }) }) }, uploadBuffer: function (params) { return new Promise(function (resolve, reject) { params = _.extend({ recipient: null, filename: 'tmp-file', token: null, buffer: null, type: 'image', mimeType: 'application/octet-stream' }, params) var tmpFile = os.tmpdir() + '/' + params.filename // write to filesystem to use stream fs.writeFile(tmpFile, params.buffer, function (err) { if (err) { reject(err) } else { // prepare payload var filedata = null switch (params.type) { case 'image': filedata = { value: fs.createReadStream(tmpFile), options: { filename: params.filename, contentType: 'image/png' // fix extension } } break case 'audio': filedata = { value: fs.createReadStream(tmpFile), options: { filename: params.filename, contentType: 'audio/mp3' } } break case 'file': filedata = { value: fs.createReadStream(tmpFile), options: { filename: params.filename, contentType: params.mimeType } } } // upload and send var formData = { recipient: '{"id":"' + params.recipient + '"}', message: '{"attachment":{"type":"' + params.type + '", "payload":{}}}', filedata: filedata } request.post({ url: 'https://graph.facebook.com/v2.6/me/messages?access_token=' + params.token, formData: formData }, function (err) { if (err) { reject(err) } else { resolve() } }) } }) // end writeFile }) } }