machinepack-twitter
Advanced tools
Comparing version 1.2.0 to 1.2.1
@@ -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" |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
26907
2
15
472
2
1
+ Addedansi-regex@2.1.1(transitive)
+ Addedansi-styles@2.2.1(transitive)
+ Addedassert-plus@0.2.0(transitive)
+ Addedasync@2.6.4(transitive)
+ Addedaws-sign2@0.6.0(transitive)
+ Addedbl@1.1.2(transitive)
+ Addedboom@2.10.1(transitive)
+ Addedcaseless@0.11.0(transitive)
+ Addedchalk@1.1.3(transitive)
+ Addedcommander@2.20.3(transitive)
+ Addedconvert-to-ecmascript-compatible-varname@0.1.4(transitive)
+ Addedcore-util-is@1.0.3(transitive)
+ Addedcryptiles@2.0.5(transitive)
+ Addeddebug@3.1.0(transitive)
+ Addedescape-string-regexp@1.0.5(transitive)
+ Addedform-data@1.0.1(transitive)
+ Addedgenerate-function@2.3.1(transitive)
+ Addedgenerate-object-property@1.2.0(transitive)
+ Addedhar-validator@2.0.6(transitive)
+ Addedhas-ansi@2.0.0(transitive)
+ Addedhawk@3.1.3(transitive)
+ Addedhoek@2.16.3(transitive)
+ Addedhttp-signature@1.1.1(transitive)
+ Addedinclude-all@1.0.8(transitive)
+ Addedinherits@2.0.4(transitive)
+ Addedis-my-ip-valid@1.0.1(transitive)
+ Addedis-my-json-valid@2.20.6(transitive)
+ Addedis-property@1.0.2(transitive)
+ Addedisarray@1.0.0(transitive)
+ Addedjsonpointer@5.0.1(transitive)
+ Addedlodash@4.17.21(transitive)
+ Addedmachine@13.0.0-24(transitive)
+ Addednode-uuid@1.4.8(transitive)
+ Addedoauth-sign@0.8.2(transitive)
+ Addedpinkie@2.0.4(transitive)
+ Addedpinkie-promise@2.0.1(transitive)
+ Addedprocess-nextick-args@1.0.7(transitive)
+ Addedpunycode@1.4.1(transitive)
+ Addedqs@6.2.4(transitive)
+ Addedreadable-stream@2.0.6(transitive)
+ Addedrequest@2.74.0(transitive)
+ Addedrttc@9.8.2(transitive)
+ Addedsntp@1.0.9(transitive)
+ Addedstring_decoder@0.10.31(transitive)
+ Addedstringstream@0.0.6(transitive)
+ Addedstrip-ansi@3.0.1(transitive)
+ Addedsupports-color@2.0.0(transitive)
+ Addedtough-cookie@2.3.4(transitive)
+ Addedtunnel-agent@0.4.3(transitive)
+ Addedutil-deprecate@1.0.2(transitive)
+ Addedxtend@4.0.2(transitive)
- Removedlodash@^3.2.0
- Removedajv@6.12.6(transitive)
- Removedasynckit@0.4.0(transitive)
- Removedaws-sign2@0.7.0(transitive)
- Removedcaseless@0.12.0(transitive)
- Removedconvert-to-ecmascript-compatible-varname@0.1.5(transitive)
- Removeddebug@2.6.9(transitive)
- Removedfast-deep-equal@3.1.3(transitive)
- Removedfast-json-stable-stringify@2.1.0(transitive)
- Removedform-data@2.3.3(transitive)
- Removedhar-schema@2.0.0(transitive)
- Removedhar-validator@5.1.5(transitive)
- Removedhttp-signature@1.2.0(transitive)
- Removedjson-schema-traverse@0.4.1(transitive)
- Removedmachine@10.4.0(transitive)
- Removedoauth-sign@0.9.0(transitive)
- Removedobject-hash@0.3.0(transitive)
- Removedperformance-now@2.1.0(transitive)
- Removedpsl@1.9.0(transitive)
- Removedpunycode@2.3.1(transitive)
- Removedqs@6.5.3(transitive)
- Removedrequest@2.88.2(transitive)
- Removedrttc@7.4.0(transitive)
- Removedsafe-buffer@5.2.1(transitive)
- Removedtough-cookie@2.5.0(transitive)
- Removedtunnel-agent@0.6.0(transitive)
- Removeduri-js@4.4.1(transitive)
- Removeduuid@3.4.0(transitive)
Updatedmachine@^13.0.0-22
Updatedrequest@2.74.0