@speakr/speakr-module-services
Version:
SPEAKR Shared Service Module
72 lines (63 loc) • 2.25 kB
JavaScript
;
const env = require('@speakr/speakr-module-services/env/');
const AWS = require('aws-sdk');
AWS.config = {
accessKeyId: 'AKIAJHLLJJBKU5JC7ZVA',
secretAccessKey: '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',
region: 'us-east-1'
};
module.exports = {
lambdaPublish
};
function lambdaPublish(submissions, message) {
const lambdaPromises = submissions.map(sub => {
const submission = sub.dataValues ? sub.dataValues : sub;
return new Promise((resolve, reject) => {
// don't publish submissions with an 'idea submission' initiative type (product)
if (submission.initiative.product === "Idea Submission") return null;
const username = submission.account.dataValues ? submission.account.dataValues.current_username : submission.account.current_username
const publishPayload = {
creative_id: submission.id,
status_message: message
};
const lambda = new AWS.Lambda({
apiVersion: '2015-03-31',
logger: console,
region: 'us-east-1',
});
const params = {
FunctionName: `faveme-lambda-publish-${process.env.NODE_ENV}-publish`,
InvocationType: 'RequestResponse',
Payload: JSON.stringify(publishPayload)
};
return lambda.invoke(params, function(err, data) {
if(err) {
console.log('\n\nPublish lambda error:', err)
return resolve(err);
} else if(data) {
console.log('>', data)
const Payload = JSON.parse(data.Payload) || 'Error publishing creative.';
console.log('>>'. Payload)
console.log(`\n\nPublish lambda status for creative ${publishPayload.creative_id}`, data.StatusCode, data.Payload);
const pubResponse = {
StatusCode: data.StatusCode,
Payload: Payload,
creative_id: submission.id,
current_username: username
};
if(data.Payload
&& Payload
&& Payload.errorMessage
&& submission.platform_id === 1
&& (submission.content_type === 'image' || submission.content_type === 'video')) {
pubResponse.speakrErrorMessage = Payload.errorMessage
? Payload.errorMessage
: 'Probably a Twitter media error. Make sure your media matches Twitter\'s requirements.'
}
return resolve(pubResponse);
}
});
})
});
return Promise.all(lambdaPromises);
}