From 0930a0fd962a2d88981452638133a8f466d89db2 Mon Sep 17 00:00:00 2001 From: Maxime Maillet Date: Tue, 9 Jan 2018 15:45:27 +0100 Subject: [PATCH] init files --- .gitignore | 1 + index.js | 5 ++++ jobs/add_reply.js | 39 +++++++++++++++++++++++++++++ package-lock.json | 49 ++++++++++++++++++++++++++++++++++++ package.json | 14 +++++++++++ parameters.yml | 5 ++++ services/service.js | 57 ++++++++++++++++++++++++++++++++++++++++++ workflows/workflow.yml | 14 +++++++++++ 8 files changed, 184 insertions(+) create mode 100644 .gitignore create mode 100644 index.js create mode 100644 jobs/add_reply.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 parameters.yml create mode 100644 services/service.js create mode 100644 workflows/workflow.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/index.js b/index.js new file mode 100644 index 0000000..d0ade3f --- /dev/null +++ b/index.js @@ -0,0 +1,5 @@ +module.exports = { + parameters: './parameters.yml', + workflows_directory: './workflows/', + jobs_directory: './jobs/', +}; \ No newline at end of file diff --git a/jobs/add_reply.js b/jobs/add_reply.js new file mode 100644 index 0000000..3c977c9 --- /dev/null +++ b/jobs/add_reply.js @@ -0,0 +1,39 @@ +const replyService = require('../services/service'); + +module.exports = async(job) => { + + const { + body, + workflow: { + data: wfData + } + } = job.data; + + try { + await replyService.api(wfData.api_key).send('GET', `/v1/people?email=${encodeURIComponent(body.email)}`); + job.progress(35); + + await replyService.api(wfData.api_key).send('POST', '/v1/actions/removepersonfromallcampaigns', { + 'email': body.email + }); + job.progress(75); + + await replyService.api(wfData.api_key).send('POST', '/v1/actions/pushtocampaign', { + 'campaignId': wfData.campaign_id, + 'email': body.email, + }); + job.progress(100); + + } catch(err) { + if(err.statusCode === 404) { + await replyService.api(wfData.api_key).send('POST', '/v1/actions/addandpushtocampaign', { + 'campaignId': wfData.campaign_id, + 'email': body.email, + 'firstName': body.email, + }); + job.progress(100); + } else { + throw err; + } + } +}; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..fdb4580 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,49 @@ +{ + "name": "reply_add", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "request-promise-core": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", + "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "requires": { + "lodash": "4.17.4" + } + }, + "request-promise-native": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", + "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", + "requires": { + "request-promise-core": "1.1.1", + "stealthy-require": "1.1.1", + "tough-cookie": "2.3.3" + } + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" + }, + "tough-cookie": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", + "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "requires": { + "punycode": "1.4.1" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..8891b6d --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "name": "workflow-lib/reply", + "version": "0.0.1", + "description": "Reply jobs for workflow manager", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Maxime Maillet", + "license": "ISC", + "dependencies": { + "request-promise-native": "^1.0.5" + } +} diff --git a/parameters.yml b/parameters.yml new file mode 100644 index 0000000..ca92af5 --- /dev/null +++ b/parameters.yml @@ -0,0 +1,5 @@ +parameters: + reply_do_api_key: 'zPrWY3NXsgaW-5Spbs9ciA2' + reply_ssii_api_key: '46cOPrjvAwRw9A4oRd3mrA2' + reply_axel_api_key: 'Adw_Mfu80vjHkF2fZclvhg2' + campaign_reply_doi: 30460 \ No newline at end of file diff --git a/services/service.js b/services/service.js new file mode 100644 index 0000000..109f98c --- /dev/null +++ b/services/service.js @@ -0,0 +1,57 @@ +const request = require('request-promise-native'); + +module.exports.api = (apikey) => { + return endpointReply(apikey); +}; + +/** + * @param apiKey + * @returns {{send: (function(*=, *=, *=))}} + */ +const endpointReply = (apiKey) => { + return { + send: (method, endpoint, params) => { + return sendRequest(method, endpoint, params, apiKey); + } + }; +}; + +/** + * Send request to reply + * @param method + * @param endpoint + * @param params + * @param apiKey + * @returns {*} + */ +function sendRequest(method, endpoint, params, apiKey) { + if (apiKey === null || apiKey === undefined) { + throw new Error('Missing api key'); + } + + const options = { + uri: `https://api.reply.io${endpoint}`, + port: 443, + method: method, + pathname: '', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'X-Api-Key': apiKey + } + }; + + if (options.method === 'GET') { + options['qs'] = params; + } else { + options['body'] = JSON.stringify(params); + } + + return request(options).then((data) => { + if (data) { + return JSON.parse(data); + } else { + return null; + } + }); +} \ No newline at end of file diff --git a/workflows/workflow.yml b/workflows/workflow.yml new file mode 100644 index 0000000..7a5b33a --- /dev/null +++ b/workflows/workflow.yml @@ -0,0 +1,14 @@ +name: "User created from web site" +id: user-created + +requirements: + data: + - hostname: 'adequancy.com' + +stages: + - lehibou_do_created: + job: add_reply + data: + - api_key: "%reply_do_api_key%" + - campaign_id: "%campaign_reply_doi%" +