Socket
Socket
Sign inDemoInstall

machinepack-twitter

Package Overview
Dependencies
77
Maintainers
5
Versions
9
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.2.0 to 1.2.1

.eslintrc

66

machines/get-access-token.js

@@ -10,3 +10,3 @@ module.exports = {

extendedDescription: 'This machine should be used from your Twitter callback route (i.e. Twitter will redirect the user back to the `callbackUrl` you specify along with two values: "oauth_token" and "oauth_verifier". These two values can then be passed to this machine in order to get the access token which authorizes your app to access this user\'s Twitter account.)',
extendedDescription: 'This machine should be used from your Twitter "webhook" (i.e. not exactly a true webhook, but the "callback route" that Twitter will redirect the user back to based on the `callbackUrl` you specify. Note that this redirect URL will have bundled two values: "oauth_token" and "oauth_verifier" -- both of which should be passed to this machine in order to get the access token. The access token returned by this machine can be used to authorize your subsequent requests to the Twitter API, allowing you to access/act on behalf of this particular user\'s Twitter account.)',

@@ -19,23 +19,5 @@

consumerKey: {
example: 'xAmBxAmBxAmBkjbyKkjbyKkjbyK',
description: 'The `consumerKey` associated with one of your Twitter developer apps.',
required: true,
whereToGet: {
url: 'http://dev.twitter.com/apps',
description: 'Copy and paste an API key, or create one if you haven\'t already.',
extendedDescription: 'If you don\'t have any Twitter apps created yet, you\'ll need to make one first.'
}
},
consumerKey: require('../constants/consumerKey.required'),
consumerSecret: {
example: 'xAmBxAmBxAmBkjbyKkjbyKkjbyK',
description: 'The `consumerSecret` associated with one of your Twitter developer apps.',
required: true,
whereToGet: {
url: 'http://dev.twitter.com/apps',
description: 'Copy and paste an API key, or create one if you haven\'t already.',
extendedDescription: 'If you don\'t have any Twitter apps created yet, you\'ll need to make one first.'
}
},
consumerSecret: require('../constants/consumerSecret.required'),

@@ -67,14 +49,7 @@ oauthToken: {

defaultExit: 'success',
exits: {
error: {
description: 'Unexpected error occurred.'
},
success: {
description: 'Returns the user\'s permanent tokens, id, and screen name.',
example: {
outputDescription: 'The user\'s permanent tokens, id, and screen name.',
outputExample: {
accessToken: '847489329-998DSdafaasdDSF08asdfda08agf6ad6fsdaa08dasdaf76sa5',

@@ -92,2 +67,3 @@ accessSecret: 'SDFSssdfsdf9&SDfSDFSDFSfd9877ssdf',

var util = require('util');
var request = require('request');

@@ -99,4 +75,4 @@ var qs = require('querystring');

oauth: {
consumer_key: inputs.consumerKey,
consumer_secret: inputs.consumerSecret,
consumer_key: inputs.consumerKey,// eslint-disable-line camelcase
consumer_secret: inputs.consumerSecret,// eslint-disable-line camelcase
token: inputs.oauthToken,

@@ -106,24 +82,18 @@ verifier: inputs.oauthVerifier

}, function(err, response, body) {
if (err) {
return exits.error(err);
}
if (err) { return exits.error(err); }
if (response.statusCode > 299 || response.statusCode < 200) {
return exits.error(response.statusCode);
return exits.error(new Error('Unexpected response from Twitter API: '+response.statusCode+' :: '+util.inspect(body,{depth:5})));
}
var parsedResponse;
var parsedResBody;
try {
// oauth_token=3493938-B34829ABLD2NASI242AAGa32&oauth_token_secret=42Ga2gj249gADg9031jgasdGanv2139mmadval14aD&user_id=3493938&screen_name=mikermcneil
parsedResponse = qs.parse(body);
}
catch (e) {
return exits.error(e);
}
// oauth_token=949398-B34829ABABEFSI242AAGa32&oauth_token_secret=42Ga2gj249gADg903ah32gasdGanv2139mmadval123D&user_id=3483938&screen_name=mikermcneil
parsedResBody = qs.parse(body);
} catch (e) { return exits.error(e); }
return exits.success({
userId: parsedResponse.user_id,
screenName: parsedResponse.screen_name,
accessToken: parsedResponse.oauth_token,
accessSecret: parsedResponse.oauth_token_secret
userId: parsedResBody.user_id,
screenName: parsedResBody.screen_name,
accessToken: parsedResBody.oauth_token,
accessSecret: parsedResBody.oauth_token_secret
});

@@ -130,0 +100,0 @@

@@ -10,28 +10,7 @@ module.exports = {

extendedDescription: '',
inputs: {
consumerKey: {
example: 'xAmBxAmBxAmBkjbyKkjbyKkjbyK',
description: 'The `consumerKey` associated with one of your Twitter developer apps.',
required: true,
whereToGet: {
url: 'http://dev.twitter.com/apps',
description: 'Copy and paste an API key, or create one if you haven\'t already.',
extendedDescription: 'If you don\'t have any Twitter apps created yet, you\'ll need to make one first.'
}
},
consumerKey: require('../constants/consumerKey.required'),
consumerSecret: {
example: 'xAmBxAmBxAmBkjbyKkjbyKkjbyK',
description: 'The `consumerSecret` associated with one of your Twitter developer apps.',
required: true,
whereToGet: {
url: 'http://dev.twitter.com/apps',
description: 'Copy and paste an API key, or create one if you haven\'t already.',
extendedDescription: 'If you don\'t have any Twitter apps created yet, you\'ll need to make one first.'
}
},
consumerSecret: require('../constants/consumerSecret.required'),

@@ -47,14 +26,8 @@ callbackUrl: {

defaultExit: 'success',
exits: {
error: {
description: 'Unexpected error occurred.'
},
success: {
description: 'The initial URL where a user can allow/deny a specified Twitter app.',
example: 'https://twitter.com/oauth/authenticate?oauth_token=80Hl2t3SKgdPLyD0xMxoEPoJP3CEQSXV'
outputFriendlyName: 'URL',
outputDescription: 'The custom URL on Twitter.com where a user can allow/deny this Twitter app.',
outputExample: 'https://twitter.com/oauth/authenticate?oauth_token=80Hl2t3SKgdPLyD0xMxoEPoJP3CEQSXV'
}

@@ -67,4 +40,5 @@

var util = require('util');
var qs = require('querystring');
var request = require('request');
var qs = require('querystring');

@@ -75,16 +49,18 @@ request.post({

callback: inputs.callbackUrl,
consumer_key: inputs.consumerKey,
consumer_secret: inputs.consumerSecret
consumer_key: inputs.consumerKey,// eslint-disable-line camelcase
consumer_secret: inputs.consumerSecret// eslint-disable-line camelcase
}
}, function(err, response, body) {
if (err) {
return exits.error(err);
}
if (err) { return exits.error(err); }
if (response.statusCode > 299 || response.statusCode < 200) {
return exits.error(response.statusCode);
return exits.error(new Error('Unexpected response from Twitter API: '+response.statusCode+' :: '+util.inspect(body,{depth:5})));
}
var access_token = qs.parse(body);
var parsedResBody;
try {
parsedResBody = qs.parse(body);
}
catch (e) { return exits.error(e); }
return exits.success('https://twitter.com/oauth/authenticate?oauth_token=' + access_token.oauth_token);
return exits.success('https://twitter.com/oauth/authenticate?oauth_token=' + parsedResBody.oauth_token);

@@ -91,0 +67,0 @@ });

@@ -10,29 +10,4 @@ module.exports = {

extendedDescription: '',
inputs: {
consumerKey: {
example: 'xAmBxAmBxAmBkjbyKkjbyKkjbyK',
description: 'The `consumerKey` associated with one of your Twitter developer apps.',
required: true,
whereToGet: {
url: 'http://dev.twitter.com/apps',
description: 'Copy and paste an API key, or create one if you haven\'t already.',
extendedDescription: 'If you don\'t have any Twitter apps created yet, you\'ll need to make one first.'
}
},
consumerSecret: {
example: 'xAmBxAmBxAmBkjbyKkjbyKkjbyK',
description: 'The `consumerSecret` associated with one of your Twitter developer apps.',
required: true,
whereToGet: {
url: 'http://dev.twitter.com/apps',
description: 'Copy and paste an API key, or create one if you haven\'t already.',
extendedDescription: 'If you don\'t have any Twitter apps created yet, you\'ll need to make one first.'
}
},
screenName: {

@@ -44,2 +19,6 @@ example: 'johngalt',

consumerKey: require('../constants/consumerKey.optional'),
consumerSecret: require('../constants/consumerSecret.optional'),
accessToken: {

@@ -52,3 +31,2 @@ example: 'QDvCav5zRSafS795TckAerUV53xzgqRyrcfYX2i_PJFObCvACVRP-V7sfemiMPBh3TWypvagfZ6aoqfwKCNcBxg8XR_skdYUe5tsY9UzX9Z_8q4mR',

},
required: true
},

@@ -63,3 +41,10 @@

},
required: true
},
bearerToken: {
example: 'QDvCav5zRSafS795TckAerUV53xzgqRyrcfYX2i_PJFObCvACVRP-V7sfemiMPBh3TWypvagfZ6aoqfwKCNcBxg8XR_skdYUe5tsY9UzX9Z_8q4mR',
description: 'Can be used in place of `consumerKey`, `consumerSecret`, `accessToken`, and `accessSecret`.',
whereToGet: {
description: 'Run the `getBearerToken` machine in this pack and use the returned `bearerToken`.'
},
}

@@ -70,14 +55,7 @@

defaultExit: 'success',
exits: {
error: {
description: 'Unexpected error occurred.'
},
success: {
description: 'Returns the user\'s profile.',
example: {
outputDescription: 'The Twitter user\'s profile information.',
outputExample: {
name: 'John Galt',

@@ -112,5 +90,27 @@ screenName: 'johngalt',

var util = require('util');
var _ = require('lodash');
var request = require('request');
request.get({
// If no bearer token was provided, then `consumerKey`, `consumerSecret`,
// `accessToken`, and `accessSecret` must ALL be provided.
if(_.isUndefined(inputs.bearerToken) &&
( _.isUndefined(inputs.consumerKey) ||
_.isUndefined(inputs.consumerSecret) ||
_.isUndefined(inputs.accessToken) ||
_.isUndefined(inputs.accessSecret))) {
return exits.error(new Error('Usage error: If `bearerToken` was not provided, then `consumerKey`, `consumerSecret`, `accessToken`, and `accessSecret` must ALL be provided.'));
}
// If bearer token was provided, then `consumerKey`, `consumerSecret`,
// `accessToken`, and `accessSecret` must NOT be provided.
if(!_.isUndefined(inputs.bearerToken) &&
( !_.isUndefined(inputs.consumerKey) ||
!_.isUndefined(inputs.consumerSecret) ||
!_.isUndefined(inputs.accessToken) ||
!_.isUndefined(inputs.accessSecret))) {
return exits.error(new Error('Usage error: If `bearerToken` was provided, then other credentials should not be provided.'));
}
var requestOpts = {
url: 'https://api.twitter.com/1.1/users/show.json',

@@ -121,15 +121,23 @@ qs: (function _determineParams (){

var _params = {};
if (inputs.screenName) {
_params.screen_name = inputs.screenName;
}
_params.screen_name = inputs.screenName;// eslint-disable-line camelcase
return _params;
})(),
oauth: {
consumer_key: inputs.consumerKey,
consumer_secret: inputs.consumerSecret,
json: true
};
if(!_.isUndefined(inputs.bearerToken)) {
requestOpts.headers = {
Authorization: 'Bearer '+inputs.bearerToken
};
}
else {
requestOpts.oauth = {
consumer_key: inputs.consumerKey,// eslint-disable-line camelcase
consumer_secret: inputs.consumerSecret,// eslint-disable-line camelcase
token: inputs.accessToken,
token_secret: inputs.accessSecret
},
json: true
}, function(err, response, body) {
token_secret: inputs.accessSecret// eslint-disable-line camelcase
};
}
request.get(requestOpts, function(err, response, body) {
if (err) {

@@ -139,3 +147,3 @@ return exits.error(err);

if (response.statusCode > 299 || response.statusCode < 200) {
return exits.error(response.statusCode);
return exits.error(new Error('Twitter responded with a non 2xx status code:'+ response.statusCode + ' ' + util.inspect(body)));
}

@@ -142,0 +150,0 @@

{
"name": "machinepack-twitter",
"version": "1.2.0",
"version": "1.2.1",
"description": "Communicate with the Twitter API to get profile data, tweets, followers, and more.",
"scripts": {
"test": "node ./node_modules/test-machinepack-mocha/bin/testmachinepack-mocha.js"
},
"keywords": [
"Twitter",
"Twitter api",
"twitter-api",
"oauth",
"social",
"machines",

@@ -16,7 +15,15 @@ "machinepack"

"license": "MIT",
"scripts": {
"custom-tests": "node ./node_modules/mocha/bin/mocha",
"lint": "node ./node_modules/eslint/bin/eslint . --max-warnings=0",
"test": "npm run custom-tests && nodever=`node -e \"console.log('\\`node -v\\`'[1]);\"` && if [ $nodever != \"0\" ]; then npm run lint; fi"
},
"dependencies": {
"lodash": "^3.2.0",
"machine": "^10.3.1",
"request": "^2.53.0"
"machine": "^13.0.0-22",
"request": "2.74.0"
},
"devDependencies": {
"eslint": "3.5.0",
"mocha": "3.0.2"
},
"repository": {

@@ -26,5 +33,2 @@ "type": "git",

},
"devDependencies": {
"test-machinepack-mocha": "^2.1.1"
},
"machinepack": {

@@ -37,3 +41,5 @@ "friendlyName": "Twitter",

"get-access-token",
"get-user-profile"
"get-user-profile",
"get-bearer-token",
"search-tweets"
],

@@ -40,0 +46,0 @@ "testsUrl": "https://travis-ci.org/irlnathan/machinepack-twitter"

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc