diff --git a/.gitignore b/.gitignore index 8a7afec5..1a565d03 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ issues IRC.md playground.js CHANGES +npm-debug.log +.idea \ No newline at end of file diff --git a/README.md b/README.md index ce8e5406..e4818578 100644 --- a/README.md +++ b/README.md @@ -50,14 +50,22 @@ So far, `everyauth` enables you to login via: ufssf Mailchimp Winfred Nadeau + Meetup + Jonathan Altman Mendeley Eduard Baun + Smarterer + kaizenpack + RunKeeper + Alexis Kinsella Box.net OpenId RocketLabs Development, Andrew Mee, Brian Noguchi LDAP (experimental; not production-tested) Windows Azure Access Control Service (ACS) Dario Renzulli, Juan Pablo Garcia, Matias Woloski from Southworks + Dailycred Hank Stoever at Dailycred.com + Sina Weibo justan @@ -76,8 +84,15 @@ So far, `everyauth` enables you to login via: ## Installation + +If you are using Connect 1.x or Express 2.x, install via: + $ npm install everyauth +If you are using Express 3.x, install via: + + $ npm install git://github.com/bnoguchi/everyauth.git#express3 + ## Quick Start Using everyauth comes down to just 2 simple steps if using Connect or 3 simple steps if using Express: @@ -445,6 +460,28 @@ everyauth.facebook // rest of configuration ``` +### Facebook Canvas Pages +For apps that can be embedded in Facebook via the canvas page, you can use the +facebookCanvas submodule: + +```javascript +everyauth.facebookCanvas + .canvasPath('CANVAS URL MINUS HOSTNAME') // Default is '/auth/facebook/canvas' + .canvasPage('CANVAS PAGE'); // Generally http://apps.facebook.com/APP-NAME +``` + +Note that you must also configure the usual Facebook configurations described +above in order for this to work. + +You can tell if the user logged in via the canvas interface using the following test: + +```javascript +if (everyauth.facebookCanvas) { + // Do something different +} +``` + + ## Twitter OAuth ```javascript @@ -794,7 +831,7 @@ everyauth.password var promise = this.Promise() , password = newUserAttrs.password; - delete newUserAttrs[password]; // Don't store password + delete newUserAttrs.password; // Don't store password newUserAttrs.salt = bcrypt.genSaltSync(10); newUserAttrs.hash = bcrypt.hashSync(password, salt); @@ -1065,10 +1102,10 @@ var everyauth = require('everyauth') everyauth.google .appId('YOUR CLIENT ID HERE') .appSecret('YOUR CLIENT SECRET HERE') - .scope('https://www.google.com/m8/feeds') // What you want access to + .scope('https://www.googleapis.com/auth/userinfo.profile') // What you want access to .handleAuthCallbackError( function (req, res) { // If a user denies your app, Google will redirect the user to - // /auth/facebook/callback?error=access_denied + // /auth/google/callback?error=access_denied // This configurable route handler defines how you want to respond to // that. // If you do not configure this, everyauth renders a default fallback @@ -2112,6 +2149,35 @@ connect( ).listen(3000); ``` +### RunKeeper OAuth (2.0) + +You will first need to [register your application](http://runkeeper.com/partner/applications) to get the appId and appSecret. + +```javascript +everyauth.runkeeper + .appId('YOUR CONSUMER KEY HERE') + .consumerSecret('YOUR CONSUMER SECRET HERE') + .findOrCreateUser( function (sess, accessToken, accessSecret, user) { + // find or create user logic goes here + // + // e.g., + // return usersByRunKeeperId[user.userID] || (usersByRunKeeperId[user.userID] = user); + }) + .redirectPath('/'); + +var routes = function (app) { + // Define your routes here +}; + +connect( + connect.bodyParser() + , connect.cookieParser() + , connect.session({secret: 'whodunnit'}) + , everyauth.middleware() + , connect.router(routes); +).listen(3000); +``` + ### OpenID protocol OpenID protocol allows you to use an openid auth request. You can read more information about it here http://openid.net/ @@ -2195,6 +2261,40 @@ connect( ).listen(3000); ``` +### Smarterer + +You will need to register for an app id [here](http://www.smarterer.com/). Implementation details follow the same pattern as with other +oauth2 implementations. + +```javascript + +var everyauth = require('everyauth') + , connect = require('connect'); + +everyauth.smarterer + .appId('YOUR APP ID') + .appSecret('YOUR APP SECRET') + .findOrCreateUser(function(session, accessToken, accessTokenSecret, userData) { + // find or create user logic goes here + // userData.userName will contain the smarterer username for the authenticated user + // userData.badges will contain the scores on quizes + }) + .redirectPath('/'); + +var routes = function (app) { + // Define your routes here +}; + +connect( + connect.bodyParser() + , connect.cookieParser() + , connect.session({secret: 'whodunnit'}) + , everyauth.middleware() + , connect.router(routes); +).listen(3000); +``` + + ### Box.net ```javascript @@ -2341,6 +2441,18 @@ object whose parameter name keys map to description values: everyauth.box.configurable(); ``` +### Dailycred OAuth + +```javascript +everyauth.dailycred + .appId(conf.dc.appId) + .findOrCreateUser( function (session, accessToken, accessTokenExtra, dcUserMetadata) { + return usersByDcId[dcUserMetadata.id] || + (usersByDcId[dcUserMetadata.id] = addUser('dailycred', dcUserMetadata)); + }) + .redirectPath('/'); +``` + ## Configuring a Module everyauth was built with powerful configuration needs in mind. diff --git a/example/conf.js b/example/conf.js index 6a28044a..9ca6d332 100644 --- a/example/conf.js +++ b/example/conf.js @@ -1,5 +1,9 @@ module.exports = { - fb: { + dc: { + appId: '7ab1a53d-9d0e-4eeb-af62-76a5e1a83af9', + appSecret: '88bee747-c1ef-4851-be60-84d53dd474ad-88495db2-5db0-47c8-ad77-9e92db7e308c', + } + , fb: { appId: '111565172259433' , appSecret: '85f7e0a0cc804886180b887c1f04a3c1' } @@ -116,4 +120,15 @@ module.exports = { consumerKey: 'Enter your consumer key here' , consumerSecret: 'Enter your consumer secret here' } + , weibo: { + appId: '3350967939' + , appSecret: 'ef7f0a836d0ef315dca53e8d73816cc0' + } + , runkeeper: { + appId: 'Enter your client/app id here' + , appSecret: 'Enter your client/app secret here' + , meetup: { + appId: 'nurgg46uqquq3eqa957ivnddv9' + , appSecret: '6spfeab72gc8f89l735i391rr3' + } }; diff --git a/example/npm-debug.log b/example/npm-debug.log new file mode 100644 index 00000000..b1c9738f --- /dev/null +++ b/example/npm-debug.log @@ -0,0 +1,3091 @@ +info it worked if it ends with ok +verbose cli [ 'node', '/usr/local/bin/npm', 'install', '-d' ] +info using npm@1.1.21 +info using node@v0.6.17 +verbose /usr/local/bin/node node symlink +verbose config file /Users/hank/.npmrc +verbose config file /usr/local/etc/npmrc +verbose config file /usr/local/lib/node_modules/npm/npmrc +verbose caching /Users/hank/node/everyauth/package.json +verbose loadDefaults everyauth@0.2.32 +verbose readDependencies: using package.json deps +verbose where, deps [ '/Users/hank/node/everyauth', +verbose where, deps [ 'oauth', +verbose where, deps 'request', +verbose where, deps 'connect', +verbose where, deps 'openid', +verbose where, deps 'xml2js', +verbose where, deps 'node-swt', +verbose where, deps 'node-wsfederation', +verbose where, deps 'debug', +verbose where, deps 'express', +verbose where, deps 'jade', +verbose where, deps 'tobi', +verbose where, deps 'expect.js', +verbose where, deps 'mocha', +verbose where, deps 'satisfy' ] ] +verbose from cache /Users/hank/node/everyauth/package.json +info preinstall everyauth@0.2.32 +verbose from cache /Users/hank/node/everyauth/package.json +verbose readDependencies: using package.json deps +verbose cache add [ 'oauth@https://github.com/ciaranj/node-oauth/tarball/master', +verbose cache add null ] +silly cache add: name, spec, args [ undefined, +silly cache add: name, spec, args 'oauth@https://github.com/ciaranj/node-oauth/tarball/master', +silly cache add: name, spec, args [ 'oauth@https://github.com/ciaranj/node-oauth/tarball/master', +silly cache add: name, spec, args null ] ] +verbose parsed url { pathname: 'oauth@https://github.com/ciaranj/node-oauth/tarball/master', +verbose parsed url path: 'oauth@https://github.com/ciaranj/node-oauth/tarball/master', +verbose parsed url href: 'oauth@https://github.com/ciaranj/node-oauth/tarball/master' } +silly cache add: name, spec, args [ 'oauth', +silly cache add: name, spec, args 'https://github.com/ciaranj/node-oauth/tarball/master', +silly cache add: name, spec, args [ 'oauth', +silly cache add: name, spec, args 'https://github.com/ciaranj/node-oauth/tarball/master' ] ] +verbose parsed url { protocol: 'https:', +verbose parsed url slashes: true, +verbose parsed url host: 'github.com', +verbose parsed url hostname: 'github.com', +verbose parsed url href: 'https://github.com/ciaranj/node-oauth/tarball/master', +verbose parsed url pathname: '/ciaranj/node-oauth/tarball/master', +verbose parsed url path: '/ciaranj/node-oauth/tarball/master' } +verbose addRemoteTarball [ 'https://github.com/ciaranj/node-oauth/tarball/master', null ] +verbose cache add [ 'request@2.9.x', null ] +silly cache add: name, spec, args [ undefined, 'request@2.9.x', [ 'request@2.9.x', null ] ] +verbose parsed url { pathname: 'request@2.9.x', +verbose parsed url path: 'request@2.9.x', +verbose parsed url href: 'request@2.9.x' } +silly cache add: name, spec, args [ 'request', '2.9.x', [ 'request', '2.9.x' ] ] +verbose parsed url { pathname: '2.9.x', path: '2.9.x', href: '2.9.x' } +verbose addNamed [ 'request', '2.9.x' ] +verbose addNamed [ null, '>=2.9.0- <2.10.0-' ] +silly name, range, hasData [ 'request', '>=2.9.0- <2.10.0-', false ] +verbose cache add [ 'connect@>=1 <2', null ] +silly cache add: name, spec, args [ undefined, 'connect@>=1 <2', [ 'connect@>=1 <2', null ] ] +verbose parsed url { pathname: 'connect@', path: 'connect@', href: 'connect@' } +silly cache add: name, spec, args [ 'connect', '>=1 <2', [ 'connect', '>=1 <2' ] ] +verbose parsed url { pathname: '=1', path: '=1', href: '=1' } +verbose addNamed [ 'connect', '>=1 <2' ] +verbose addNamed [ null, '>=1.0.0- <2.0.0-' ] +silly name, range, hasData [ 'connect', '>=1.0.0- <2.0.0-', false ] +verbose cache add [ 'openid@>=0.2.0', null ] +silly cache add: name, spec, args [ undefined, 'openid@>=0.2.0', [ 'openid@>=0.2.0', null ] ] +verbose parsed url { pathname: 'openid@', path: 'openid@', href: 'openid@' } +silly cache add: name, spec, args [ 'openid', '>=0.2.0', [ 'openid', '>=0.2.0' ] ] +verbose parsed url { pathname: '=0.2.0', path: '=0.2.0', href: '=0.2.0' } +verbose addNamed [ 'openid', '>=0.2.0' ] +verbose addNamed [ null, '>=0.2.0' ] +silly name, range, hasData [ 'openid', '>=0.2.0', false ] +verbose cache add [ 'xml2js@>=0.1.7', null ] +silly cache add: name, spec, args [ undefined, 'xml2js@>=0.1.7', [ 'xml2js@>=0.1.7', null ] ] +verbose parsed url { pathname: 'xml2js@', path: 'xml2js@', href: 'xml2js@' } +silly cache add: name, spec, args [ 'xml2js', '>=0.1.7', [ 'xml2js', '>=0.1.7' ] ] +verbose parsed url { pathname: '=0.1.7', path: '=0.1.7', href: '=0.1.7' } +verbose addNamed [ 'xml2js', '>=0.1.7' ] +verbose addNamed [ null, '>=0.1.7' ] +silly name, range, hasData [ 'xml2js', '>=0.1.7', false ] +verbose cache add [ 'node-swt@>=0.1.1', null ] +silly cache add: name, spec, args [ undefined, 'node-swt@>=0.1.1', [ 'node-swt@>=0.1.1', null ] ] +verbose parsed url { pathname: 'node-swt@', path: 'node-swt@', href: 'node-swt@' } +silly cache add: name, spec, args [ 'node-swt', '>=0.1.1', [ 'node-swt', '>=0.1.1' ] ] +verbose parsed url { pathname: '=0.1.1', path: '=0.1.1', href: '=0.1.1' } +verbose addNamed [ 'node-swt', '>=0.1.1' ] +verbose addNamed [ null, '>=0.1.1' ] +silly name, range, hasData [ 'node-swt', '>=0.1.1', false ] +verbose cache add [ 'node-wsfederation@>=0.1.1', null ] +silly cache add: name, spec, args [ undefined, +silly cache add: name, spec, args 'node-wsfederation@>=0.1.1', +silly cache add: name, spec, args [ 'node-wsfederation@>=0.1.1', null ] ] +verbose parsed url { pathname: 'node-wsfederation@', +verbose parsed url path: 'node-wsfederation@', +verbose parsed url href: 'node-wsfederation@' } +silly cache add: name, spec, args [ 'node-wsfederation', +silly cache add: name, spec, args '>=0.1.1', +silly cache add: name, spec, args [ 'node-wsfederation', '>=0.1.1' ] ] +verbose parsed url { pathname: '=0.1.1', path: '=0.1.1', href: '=0.1.1' } +verbose addNamed [ 'node-wsfederation', '>=0.1.1' ] +verbose addNamed [ null, '>=0.1.1' ] +silly name, range, hasData [ 'node-wsfederation', '>=0.1.1', false ] +verbose cache add [ 'debug@0.5.0', null ] +silly cache add: name, spec, args [ undefined, 'debug@0.5.0', [ 'debug@0.5.0', null ] ] +verbose parsed url { pathname: 'debug@0.5.0', +verbose parsed url path: 'debug@0.5.0', +verbose parsed url href: 'debug@0.5.0' } +silly cache add: name, spec, args [ 'debug', '0.5.0', [ 'debug', '0.5.0' ] ] +verbose parsed url { pathname: '0.5.0', path: '0.5.0', href: '0.5.0' } +verbose addNamed [ 'debug', '0.5.0' ] +verbose addNamed [ '0.5.0', '0.5.0' ] +verbose cache add [ 'express@>=2.3.10', null ] +silly cache add: name, spec, args [ undefined, 'express@>=2.3.10', [ 'express@>=2.3.10', null ] ] +verbose parsed url { pathname: 'express@', path: 'express@', href: 'express@' } +silly cache add: name, spec, args [ 'express', '>=2.3.10', [ 'express', '>=2.3.10' ] ] +verbose parsed url { pathname: '=2.3.10', path: '=2.3.10', href: '=2.3.10' } +verbose addNamed [ 'express', '>=2.3.10' ] +verbose addNamed [ null, '>=2.3.10' ] +silly name, range, hasData [ 'express', '>=2.3.10', false ] +verbose cache add [ 'jade@>=0.12.1', null ] +silly cache add: name, spec, args [ undefined, 'jade@>=0.12.1', [ 'jade@>=0.12.1', null ] ] +verbose parsed url { pathname: 'jade@', path: 'jade@', href: 'jade@' } +silly cache add: name, spec, args [ 'jade', '>=0.12.1', [ 'jade', '>=0.12.1' ] ] +verbose parsed url { pathname: '=0.12.1', path: '=0.12.1', href: '=0.12.1' } +verbose addNamed [ 'jade', '>=0.12.1' ] +verbose addNamed [ null, '>=0.12.1' ] +silly name, range, hasData [ 'jade', '>=0.12.1', false ] +verbose cache add [ 'tobi@>=0.2.2', null ] +silly cache add: name, spec, args [ undefined, 'tobi@>=0.2.2', [ 'tobi@>=0.2.2', null ] ] +verbose parsed url { pathname: 'tobi@', path: 'tobi@', href: 'tobi@' } +silly cache add: name, spec, args [ 'tobi', '>=0.2.2', [ 'tobi', '>=0.2.2' ] ] +verbose parsed url { pathname: '=0.2.2', path: '=0.2.2', href: '=0.2.2' } +verbose addNamed [ 'tobi', '>=0.2.2' ] +verbose addNamed [ null, '>=0.2.2' ] +silly name, range, hasData [ 'tobi', '>=0.2.2', false ] +verbose cache add [ 'expect.js@>=0.1.2', null ] +silly cache add: name, spec, args [ undefined, 'expect.js@>=0.1.2', [ 'expect.js@>=0.1.2', null ] ] +verbose parsed url { pathname: 'expect.js@', +verbose parsed url path: 'expect.js@', +verbose parsed url href: 'expect.js@' } +silly cache add: name, spec, args [ 'expect.js', '>=0.1.2', [ 'expect.js', '>=0.1.2' ] ] +verbose parsed url { pathname: '=0.1.2', path: '=0.1.2', href: '=0.1.2' } +verbose addNamed [ 'expect.js', '>=0.1.2' ] +verbose addNamed [ null, '>=0.1.2' ] +silly name, range, hasData [ 'expect.js', '>=0.1.2', false ] +verbose cache add [ 'mocha@>=0.13.0', null ] +silly cache add: name, spec, args [ undefined, 'mocha@>=0.13.0', [ 'mocha@>=0.13.0', null ] ] +verbose parsed url { pathname: 'mocha@', path: 'mocha@', href: 'mocha@' } +silly cache add: name, spec, args [ 'mocha', '>=0.13.0', [ 'mocha', '>=0.13.0' ] ] +verbose parsed url { pathname: '=0.13.0', path: '=0.13.0', href: '=0.13.0' } +verbose addNamed [ 'mocha', '>=0.13.0' ] +verbose addNamed [ null, '>=0.13.0' ] +silly name, range, hasData [ 'mocha', '>=0.13.0', false ] +verbose cache add [ 'satisfy@>=0.1.0', null ] +silly cache add: name, spec, args [ undefined, 'satisfy@>=0.1.0', [ 'satisfy@>=0.1.0', null ] ] +verbose parsed url { pathname: 'satisfy@', path: 'satisfy@', href: 'satisfy@' } +silly cache add: name, spec, args [ 'satisfy', '>=0.1.0', [ 'satisfy', '>=0.1.0' ] ] +verbose parsed url { pathname: '=0.1.0', path: '=0.1.0', href: '=0.1.0' } +verbose addNamed [ 'satisfy', '>=0.1.0' ] +verbose addNamed [ null, '>=0.1.0' ] +silly name, range, hasData [ 'satisfy', '>=0.1.0', false ] +verbose raw, before any munging request +verbose url resolving [ 'https://registry.npmjs.org/', './request' ] +verbose url resolved https://registry.npmjs.org/request +http GET https://registry.npmjs.org/request +verbose raw, before any munging xml2js +verbose url resolving [ 'https://registry.npmjs.org/', './xml2js' ] +verbose url resolved https://registry.npmjs.org/xml2js +http GET https://registry.npmjs.org/xml2js +verbose raw, before any munging node-swt +verbose url resolving [ 'https://registry.npmjs.org/', './node-swt' ] +verbose url resolved https://registry.npmjs.org/node-swt +http GET https://registry.npmjs.org/node-swt +verbose raw, before any munging node-wsfederation +verbose url resolving [ 'https://registry.npmjs.org/', './node-wsfederation' ] +verbose url resolved https://registry.npmjs.org/node-wsfederation +http GET https://registry.npmjs.org/node-wsfederation +verbose raw, before any munging openid +verbose url resolving [ 'https://registry.npmjs.org/', './openid' ] +verbose url resolved https://registry.npmjs.org/openid +http GET https://registry.npmjs.org/openid +verbose raw, before any munging tobi +verbose url resolving [ 'https://registry.npmjs.org/', './tobi' ] +verbose url resolved https://registry.npmjs.org/tobi +http GET https://registry.npmjs.org/tobi +verbose raw, before any munging expect.js +verbose url resolving [ 'https://registry.npmjs.org/', './expect.js' ] +verbose url resolved https://registry.npmjs.org/expect.js +http GET https://registry.npmjs.org/expect.js +verbose raw, before any munging mocha +verbose url resolving [ 'https://registry.npmjs.org/', './mocha' ] +verbose url resolved https://registry.npmjs.org/mocha +http GET https://registry.npmjs.org/mocha +verbose raw, before any munging satisfy +verbose url resolving [ 'https://registry.npmjs.org/', './satisfy' ] +verbose url resolved https://registry.npmjs.org/satisfy +http GET https://registry.npmjs.org/satisfy +verbose raw, before any munging debug/0.5.0 +verbose url resolving [ 'https://registry.npmjs.org/', './debug/0.5.0' ] +verbose url resolved https://registry.npmjs.org/debug/0.5.0 +http GET https://registry.npmjs.org/debug/0.5.0 +verbose fetch to /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067088577-0.1044571753591299/tmp.tgz +http GET https://github.com/ciaranj/node-oauth/tarball/master +verbose raw, before any munging connect +verbose url resolving [ 'https://registry.npmjs.org/', './connect' ] +verbose url resolved https://registry.npmjs.org/connect +verbose etag "3D4UP735ORKU1E2C4IPOAKM18" +http GET https://registry.npmjs.org/connect +verbose raw, before any munging jade +verbose url resolving [ 'https://registry.npmjs.org/', './jade' ] +verbose url resolved https://registry.npmjs.org/jade +verbose etag "D9MWXJIFLO6BA3VP219B0W2LG" +http GET https://registry.npmjs.org/jade +verbose raw, before any munging express +verbose url resolving [ 'https://registry.npmjs.org/', './express' ] +verbose url resolved https://registry.npmjs.org/express +verbose etag "885Z09F9TP77WNACOP5AJ04SV" +http GET https://registry.npmjs.org/express +http 200 https://registry.npmjs.org/node-wsfederation +silly get cb [ 200, +silly get cb { vary: 'Accept', +silly get cb server: 'CouchDB/1.2.0 (Erlang OTP/R15B)', +silly get cb etag: '"3BT5DRYQS3M4M4JM7OL0A1RMK"', +silly get cb date: 'Tue, 19 Jun 2012 00:51:30 GMT', +silly get cb 'content-type': 'application/json', +silly get cb 'content-length': '2699' } ] +silly name, range, hasData 2 [ 'node-wsfederation', '>=0.1.1', true ] +silly versions [ 'node-wsfederation', [ '0.1.0', '0.1.1' ] ] +verbose bin dist [ '0.6-ares1.7.5-DEV-evundefined-openssl1.0.1-v83.6.6.25-darwin-x64-11.3.0', +verbose bin dist { shasum: '9abf1dd3b20a3ab0a38f899c882c218d734e8a7b', +verbose bin dist tarball: 'http://registry.npmjs.org/node-wsfederation/-/node-wsfederation-0.1.1.tgz' } ] +verbose addRemoteTarball [ 'https://registry.npmjs.org/node-wsfederation/-/node-wsfederation-0.1.1.tgz', +verbose addRemoteTarball '9abf1dd3b20a3ab0a38f899c882c218d734e8a7b' ] +verbose fetch to /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090285-0.9251187327317894/tmp.tgz +http GET https://registry.npmjs.org/node-wsfederation/-/node-wsfederation-0.1.1.tgz +http 200 https://registry.npmjs.org/node-swt +silly get cb [ 200, +silly get cb { vary: 'Accept', +silly get cb server: 'CouchDB/1.2.0 (Erlang OTP/R15B)', +silly get cb etag: '"D2X7LB8BA2KBS6JAF6Y0URWX"', +silly get cb date: 'Tue, 19 Jun 2012 00:51:30 GMT', +silly get cb 'content-type': 'application/json', +silly get cb 'content-length': '2561' } ] +silly name, range, hasData 2 [ 'node-swt', '>=0.1.1', true ] +silly versions [ 'node-swt', [ '0.1.0', '0.1.1' ] ] +verbose bin dist [ '0.6-ares1.7.5-DEV-evundefined-openssl1.0.1-v83.6.6.25-darwin-x64-11.3.0', +verbose bin dist { shasum: 'af0903825784be553b93dbae57d99d59060585dd', +verbose bin dist tarball: 'http://registry.npmjs.org/node-swt/-/node-swt-0.1.1.tgz' } ] +verbose addRemoteTarball [ 'https://registry.npmjs.org/node-swt/-/node-swt-0.1.1.tgz', +verbose addRemoteTarball 'af0903825784be553b93dbae57d99d59060585dd' ] +verbose fetch to /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090332-0.46316829114221036/tmp.tgz +http GET https://registry.npmjs.org/node-swt/-/node-swt-0.1.1.tgz +http 200 https://registry.npmjs.org/xml2js +silly get cb [ 200, +silly get cb { vary: 'Accept', +silly get cb server: 'CouchDB/1.2.0 (Erlang OTP/R15B)', +silly get cb etag: '"AXICDPA513EYZN187IRANYX16"', +silly get cb date: 'Tue, 19 Jun 2012 00:51:30 GMT', +silly get cb 'content-type': 'application/json', +silly get cb 'content-length': '25724' } ] +silly name, range, hasData 2 [ 'xml2js', '>=0.1.7', true ] +silly versions [ 'xml2js', +silly versions [ '0.1.0', +silly versions '0.1.1', +silly versions '0.1.2', +silly versions '0.1.3', +silly versions '0.1.4', +silly versions '0.1.5', +silly versions '0.1.6', +silly versions '0.1.7', +silly versions '0.1.8', +silly versions '0.1.9', +silly versions '0.1.10', +silly versions '0.1.11', +silly versions '0.1.12', +silly versions '0.1.13', +silly versions '0.1.14' ] ] +verbose bin dist [ '0.6-ares1.7.5-DEV-evundefined-openssl1.0.1-v83.6.6.25-darwin-x64-11.3.0', +verbose bin dist { shasum: '5274e67f5a64c5f92974cd85139e0332adc6b90c', +verbose bin dist tarball: 'http://registry.npmjs.org/xml2js/-/xml2js-0.1.14.tgz' } ] +verbose addRemoteTarball [ 'https://registry.npmjs.org/xml2js/-/xml2js-0.1.14.tgz', +verbose addRemoteTarball '5274e67f5a64c5f92974cd85139e0332adc6b90c' ] +verbose fetch to /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090399-0.2421623975969851/tmp.tgz +http 200 https://registry.npmjs.org/openid +silly get cb [ 200, +silly get cb { vary: 'Accept', +silly get cb server: 'CouchDB/1.2.0 (Erlang OTP/R15B)', +silly get cb etag: '"5RD5FMSKPW6YOSBZ6FUT0IGDC"', +silly get cb date: 'Tue, 19 Jun 2012 00:51:30 GMT', +silly get cb 'content-type': 'application/json', +silly get cb 'content-length': '14863' } ] +http GET https://registry.npmjs.org/xml2js/-/xml2js-0.1.14.tgz +silly name, range, hasData 2 [ 'openid', '>=0.2.0', true ] +silly versions [ 'openid', +silly versions [ '0.1.0', +silly versions '0.1.1', +silly versions '0.1.2', +silly versions '0.1.3', +silly versions '0.1.4', +silly versions '0.1.5', +silly versions '0.1.6', +silly versions '0.1.7', +silly versions '0.1.8', +silly versions '0.2.0', +silly versions '0.3.0', +silly versions '0.3.1', +silly versions '0.3.2', +silly versions '0.4.0', +silly versions '0.4.1', +silly versions '0.4.2' ] ] +verbose bin dist [ '0.6-ares1.7.5-DEV-evundefined-openssl1.0.1-v83.6.6.25-darwin-x64-11.3.0', +verbose bin dist { shasum: 'c3d283db9d804d2c3abd8572d6d061e28f364967', +verbose bin dist tarball: 'http://registry.npmjs.org/openid/-/openid-0.4.2.tgz' } ] +verbose addRemoteTarball [ 'https://registry.npmjs.org/openid/-/openid-0.4.2.tgz', +verbose addRemoteTarball 'c3d283db9d804d2c3abd8572d6d061e28f364967' ] +verbose fetch to /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090423-0.924290185328573/tmp.tgz +http GET https://registry.npmjs.org/openid/-/openid-0.4.2.tgz +http 200 https://registry.npmjs.org/tobi +silly get cb [ 200, +silly get cb { vary: 'Accept', +silly get cb server: 'CouchDB/1.2.0 (Erlang OTP/R15B)', +silly get cb etag: '"AUACE2DD3A6ZXJRVGHWMVO0L1"', +silly get cb date: 'Tue, 19 Jun 2012 00:51:30 GMT', +silly get cb 'content-type': 'application/json', +silly get cb 'content-length': '8624' } ] +silly name, range, hasData 2 [ 'tobi', '>=0.2.2', true ] +silly versions [ 'tobi', [ '0.0.8', '0.1.0', '0.1.1', '0.3.2' ] ] +verbose bin dist [ '0.6-ares1.7.5-DEV-evundefined-openssl1.0.1-v83.6.6.25-darwin-x64-11.3.0', +verbose bin dist { shasum: 'b3e0cbaa10494c0b65d543dbde64201ac4974df5', +verbose bin dist tarball: 'http://registry.npmjs.org/tobi/-/tobi-0.3.2.tgz' } ] +verbose addRemoteTarball [ 'https://registry.npmjs.org/tobi/-/tobi-0.3.2.tgz', +verbose addRemoteTarball 'b3e0cbaa10494c0b65d543dbde64201ac4974df5' ] +verbose fetch to /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090509-0.1662144884467125/tmp.tgz +http GET https://registry.npmjs.org/tobi/-/tobi-0.3.2.tgz +http 200 https://registry.npmjs.org/expect.js +silly get cb [ 200, +silly get cb { vary: 'Accept', +silly get cb server: 'CouchDB/1.2.0 (Erlang OTP/R15B)', +silly get cb etag: '"7W1JVUCYCT4VKDR7XYPSROMHX"', +silly get cb date: 'Tue, 19 Jun 2012 00:51:30 GMT', +silly get cb 'content-type': 'application/json', +silly get cb 'content-length': '7941' } ] +silly name, range, hasData 2 [ 'expect.js', '>=0.1.2', true ] +silly versions [ 'expect.js', [ '0.1.0', '0.1.1', '0.1.2' ] ] +verbose bin dist [ '0.6-ares1.7.5-DEV-evundefined-openssl1.0.1-v83.6.6.25-darwin-x64-11.3.0', +verbose bin dist { shasum: '7352391e73b3ca372db251ccf1dcddf5b5b3d5c2', +verbose bin dist tarball: 'http://registry.npmjs.org/expect.js/-/expect.js-0.1.2.tgz' } ] +verbose addRemoteTarball [ 'https://registry.npmjs.org/expect.js/-/expect.js-0.1.2.tgz', +verbose addRemoteTarball '7352391e73b3ca372db251ccf1dcddf5b5b3d5c2' ] +verbose fetch to /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090515-0.13743186835199594/tmp.tgz +http GET https://registry.npmjs.org/expect.js/-/expect.js-0.1.2.tgz +http 200 https://registry.npmjs.org/satisfy +silly get cb [ 200, +silly get cb { vary: 'Accept', +silly get cb server: 'CouchDB/1.2.0 (Erlang OTP/R15B)', +silly get cb etag: '"3R3D7W15B1BEHMRS953SKGFH7"', +silly get cb date: 'Tue, 19 Jun 2012 00:51:30 GMT', +silly get cb 'content-type': 'application/json', +silly get cb 'content-length': '4244' } ] +silly name, range, hasData 2 [ 'satisfy', '>=0.1.0', true ] +silly versions [ 'satisfy', [ '0.1.0' ] ] +verbose bin dist [ '0.6-ares1.7.5-DEV-evundefined-openssl1.0.1-v83.6.6.25-darwin-x64-11.3.0', +verbose bin dist { shasum: 'ad98fcff3172d7d7275fbaca19509d70d0ffca36', +verbose bin dist tarball: 'http://registry.npmjs.org/satisfy/-/satisfy-0.1.0.tgz' } ] +verbose addRemoteTarball [ 'https://registry.npmjs.org/satisfy/-/satisfy-0.1.0.tgz', +verbose addRemoteTarball 'ad98fcff3172d7d7275fbaca19509d70d0ffca36' ] +verbose fetch to /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090606-0.7157397088594735/tmp.tgz +http GET https://registry.npmjs.org/satisfy/-/satisfy-0.1.0.tgz +http 304 https://registry.npmjs.org/connect +silly get cb [ 304, +silly get cb { server: 'CouchDB/1.2.0 (Erlang OTP/R15B)', +silly get cb etag: '"3D4UP735ORKU1E2C4IPOAKM18"', +silly get cb date: 'Tue, 19 Jun 2012 00:51:30 GMT', +silly get cb 'content-length': '0' } ] +verbose etag connect from cache +http 200 https://registry.npmjs.org/debug/0.5.0 +silly get cb [ 200, +silly get cb { vary: 'Accept', +silly get cb server: 'CouchDB/1.2.0 (Erlang OTP/R15B)', +silly get cb etag: '"BFOSJ9KS53REEQFPE5SOZ72ZE"', +silly get cb date: 'Tue, 19 Jun 2012 00:51:30 GMT', +silly get cb 'content-type': 'application/json', +silly get cb 'content-length': '655' } ] +http 200 https://github.com/ciaranj/node-oauth/tarball/master +silly name, range, hasData 2 [ 'connect', '>=1.0.0- <2.0.0-', true ] +silly versions [ 'connect', +silly versions [ '0.0.1', +silly versions '0.0.2', +silly versions '0.0.3', +silly versions '0.0.4', +silly versions '0.0.5', +silly versions '0.0.6', +silly versions '0.1.0', +silly versions '0.2.0', +silly versions '0.2.1', +silly versions '0.2.2', +silly versions '0.2.3', +silly versions '0.2.4', +silly versions '0.2.5', +silly versions '0.2.6', +silly versions '0.2.7', +silly versions '0.3.0', +silly versions '0.4.0', +silly versions '0.5.0', +silly versions '0.5.1', +silly versions '0.5.2', +silly versions '0.5.3', +silly versions '0.5.4', +silly versions '0.5.5', +silly versions '0.5.6', +silly versions '0.5.7', +silly versions '0.5.8', +silly versions '0.5.9', +silly versions '0.5.10', +silly versions '1.0.0', +silly versions '1.0.1', +silly versions '1.7.2', +silly versions '1.7.3', +silly versions '1.8.0', +silly versions '1.8.1', +silly versions '1.8.2', +silly versions '1.8.3', +silly versions '1.8.4', +silly versions '1.8.5', +silly versions '2.0.0', +silly versions '2.0.1', +silly versions '2.0.2', +silly versions '2.0.3', +silly versions '1.8.6', +silly versions '2.1.0', +silly versions '2.1.1', +silly versions '2.1.2', +silly versions '1.8.7', +silly versions '2.1.3', +silly versions '2.2.0', +silly versions '2.2.1', +silly versions '2.2.2', +silly versions '2.3.0', +silly versions '2.3.1', +silly versions '2.3.2', +silly versions '2.3.3' ] ] +verbose bin dist [ '0.6-ares1.7.5-DEV-evundefined-openssl1.0.1-v83.6.6.25-darwin-x64-11.3.0', +verbose bin dist { shasum: 'b620281884d455fab94c693d2db748652d6c8c17', +verbose bin dist tarball: 'http://registry.npmjs.org/connect/-/connect-1.8.7.tgz' } ] +http 200 https://registry.npmjs.org/request +silly get cb [ 200, +silly get cb { vary: 'Accept', +silly get cb server: 'CouchDB/1.2.0 (Erlang OTP/R15B)', +silly get cb etag: '"BWZPCPFGB4B5B84WHGXXV5GQ4"', +silly get cb date: 'Tue, 19 Jun 2012 00:51:30 GMT', +silly get cb 'content-type': 'application/json', +silly get cb 'content-length': '109175' } ] +http 200 https://registry.npmjs.org/mocha +silly get cb [ 200, +silly get cb { vary: 'Accept', +silly get cb server: 'CouchDB/1.2.0 (Erlang OTP/R15B)', +silly get cb etag: '"4WD93Q26I1PTGIAGFB7NAR73U"', +silly get cb date: 'Tue, 19 Jun 2012 00:51:30 GMT', +silly get cb 'content-type': 'application/json', +silly get cb 'content-length': '47827' } ] +verbose bin dist [ '0.6-ares1.7.5-DEV-evundefined-openssl1.0.1-v83.6.6.25-darwin-x64-11.3.0', +verbose bin dist { shasum: '9d48c946fb7d7d59807ffe07822f515fd76d7a9e', +verbose bin dist tarball: 'http://registry.npmjs.org/debug/-/debug-0.5.0.tgz' } ] +verbose addRemoteTarball [ 'https://registry.npmjs.org/debug/-/debug-0.5.0.tgz', +verbose addRemoteTarball '9d48c946fb7d7d59807ffe07822f515fd76d7a9e' ] +verbose fetch to /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090753-0.9105697830673307/tmp.tgz +http 304 https://registry.npmjs.org/express +silly get cb [ 304, +silly get cb { server: 'CouchDB/1.2.0 (Erlang OTP/R15B)', +silly get cb etag: '"885Z09F9TP77WNACOP5AJ04SV"', +silly get cb date: 'Tue, 19 Jun 2012 00:51:30 GMT', +silly get cb 'content-length': '0' } ] +verbose etag express from cache +http 200 https://registry.npmjs.org/node-wsfederation/-/node-wsfederation-0.1.1.tgz +http 200 https://registry.npmjs.org/node-swt/-/node-swt-0.1.1.tgz +http 200 https://registry.npmjs.org/xml2js/-/xml2js-0.1.14.tgz +http GET https://registry.npmjs.org/debug/-/debug-0.5.0.tgz +verbose caching /Users/hank/.npm/connect/1.8.7/package/package.json +verbose loadDefaults connect@1.8.7 +silly name, range, hasData 2 [ 'request', '>=2.9.0- <2.10.0-', true ] +silly versions [ 'request', +silly versions [ '0.10.0', +silly versions '0.8.3', +silly versions '0.9.0', +silly versions '0.9.1', +silly versions '0.9.5', +silly versions '1.0.0', +silly versions '1.1.0', +silly versions '1.1.1', +silly versions '1.2.0', +silly versions '1.9.0', +silly versions '1.9.1', +silly versions '1.9.2', +silly versions '1.9.3', +silly versions '1.9.5', +silly versions '1.9.7', +silly versions '1.9.8', +silly versions '1.9.9', +silly versions '2.0.0', +silly versions '2.0.1', +silly versions '2.0.2', +silly versions '2.0.3', +silly versions '2.0.4', +silly versions '2.0.5', +silly versions '2.1.0', +silly versions '2.1.1', +silly versions '2.2.0', +silly versions '2.2.5', +silly versions '2.2.6', +silly versions '2.2.9', +silly versions '2.9.0', +silly versions '2.9.1', +silly versions '2.9.2', +silly versions '2.9.3', +silly versions '2.9.100', +silly versions '2.9.150', +silly versions '2.9.151', +silly versions '2.9.152', +silly versions '2.9.153', +silly versions '2.9.200', +silly versions '2.9.201', +silly versions '2.9.202' ] ] +verbose bin dist [ '0.6-ares1.7.5-DEV-evundefined-openssl1.0.1-v83.6.6.25-darwin-x64-11.3.0', +verbose bin dist { shasum: 'c61399cdfbbefda5dc48653b0e9bea517d9f8497', +verbose bin dist tarball: 'http://registry.npmjs.org/request/-/request-2.9.202.tgz' } ] +verbose addRemoteTarball [ 'https://registry.npmjs.org/request/-/request-2.9.202.tgz', +verbose addRemoteTarball 'c61399cdfbbefda5dc48653b0e9bea517d9f8497' ] +silly name, range, hasData 2 [ 'mocha', '>=0.13.0', true ] +silly versions [ 'mocha', +silly versions [ '0.0.1-alpha1', +silly versions '0.0.1-alpha2', +silly versions '0.0.1-alpha3', +silly versions '0.0.1-alpha4', +silly versions '0.0.1-alpha5', +silly versions '0.0.1-alpha6', +silly versions '0.0.1', +silly versions '0.0.2', +silly versions '0.0.3', +silly versions '0.0.4', +silly versions '0.0.5', +silly versions '0.0.6', +silly versions '0.0.7', +silly versions '0.0.8', +silly versions '0.1.0', +silly versions '0.2.0', +silly versions '0.3.0', +silly versions '0.3.1', +silly versions '0.3.2', +silly versions '0.3.3', +silly versions '0.3.4', +silly versions '0.3.6', +silly versions '0.4.0', +silly versions '0.5.0', +silly versions '0.6.0', +silly versions '0.7.0', +silly versions '0.7.1', +silly versions '0.8.0', +silly versions '0.8.1', +silly versions '0.9.0', +silly versions '0.10.0', +silly versions '0.10.1', +silly versions '0.10.2', +silly versions '0.11.0', +silly versions '0.12.0', +silly versions '0.12.1', +silly versions '0.13.0', +silly versions '0.14.0', +silly versions '0.14.1', +silly versions '1.0.0', +silly versions '1.0.1', +silly versions '1.0.2', +silly versions '1.0.3', +silly versions '1.1.0', +silly versions '1.2.0' ] ] +verbose bin dist [ '0.6-ares1.7.5-DEV-evundefined-openssl1.0.1-v83.6.6.25-darwin-x64-11.3.0', +verbose bin dist { shasum: '9d0ef575d76b65d8b5948d47ab98c1de39522477', +verbose bin dist tarball: 'http://registry.npmjs.org/mocha/-/mocha-1.2.0.tgz' } ] +verbose fetch to /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090814-0.287093308288604/tmp.tgz +verbose addRemoteTarball [ 'https://registry.npmjs.org/mocha/-/mocha-1.2.0.tgz', +verbose addRemoteTarball '9d0ef575d76b65d8b5948d47ab98c1de39522477' ] +silly name, range, hasData 2 [ 'express', '>=2.3.10', true ] +silly versions [ 'express', +silly versions [ '0.14.0', +silly versions '0.14.1', +silly versions '1.0.0beta', +silly versions '1.0.0beta2', +silly versions '1.0.0rc', +silly versions '1.0.0rc2', +silly versions '1.0.0rc3', +silly versions '1.0.0rc4', +silly versions '1.0.0', +silly versions '1.0.1', +silly versions '1.0.2', +silly versions '1.0.3', +silly versions '1.0.4', +silly versions '1.0.5', +silly versions '1.0.6', +silly versions '1.0.7', +silly versions '2.5.0', +silly versions '2.5.1', +silly versions '2.5.2', +silly versions '2.5.3', +silly versions '2.5.4', +silly versions '2.5.5', +silly versions '2.5.6', +silly versions '2.5.7', +silly versions '2.5.8', +silly versions '2.5.9', +silly versions '3.0.0alpha1', +silly versions '3.0.0alpha2', +silly versions '3.0.0alpha3', +silly versions '3.0.0alpha4', +silly versions '3.0.0alpha5', +silly versions '3.0.0beta1', +silly versions '3.0.0beta2', +silly versions '3.0.0beta3', +silly versions '2.5.10' ] ] +verbose bin dist [ '0.6-ares1.7.5-DEV-evundefined-openssl1.0.1-v83.6.6.25-darwin-x64-11.3.0', +verbose bin dist { shasum: 'b1cdaf0c7e98e33125e6f8476800bdeb7f7efc8a', +verbose bin dist tarball: 'http://registry.npmjs.org/express/-/express-2.5.10.tgz' } ] +verbose fetch to /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090819-0.5170268646907061/tmp.tgz +http 200 https://registry.npmjs.org/openid/-/openid-0.4.2.tgz +http GET https://registry.npmjs.org/request/-/request-2.9.202.tgz +http GET https://registry.npmjs.org/mocha/-/mocha-1.2.0.tgz +verbose unpack /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067088577-0.1044571753591299/tmp.tgz +silly updated sha bytes 10240 +silly gunzTarPerm modes [ '755', '644' ] +silly updated sha bytes 8692 +info shasum 9abf1dd3b20a3ab0a38f899c882c218d734e8a7b +info shasum /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090285-0.9251187327317894/tmp.tgz +verbose unpack /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090285-0.9251187327317894/tmp.tgz +info shasum 5274e67f5a64c5f92974cd85139e0332adc6b90c +info shasum /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090399-0.2421623975969851/tmp.tgz +verbose unpack /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090399-0.2421623975969851/tmp.tgz +silly updated sha bytes 10240 +silly gunzTarPerm modes [ '755', '644' ] +silly gunzTarPerm modes [ '755', '644' ] +info shasum af0903825784be553b93dbae57d99d59060585dd +info shasum /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090332-0.46316829114221036/tmp.tgz +verbose unpack /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090332-0.46316829114221036/tmp.tgz +verbose caching /Users/hank/.npm/express/2.5.10/package/package.json +verbose loadDefaults express@2.5.10 +http 200 https://registry.npmjs.org/tobi/-/tobi-0.3.2.tgz +http 200 https://registry.npmjs.org/satisfy/-/satisfy-0.1.0.tgz +http 200 https://registry.npmjs.org/expect.js/-/expect.js-0.1.2.tgz +silly extracting entry +silly modified mode [ '', 509, 493 ] +silly gunzTarPerm modes [ '755', '644' ] +silly extracting entry .gitignore +silly extracting entry package.json +silly updated sha bytes 20480 +info shasum c3d283db9d804d2c3abd8572d6d061e28f364967 +info shasum /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090423-0.924290185328573/tmp.tgz +verbose unpack /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090423-0.924290185328573/tmp.tgz +silly extracting entry .gitignore +silly modified mode [ '.gitignore', 436, 420 ] +silly extracting entry LICENSE +silly modified mode [ 'LICENSE', 436, 420 ] +http 200 https://registry.npmjs.org/jade +silly get cb [ 200, +silly get cb { vary: 'Accept', +silly get cb server: 'CouchDB/1.2.0 (Erlang OTP/R15B)', +silly get cb etag: '"5UKVWVKM9UO5E92QY25HT17CP"', +silly get cb date: 'Tue, 19 Jun 2012 00:51:30 GMT', +silly get cb 'content-type': 'application/json', +silly get cb 'content-length': '60022' } ] +silly extracting entry .gitignore +silly gunzTarPerm modes [ '755', '644' ] +silly extracting entry index.js +silly extracting entry package.json +silly extracting entry .npmignore +silly extracting entry README.md +silly extracting entry LICENSE +silly extracting entry Makefile +silly modified mode [ 'Makefile', 436, 420 ] +silly extracting entry Readme.md +silly modified mode [ 'Readme.md', 436, 420 ] +silly extracting entry index.js +silly extracting entry package.json +silly extracting entry LICENSE +silly name, range, hasData 2 [ 'jade', '>=0.12.1', true ] +silly versions [ 'jade', +silly versions [ '0.0.1', +silly versions '0.0.2', +silly versions '0.1.0', +silly versions '0.2.0', +silly versions '0.2.1', +silly versions '0.2.2', +silly versions '0.2.3', +silly versions '0.2.4', +silly versions '0.3.0', +silly versions '0.4.0', +silly versions '0.4.1', +silly versions '0.5.0', +silly versions '0.5.1', +silly versions '0.5.2', +silly versions '0.5.3', +silly versions '0.5.4', +silly versions '0.5.5', +silly versions '0.5.6', +silly versions '0.5.7', +silly versions '0.6.0', +silly versions '0.6.1', +silly versions '0.6.3', +silly versions '0.7.0', +silly versions '0.7.1', +silly versions '0.8.0', +silly versions '0.8.1', +silly versions '0.8.2', +silly versions '0.8.3', +silly versions '0.8.4', +silly versions '0.8.5', +silly versions '0.8.6', +silly versions '0.8.7', +silly versions '0.8.8', +silly versions '0.8.9', +silly versions '0.9.0', +silly versions '0.9.1', +silly versions '0.9.2', +silly versions '0.9.3', +silly versions '0.10.0', +silly versions '0.10.1', +silly versions '0.10.2', +silly versions '0.10.3', +silly versions '0.10.4', +silly versions '0.10.5', +silly versions '0.10.6', +silly versions '0.10.7', +silly versions '0.11.0', +silly versions '0.11.1', +silly versions '0.12.0', +silly versions '0.12.1', +silly versions '0.12.2', +silly versions '0.12.3', +silly versions '0.12.4', +silly versions '0.13.0', +silly versions '0.14.0', +silly versions '0.14.1', +silly versions '0.14.2', +silly versions '0.15.0', +silly versions '0.15.1', +silly versions '0.15.2', +silly versions '0.15.3', +silly versions '0.15.4', +silly versions '0.16.0', +silly versions '0.16.1', +silly versions '0.16.2', +silly versions '0.16.3', +silly versions '0.16.4', +silly versions '0.17.0', +silly versions '0.18.0', +silly versions '0.19.0', +silly versions '0.20.0', +silly versions '0.20.1', +silly versions '0.20.2', +silly versions '0.20.3', +silly versions '0.21.0', +silly versions '0.22.0', +silly versions '0.22.1', +silly versions '0.23.0', +silly versions '0.24.0', +silly versions '0.25.0', +silly versions '0.26.0', +silly versions '0.26.1' ] ] +verbose bin dist [ '0.6-ares1.7.5-DEV-evundefined-openssl1.0.1-v83.6.6.25-darwin-x64-11.3.0', +verbose bin dist { shasum: '0e9ad15b3ae07e3fb404a1fda4668aec10e96a17', +verbose bin dist tarball: 'http://registry.npmjs.org/jade/-/jade-0.26.1.tgz' } ] +http 200 https://registry.npmjs.org/debug/-/debug-0.5.0.tgz +http 200 https://registry.npmjs.org/request/-/request-2.9.202.tgz +silly extracting entry openid.js +silly extracting entry package.json +silly extracting entry src/xml2js.coffee +silly extracting entry test/xml2js.test.coffee +silly extracting entry README +silly extracting entry lib/wsfederation.js +silly extracting entry examples/ +silly modified mode [ 'examples/', 509, 493 ] +silly extracting entry examples/express-gdata/ +silly modified mode [ 'examples/express-gdata/', 509, 493 ] +silly extracting entry README.md +silly extracting entry README +silly extracting entry lib/swt.js +silly updated sha bytes 20480 +silly updated sha bytes 11925 +silly extracting entry examples/express-gdata/server.js +silly modified mode [ 'examples/express-gdata/server.js', 436, 420 ] +info shasum ad98fcff3172d7d7275fbaca19509d70d0ffca36 +info shasum /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090606-0.7157397088594735/tmp.tgz +verbose unpack /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090606-0.7157397088594735/tmp.tgz +info shasum 7352391e73b3ca372db251ccf1dcddf5b5b3d5c2 +info shasum /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090515-0.13743186835199594/tmp.tgz +verbose unpack /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090515-0.13743186835199594/tmp.tgz +silly gunzTarPerm modes [ '755', '644' ] +silly gunzTarPerm modes [ '755', '644' ] +silly extracting entry test/fixtures/sample.xml +silly extracting entry lib/xml2js.js +silly extracting entry sample.js +silly extracting entry lib/base64.js +silly extracting entry Cakefile +silly extracting entry examples/express-gdata/views/ +silly modified mode [ 'examples/express-gdata/views/', 509, 493 ] +silly extracting entry examples/express-gdata/views/google_calendars.ejs +silly modified mode [ 'examples/express-gdata/views/google_calendars.ejs', 436, 420 ] +silly extracting entry .gitignore +silly extracting entry lib/convert.js +silly extracting entry .npmignore +silly extracting entry lib/xrds.js +silly extracting entry test/openid_fast_tests.js +silly extracting entry test/openid_integration_tests.js +silly extracting entry History.md +silly extracting entry Makefile +silly extracting entry test/xrds_tests.js +silly extracting entry expect.js +silly extracting entry History.md +http 200 https://registry.npmjs.org/mocha/-/mocha-1.2.0.tgz +silly extracting entry examples/express-gdata/views/google_contacts.ejs +silly modified mode [ 'examples/express-gdata/views/google_contacts.ejs', 436, 420 ] +silly extracting entry examples/express-gdata/views/layout.ejs +silly modified mode [ 'examples/express-gdata/views/layout.ejs', 436, 420 ] +silly extracting entry examples/term.ie.oauth-HMAC-SHA1.js +silly modified mode [ 'examples/term.ie.oauth-HMAC-SHA1.js', 436, 420 ] +silly updated sha bytes 10240 +silly extracting entry examples/term.ie.oauth-PLAINTEXT.js +silly modified mode [ 'examples/term.ie.oauth-PLAINTEXT.js', 436, 420 ] +silly extracting entry package.json +silly extracting entry README.md +info shasum 9d48c946fb7d7d59807ffe07822f515fd76d7a9e +info shasum /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090753-0.9105697830673307/tmp.tgz +verbose unpack /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090753-0.9105697830673307/tmp.tgz +silly extracting entry index.js +silly modified mode [ 'index.js', 436, 420 ] +verbose caching /Users/hank/.npm/jade/0.26.1/package/package.json +verbose loadDefaults jade@0.26.1 +silly extracting entry package.json +silly extracting entry README.md +silly extracting entry lib/ +silly modified mode [ 'lib/', 509, 493 ] +silly gunzTarPerm modes [ '755', '644' ] +silly extracting entry lib/_utils.js +silly modified mode [ 'lib/_utils.js', 436, 420 ] +silly extracting entry lib/oauth.js +silly modified mode [ 'lib/oauth.js', 436, 420 ] +silly extracting entry lib/oauth2.js +silly modified mode [ 'lib/oauth2.js', 436, 420 ] +silly extracting entry lib/sha1.js +silly modified mode [ 'lib/sha1.js', 436, 420 ] +silly extracting entry support/sizzle.js +silly extracting entry test/satisfy.js +silly extracting entry .npmignore +silly extracting entry .gitignore +silly extracting entry debug.js +verbose caching /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090285-0.9251187327317894/package/package.json +verbose loadDefaults node-wsfederation@0.1.1 +verbose from cache /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090285-0.9251187327317894/package/package.json +silly extracting entry package.json +silly modified mode [ 'package.json', 436, 420 ] +silly extracting entry tests/ +silly modified mode [ 'tests/', 509, 493 ] +verbose tar.pack [ '/Users/hank/.npm/node-wsfederation/0.1.1/package.tgz', +verbose tar.pack '/var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090285-0.9251187327317894/package' ] +verbose tarball /Users/hank/.npm/node-wsfederation/0.1.1/package.tgz +verbose folder /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090285-0.9251187327317894/package +silly extracting entry lib/adaptor.js +silly extracting entry lib/satisfaction.js +verbose caching /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090332-0.46316829114221036/package/package.json +verbose loadDefaults node-swt@0.1.1 +verbose from cache /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090332-0.46316829114221036/package/package.json +verbose tar.pack [ '/Users/hank/.npm/node-swt/0.1.1/package.tgz', +verbose tar.pack '/var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090332-0.46316829114221036/package' ] +verbose tarball /Users/hank/.npm/node-swt/0.1.1/package.tgz +verbose folder /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090332-0.46316829114221036/package +silly extracting entry tests/oauth.js +silly modified mode [ 'tests/oauth.js', 436, 420 ] +silly extracting entry tests/oauth2.js +silly modified mode [ 'tests/oauth2.js', 436, 420 ] +silly extracting entry History.md +silly extracting entry index.js +silly extracting entry lib/satisfy.js +silly extracting entry lib/adaptors/index.js +silly extracting entry tests/sha1.js +silly modified mode [ 'tests/sha1.js', 436, 420 ] +silly extracting entry lib/adaptors/soda.js +silly updated sha bytes 32768 +silly extracting entry lib/adaptors/webkit-server.js +silly updated sha bytes 36864 +silly updated sha bytes 4645 +silly extracting entry Makefile +silly extracting entry package.json +info shasum c61399cdfbbefda5dc48653b0e9bea517d9f8497 +info shasum /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090814-0.287093308288604/tmp.tgz +verbose unpack /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090814-0.287093308288604/tmp.tgz +silly extracting entry Readme.md +silly gunzTarPerm modes [ '755', '644' ] +silly extracting entry example/app.js +silly extracting entry package.json +silly extracting entry example/browser.html +silly extracting entry example/wildcards.js +silly extracting entry README.md +silly extracting entry LICENSE +silly extracting entry example/worker.js +silly extracting entry lib/debug.js +silly extracting entry main.js +silly extracting entry mimetypes.js +silly extracting entry oauth.js +silly extracting entry uuid.js +silly extracting entry tunnel.js +silly extracting entry forever.js +silly extracting entry tests/test-tunnel.js +silly extracting entry tests/test-cookiejar.js +silly extracting entry tests/test-defaults.js +silly extracting entry tests/test-errors.js +silly extracting entry tests/test-cookie.js +silly extracting entry tests/run.js +silly extracting entry tests/test-https-strict.js +silly updated sha bytes 40960 +silly extracting entry tests/test-https.js +silly updated sha bytes 40960 +silly updated sha bytes 40960 +silly extracting entry tests/test-oauth.js +silly updated sha bytes 1382 +silly updated sha bytes 40960 +silly extracting entry tests/test-params.js +info shasum 9d0ef575d76b65d8b5948d47ab98c1de39522477 +info shasum /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090819-0.5170268646907061/tmp.tgz +verbose unpack /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090819-0.5170268646907061/tmp.tgz +silly updated sha bytes 20480 +silly extracting entry tests/test-body.js +verbose unpack /Users/hank/.npm/node-wsfederation/0.1.1/package.tgz +info shasum b3e0cbaa10494c0b65d543dbde64201ac4974df5 +info shasum /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090509-0.1662144884467125/tmp.tgz +verbose unpack /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090509-0.1662144884467125/tmp.tgz +silly extracting entry tests/test-pipes.js +silly gunzTarPerm modes [ '755', '644' ] +silly gunzTarPerm modes [ '755', '644' ] +silly gunzTarPerm modes [ '755', '644' ] +verbose unpack /Users/hank/.npm/node-swt/0.1.1/package.tgz +silly gunzTarPerm modes [ '755', '644' ] +silly extracting entry package.json +silly extracting entry tests/test-timeout.js +silly extracting entry tests/test-proxy.js +silly extracting entry package.json +silly extracting entry .gitignore +silly extracting entry tests/test-toJSON.js +silly extracting entry tests/test-qs.js +silly extracting entry .npmignore +silly extracting entry LICENSE +silly extracting entry package.json +silly extracting entry tests/server.js +silly extracting entry .npmignore +silly extracting entry README +silly extracting entry .gitmodules +silly extracting entry .npmignore +silly extracting entry tests/test-redirect.js +silly extracting entry tests/test-headers.js +silly extracting entry tests/test-httpModule.js +silly extracting entry .npmignore +silly extracting entry README +silly extracting entry tests/ssl/ca/server.js +silly extracting entry tests/ssl/ca/ca.srl +silly extracting entry tests/ssl/ca/ca.crt +silly extracting entry tests/ssl/ca/ca.csr +silly extracting entry History.md +silly extracting entry index.html +silly extracting entry _mocha.js +silly extracting entry index.js +silly extracting entry tests/ssl/ca/ca.key +silly extracting entry index.js +silly extracting entry lib/wsfederation.js +silly extracting entry tests/ssl/ca/ca.crl +silly extracting entry tests/ssl/ca/server.cnf +silly extracting entry tests/ssl/ca/server.crt +silly extracting entry index.js +silly extracting entry lib/swt.js +silly extracting entry tests/ssl/ca/server.csr +silly extracting entry tests/ssl/ca/ca.cnf +silly extracting entry index.js +silly extracting entry Makefile +silly extracting entry mocha.js +silly extracting entry images/error.png +silly extracting entry images/ok.png +verbose caching /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090399-0.2421623975969851/package/package.json +verbose loadDefaults xml2js@0.1.14 +verbose from cache /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090399-0.2421623975969851/package/package.json +silly extracting entry tests/ssl/ca/server.key +silly extracting entry tests/ssl/npm-ca.crt +silly extracting entry package.json +silly extracting entry Readme.md +verbose tar.pack [ '/Users/hank/.npm/xml2js/0.1.14/package.tgz', +verbose tar.pack '/var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090399-0.2421623975969851/package' ] +verbose tarball /Users/hank/.npm/xml2js/0.1.14/package.tgz +verbose folder /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090399-0.2421623975969851/package +silly extracting entry tests/ssl/test.crt +silly extracting entry examples/app.js +silly extracting entry examples/google.js +silly extracting entry tests/ssl/test.key +silly extracting entry tests/squid.conf +silly extracting entry examples/login.js +silly extracting entry tests/googledoodle.png +silly extracting entry examples/multiple.js +silly extracting entry support/compile.js +silly extracting entry support/foot.js +silly extracting entry support/head.js +silly extracting entry vendor/cookie/index.js +silly extracting entry vendor/cookie/jar.js +silly extracting entry support/tail.js +silly extracting entry support/template.html +silly extracting entry .travis.yml +silly extracting entry bin/_mocha +silly extracting entry examples/wizard.js +silly extracting entry test/assertions.test.js +silly extracting entry bin/mocha +silly extracting entry Makefile +verbose caching /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090515-0.13743186835199594/package/package.json +verbose loadDefaults expect.js@0.1.2 +verbose from cache /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090515-0.13743186835199594/package/package.json +silly extracting entry test/browser.context.test.js +silly extracting entry mocha.css +verbose tar.pack [ '/Users/hank/.npm/expect.js/0.1.2/package.tgz', +verbose tar.pack '/var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090515-0.13743186835199594/package' ] +verbose tarball /Users/hank/.npm/expect.js/0.1.2/package.tgz +verbose folder /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090515-0.13743186835199594/package +silly extracting entry test/browser.external.test.js +silly extracting entry editors/JavaScript mocha.tmbundle/info.plist +silly extracting entry test/browser.navigation.test.js +silly extracting entry editors/JavaScript mocha.tmbundle/Snippets/bdd - after each.tmSnippet +silly extracting entry test/browser.test.js +silly extracting entry editors/JavaScript mocha.tmbundle/Snippets/bdd - after.tmSnippet +silly extracting entry test/cookie.jar.test.js +silly extracting entry editors/JavaScript mocha.tmbundle/Snippets/bdd - before each.tmSnippet +silly extracting entry test/jquery.test.js +silly extracting entry editors/JavaScript mocha.tmbundle/Snippets/bdd - before.tmSnippet +silly extracting entry test/cookie.test.js +verbose caching /Users/hank/.npm/node-wsfederation/0.1.1/package/package.json +verbose loadDefaults node-wsfederation@0.1.1 +silly extracting entry editors/JavaScript mocha.tmbundle/Snippets/bdd - it.tmSnippet +silly extracting entry test/scenarios.login.test.js +silly extracting entry editors/JavaScript mocha.tmbundle/Snippets/untitled.tmSnippet +silly extracting entry test/tobi.test.js +silly updated sha bytes 1054 +silly extracting entry History.md +silly extracting entry lib/browser.js +info shasum 7e4c8b443337e602418763faf754504011395e3d +info shasum /Users/hank/.npm/node-wsfederation/0.1.1/package.tgz +verbose from cache /Users/hank/.npm/node-wsfederation/0.1.1/package/package.json +verbose chmod /Users/hank/.npm/node-wsfederation/0.1.1/package.tgz 644 +verbose chown [ '/Users/hank/.npm/node-wsfederation/0.1.1/package.tgz', +verbose chown 501, +verbose chown 20 ] +silly extracting entry Readme.md +silly extracting entry lib/tobi.js +verbose caching /Users/hank/.npm/node-swt/0.1.1/package/package.json +verbose loadDefaults node-swt@0.1.1 +silly extracting entry lib/utils.js +silly extracting entry lib/assertions/should.js +silly extracting entry lib/hook.js +silly extracting entry lib/cookie/jar.js +silly updated sha bytes 1324 +silly extracting entry lib/mocha.js +silly extracting entry lib/cookie/index.js +info shasum 3a8fe995ae04b363ad898d7bde21fcb2e8d20d85 +info shasum /Users/hank/.npm/node-swt/0.1.1/package.tgz +verbose from cache /Users/hank/.npm/node-swt/0.1.1/package/package.json +verbose chmod /Users/hank/.npm/node-swt/0.1.1/package.tgz 644 +verbose chown [ '/Users/hank/.npm/node-swt/0.1.1/package.tgz', 501, 20 ] +silly extracting entry lib/context.js +silly extracting entry lib/jquery/core.js +silly extracting entry lib/runnable.js +verbose caching /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090753-0.9105697830673307/package/package.json +verbose loadDefaults debug@0.5.0 +verbose from cache /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090753-0.9105697830673307/package/package.json +silly extracting entry lib/runner.js +silly extracting entry lib/suite.js +verbose tar.pack [ '/Users/hank/.npm/debug/0.5.0/package.tgz', +verbose tar.pack '/var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090753-0.9105697830673307/package' ] +verbose tarball /Users/hank/.npm/debug/0.5.0/package.tgz +verbose folder /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090753-0.9105697830673307/package +silly extracting entry lib/test.js +silly extracting entry lib/browser/debug.js +silly extracting entry lib/browser/diff.js +silly extracting entry lib/browser/events.js +silly extracting entry lib/browser/fs.js +silly extracting entry lib/browser/path.js +silly extracting entry lib/browser/progress.js +silly extracting entry lib/browser/tty.js +silly extracting entry lib/interfaces/bdd.js +silly extracting entry lib/interfaces/exports.js +silly extracting entry lib/interfaces/index.js +silly extracting entry lib/interfaces/qunit.js +silly extracting entry lib/jquery/fill.js +silly extracting entry lib/interfaces/tdd.js +silly extracting entry lib/jquery/index.js +silly extracting entry lib/reporters/base.js +silly extracting entry lib/reporters/json-cov.js +silly extracting entry lib/reporters/json-stream.js +silly extracting entry lib/reporters/json.js +silly extracting entry lib/reporters/index.js +silly extracting entry lib/reporters/doc.js +silly extracting entry lib/reporters/markdown.js +silly extracting entry lib/reporters/min.js +silly extracting entry lib/reporters/nyan.js +silly extracting entry lib/reporters/progress.js +silly extracting entry lib/reporters/html.js +silly extracting entry lib/reporters/spec.js +silly extracting entry lib/reporters/html-cov.js +silly extracting entry lib/reporters/tap.js +silly extracting entry lib/reporters/dot.js +silly extracting entry lib/reporters/teamcity.js +silly extracting entry lib/reporters/landing.js +silly extracting entry lib/reporters/xunit.js +silly extracting entry lib/reporters/list.js +silly extracting entry lib/reporters/templates/coverage.jade +silly extracting entry lib/reporters/templates/menu.jade +silly extracting entry lib/reporters/templates/script.html +silly extracting entry lib/reporters/templates/style.html +verbose caching /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090606-0.7157397088594735/package/package.json +verbose loadDefaults satisfy@0.1.0 +verbose from cache /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090606-0.7157397088594735/package/package.json +verbose tar.pack [ '/Users/hank/.npm/satisfy/0.1.0/package.tgz', +verbose tar.pack '/var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090606-0.7157397088594735/package' ] +verbose tarball /Users/hank/.npm/satisfy/0.1.0/package.tgz +verbose folder /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090606-0.7157397088594735/package +verbose caching /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090423-0.924290185328573/package/package.json +verbose loadDefaults openid@0.4.2 +verbose from cache /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090423-0.924290185328573/package/package.json +verbose tar.pack [ '/Users/hank/.npm/openid/0.4.2/package.tgz', +verbose tar.pack '/var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090423-0.924290185328573/package' ] +verbose tarball /Users/hank/.npm/openid/0.4.2/package.tgz +verbose folder /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090423-0.924290185328573/package +verbose unpack /Users/hank/.npm/xml2js/0.1.14/package.tgz +silly gunzTarPerm modes [ '755', '644' ] +verbose unpack /Users/hank/.npm/debug/0.5.0/package.tgz +silly gunzTarPerm modes [ '755', '644' ] +silly extracting entry package.json +verbose unpack /Users/hank/.npm/expect.js/0.1.2/package.tgz +silly extracting entry package.json +silly gunzTarPerm modes [ '755', '644' ] +silly extracting entry .npmignore +silly extracting entry README.md +silly extracting entry LICENSE +silly extracting entry .npmignore +silly extracting entry debug.js +silly extracting entry package.json +silly extracting entry .npmignore +silly extracting entry README.md +silly extracting entry Cakefile +silly extracting entry lib/xml2js.js +silly extracting entry index.js +silly extracting entry example/app.js +silly extracting entry expect.js +silly extracting entry History.md +silly extracting entry src/xml2js.coffee +silly extracting entry test/fixtures/sample.xml +silly extracting entry example/wildcards.js +silly extracting entry example/worker.js +silly extracting entry test/xml2js.test.coffee +silly extracting entry example/browser.html +silly extracting entry History.md +silly extracting entry lib/debug.js +silly extracting entry Makefile +silly extracting entry Readme.md +verbose caching /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067088577-0.1044571753591299/package/package.json +verbose loadDefaults oauth@0.9.7 +verbose from cache /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067088577-0.1044571753591299/package/package.json +verbose tar.pack [ '/Users/hank/.npm/oauth/0.9.7/package.tgz', +verbose tar.pack '/var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067088577-0.1044571753591299/package' ] +verbose tarball /Users/hank/.npm/oauth/0.9.7/package.tgz +verbose folder /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067088577-0.1044571753591299/package +verbose caching /Users/hank/.npm/debug/0.5.0/package/package.json +verbose loadDefaults debug@0.5.0 +silly updated sha bytes 4773 +info shasum ba6e86a29f71bbbd04b447c29d17b6e157ee77ec +info shasum /Users/hank/.npm/debug/0.5.0/package.tgz +verbose from cache /Users/hank/.npm/debug/0.5.0/package/package.json +verbose chmod /Users/hank/.npm/debug/0.5.0/package.tgz 644 +verbose chown [ '/Users/hank/.npm/debug/0.5.0/package.tgz', 501, 20 ] +verbose caching /Users/hank/.npm/expect.js/0.1.2/package/package.json +verbose loadDefaults expect.js@0.1.2 +silly updated sha bytes 11919 +info shasum ffa50d303f97d7a90b9c8c9611a212d38eb67f32 +info shasum /Users/hank/.npm/expect.js/0.1.2/package.tgz +verbose from cache /Users/hank/.npm/expect.js/0.1.2/package/package.json +verbose chmod /Users/hank/.npm/expect.js/0.1.2/package.tgz 644 +verbose chown [ '/Users/hank/.npm/expect.js/0.1.2/package.tgz', 501, 20 ] +verbose caching /Users/hank/.npm/xml2js/0.1.14/package/package.json +verbose loadDefaults xml2js@0.1.14 +silly updated sha bytes 8643 +info shasum e24e785072bb8c4b342b07e6c25bd189ca103c2d +info shasum /Users/hank/.npm/xml2js/0.1.14/package.tgz +verbose from cache /Users/hank/.npm/xml2js/0.1.14/package/package.json +verbose chmod /Users/hank/.npm/xml2js/0.1.14/package.tgz 644 +verbose chown [ '/Users/hank/.npm/xml2js/0.1.14/package.tgz', 501, 20 ] +verbose unpack /Users/hank/.npm/satisfy/0.1.0/package.tgz +silly gunzTarPerm modes [ '755', '644' ] +silly extracting entry package.json +silly extracting entry .npmignore +silly extracting entry README.md +silly extracting entry History.md +silly extracting entry lib/adaptor.js +silly extracting entry lib/satisfaction.js +silly extracting entry lib/satisfy.js +silly extracting entry lib/adaptors/index.js +silly extracting entry lib/adaptors/soda.js +silly extracting entry lib/adaptors/webkit-server.js +silly extracting entry Makefile +silly extracting entry support/sizzle.js +silly extracting entry test/satisfy.js +verbose unpack /Users/hank/.npm/openid/0.4.2/package.tgz +silly gunzTarPerm modes [ '755', '644' ] +silly extracting entry package.json +silly extracting entry README.md +silly extracting entry LICENSE +silly extracting entry openid.js +silly extracting entry sample.js +silly extracting entry lib/base64.js +silly extracting entry lib/convert.js +silly extracting entry lib/xrds.js +silly extracting entry test/openid_fast_tests.js +silly extracting entry test/openid_integration_tests.js +silly extracting entry test/xrds_tests.js +verbose caching /Users/hank/.npm/satisfy/0.1.0/package/package.json +verbose loadDefaults satisfy@0.1.0 +silly updated sha bytes 14998 +info shasum 2c98306529fad4a7d00d1c3b9ca7d8d5f1ed226e +info shasum /Users/hank/.npm/satisfy/0.1.0/package.tgz +verbose from cache /Users/hank/.npm/satisfy/0.1.0/package/package.json +verbose chmod /Users/hank/.npm/satisfy/0.1.0/package.tgz 644 +verbose chown [ '/Users/hank/.npm/satisfy/0.1.0/package.tgz', 501, 20 ] +verbose unpack /Users/hank/.npm/oauth/0.9.7/package.tgz +silly gunzTarPerm modes [ '755', '644' ] +silly extracting entry package.json +silly extracting entry .npmignore +silly extracting entry LICENSE +silly extracting entry index.js +silly extracting entry examples/term.ie.oauth-HMAC-SHA1.js +silly extracting entry examples/term.ie.oauth-PLAINTEXT.js +silly extracting entry examples/express-gdata/server.js +silly extracting entry examples/express-gdata/views/google_calendars.ejs +verbose caching /Users/hank/.npm/openid/0.4.2/package/package.json +verbose loadDefaults openid@0.4.2 +silly updated sha bytes 19094 +info shasum 3670f1eb6a03f25e4e016806bd198eb0693e367d +info shasum /Users/hank/.npm/openid/0.4.2/package.tgz +verbose from cache /Users/hank/.npm/openid/0.4.2/package/package.json +verbose chmod /Users/hank/.npm/openid/0.4.2/package.tgz 644 +verbose chown [ '/Users/hank/.npm/openid/0.4.2/package.tgz', 501, 20 ] +silly extracting entry examples/express-gdata/views/google_contacts.ejs +silly extracting entry examples/express-gdata/views/layout.ejs +silly extracting entry lib/_utils.js +silly extracting entry lib/oauth.js +silly extracting entry lib/oauth2.js +verbose caching /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090814-0.287093308288604/package/package.json +verbose loadDefaults request@2.9.202 +verbose from cache /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090814-0.287093308288604/package/package.json +verbose tar.pack [ '/Users/hank/.npm/request/2.9.202/package.tgz', +verbose tar.pack '/var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090814-0.287093308288604/package' ] +verbose tarball /Users/hank/.npm/request/2.9.202/package.tgz +verbose folder /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090814-0.287093308288604/package +silly extracting entry lib/sha1.js +silly extracting entry Makefile +silly extracting entry Readme.md +silly extracting entry tests/oauth.js +silly extracting entry tests/oauth2.js +silly extracting entry tests/sha1.js +verbose caching /Users/hank/.npm/oauth/0.9.7/package/package.json +verbose loadDefaults oauth@0.9.7 +silly updated sha bytes 20638 +info shasum adcc9a868105825109a238b11d093e8b8a9fd616 +info shasum /Users/hank/.npm/oauth/0.9.7/package.tgz +verbose from cache /Users/hank/.npm/oauth/0.9.7/package/package.json +verbose chmod /Users/hank/.npm/oauth/0.9.7/package.tgz 644 +verbose chown [ '/Users/hank/.npm/oauth/0.9.7/package.tgz', 501, 20 ] +verbose caching /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090509-0.1662144884467125/package/package.json +verbose loadDefaults tobi@0.3.2 +verbose from cache /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090509-0.1662144884467125/package/package.json +verbose tar.pack [ '/Users/hank/.npm/tobi/0.3.2/package.tgz', +verbose tar.pack '/var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090509-0.1662144884467125/package' ] +verbose tarball /Users/hank/.npm/tobi/0.3.2/package.tgz +verbose folder /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090509-0.1662144884467125/package +verbose caching /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090819-0.5170268646907061/package/package.json +verbose loadDefaults mocha@1.2.0 +verbose from cache /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090819-0.5170268646907061/package/package.json +verbose tar.pack [ '/Users/hank/.npm/mocha/1.2.0/package.tgz', +verbose tar.pack '/var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090819-0.5170268646907061/package' ] +verbose tarball /Users/hank/.npm/mocha/1.2.0/package.tgz +verbose folder /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067090819-0.5170268646907061/package +verbose unpack /Users/hank/.npm/request/2.9.202/package.tgz +silly gunzTarPerm modes [ '755', '644' ] +silly extracting entry package.json +silly extracting entry README.md +silly extracting entry LICENSE +silly extracting entry main.js +silly extracting entry mimetypes.js +silly extracting entry oauth.js +silly extracting entry uuid.js +silly extracting entry tunnel.js +silly extracting entry forever.js +silly extracting entry tests/test-tunnel.js +silly extracting entry tests/test-cookiejar.js +silly extracting entry tests/test-defaults.js +silly extracting entry tests/test-errors.js +silly extracting entry tests/test-cookie.js +silly extracting entry tests/run.js +silly extracting entry tests/test-https-strict.js +silly extracting entry tests/test-https.js +silly extracting entry tests/test-oauth.js +silly extracting entry tests/test-params.js +silly extracting entry tests/test-body.js +silly extracting entry tests/test-pipes.js +silly extracting entry tests/test-timeout.js +silly extracting entry tests/test-proxy.js +silly extracting entry tests/test-toJSON.js +silly extracting entry tests/test-qs.js +silly extracting entry tests/server.js +silly extracting entry tests/test-redirect.js +silly extracting entry tests/test-headers.js +silly extracting entry tests/test-httpModule.js +silly extracting entry tests/ssl/ca/server.js +silly extracting entry tests/ssl/ca/ca.srl +silly extracting entry tests/ssl/ca/ca.crt +silly extracting entry tests/ssl/ca/ca.csr +silly extracting entry tests/ssl/ca/ca.key +silly extracting entry tests/ssl/ca/ca.crl +silly extracting entry tests/ssl/ca/server.cnf +silly extracting entry tests/ssl/ca/server.crt +silly extracting entry tests/ssl/ca/server.csr +silly extracting entry tests/ssl/ca/ca.cnf +silly extracting entry tests/ssl/ca/server.key +silly extracting entry tests/ssl/npm-ca.crt +silly extracting entry tests/ssl/test.crt +silly extracting entry tests/ssl/test.key +silly extracting entry tests/squid.conf +silly extracting entry tests/googledoodle.png +silly extracting entry vendor/cookie/index.js +silly extracting entry vendor/cookie/jar.js +verbose caching /Users/hank/.npm/request/2.9.202/package/package.json +verbose loadDefaults request@2.9.202 +silly updated sha bytes 32768 +silly updated sha bytes 40960 +silly updated sha bytes 549 +info shasum c61399cdfbbefda5dc48653b0e9bea517d9f8497 +info shasum /Users/hank/.npm/request/2.9.202/package.tgz +verbose from cache /Users/hank/.npm/request/2.9.202/package/package.json +verbose chmod /Users/hank/.npm/request/2.9.202/package.tgz 644 +verbose chown [ '/Users/hank/.npm/request/2.9.202/package.tgz', 501, 20 ] +verbose unpack /Users/hank/.npm/tobi/0.3.2/package.tgz +silly gunzTarPerm modes [ '755', '644' ] +silly extracting entry package.json +silly extracting entry .npmignore +silly extracting entry index.js +silly extracting entry .gitmodules +silly extracting entry History.md +silly extracting entry index.html +silly extracting entry lib/browser.js +silly extracting entry lib/tobi.js +silly extracting entry lib/assertions/should.js +silly extracting entry lib/cookie/index.js +silly extracting entry lib/cookie/jar.js +silly extracting entry lib/jquery/core.js +silly extracting entry lib/jquery/fill.js +silly extracting entry lib/jquery/index.js +silly extracting entry Makefile +silly extracting entry Readme.md +verbose unpack /Users/hank/.npm/mocha/1.2.0/package.tgz +silly gunzTarPerm modes [ '755', '644' ] +silly extracting entry package.json +silly extracting entry .npmignore +silly extracting entry LICENSE +silly extracting entry _mocha.js +silly extracting entry index.js +silly extracting entry mocha.js +silly extracting entry images/error.png +silly extracting entry images/ok.png +silly extracting entry support/compile.js +silly extracting entry support/foot.js +silly extracting entry support/head.js +silly extracting entry support/tail.js +silly extracting entry support/template.html +silly extracting entry .travis.yml +silly extracting entry bin/_mocha +silly extracting entry bin/mocha +silly extracting entry Makefile +silly extracting entry mocha.css +silly extracting entry editors/JavaScript mocha.tmbundle/info.plist +silly extracting entry editors/JavaScript mocha.tmbundle/Snippets/bdd - after each.tmSnippet +silly extracting entry editors/JavaScript mocha.tmbundle/Snippets/bdd - after.tmSnippet +silly extracting entry editors/JavaScript mocha.tmbundle/Snippets/bdd - before each.tmSnippet +silly extracting entry editors/JavaScript mocha.tmbundle/Snippets/bdd - before.tmSnippet +silly extracting entry editors/JavaScript mocha.tmbundle/Snippets/bdd - it.tmSnippet +silly extracting entry editors/JavaScript mocha.tmbundle/Snippets/untitled.tmSnippet +silly extracting entry History.md +silly extracting entry Readme.md +silly extracting entry lib/utils.js +silly extracting entry lib/hook.js +silly extracting entry lib/mocha.js +silly extracting entry lib/context.js +silly extracting entry lib/runnable.js +silly extracting entry lib/runner.js +silly extracting entry lib/suite.js +silly extracting entry lib/test.js +silly extracting entry lib/browser/debug.js +silly extracting entry lib/browser/diff.js +silly extracting entry lib/browser/events.js +silly extracting entry lib/browser/fs.js +silly extracting entry lib/browser/path.js +silly extracting entry lib/browser/progress.js +silly extracting entry lib/browser/tty.js +silly extracting entry lib/interfaces/bdd.js +silly extracting entry lib/interfaces/exports.js +silly extracting entry lib/interfaces/index.js +silly extracting entry lib/interfaces/qunit.js +silly extracting entry lib/interfaces/tdd.js +silly extracting entry lib/reporters/base.js +silly extracting entry lib/reporters/json-cov.js +silly extracting entry lib/reporters/json-stream.js +silly extracting entry lib/reporters/json.js +silly extracting entry lib/reporters/index.js +silly extracting entry lib/reporters/doc.js +silly extracting entry lib/reporters/markdown.js +silly extracting entry lib/reporters/min.js +silly extracting entry lib/reporters/nyan.js +silly extracting entry lib/reporters/progress.js +silly extracting entry lib/reporters/html.js +silly extracting entry lib/reporters/spec.js +silly extracting entry lib/reporters/html-cov.js +silly extracting entry lib/reporters/tap.js +silly extracting entry lib/reporters/dot.js +silly extracting entry lib/reporters/teamcity.js +silly extracting entry lib/reporters/landing.js +silly extracting entry lib/reporters/xunit.js +silly extracting entry lib/reporters/list.js +silly extracting entry lib/reporters/templates/coverage.jade +silly extracting entry lib/reporters/templates/menu.jade +silly extracting entry lib/reporters/templates/script.html +silly extracting entry lib/reporters/templates/style.html +verbose caching /Users/hank/.npm/tobi/0.3.2/package/package.json +verbose loadDefaults tobi@0.3.2 +silly updated sha bytes 40960 +silly updated sha bytes 40960 +silly updated sha bytes 7111 +info shasum 1134c8a1216ea7d789f20d16b1239e188b563367 +info shasum /Users/hank/.npm/tobi/0.3.2/package.tgz +verbose from cache /Users/hank/.npm/tobi/0.3.2/package/package.json +verbose chmod /Users/hank/.npm/tobi/0.3.2/package.tgz 644 +verbose chown [ '/Users/hank/.npm/tobi/0.3.2/package.tgz', 501, 20 ] +verbose caching /Users/hank/.npm/mocha/1.2.0/package/package.json +verbose loadDefaults mocha@1.2.0 +silly updated sha bytes 40960 +silly updated sha bytes 40960 +silly updated sha bytes 1382 +info shasum 9d0ef575d76b65d8b5948d47ab98c1de39522477 +info shasum /Users/hank/.npm/mocha/1.2.0/package.tgz +verbose from cache /Users/hank/.npm/mocha/1.2.0/package/package.json +verbose chmod /Users/hank/.npm/mocha/1.2.0/package.tgz 644 +verbose chown [ '/Users/hank/.npm/mocha/1.2.0/package.tgz', 501, 20 ] +silly resolved [ { name: 'connect', +silly resolved version: '1.8.7', +silly resolved description: 'High performance middleware framework', +silly resolved keywords: [ 'framework', 'web', 'middleware', 'connect', 'rack' ], +silly resolved repository: { type: 'git', url: 'git://github.com/senchalabs/connect.git' }, +silly resolved author: +silly resolved { name: 'TJ Holowaychuk', +silly resolved email: 'tj@vision-media.ca', +silly resolved url: 'http://tjholowaychuk.com' }, +silly resolved dependencies: { qs: '>= 0.4.0', mime: '>= 0.0.1', formidable: '1.0.x' }, +silly resolved devDependencies: +silly resolved { expresso: '0.9.2', +silly resolved koala: '0.1.2', +silly resolved less: '1.1.1', +silly resolved sass: '0.5.0', +silly resolved markdown: '0.2.1', +silly resolved ejs: '0.4.3', +silly resolved should: '0.3.2' }, +silly resolved publishConfig: { tag: '1.8' }, +silly resolved main: 'index', +silly resolved engines: { node: '>= 0.4.1 < 0.7.0' }, +silly resolved _id: 'connect@1.8.7', +silly resolved optionalDependencies: {}, +silly resolved _engineSupported: true, +silly resolved _npmVersion: '1.1.21', +silly resolved _nodeVersion: 'v0.6.17', +silly resolved _defaultsLoaded: true, +silly resolved _from: 'connect@>=1 <2', +silly resolved scripts: {} }, +silly resolved { name: 'express', +silly resolved description: 'Sinatra inspired web development framework', +silly resolved version: '2.5.10', +silly resolved author: { name: 'TJ Holowaychuk', email: 'tj@vision-media.ca' }, +silly resolved contributors: +silly resolved [ { name: 'TJ Holowaychuk', email: 'tj@vision-media.ca' }, +silly resolved { name: 'Aaron Heckmann', +silly resolved email: 'aaron.heckmann+github@gmail.com' }, +silly resolved { name: 'Ciaran Jessup', email: 'ciaranj@gmail.com' }, +silly resolved { name: 'Guillermo Rauch', email: 'rauchg@gmail.com' } ], +silly resolved dependencies: { connect: '1.x', mime: '1.2.4', qs: '0.4.x', mkdirp: '0.3.0' }, +silly resolved devDependencies: +silly resolved { 'connect-form': '0.2.1', +silly resolved ejs: '0.4.2', +silly resolved expresso: '0.9.2', +silly resolved hamljs: '0.6.x', +silly resolved jade: '0.16.2', +silly resolved stylus: '0.13.0', +silly resolved should: '0.3.2', +silly resolved 'express-messages': '0.0.2', +silly resolved 'node-markdown': '>= 0.0.1', +silly resolved 'connect-redis': '>= 0.0.1' }, +silly resolved keywords: [ 'framework', 'sinatra', 'web', 'rest', 'restful' ], +silly resolved repository: { type: 'git', url: 'git://github.com/visionmedia/express.git' }, +silly resolved main: 'index', +silly resolved bin: { express: './bin/express' }, +silly resolved scripts: { test: 'make test', prepublish: 'npm prune' }, +silly resolved _id: 'express@2.5.10', +silly resolved optionalDependencies: {}, +silly resolved engines: { node: '*' }, +silly resolved _engineSupported: true, +silly resolved _npmVersion: '1.1.21', +silly resolved _nodeVersion: 'v0.6.17', +silly resolved _defaultsLoaded: true, +silly resolved _from: 'express@>=2.3.10' }, +silly resolved { name: 'jade', +silly resolved description: 'Jade template engine', +silly resolved version: '0.26.1', +silly resolved author: { name: 'TJ Holowaychuk', email: 'tj@vision-media.ca' }, +silly resolved repository: { type: 'git', url: 'git://github.com/visionmedia/jade.git' }, +silly resolved main: './index.js', +silly resolved bin: { jade: './bin/jade' }, +silly resolved man: [ './jade.1' ], +silly resolved dependencies: { commander: '0.5.2', mkdirp: '0.3.0' }, +silly resolved devDependencies: +silly resolved { mocha: '*', +silly resolved markdown: '*', +silly resolved stylus: '*', +silly resolved uubench: '*', +silly resolved should: '*', +silly resolved less: '*', +silly resolved 'uglify-js': '*' }, +silly resolved component: { scripts: { jade: 'runtime.js' } }, +silly resolved scripts: { prepublish: 'npm prune' }, +silly resolved engines: { node: '>= 0.1.98' }, +silly resolved _id: 'jade@0.26.1', +silly resolved optionalDependencies: {}, +silly resolved _engineSupported: true, +silly resolved _npmVersion: '1.1.21', +silly resolved _nodeVersion: 'v0.6.17', +silly resolved _defaultsLoaded: true, +silly resolved _from: 'jade@>=0.12.1' }, +silly resolved { name: 'node-wsfederation', +silly resolved description: 'An ws-federation implementation for node.js', +silly resolved version: '0.1.1', +silly resolved author: +silly resolved { name: 'Dario Renzulli', +silly resolved email: 'dario.renzulli@southworks.net', +silly resolved url: 'Southworks' }, +silly resolved contributors: +silly resolved [ { name: 'Juan Pablo Garcia Dalolla', +silly resolved email: 'juanpablo.garcia@southworks.net', +silly resolved url: 'Southworks' }, +silly resolved { name: 'Matias Woloski', +silly resolved email: 'matias.woloski@southworks.net', +silly resolved url: 'Southworks' } ], +silly resolved dependencies: { xml2js: '>=0.1.7' }, +silly resolved devDependencies: { express: '>=2.3.10', jade: '>=0.12.1', should: '*', mocha: '*' }, +silly resolved keywords: +silly resolved [ 'ws-federation', +silly resolved 'wsfederation', +silly resolved 'security', +silly resolved 'azure', +silly resolved 'authentication' ], +silly resolved repository: +silly resolved { type: 'git', +silly resolved url: 'git://github.com/darrenzully/node-wsfederation.git' }, +silly resolved main: 'index.js', +silly resolved engines: { node: '>= 0.4.1' }, +silly resolved _id: 'node-wsfederation@0.1.1', +silly resolved optionalDependencies: {}, +silly resolved _engineSupported: true, +silly resolved _npmVersion: '1.1.21', +silly resolved _nodeVersion: 'v0.6.17', +silly resolved _defaultsLoaded: true, +silly resolved dist: { shasum: '7e4c8b443337e602418763faf754504011395e3d' }, +silly resolved _from: 'node-wsfederation@>=0.1.1', +silly resolved scripts: {} }, +silly resolved { name: 'node-swt', +silly resolved description: 'A library to validate and parse swt tokens', +silly resolved version: '0.1.1', +silly resolved author: +silly resolved { name: 'Dario Renzulli', +silly resolved email: 'dario.renzulli@southworks.net', +silly resolved url: 'Southworks' }, +silly resolved contributors: +silly resolved [ { name: 'Juan Pablo Garcia Dalolla', +silly resolved email: 'juanpablo.garcia@southworks.net', +silly resolved url: 'Southworks' }, +silly resolved { name: 'Matias Woloski', +silly resolved email: 'matias.woloski@southworks.net', +silly resolved url: 'Southworks' } ], +silly resolved dependencies: {}, +silly resolved devDependencies: { express: '>=2.3.10', jade: '>=0.12.1', should: '*', mocha: '*' }, +silly resolved keywords: [ 'swt', 'acs', 'security', 'azure' ], +silly resolved repository: +silly resolved { type: 'git', +silly resolved url: 'git://github.com/darrenzully/node-swt.git' }, +silly resolved main: 'index.js', +silly resolved engines: { node: '>= 0.4.1' }, +silly resolved _id: 'node-swt@0.1.1', +silly resolved optionalDependencies: {}, +silly resolved _engineSupported: true, +silly resolved _npmVersion: '1.1.21', +silly resolved _nodeVersion: 'v0.6.17', +silly resolved _defaultsLoaded: true, +silly resolved dist: { shasum: '3a8fe995ae04b363ad898d7bde21fcb2e8d20d85' }, +silly resolved _from: 'node-swt@>=0.1.1', +silly resolved scripts: {} }, +silly resolved { name: 'debug', +silly resolved version: '0.5.0', +silly resolved description: 'small debugging utility', +silly resolved keywords: [ 'debug', 'log', 'debugger' ], +silly resolved author: { name: 'TJ Holowaychuk', email: 'tj@vision-media.ca' }, +silly resolved dependencies: {}, +silly resolved devDependencies: { mocha: '*' }, +silly resolved main: 'index', +silly resolved engines: { node: '*' }, +silly resolved _id: 'debug@0.5.0', +silly resolved optionalDependencies: {}, +silly resolved _engineSupported: true, +silly resolved _npmVersion: '1.1.21', +silly resolved _nodeVersion: 'v0.6.17', +silly resolved _defaultsLoaded: true, +silly resolved dist: { shasum: 'ba6e86a29f71bbbd04b447c29d17b6e157ee77ec' }, +silly resolved _from: 'debug@0.5.0', +silly resolved scripts: {} }, +silly resolved { name: 'expect.js', +silly resolved version: '0.1.2', +silly resolved description: 'BDD style assertions for node and the browser.', +silly resolved main: './expect', +silly resolved devDependencies: { mocha: '*', serve: '*' }, +silly resolved _id: 'expect.js@0.1.2', +silly resolved dependencies: {}, +silly resolved optionalDependencies: {}, +silly resolved engines: { node: '*' }, +silly resolved _engineSupported: true, +silly resolved _npmVersion: '1.1.21', +silly resolved _nodeVersion: 'v0.6.17', +silly resolved _defaultsLoaded: true, +silly resolved dist: { shasum: 'ffa50d303f97d7a90b9c8c9611a212d38eb67f32' }, +silly resolved _from: 'expect.js@>=0.1.2', +silly resolved scripts: {} }, +silly resolved { name: 'xml2js', +silly resolved description: 'Simple XML to JavaScript object converter.', +silly resolved keywords: [ 'xml', 'json' ], +silly resolved homepage: 'https://github.com/Leonidas-from-XIV/node-xml2js', +silly resolved version: '0.1.14', +silly resolved author: +silly resolved { name: 'Marek Kubica', +silly resolved email: 'marek@xivilization.net', +silly resolved url: 'http://xivilization.net' }, +silly resolved contributors: +silly resolved [ { name: 'maqr', +silly resolved email: 'maqr.lollerskates@gmail.com', +silly resolved url: 'https://github.com/maqr' }, +silly resolved { name: 'Ben Weaver', url: 'http://benweaver.com/' }, +silly resolved { name: 'Jae Kwon', url: 'https://github.com/jaekwon' }, +silly resolved { name: 'Jim Robert' }, +silly resolved { name: 'Ștefan Rusu', url: 'http://www.saltwaterc.eu/' }, +silly resolved { name: 'Carter Cole', +silly resolved email: 'carter.cole@cartercole.com', +silly resolved url: 'http://cartercole.com/' }, +silly resolved { name: 'Kurt Raschke', +silly resolved email: 'kurt@kurtraschke.com', +silly resolved url: 'http://www.kurtraschke.com/' }, +silly resolved { name: 'Contra', +silly resolved email: 'contra@australia.edu', +silly resolved url: 'https://github.com/Contra' }, +silly resolved { name: 'Marcelo Diniz', +silly resolved email: 'marudiniz@gmail.com', +silly resolved url: 'https://github.com/mdiniz' }, +silly resolved { name: 'Michael Hart', url: 'https://github.com/mhart' }, +silly resolved { name: 'Zachary Scott', +silly resolved email: 'zachary@zacharyscott.net', +silly resolved url: 'http://zacharyscott.net/' }, +silly resolved { name: 'Raoul Millais', +silly resolved url: 'https://github.com/raoulmillais' }, +silly resolved { name: 'Salsita Software', url: 'http://www.salsitasoft.com/' } ], +silly resolved main: './lib/xml2js', +silly resolved directories: { lib: './lib' }, +silly resolved repository: +silly resolved { type: 'git', +silly resolved url: 'git://github.com/Leonidas-from-XIV/node-xml2js.git' }, +silly resolved dependencies: { sax: '>=0.1.1' }, +silly resolved devDependencies: { 'coffee-script': '>=1.0.1', zap: '>=0.2.3', docco: '>=0.3.0' }, +silly resolved _id: 'xml2js@0.1.14', +silly resolved optionalDependencies: {}, +silly resolved engines: { node: '*' }, +silly resolved _engineSupported: true, +silly resolved _npmVersion: '1.1.21', +silly resolved _nodeVersion: 'v0.6.17', +silly resolved _defaultsLoaded: true, +silly resolved dist: { shasum: 'e24e785072bb8c4b342b07e6c25bd189ca103c2d' }, +silly resolved _from: 'xml2js@>=0.1.7', +silly resolved scripts: {} }, +silly resolved { name: 'satisfy', +silly resolved version: '0.1.0', +silly resolved main: './lib/satisfy', +silly resolved dependencies: +silly resolved { ms: '*', +silly resolved soda: '0.2.5', +silly resolved 'webkit-server': '0.1.0', +silly resolved debug: '0.1.0' }, +silly resolved devDependencies: { mocha: '*', 'expect.js': '*' }, +silly resolved _id: 'satisfy@0.1.0', +silly resolved optionalDependencies: {}, +silly resolved engines: { node: '*' }, +silly resolved _engineSupported: true, +silly resolved _npmVersion: '1.1.21', +silly resolved _nodeVersion: 'v0.6.17', +silly resolved _defaultsLoaded: true, +silly resolved dist: { shasum: '2c98306529fad4a7d00d1c3b9ca7d8d5f1ed226e' }, +silly resolved _from: 'satisfy@>=0.1.0', +silly resolved scripts: {} }, +silly resolved { name: 'openid', +silly resolved description: 'OpenID 1.1/2.0 library for node.js', +silly resolved keywords: +silly resolved [ 'openid', +silly resolved 'auth', +silly resolved 'authentication', +silly resolved 'identity', +silly resolved 'identifier', +silly resolved 'relying', +silly resolved 'party', +silly resolved '1.1', +silly resolved '2.0', +silly resolved 'library' ], +silly resolved author: +silly resolved { name: 'HÃ¥vard Stranden', +silly resolved email: 'havard.stranden@gmail.com', +silly resolved url: 'http://ox.no' }, +silly resolved version: '0.4.2', +silly resolved repository: { type: 'git', url: 'git://github.com/havard/node-openid.git' }, +silly resolved bugs: { name: 'http://github.com/havard/node-openid/issues' }, +silly resolved licenses: +silly resolved [ { type: 'MIT', +silly resolved url: 'http://github.com/havard/node-openid/raw/master/LICENSE' } ], +silly resolved directories: { lib: './lib' }, +silly resolved main: './openid.js', +silly resolved engines: [ 'node >= 0.6.0', node: ' >= 0.6.0' ], +silly resolved _id: 'openid@0.4.2', +silly resolved dependencies: {}, +silly resolved devDependencies: {}, +silly resolved optionalDependencies: {}, +silly resolved _engineSupported: true, +silly resolved _npmVersion: '1.1.21', +silly resolved _nodeVersion: 'v0.6.17', +silly resolved _defaultsLoaded: true, +silly resolved dist: { shasum: '3670f1eb6a03f25e4e016806bd198eb0693e367d' }, +silly resolved _from: 'openid@>=0.2.0', +silly resolved scripts: {} }, +silly resolved { name: 'oauth', +silly resolved description: 'Library for interacting with OAuth 1.0, 1.0A, 2 and Echo. Provides simplified client access and allows for construction of more complex apis and OAuth providers.', +silly resolved version: '0.9.7', +silly resolved directories: { lib: './lib' }, +silly resolved main: 'index.js', +silly resolved author: { name: 'Ciaran Jessup', email: 'ciaranj@gmail.com' }, +silly resolved repository: { type: 'git', url: 'git://github.com/ciaranj/node-oauth.git' }, +silly resolved devDependencies: { vows: '0.5.x' }, +silly resolved scripts: { test: 'make test' }, +silly resolved licenses: +silly resolved [ { type: 'MIT', +silly resolved url: 'http://github.com/ciaranj/node-oauth/raw/master/LICENSE' } ], +silly resolved _id: 'oauth@0.9.7', +silly resolved dependencies: {}, +silly resolved optionalDependencies: {}, +silly resolved engines: { node: '*' }, +silly resolved _engineSupported: true, +silly resolved _npmVersion: '1.1.21', +silly resolved _nodeVersion: 'v0.6.17', +silly resolved _defaultsLoaded: true, +silly resolved dist: { shasum: 'adcc9a868105825109a238b11d093e8b8a9fd616' }, +silly resolved _from: 'oauth@https://github.com/ciaranj/node-oauth/tarball/master' }, +silly resolved { name: 'request', +silly resolved description: 'Simplified HTTP request client.', +silly resolved tags: [ 'http', 'simple', 'util', 'utility' ], +silly resolved version: '2.9.202', +silly resolved author: { name: 'Mikeal Rogers', email: 'mikeal.rogers@gmail.com' }, +silly resolved repository: { type: 'git', url: 'git://github.com/mikeal/request.git' }, +silly resolved bugs: { url: 'http://github.com/mikeal/request/issues' }, +silly resolved engines: [ 'node >= 0.3.6', node: ' >= 0.3.6' ], +silly resolved main: './main', +silly resolved scripts: { test: 'node tests/run.js' }, +silly resolved _id: 'request@2.9.202', +silly resolved dependencies: {}, +silly resolved devDependencies: {}, +silly resolved optionalDependencies: {}, +silly resolved _engineSupported: true, +silly resolved _npmVersion: '1.1.21', +silly resolved _nodeVersion: 'v0.6.17', +silly resolved _defaultsLoaded: true, +silly resolved dist: { shasum: 'c61399cdfbbefda5dc48653b0e9bea517d9f8497' }, +silly resolved _from: 'request@2.9.x' }, +silly resolved { name: 'tobi', +silly resolved description: 'expressive server-side functional testing with jQuery and jsdom', +silly resolved version: '0.3.2', +silly resolved author: { name: 'TJ Holowaychuk', email: 'tj@vision-media.ca' }, +silly resolved keywords: [ 'test', 'testing', 'browser', 'jquery', 'css' ], +silly resolved dependencies: +silly resolved { jsdom: '>= 0.1.21', +silly resolved htmlparser: '>= 1.7.3', +silly resolved should: '>= 0.0.4', +silly resolved qs: '>= 0.1.0' }, +silly resolved devDependencies: +silly resolved { express: '2.3.x', +silly resolved expresso: '>= 0.0.1', +silly resolved htmlparser: '>= 0.0.1', +silly resolved jsdom: '>= 0.0.1', +silly resolved qs: '>= 0.0.1', +silly resolved should: '>= 0.0.1', +silly resolved connect: '>= 0.0.1' }, +silly resolved main: './index.js', +silly resolved engines: { node: '>= 0.4.x < 0.7.0' }, +silly resolved repository: { type: 'git', url: 'git://github.com/LearnBoost/tobi.git' }, +silly resolved _id: 'tobi@0.3.2', +silly resolved optionalDependencies: {}, +silly resolved _engineSupported: true, +silly resolved _npmVersion: '1.1.21', +silly resolved _nodeVersion: 'v0.6.17', +silly resolved _defaultsLoaded: true, +silly resolved dist: { shasum: '1134c8a1216ea7d789f20d16b1239e188b563367' }, +silly resolved _from: 'tobi@>=0.2.2', +silly resolved scripts: {} }, +silly resolved { name: 'mocha', +silly resolved version: '1.2.0', +silly resolved description: 'simple, flexible, fun test framework', +silly resolved keywords: [ 'test', 'bdd', 'tdd', 'tap' ], +silly resolved author: { name: 'TJ Holowaychuk', email: 'tj@vision-media.ca' }, +silly resolved repository: { type: 'git', url: 'git://github.com/visionmedia/mocha.git' }, +silly resolved main: './index', +silly resolved bin: { mocha: './bin/mocha', _mocha: './bin/_mocha' }, +silly resolved engines: { node: '>= 0.4.x < 0.8.0' }, +silly resolved scripts: { test: 'make test' }, +silly resolved dependencies: +silly resolved { commander: '0.5.x', +silly resolved growl: '1.5.x', +silly resolved jade: '0.20.3', +silly resolved diff: '1.0.2', +silly resolved debug: '*' }, +silly resolved devDependencies: { should: '*', 'coffee-script': '1.2' }, +silly resolved _id: 'mocha@1.2.0', +silly resolved optionalDependencies: {}, +silly resolved _engineSupported: true, +silly resolved _npmVersion: '1.1.21', +silly resolved _nodeVersion: 'v0.6.17', +silly resolved _defaultsLoaded: true, +silly resolved dist: { shasum: '9d0ef575d76b65d8b5948d47ab98c1de39522477' }, +silly resolved _from: 'mocha@>=0.13.0' } ] +info into /Users/hank/node/everyauth connect@1.8.7 +info into /Users/hank/node/everyauth express@2.5.10 +info into /Users/hank/node/everyauth jade@0.26.1 +info into /Users/hank/node/everyauth node-wsfederation@0.1.1 +info into /Users/hank/node/everyauth node-swt@0.1.1 +info into /Users/hank/node/everyauth debug@0.5.0 +info into /Users/hank/node/everyauth expect.js@0.1.2 +info into /Users/hank/node/everyauth xml2js@0.1.14 +info into /Users/hank/node/everyauth satisfy@0.1.0 +info into /Users/hank/node/everyauth openid@0.4.2 +info into /Users/hank/node/everyauth oauth@0.9.7 +info into /Users/hank/node/everyauth request@2.9.202 +info into /Users/hank/node/everyauth tobi@0.3.2 +info into /Users/hank/node/everyauth mocha@1.2.0 +info installOne connect@1.8.7 +info installOne express@2.5.10 +info installOne jade@0.26.1 +info installOne node-wsfederation@0.1.1 +info installOne node-swt@0.1.1 +info installOne debug@0.5.0 +info installOne expect.js@0.1.2 +info installOne xml2js@0.1.14 +info installOne satisfy@0.1.0 +info installOne openid@0.4.2 +info installOne oauth@0.9.7 +info installOne request@2.9.202 +info installOne tobi@0.3.2 +info installOne mocha@1.2.0 +verbose from cache /Users/hank/.npm/connect/1.8.7/package/package.json +info unbuild /Users/hank/node/everyauth/node_modules/connect +verbose from cache /Users/hank/.npm/express/2.5.10/package/package.json +info unbuild /Users/hank/node/everyauth/node_modules/express +verbose from cache /Users/hank/.npm/jade/0.26.1/package/package.json +info unbuild /Users/hank/node/everyauth/node_modules/jade +verbose from cache /Users/hank/.npm/node-wsfederation/0.1.1/package/package.json +info unbuild /Users/hank/node/everyauth/node_modules/node-wsfederation +verbose from cache /Users/hank/.npm/node-swt/0.1.1/package/package.json +info unbuild /Users/hank/node/everyauth/node_modules/node-swt +verbose from cache /Users/hank/.npm/debug/0.5.0/package/package.json +info unbuild /Users/hank/node/everyauth/node_modules/debug +verbose from cache /Users/hank/.npm/expect.js/0.1.2/package/package.json +info unbuild /Users/hank/node/everyauth/node_modules/expect.js +verbose from cache /Users/hank/.npm/xml2js/0.1.14/package/package.json +info unbuild /Users/hank/node/everyauth/node_modules/xml2js +verbose from cache /Users/hank/.npm/satisfy/0.1.0/package/package.json +info unbuild /Users/hank/node/everyauth/node_modules/satisfy +verbose from cache /Users/hank/.npm/openid/0.4.2/package/package.json +info unbuild /Users/hank/node/everyauth/node_modules/openid +verbose from cache /Users/hank/.npm/oauth/0.9.7/package/package.json +info unbuild /Users/hank/node/everyauth/node_modules/oauth +verbose from cache /Users/hank/.npm/request/2.9.202/package/package.json +info unbuild /Users/hank/node/everyauth/node_modules/request +verbose from cache /Users/hank/.npm/tobi/0.3.2/package/package.json +info unbuild /Users/hank/node/everyauth/node_modules/tobi +verbose from cache /Users/hank/.npm/mocha/1.2.0/package/package.json +info unbuild /Users/hank/node/everyauth/node_modules/mocha +verbose unpack /Users/hank/.npm/connect/1.8.7/package.tgz +verbose unpack /Users/hank/.npm/node-swt/0.1.1/package.tgz +verbose unpack /Users/hank/.npm/debug/0.5.0/package.tgz +verbose unpack /Users/hank/.npm/jade/0.26.1/package.tgz +verbose unpack /Users/hank/.npm/express/2.5.10/package.tgz +verbose unpack /Users/hank/.npm/node-wsfederation/0.1.1/package.tgz +verbose unpack /Users/hank/.npm/expect.js/0.1.2/package.tgz +verbose unpack /Users/hank/.npm/xml2js/0.1.14/package.tgz +verbose unpack /Users/hank/.npm/satisfy/0.1.0/package.tgz +verbose unpack /Users/hank/.npm/openid/0.4.2/package.tgz +verbose unpack /Users/hank/.npm/oauth/0.9.7/package.tgz +verbose unpack /Users/hank/.npm/request/2.9.202/package.tgz +verbose unpack /Users/hank/.npm/tobi/0.3.2/package.tgz +verbose unpack /Users/hank/.npm/mocha/1.2.0/package.tgz +silly gunzTarPerm modes [ '755', '644' ] +silly gunzTarPerm modes [ '755', '644' ] +silly gunzTarPerm modes [ '755', '644' ] +silly gunzTarPerm modes [ '755', '644' ] +silly gunzTarPerm modes [ '755', '644' ] +silly gunzTarPerm modes [ '755', '644' ] +silly gunzTarPerm modes [ '755', '644' ] +silly gunzTarPerm modes [ '755', '644' ] +silly gunzTarPerm modes [ '755', '644' ] +silly gunzTarPerm modes [ '755', '644' ] +silly gunzTarPerm modes [ '755', '644' ] +silly gunzTarPerm modes [ '755', '644' ] +silly gunzTarPerm modes [ '755', '644' ] +silly gunzTarPerm modes [ '755', '644' ] +silly extracting entry package.json +silly extracting entry package.json +silly extracting entry package.json +silly extracting entry package.json +silly extracting entry package.json +silly extracting entry package.json +silly extracting entry package.json +silly extracting entry package.json +silly extracting entry package.json +silly extracting entry package.json +silly extracting entry package.json +silly extracting entry .npmignore +silly extracting entry README +silly extracting entry .npmignore +silly extracting entry debug.js +silly extracting entry .npmignore +silly extracting entry README +silly extracting entry .npmignore +silly extracting entry README.md +silly extracting entry .npmignore +silly extracting entry README.md +silly extracting entry .npmignore +silly extracting entry README.md +silly extracting entry README.md +silly extracting entry LICENSE +silly extracting entry .npmignore +silly extracting entry LICENSE +silly extracting entry README.md +silly extracting entry LICENSE +silly extracting entry .npmignore +silly extracting entry index.js +silly extracting entry .npmignore +silly extracting entry LICENSE +silly extracting entry LICENSE +silly extracting entry package.json +silly extracting entry index.js +silly extracting entry lib/swt.js +silly extracting entry index.js +silly extracting entry example/app.js +silly extracting entry expect.js +silly extracting entry History.md +silly extracting entry History.md +silly extracting entry lib/adaptor.js +silly extracting entry main.js +silly extracting entry mimetypes.js +silly extracting entry index.js +silly extracting entry lib/wsfederation.js +silly extracting entry openid.js +silly extracting entry sample.js +silly extracting entry index.js +silly extracting entry examples/term.ie.oauth-HMAC-SHA1.js +silly extracting entry .gitmodules +silly extracting entry History.md +silly extracting entry _mocha.js +silly extracting entry index.js +silly extracting entry Cakefile +silly extracting entry lib/xml2js.js +silly extracting entry oauth.js +silly extracting entry .npmignore +silly extracting entry LICENSE +silly extracting entry lib/base64.js +silly extracting entry uuid.js +silly extracting entry lib/convert.js +silly extracting entry tunnel.js +silly extracting entry lib/xrds.js +silly extracting entry forever.js +silly extracting entry package.json +silly extracting entry test/openid_fast_tests.js +silly extracting entry tests/test-tunnel.js +silly extracting entry example/wildcards.js +silly extracting entry example/worker.js +silly extracting entry lib/satisfaction.js +silly extracting entry lib/satisfy.js +silly extracting entry test/openid_integration_tests.js +silly extracting entry tests/test-cookiejar.js +silly extracting entry test/xrds_tests.js +silly extracting entry examples/term.ie.oauth-PLAINTEXT.js +silly extracting entry examples/express-gdata/server.js +silly extracting entry tests/test-defaults.js +silly extracting entry index.html +silly extracting entry lib/browser.js +silly extracting entry mocha.js +silly extracting entry images/error.png +silly extracting entry example/browser.html +silly extracting entry src/xml2js.coffee +silly extracting entry test/fixtures/sample.xml +silly extracting entry lib/adaptors/index.js +silly extracting entry tests/test-errors.js +silly extracting entry History.md +silly extracting entry .npmignore +silly extracting entry LICENSE +silly extracting entry lib/adaptors/soda.js +silly extracting entry examples/express-gdata/views/google_calendars.ejs +silly extracting entry tests/test-cookie.js +silly extracting entry index.js +silly extracting entry lib/cache.js +silly extracting entry images/ok.png +silly extracting entry test/xml2js.test.coffee +silly extracting entry lib/adaptors/webkit-server.js +silly extracting entry tests/run.js +silly extracting entry Makefile +silly extracting entry tests/test-https-strict.js +silly extracting entry support/sizzle.js +silly extracting entry tests/test-https.js +silly extracting entry tests/test-oauth.js +silly extracting entry tests/test-params.js +silly extracting entry lib/tobi.js +silly extracting entry lib/assertions/should.js +silly extracting entry tests/test-body.js +silly extracting entry lib/debug.js +silly extracting entry Makefile +silly extracting entry package.json +silly extracting entry examples/express-gdata/views/google_contacts.ejs +silly extracting entry examples/express-gdata/views/layout.ejs +silly extracting entry tests/test-pipes.js +silly extracting entry lib/connect.js +silly extracting entry lib/http.js +silly extracting entry index.js +silly extracting entry jade.js +silly extracting entry support/compile.js +silly extracting entry lib/https.js +silly extracting entry support/foot.js +silly extracting entry support/head.js +silly extracting entry test/satisfy.js +silly extracting entry .npmignore +silly extracting entry LICENSE +silly extracting entry support/tail.js +silly extracting entry lib/cookie/index.js +silly extracting entry lib/cookie/jar.js +silly extracting entry support/template.html +silly extracting entry Readme.md +silly extracting entry index.js +silly extracting entry lib/_utils.js +silly extracting entry lib/oauth.js +silly extracting entry .travis.yml +silly extracting entry lib/jquery/core.js +silly extracting entry tests/test-timeout.js +silly extracting entry tests/test-proxy.js +silly extracting entry bin/_mocha +silly extracting entry jade.min.js +silly extracting entry runtime.js +silly extracting entry lib/oauth2.js +silly extracting entry bin/mocha +silly extracting entry tests/test-toJSON.js +silly extracting entry lib/index.js +silly extracting entry lib/patch.js +silly extracting entry Makefile +silly extracting entry runtime.min.js +silly extracting entry tests/test-qs.js +silly extracting entry mocha.css +silly extracting entry tests/server.js +silly extracting entry editors/JavaScript mocha.tmbundle/info.plist +silly extracting entry tests/test-redirect.js +silly extracting entry editors/JavaScript mocha.tmbundle/Snippets/bdd - after each.tmSnippet +silly extracting entry test.js +silly extracting entry bin/express +silly extracting entry tests/test-headers.js +silly extracting entry editors/JavaScript mocha.tmbundle/Snippets/bdd - after.tmSnippet +silly extracting entry tests/test-httpModule.js +silly extracting entry editors/JavaScript mocha.tmbundle/Snippets/bdd - before each.tmSnippet +silly extracting entry tests/ssl/ca/server.js +silly extracting entry lib/utils.js +silly extracting entry lib/middleware/basicAuth.js +silly extracting entry editors/JavaScript mocha.tmbundle/Snippets/bdd - before.tmSnippet +verbose caching /Users/hank/node/everyauth/node_modules/node-wsfederation/package.json +verbose loadDefaults node-wsfederation@0.1.1 +verbose caching /Users/hank/node/everyauth/node_modules/node-swt/package.json +verbose loadDefaults node-swt@0.1.1 +silly extracting entry tests/ssl/ca/ca.srl +silly extracting entry editors/JavaScript mocha.tmbundle/Snippets/bdd - it.tmSnippet +silly extracting entry testing/index.js +silly extracting entry testing/user.js +silly extracting entry lib/sha1.js +silly extracting entry Makefile +silly extracting entry tests/ssl/ca/ca.crt +silly extracting entry lib/middleware/errorHandler.js +silly extracting entry editors/JavaScript mocha.tmbundle/Snippets/untitled.tmSnippet +silly extracting entry tests/ssl/ca/ca.csr +silly extracting entry History.md +info preinstall node-wsfederation@0.1.1 +info preinstall node-swt@0.1.1 +silly extracting entry Readme.md +silly extracting entry tests/ssl/ca/ca.key +silly extracting entry Readme.md +silly extracting entry History.md +silly extracting entry lib/express.js +silly extracting entry lib/jquery/fill.js +silly extracting entry tests/ssl/ca/ca.crl +silly extracting entry lib/utils.js +verbose from cache /Users/hank/node/everyauth/node_modules/node-wsfederation/package.json +verbose from cache /Users/hank/node/everyauth/node_modules/node-swt/package.json +silly extracting entry lib/jquery/index.js +silly extracting entry tests/ssl/ca/server.cnf +silly extracting entry lib/hook.js +verbose readDependencies: using package.json deps +verbose from cache /Users/hank/node/everyauth/node_modules/node-wsfederation/package.json +verbose readDependencies: using package.json deps +verbose from cache /Users/hank/node/everyauth/node_modules/node-swt/package.json +silly extracting entry Makefile +silly extracting entry lib/http.js +silly extracting entry tests/ssl/ca/server.crt +silly extracting entry lib/mocha.js +verbose readDependencies: using package.json deps +silly resolved [] +verbose about to build /Users/hank/node/everyauth/node_modules/node-wsfederation +info build /Users/hank/node/everyauth/node_modules/node-wsfederation +verbose from cache /Users/hank/node/everyauth/node_modules/node-wsfederation/package.json +verbose linkStuff [ false, false, false, '/Users/hank/node/everyauth/node_modules' ] +info linkStuff node-wsfederation@0.1.1 +verbose linkBins node-wsfederation@0.1.1 +verbose linkMans node-wsfederation@0.1.1 +verbose rebuildBundles node-wsfederation@0.1.1 +verbose readDependencies: using package.json deps +silly resolved [] +verbose about to build /Users/hank/node/everyauth/node_modules/node-swt +info build /Users/hank/node/everyauth/node_modules/node-swt +verbose from cache /Users/hank/node/everyauth/node_modules/node-swt/package.json +verbose linkStuff [ false, false, false, '/Users/hank/node/everyauth/node_modules' ] +info linkStuff node-swt@0.1.1 +verbose linkBins node-swt@0.1.1 +verbose linkMans node-swt@0.1.1 +verbose rebuildBundles node-swt@0.1.1 +silly extracting entry Readme.md +silly extracting entry tests/ssl/ca/server.csr +silly extracting entry lib/context.js +info install node-wsfederation@0.1.1 +info install node-swt@0.1.1 +silly extracting entry testing/head.jade +silly extracting entry testing/index.jade +silly extracting entry tests/ssl/ca/ca.cnf +silly extracting entry lib/runnable.js +silly extracting entry tests/oauth.js +silly extracting entry tests/oauth2.js +silly extracting entry lib/runner.js +info postinstall node-wsfederation@0.1.1 +info postinstall node-swt@0.1.1 +silly extracting entry testing/layout.jade +silly extracting entry lib/middleware/favicon.js +silly extracting entry lib/middleware/limit.js +silly extracting entry lib/suite.js +silly extracting entry testing/user.jade +silly extracting entry tests/sha1.js +silly extracting entry lib/test.js +silly extracting entry bin/jade +silly extracting entry lib/middleware/directory.js +silly extracting entry lib/browser/debug.js +silly extracting entry jade.md +silly extracting entry lib/https.js +silly extracting entry lib/request.js +silly extracting entry lib/middleware/bodyParser.js +silly extracting entry lib/browser/diff.js +silly extracting entry test.jade +silly extracting entry lib/middleware/profiler.js +silly extracting entry lib/browser/events.js +silly extracting entry lib/compiler.js +silly extracting entry tests/ssl/ca/server.key +silly extracting entry tests/ssl/npm-ca.crt +silly extracting entry lib/browser/fs.js +silly extracting entry lib/filters.js +silly extracting entry lib/browser/path.js +silly extracting entry lib/inline-tags.js +silly extracting entry tests/ssl/test.crt +silly extracting entry lib/browser/progress.js +silly extracting entry lib/jade.js +silly extracting entry tests/ssl/test.key +silly extracting entry lib/browser/tty.js +silly extracting entry tests/squid.conf +silly extracting entry lib/interfaces/bdd.js +silly extracting entry lib/doctypes.js +silly extracting entry lib/response.js +silly extracting entry lib/utils.js +silly extracting entry tests/googledoodle.png +silly extracting entry lib/interfaces/exports.js +silly extracting entry lib/self-closing.js +silly extracting entry lib/parser.js +silly extracting entry lib/middleware/query.js +silly extracting entry lib/middleware/responseTime.js +silly extracting entry lib/interfaces/index.js +silly extracting entry lib/runtime.js +silly extracting entry lib/interfaces/qunit.js +silly extracting entry lib/utils.js +silly extracting entry lib/middleware/router.js +silly extracting entry lib/interfaces/tdd.js +silly extracting entry lib/lexer.js +silly extracting entry vendor/cookie/index.js +silly extracting entry vendor/cookie/jar.js +silly extracting entry lib/middleware/csrf.js +silly extracting entry lib/reporters/base.js +silly extracting entry lib/nodes/attrs.js +silly extracting entry lib/middleware/staticCache.js +silly extracting entry lib/reporters/json-cov.js +silly extracting entry lib/nodes/code.js +silly extracting entry lib/view.js +silly extracting entry lib/router/collection.js +silly extracting entry lib/middleware/cookieParser.js +silly extracting entry lib/reporters/json-stream.js +silly extracting entry lib/nodes/comment.js +silly extracting entry lib/middleware/session.js +silly extracting entry lib/reporters/json.js +silly extracting entry lib/nodes/doctype.js +silly extracting entry lib/router/index.js +silly extracting entry lib/middleware/compiler.js +silly extracting entry lib/reporters/index.js +silly extracting entry lib/nodes/case.js +silly extracting entry lib/router/methods.js +silly extracting entry lib/middleware/static.js +silly extracting entry lib/reporters/doc.js +silly extracting entry lib/nodes/filter.js +silly extracting entry lib/router/route.js +silly extracting entry lib/middleware/logger.js +silly extracting entry lib/reporters/markdown.js +silly extracting entry lib/nodes/index.js +silly extracting entry lib/view/partial.js +silly extracting entry lib/middleware/vhost.js +silly extracting entry lib/reporters/min.js +silly extracting entry lib/nodes/literal.js +silly extracting entry lib/view/view.js +silly extracting entry lib/reporters/nyan.js +silly extracting entry lib/nodes/mixin.js +silly extracting entry Makefile +silly extracting entry lib/reporters/progress.js +silly extracting entry lib/nodes/node.js +silly extracting entry Readme.md +silly extracting entry lib/reporters/html.js +silly extracting entry lib/nodes/block.js +silly extracting entry lib/reporters/spec.js +silly extracting entry lib/nodes/tag.js +silly extracting entry lib/reporters/html-cov.js +silly extracting entry lib/nodes/block-comment.js +silly extracting entry lib/reporters/tap.js +silly extracting entry lib/nodes/text.js +silly extracting entry lib/middleware/methodOverride.js +silly extracting entry lib/middleware/session/cookie.js +silly extracting entry lib/reporters/dot.js +silly extracting entry lib/nodes/each.js +silly extracting entry lib/reporters/teamcity.js +silly extracting entry lib/reporters/landing.js +silly extracting entry lib/reporters/xunit.js +silly extracting entry lib/reporters/list.js +silly extracting entry lib/reporters/templates/coverage.jade +silly extracting entry lib/reporters/templates/menu.jade +silly extracting entry lib/reporters/templates/script.html +silly extracting entry lib/middleware/session/memory.js +silly extracting entry lib/middleware/session/session.js +silly extracting entry lib/reporters/templates/style.html +silly extracting entry lib/middleware/session/store.js +silly extracting entry lib/public/directory.html +silly extracting entry lib/public/error.html +silly extracting entry lib/public/favicon.ico +silly extracting entry lib/public/icons/page_white_edit.png +silly extracting entry lib/public/icons/page.png +verbose caching /Users/hank/node/everyauth/node_modules/debug/package.json +verbose loadDefaults debug@0.5.0 +silly extracting entry lib/public/icons/page_attach.png +silly extracting entry lib/public/icons/page_code.png +info preinstall debug@0.5.0 +silly extracting entry lib/public/icons/page_copy.png +verbose from cache /Users/hank/node/everyauth/node_modules/debug/package.json +silly extracting entry lib/public/icons/page_delete.png +verbose readDependencies: using package.json deps +verbose from cache /Users/hank/node/everyauth/node_modules/debug/package.json +silly extracting entry lib/public/icons/page_edit.png +verbose readDependencies: using package.json deps +silly resolved [] +verbose about to build /Users/hank/node/everyauth/node_modules/debug +info build /Users/hank/node/everyauth/node_modules/debug +verbose from cache /Users/hank/node/everyauth/node_modules/debug/package.json +verbose linkStuff [ false, false, false, '/Users/hank/node/everyauth/node_modules' ] +info linkStuff debug@0.5.0 +verbose linkBins debug@0.5.0 +verbose linkMans debug@0.5.0 +verbose rebuildBundles debug@0.5.0 +silly extracting entry lib/public/icons/page_error.png +info install debug@0.5.0 +silly extracting entry lib/public/icons/page_excel.png +verbose caching /Users/hank/node/everyauth/node_modules/expect.js/package.json +verbose loadDefaults expect.js@0.1.2 +silly extracting entry lib/public/icons/page_find.png +info postinstall debug@0.5.0 +silly extracting entry lib/public/icons/page_gear.png +silly extracting entry lib/public/icons/page_go.png +info preinstall expect.js@0.1.2 +silly extracting entry lib/public/icons/page_green.png +silly extracting entry lib/public/icons/page_key.png +verbose from cache /Users/hank/node/everyauth/node_modules/expect.js/package.json +silly extracting entry lib/public/icons/page_lightning.png +verbose readDependencies: using package.json deps +verbose from cache /Users/hank/node/everyauth/node_modules/expect.js/package.json +silly extracting entry lib/public/icons/page_link.png +verbose readDependencies: using package.json deps +silly resolved [] +verbose about to build /Users/hank/node/everyauth/node_modules/expect.js +info build /Users/hank/node/everyauth/node_modules/expect.js +verbose from cache /Users/hank/node/everyauth/node_modules/expect.js/package.json +verbose linkStuff [ false, false, false, '/Users/hank/node/everyauth/node_modules' ] +info linkStuff expect.js@0.1.2 +verbose linkBins expect.js@0.1.2 +verbose linkMans expect.js@0.1.2 +verbose rebuildBundles expect.js@0.1.2 +info install expect.js@0.1.2 +silly extracting entry lib/public/icons/page_paintbrush.png +silly extracting entry lib/public/icons/page_paste.png +silly extracting entry lib/public/icons/page_red.png +info postinstall expect.js@0.1.2 +silly extracting entry lib/public/icons/page_refresh.png +verbose caching /Users/hank/node/everyauth/node_modules/xml2js/package.json +verbose loadDefaults xml2js@0.1.14 +silly extracting entry lib/public/icons/page_save.png +silly extracting entry lib/public/icons/page_white.png +info preinstall xml2js@0.1.14 +silly extracting entry lib/public/icons/page_white_acrobat.png +verbose from cache /Users/hank/node/everyauth/node_modules/xml2js/package.json +silly extracting entry lib/public/icons/page_white_actionscript.png +verbose readDependencies: using package.json deps +verbose from cache /Users/hank/node/everyauth/node_modules/xml2js/package.json +silly extracting entry lib/public/icons/page_white_add.png +verbose readDependencies: using package.json deps +verbose cache add [ 'sax@>=0.1.1', null ] +silly cache add: name, spec, args [ undefined, 'sax@>=0.1.1', [ 'sax@>=0.1.1', null ] ] +verbose parsed url { pathname: 'sax@', path: 'sax@', href: 'sax@' } +silly cache add: name, spec, args [ 'sax', '>=0.1.1', [ 'sax', '>=0.1.1' ] ] +verbose parsed url { pathname: '=0.1.1', path: '=0.1.1', href: '=0.1.1' } +verbose addNamed [ 'sax', '>=0.1.1' ] +verbose addNamed [ null, '>=0.1.1' ] +silly name, range, hasData [ 'sax', '>=0.1.1', false ] +verbose raw, before any munging sax +verbose url resolving [ 'https://registry.npmjs.org/', './sax' ] +verbose url resolved https://registry.npmjs.org/sax +http GET https://registry.npmjs.org/sax +silly extracting entry lib/public/icons/page_white_c.png +silly extracting entry lib/public/icons/page_white_camera.png +silly extracting entry lib/public/icons/page_white_cd.png +silly extracting entry lib/public/icons/page_white_code.png +silly extracting entry lib/public/icons/page_white_code_red.png +silly extracting entry lib/public/icons/page_white_coldfusion.png +silly extracting entry lib/public/icons/page_white_compressed.png +silly extracting entry lib/public/icons/page_white_copy.png +silly extracting entry lib/public/icons/page_white_cplusplus.png +silly extracting entry lib/public/icons/page_white_csharp.png +silly extracting entry lib/public/icons/page_white_cup.png +silly extracting entry lib/public/icons/page_white_database.png +silly extracting entry lib/public/icons/page_white_delete.png +silly extracting entry lib/public/icons/page_white_dvd.png +silly extracting entry lib/public/icons/page_add.png +silly extracting entry lib/public/icons/page_white_error.png +silly extracting entry lib/public/icons/page_white_excel.png +silly extracting entry lib/public/icons/page_white_find.png +silly extracting entry lib/public/icons/page_white_flash.png +silly extracting entry lib/public/icons/page_white_freehand.png +silly extracting entry lib/public/icons/page_white_gear.png +silly extracting entry lib/public/icons/page_white_get.png +silly extracting entry lib/public/icons/page_white_go.png +silly extracting entry lib/public/icons/page_white_h.png +silly extracting entry lib/public/icons/page_white_horizontal.png +silly extracting entry lib/public/icons/page_white_key.png +silly extracting entry lib/public/icons/page_white_lightning.png +silly extracting entry lib/public/icons/page_white_link.png +silly extracting entry lib/public/icons/page_white_magnify.png +silly extracting entry lib/public/icons/page_white_medal.png +verbose caching /Users/hank/node/everyauth/node_modules/satisfy/package.json +verbose loadDefaults satisfy@0.1.0 +silly extracting entry lib/public/icons/page_white_office.png +silly extracting entry lib/public/icons/page_white_paint.png +silly extracting entry lib/public/icons/page_white_paintbrush.png +info preinstall satisfy@0.1.0 +silly extracting entry lib/public/icons/page_white_paste.png +verbose from cache /Users/hank/node/everyauth/node_modules/satisfy/package.json +verbose readDependencies: using package.json deps +verbose from cache /Users/hank/node/everyauth/node_modules/satisfy/package.json +verbose readDependencies: using package.json deps +verbose cache add [ 'soda@0.2.5', null ] +silly cache add: name, spec, args [ undefined, 'soda@0.2.5', [ 'soda@0.2.5', null ] ] +verbose parsed url { pathname: 'soda@0.2.5', +verbose parsed url path: 'soda@0.2.5', +verbose parsed url href: 'soda@0.2.5' } +silly cache add: name, spec, args [ 'soda', '0.2.5', [ 'soda', '0.2.5' ] ] +verbose parsed url { pathname: '0.2.5', path: '0.2.5', href: '0.2.5' } +verbose addNamed [ 'soda', '0.2.5' ] +verbose addNamed [ '0.2.5', '0.2.5' ] +verbose raw, before any munging soda/0.2.5 +verbose url resolving [ 'https://registry.npmjs.org/', './soda/0.2.5' ] +verbose url resolved https://registry.npmjs.org/soda/0.2.5 +http GET https://registry.npmjs.org/soda/0.2.5 +verbose cache add [ 'webkit-server@0.1.0', null ] +silly cache add: name, spec, args [ undefined, +silly cache add: name, spec, args 'webkit-server@0.1.0', +silly cache add: name, spec, args [ 'webkit-server@0.1.0', null ] ] +verbose parsed url { pathname: 'webkit-server@0.1.0', +verbose parsed url path: 'webkit-server@0.1.0', +verbose parsed url href: 'webkit-server@0.1.0' } +silly cache add: name, spec, args [ 'webkit-server', '0.1.0', [ 'webkit-server', '0.1.0' ] ] +verbose parsed url { pathname: '0.1.0', path: '0.1.0', href: '0.1.0' } +verbose addNamed [ 'webkit-server', '0.1.0' ] +verbose addNamed [ '0.1.0', '0.1.0' ] +verbose cache add [ 'debug@0.1.0', null ] +silly cache add: name, spec, args [ undefined, 'debug@0.1.0', [ 'debug@0.1.0', null ] ] +verbose parsed url { pathname: 'debug@0.1.0', +verbose parsed url path: 'debug@0.1.0', +verbose parsed url href: 'debug@0.1.0' } +silly cache add: name, spec, args [ 'debug', '0.1.0', [ 'debug', '0.1.0' ] ] +verbose parsed url { pathname: '0.1.0', path: '0.1.0', href: '0.1.0' } +verbose addNamed [ 'debug', '0.1.0' ] +verbose addNamed [ '0.1.0', '0.1.0' ] +verbose cache add [ 'ms@*', null ] +silly cache add: name, spec, args [ undefined, 'ms@*', [ 'ms@*', null ] ] +verbose parsed url { pathname: 'ms@*', path: 'ms@*', href: 'ms@*' } +silly cache add: name, spec, args [ 'ms', '*', [ 'ms', '*' ] ] +verbose parsed url { pathname: '*', path: '*', href: '*' } +verbose addNamed [ 'ms', '*' ] +verbose addNamed [ null, '' ] +silly name, range, hasData [ 'ms', '', false ] +silly extracting entry lib/public/icons/page_white_php.png +silly extracting entry lib/public/icons/page_white_picture.png +verbose raw, before any munging webkit-server/0.1.0 +verbose url resolving [ 'https://registry.npmjs.org/', './webkit-server/0.1.0' ] +verbose url resolved https://registry.npmjs.org/webkit-server/0.1.0 +http GET https://registry.npmjs.org/webkit-server/0.1.0 +verbose raw, before any munging debug/0.1.0 +verbose url resolving [ 'https://registry.npmjs.org/', './debug/0.1.0' ] +verbose url resolved https://registry.npmjs.org/debug/0.1.0 +http GET https://registry.npmjs.org/debug/0.1.0 +verbose raw, before any munging ms +verbose url resolving [ 'https://registry.npmjs.org/', './ms' ] +verbose url resolved https://registry.npmjs.org/ms +http GET https://registry.npmjs.org/ms +silly extracting entry lib/public/icons/page_white_powerpoint.png +silly extracting entry lib/public/icons/page_white_put.png +silly extracting entry lib/public/icons/page_white_ruby.png +silly extracting entry lib/public/icons/page_white_stack.png +silly extracting entry lib/public/icons/page_white_star.png +silly extracting entry lib/public/icons/page_white_swoosh.png +silly extracting entry lib/public/icons/page_white_text.png +verbose caching /Users/hank/node/everyauth/node_modules/openid/package.json +verbose loadDefaults openid@0.4.2 +info preinstall openid@0.4.2 +verbose from cache /Users/hank/node/everyauth/node_modules/openid/package.json +verbose readDependencies: using package.json deps +verbose from cache /Users/hank/node/everyauth/node_modules/openid/package.json +silly extracting entry lib/public/icons/page_white_text_width.png +silly extracting entry lib/public/icons/page_white_tux.png +verbose readDependencies: using package.json deps +silly resolved [] +verbose about to build /Users/hank/node/everyauth/node_modules/openid +info build /Users/hank/node/everyauth/node_modules/openid +verbose from cache /Users/hank/node/everyauth/node_modules/openid/package.json +verbose linkStuff [ false, false, false, '/Users/hank/node/everyauth/node_modules' ] +info linkStuff openid@0.4.2 +verbose linkBins openid@0.4.2 +verbose linkMans openid@0.4.2 +verbose rebuildBundles openid@0.4.2 +info install openid@0.4.2 +silly extracting entry lib/public/icons/page_white_vector.png +silly extracting entry lib/public/icons/page_white_visualstudio.png +info postinstall openid@0.4.2 +silly extracting entry lib/public/icons/page_white_width.png +silly extracting entry lib/public/icons/page_white_word.png +silly extracting entry lib/public/icons/page_white_world.png +silly extracting entry lib/public/icons/page_white_wrench.png +silly extracting entry lib/public/icons/page_white_zip.png +silly extracting entry lib/public/icons/page_word.png +silly extracting entry lib/public/icons/page_world.png +silly extracting entry lib/public/style.css +verbose caching /Users/hank/node/everyauth/node_modules/oauth/package.json +verbose loadDefaults oauth@0.9.7 +info preinstall oauth@0.9.7 +verbose from cache /Users/hank/node/everyauth/node_modules/oauth/package.json +verbose readDependencies: using package.json deps +verbose from cache /Users/hank/node/everyauth/node_modules/oauth/package.json +verbose readDependencies: using package.json deps +silly resolved [] +verbose about to build /Users/hank/node/everyauth/node_modules/oauth +info build /Users/hank/node/everyauth/node_modules/oauth +verbose from cache /Users/hank/node/everyauth/node_modules/oauth/package.json +verbose linkStuff [ false, false, false, '/Users/hank/node/everyauth/node_modules' ] +info linkStuff oauth@0.9.7 +verbose linkBins oauth@0.9.7 +verbose linkMans oauth@0.9.7 +verbose rebuildBundles oauth@0.9.7 +info install oauth@0.9.7 +info postinstall oauth@0.9.7 +verbose caching /Users/hank/node/everyauth/node_modules/express/package.json +verbose loadDefaults express@2.5.10 +info preinstall express@2.5.10 +verbose from cache /Users/hank/node/everyauth/node_modules/express/package.json +verbose readDependencies: using package.json deps +verbose from cache /Users/hank/node/everyauth/node_modules/express/package.json +verbose readDependencies: using package.json deps +verbose cache add [ 'mime@1.2.4', null ] +silly cache add: name, spec, args [ undefined, 'mime@1.2.4', [ 'mime@1.2.4', null ] ] +verbose parsed url { pathname: 'mime@1.2.4', +verbose parsed url path: 'mime@1.2.4', +verbose parsed url href: 'mime@1.2.4' } +silly cache add: name, spec, args [ 'mime', '1.2.4', [ 'mime', '1.2.4' ] ] +verbose parsed url { pathname: '1.2.4', path: '1.2.4', href: '1.2.4' } +verbose addNamed [ 'mime', '1.2.4' ] +verbose addNamed [ '1.2.4', '1.2.4' ] +verbose cache add [ 'qs@0.4.x', null ] +silly cache add: name, spec, args [ undefined, 'qs@0.4.x', [ 'qs@0.4.x', null ] ] +verbose parsed url { pathname: 'qs@0.4.x', path: 'qs@0.4.x', href: 'qs@0.4.x' } +silly cache add: name, spec, args [ 'qs', '0.4.x', [ 'qs', '0.4.x' ] ] +verbose parsed url { pathname: '0.4.x', path: '0.4.x', href: '0.4.x' } +verbose addNamed [ 'qs', '0.4.x' ] +verbose addNamed [ null, '>=0.4.0- <0.5.0-' ] +silly name, range, hasData [ 'qs', '>=0.4.0- <0.5.0-', false ] +verbose cache add [ 'mkdirp@0.3.0', null ] +silly cache add: name, spec, args [ undefined, 'mkdirp@0.3.0', [ 'mkdirp@0.3.0', null ] ] +verbose parsed url { pathname: 'mkdirp@0.3.0', +verbose parsed url path: 'mkdirp@0.3.0', +verbose parsed url href: 'mkdirp@0.3.0' } +silly cache add: name, spec, args [ 'mkdirp', '0.3.0', [ 'mkdirp', '0.3.0' ] ] +verbose parsed url { pathname: '0.3.0', path: '0.3.0', href: '0.3.0' } +verbose addNamed [ 'mkdirp', '0.3.0' ] +verbose addNamed [ '0.3.0', '0.3.0' ] +verbose raw, before any munging mkdirp/0.3.0 +verbose url resolving [ 'https://registry.npmjs.org/', './mkdirp/0.3.0' ] +verbose url resolved https://registry.npmjs.org/mkdirp/0.3.0 +verbose etag "943S8JGCDF8KQMMG7IADE23VT" +http GET https://registry.npmjs.org/mkdirp/0.3.0 +verbose raw, before any munging mime/1.2.4 +verbose url resolving [ 'https://registry.npmjs.org/', './mime/1.2.4' ] +verbose url resolved https://registry.npmjs.org/mime/1.2.4 +verbose etag "4CXPYNDMLFWAUJJP7X0847KZH" +http GET https://registry.npmjs.org/mime/1.2.4 +verbose raw, before any munging qs +verbose url resolving [ 'https://registry.npmjs.org/', './qs' ] +verbose url resolved https://registry.npmjs.org/qs +verbose etag "8S4MMGNKTX9EPPWJ0VFOTNQ52" +http GET https://registry.npmjs.org/qs +verbose caching /Users/hank/node/everyauth/node_modules/request/package.json +verbose loadDefaults request@2.9.202 +info preinstall request@2.9.202 +verbose from cache /Users/hank/node/everyauth/node_modules/request/package.json +verbose readDependencies: using package.json deps +verbose from cache /Users/hank/node/everyauth/node_modules/request/package.json +verbose readDependencies: using package.json deps +silly resolved [] +verbose about to build /Users/hank/node/everyauth/node_modules/request +info build /Users/hank/node/everyauth/node_modules/request +verbose from cache /Users/hank/node/everyauth/node_modules/request/package.json +verbose linkStuff [ false, false, false, '/Users/hank/node/everyauth/node_modules' ] +info linkStuff request@2.9.202 +verbose linkBins request@2.9.202 +verbose linkMans request@2.9.202 +verbose rebuildBundles request@2.9.202 +info install request@2.9.202 +info postinstall request@2.9.202 +http 200 https://registry.npmjs.org/webkit-server/0.1.0 +silly get cb [ 200, +silly get cb { vary: 'Accept', +silly get cb server: 'CouchDB/1.2.0 (Erlang OTP/R15B)', +silly get cb etag: '"9BPVVZT34KTCL1LMT2A9VUD32"', +silly get cb date: 'Tue, 19 Jun 2012 00:51:33 GMT', +silly get cb 'content-type': 'application/json', +silly get cb 'content-length': '998' } ] +verbose bin dist [ '0.6-ares1.7.5-DEV-evundefined-openssl1.0.1-v83.6.6.25-darwin-x64-11.3.0', +verbose bin dist { shasum: '11a4b0d1fe5b01112df6cb0dbca14b90aa855ac7', +verbose bin dist tarball: 'http://registry.npmjs.org/webkit-server/-/webkit-server-0.1.0.tgz' } ] +verbose addRemoteTarball [ 'https://registry.npmjs.org/webkit-server/-/webkit-server-0.1.0.tgz', +verbose addRemoteTarball '11a4b0d1fe5b01112df6cb0dbca14b90aa855ac7' ] +verbose fetch to /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067093979-0.26604563323780894/tmp.tgz +http GET https://registry.npmjs.org/webkit-server/-/webkit-server-0.1.0.tgz +http 200 https://registry.npmjs.org/soda/0.2.5 +silly get cb [ 200, +silly get cb { vary: 'Accept', +silly get cb server: 'CouchDB/1.2.0 (Erlang OTP/R15B)', +silly get cb etag: '"6QAE7FX8TDTDRG5XQL0H1ZI0U"', +silly get cb date: 'Tue, 19 Jun 2012 00:51:33 GMT', +silly get cb 'content-type': 'application/json', +silly get cb 'content-length': '782' } ] +verbose caching /Users/hank/node/everyauth/node_modules/jade/package.json +verbose loadDefaults jade@0.26.1 +verbose bin dist [ '0.6-ares1.7.5-DEV-evundefined-openssl1.0.1-v83.6.6.25-darwin-x64-11.3.0', +verbose bin dist { shasum: 'a8b10f142d88a2c14cf20b2af9790d10a64d743a', +verbose bin dist tarball: 'http://registry.npmjs.org/soda/-/soda-0.2.5.tgz' } ] +verbose addRemoteTarball [ 'https://registry.npmjs.org/soda/-/soda-0.2.5.tgz', +verbose addRemoteTarball 'a8b10f142d88a2c14cf20b2af9790d10a64d743a' ] +verbose fetch to /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067094024-0.8034658289980143/tmp.tgz +info preinstall jade@0.26.1 +http 200 https://registry.npmjs.org/debug/0.1.0 +silly get cb [ 200, +silly get cb { vary: 'Accept', +silly get cb server: 'CouchDB/1.2.0 (Erlang OTP/R15B)', +silly get cb etag: '"BFOSJ9KS53REEQFPE5SOZ72ZE"', +silly get cb date: 'Tue, 19 Jun 2012 00:51:33 GMT', +silly get cb 'content-type': 'application/json', +silly get cb 'content-length': '654' } ] +verbose from cache /Users/hank/node/everyauth/node_modules/jade/package.json +http GET https://registry.npmjs.org/soda/-/soda-0.2.5.tgz +verbose readDependencies: using package.json deps +verbose from cache /Users/hank/node/everyauth/node_modules/jade/package.json +verbose readDependencies: using package.json deps +verbose bin dist [ '0.6-ares1.7.5-DEV-evundefined-openssl1.0.1-v83.6.6.25-darwin-x64-11.3.0', +verbose bin dist { shasum: '3026f197b98b823cb51209f3758eb1498a66442c', +verbose bin dist tarball: 'http://registry.npmjs.org/debug/-/debug-0.1.0.tgz' } ] +verbose addRemoteTarball [ 'https://registry.npmjs.org/debug/-/debug-0.1.0.tgz', +verbose addRemoteTarball '3026f197b98b823cb51209f3758eb1498a66442c' ] +verbose fetch to /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067094038-0.9576888564042747/tmp.tgz +verbose cache add [ 'commander@0.5.2', null ] +silly cache add: name, spec, args [ undefined, 'commander@0.5.2', [ 'commander@0.5.2', null ] ] +verbose parsed url { pathname: 'commander@0.5.2', +verbose parsed url path: 'commander@0.5.2', +verbose parsed url href: 'commander@0.5.2' } +silly cache add: name, spec, args [ 'commander', '0.5.2', [ 'commander', '0.5.2' ] ] +verbose parsed url { pathname: '0.5.2', path: '0.5.2', href: '0.5.2' } +verbose addNamed [ 'commander', '0.5.2' ] +verbose addNamed [ '0.5.2', '0.5.2' ] +verbose cache add [ 'mkdirp@0.3.0', null ] +silly cache add: name, spec, args [ undefined, 'mkdirp@0.3.0', [ 'mkdirp@0.3.0', null ] ] +verbose parsed url { pathname: 'mkdirp@0.3.0', +verbose parsed url path: 'mkdirp@0.3.0', +verbose parsed url href: 'mkdirp@0.3.0' } +silly cache add: name, spec, args [ 'mkdirp', '0.3.0', [ 'mkdirp', '0.3.0' ] ] +verbose parsed url { pathname: '0.3.0', path: '0.3.0', href: '0.3.0' } +verbose addNamed [ 'mkdirp', '0.3.0' ] +http 304 https://registry.npmjs.org/mkdirp/0.3.0 +silly get cb [ 304, +silly get cb { server: 'CouchDB/1.2.0 (Erlang OTP/R15B)', +silly get cb etag: '"943S8JGCDF8KQMMG7IADE23VT"', +silly get cb date: 'Tue, 19 Jun 2012 00:51:34 GMT', +silly get cb 'content-length': '0' } ] +verbose etag mkdirp/0.3.0 from cache +http 200 https://registry.npmjs.org/sax +silly get cb [ 200, +silly get cb { vary: 'Accept', +silly get cb server: 'CouchDB/1.2.0 (Erlang OTP/R15B)', +silly get cb etag: '"4S80EJR34E562VBVDRTFS1N03"', +silly get cb date: 'Tue, 19 Jun 2012 00:51:33 GMT', +silly get cb 'content-type': 'application/json', +silly get cb 'content-length': '33953' } ] +http 304 https://registry.npmjs.org/mime/1.2.4 +silly get cb [ 304, +silly get cb { server: 'CouchDB/1.2.0 (Erlang OTP/R15B)', +silly get cb etag: '"4CXPYNDMLFWAUJJP7X0847KZH"', +silly get cb date: 'Tue, 19 Jun 2012 00:51:34 GMT', +silly get cb 'content-length': '0' } ] +verbose etag mime/1.2.4 from cache +http 304 https://registry.npmjs.org/qs +silly get cb [ 304, +silly get cb { server: 'CouchDB/1.2.0 (Erlang OTP/R15B)', +silly get cb etag: '"8S4MMGNKTX9EPPWJ0VFOTNQ52"', +silly get cb date: 'Tue, 19 Jun 2012 00:51:34 GMT', +silly get cb 'content-length': '0' } ] +verbose etag qs from cache +http 200 https://registry.npmjs.org/ms +silly get cb [ 200, +silly get cb { vary: 'Accept', +silly get cb server: 'CouchDB/1.2.0 (Erlang OTP/R15B)', +silly get cb etag: '"E8IEG6WB7N22RUZJAJNJ3L6CI"', +silly get cb date: 'Tue, 19 Jun 2012 00:51:34 GMT', +silly get cb 'content-type': 'application/json', +silly get cb 'content-length': '2949' } ] +http GET https://registry.npmjs.org/debug/-/debug-0.1.0.tgz +verbose bin dist [ '0.6-ares1.7.5-DEV-evundefined-openssl1.0.1-v83.6.6.25-darwin-x64-11.3.0', +verbose bin dist { shasum: '1bbf5ab1ba827af23575143490426455f481fe1e', +verbose bin dist tarball: 'http://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz' } ] +verbose bin dist [ '0.6-ares1.7.5-DEV-evundefined-openssl1.0.1-v83.6.6.25-darwin-x64-11.3.0', +verbose bin dist { shasum: '11b5fdaf29c2509255176b80ad520294f5de92b7', +verbose bin dist tarball: 'http://registry.npmjs.org/mime/-/mime-1.2.4.tgz' } ] +silly name, range, hasData 2 [ 'qs', '>=0.4.0- <0.5.0-', true ] +silly versions [ 'qs', +silly versions [ '0.0.1', +silly versions '0.0.2', +silly versions '0.0.3', +silly versions '0.0.4', +silly versions '0.0.5', +silly versions '0.0.6', +silly versions '0.0.7', +silly versions '0.1.0', +silly versions '0.2.0', +silly versions '0.3.0', +silly versions '0.3.1', +silly versions '0.3.2', +silly versions '0.4.0', +silly versions '0.4.1', +silly versions '0.4.2', +silly versions '0.5.0' ] ] +verbose bin dist [ '0.6-ares1.7.5-DEV-evundefined-openssl1.0.1-v83.6.6.25-darwin-x64-11.3.0', +verbose bin dist { shasum: '3cac4c861e371a8c9c4770ac23cda8de639b8e5f', +verbose bin dist tarball: 'http://registry.npmjs.org/qs/-/qs-0.4.2.tgz' } ] +silly name, range, hasData 2 [ 'sax', '>=0.1.1', true ] +silly versions [ 'sax', +silly versions [ '0.1.0', +silly versions '0.1.1', +silly versions '0.1.2', +silly versions '0.1.3', +silly versions '0.1.4', +silly versions '0.1.5', +silly versions '0.2.0', +silly versions '0.2.1', +silly versions '0.2.2', +silly versions '0.2.3', +silly versions '0.2.4', +silly versions '0.2.5', +silly versions '0.3.0', +silly versions '0.3.1', +silly versions '0.3.2', +silly versions '0.3.3', +silly versions '0.3.4', +silly versions '0.3.5', +silly versions '0.4.0' ] ] +verbose bin dist [ '0.6-ares1.7.5-DEV-evundefined-openssl1.0.1-v83.6.6.25-darwin-x64-11.3.0', +verbose bin dist { shasum: 'b0e5cb05f6ae34aeee7557525efa6d73ea2a3ff7', +verbose bin dist tarball: 'http://registry.npmjs.org/sax/-/sax-0.4.0.tgz' } ] +http 200 https://registry.npmjs.org/webkit-server/-/webkit-server-0.1.0.tgz +http 200 https://registry.npmjs.org/soda/-/soda-0.2.5.tgz +silly name, range, hasData 2 [ 'ms', '', true ] +silly versions [ 'ms', [ '0.1.0' ] ] +verbose bin dist [ '0.6-ares1.7.5-DEV-evundefined-openssl1.0.1-v83.6.6.25-darwin-x64-11.3.0', +verbose bin dist { shasum: 'f21fac490daf1d7667fd180fe9077389cc9442b2', +verbose bin dist tarball: 'http://registry.npmjs.org/ms/-/ms-0.1.0.tgz' } ] +verbose addRemoteTarball [ 'https://registry.npmjs.org/sax/-/sax-0.4.0.tgz', +verbose addRemoteTarball 'b0e5cb05f6ae34aeee7557525efa6d73ea2a3ff7' ] +verbose addRemoteTarball [ 'https://registry.npmjs.org/ms/-/ms-0.1.0.tgz', +verbose addRemoteTarball 'f21fac490daf1d7667fd180fe9077389cc9442b2' ] +verbose fetch to /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067094405-0.5287351394072175/tmp.tgz +verbose raw, before any munging commander/0.5.2 +verbose url resolving [ 'https://registry.npmjs.org/', './commander/0.5.2' ] +verbose url resolved https://registry.npmjs.org/commander/0.5.2 +verbose etag "3LDQU0PK4PQ9IRH9AUFEGB4O8" +http GET https://registry.npmjs.org/commander/0.5.2 +verbose fetch to /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067094406-0.4558921013958752/tmp.tgz +http GET https://registry.npmjs.org/sax/-/sax-0.4.0.tgz +http GET https://registry.npmjs.org/ms/-/ms-0.1.0.tgz +verbose caching /Users/hank/.npm/mkdirp/0.3.0/package/package.json +verbose loadDefaults mkdirp@0.3.0 +verbose caching /Users/hank/.npm/mime/1.2.4/package/package.json +verbose loadDefaults mime@1.2.4 +verbose caching /Users/hank/node/everyauth/node_modules/tobi/package.json +verbose loadDefaults tobi@0.3.2 +info preinstall tobi@0.3.2 +verbose from cache /Users/hank/node/everyauth/node_modules/tobi/package.json +verbose readDependencies: using package.json deps +verbose from cache /Users/hank/node/everyauth/node_modules/tobi/package.json +verbose readDependencies: using package.json deps +verbose cache add [ 'htmlparser@>= 1.7.3', null ] +silly cache add: name, spec, args [ undefined, +silly cache add: name, spec, args 'htmlparser@>= 1.7.3', +silly cache add: name, spec, args [ 'htmlparser@>= 1.7.3', null ] ] +verbose parsed url { pathname: 'htmlparser@', +verbose parsed url path: 'htmlparser@', +verbose parsed url href: 'htmlparser@' } +silly cache add: name, spec, args [ 'htmlparser', '>= 1.7.3', [ 'htmlparser', '>= 1.7.3' ] ] +verbose parsed url { pathname: '=', path: '=', href: '=' } +verbose addNamed [ 'htmlparser', '>= 1.7.3' ] +verbose addNamed [ null, '>=1.7.3' ] +silly name, range, hasData [ 'htmlparser', '>=1.7.3', false ] +verbose raw, before any munging htmlparser +verbose url resolving [ 'https://registry.npmjs.org/', './htmlparser' ] +verbose url resolved https://registry.npmjs.org/htmlparser +http GET https://registry.npmjs.org/htmlparser +verbose cache add [ 'should@>= 0.0.4', null ] +silly cache add: name, spec, args [ undefined, 'should@>= 0.0.4', [ 'should@>= 0.0.4', null ] ] +verbose parsed url { pathname: 'should@', path: 'should@', href: 'should@' } +silly cache add: name, spec, args [ 'should', '>= 0.0.4', [ 'should', '>= 0.0.4' ] ] +verbose parsed url { pathname: '=', path: '=', href: '=' } +verbose addNamed [ 'should', '>= 0.0.4' ] +verbose addNamed [ null, '>=0.0.4' ] +silly name, range, hasData [ 'should', '>=0.0.4', false ] +verbose cache add [ 'qs@>= 0.1.0', null ] +silly cache add: name, spec, args [ undefined, 'qs@>= 0.1.0', [ 'qs@>= 0.1.0', null ] ] +verbose parsed url { pathname: 'qs@', path: 'qs@', href: 'qs@' } +silly cache add: name, spec, args [ 'qs', '>= 0.1.0', [ 'qs', '>= 0.1.0' ] ] +verbose parsed url { pathname: '=', path: '=', href: '=' } +verbose addNamed [ 'qs', '>= 0.1.0' ] +verbose addNamed [ null, '>=0.1.0' ] +silly name, range, hasData [ 'qs', '>=0.1.0', false ] +verbose cache add [ 'jsdom@>= 0.1.21', null ] +silly cache add: name, spec, args [ undefined, 'jsdom@>= 0.1.21', [ 'jsdom@>= 0.1.21', null ] ] +verbose parsed url { pathname: 'jsdom@', path: 'jsdom@', href: 'jsdom@' } +silly cache add: name, spec, args [ 'jsdom', '>= 0.1.21', [ 'jsdom', '>= 0.1.21' ] ] +verbose parsed url { pathname: '=', path: '=', href: '=' } +verbose addNamed [ 'jsdom', '>= 0.1.21' ] +verbose addNamed [ null, '>=0.1.21' ] +silly name, range, hasData [ 'jsdom', '>=0.1.21', false ] +silly updated sha bytes 20480 +verbose raw, before any munging should +verbose url resolving [ 'https://registry.npmjs.org/', './should' ] +verbose url resolved https://registry.npmjs.org/should +http GET https://registry.npmjs.org/should +verbose raw, before any munging jsdom +verbose url resolving [ 'https://registry.npmjs.org/', './jsdom' ] +verbose url resolved https://registry.npmjs.org/jsdom +http GET https://registry.npmjs.org/jsdom +silly updated sha bytes 17331 +info shasum a8b10f142d88a2c14cf20b2af9790d10a64d743a +info shasum /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067094024-0.8034658289980143/tmp.tgz +verbose unpack /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067094024-0.8034658289980143/tmp.tgz +info shasum 11a4b0d1fe5b01112df6cb0dbca14b90aa855ac7 +info shasum /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067093979-0.26604563323780894/tmp.tgz +verbose unpack /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067093979-0.26604563323780894/tmp.tgz +silly gunzTarPerm modes [ '755', '644' ] +silly gunzTarPerm modes [ '755', '644' ] +verbose raw, before any munging qs +verbose url resolving [ 'https://registry.npmjs.org/', './qs' ] +verbose url resolved https://registry.npmjs.org/qs +verbose etag "8S4MMGNKTX9EPPWJ0VFOTNQ52" +http GET https://registry.npmjs.org/qs +silly extracting entry .gitignore +silly extracting entry .npmignore +http 200 https://registry.npmjs.org/debug/-/debug-0.1.0.tgz +verbose caching /Users/hank/.npm/qs/0.4.2/package/package.json +verbose loadDefaults qs@0.4.2 +silly resolved [ { name: 'mkdirp', +silly resolved description: 'Recursively mkdir, like `mkdir -p`', +silly resolved version: '0.3.0', +silly resolved author: +silly resolved { name: 'James Halliday', +silly resolved email: 'mail@substack.net', +silly resolved url: 'http://substack.net' }, +silly resolved main: './index', +silly resolved keywords: [ 'mkdir', 'directory' ], +silly resolved repository: +silly resolved { type: 'git', +silly resolved url: 'git://github.com/substack/node-mkdirp.git' }, +silly resolved scripts: { test: 'tap test/*.js' }, +silly resolved devDependencies: { tap: '0.0.x' }, +silly resolved license: 'MIT/X11', +silly resolved engines: { node: '*' }, +silly resolved _id: 'mkdirp@0.3.0', +silly resolved dependencies: {}, +silly resolved optionalDependencies: {}, +silly resolved _engineSupported: true, +silly resolved _npmVersion: '1.1.21', +silly resolved _nodeVersion: 'v0.6.17', +silly resolved _defaultsLoaded: true, +silly resolved _from: 'mkdirp@0.3.0' }, +silly resolved { author: +silly resolved { name: 'Robert Kieffer', +silly resolved email: 'robert@broofa.com', +silly resolved url: 'http://github.com/broofa' }, +silly resolved contributors: +silly resolved [ { name: 'Benjamin Thomas', +silly resolved email: 'benjamin@benjaminthomas.org', +silly resolved url: 'http://github.com/bentomas' } ], +silly resolved dependencies: {}, +silly resolved description: 'A comprehensive library for mime-type mapping', +silly resolved devDependencies: { async_testing: '' }, +silly resolved keywords: [ 'util', 'mime' ], +silly resolved main: 'mime.js', +silly resolved name: 'mime', +silly resolved repository: { url: 'git://github.com/bentomas/node-mime.git', type: 'git' }, +silly resolved version: '1.2.4', +silly resolved _id: 'mime@1.2.4', +silly resolved optionalDependencies: {}, +silly resolved engines: { node: '*' }, +silly resolved _engineSupported: true, +silly resolved _npmVersion: '1.1.21', +silly resolved _nodeVersion: 'v0.6.17', +silly resolved _defaultsLoaded: true, +silly resolved _from: 'mime@1.2.4', +silly resolved scripts: {} }, +silly resolved { name: 'qs', +silly resolved description: 'querystring parser', +silly resolved version: '0.4.2', +silly resolved repository: +silly resolved { type: 'git', +silly resolved url: 'git://github.com/visionmedia/node-querystring.git' }, +silly resolved devDependencies: { mocha: '*', should: '*' }, +silly resolved author: +silly resolved { name: 'TJ Holowaychuk', +silly resolved email: 'tj@vision-media.ca', +silly resolved url: 'http://tjholowaychuk.com' }, +silly resolved main: 'index', +silly resolved engines: { node: '*' }, +silly resolved _id: 'qs@0.4.2', +silly resolved dependencies: {}, +silly resolved optionalDependencies: {}, +silly resolved _engineSupported: true, +silly resolved _npmVersion: '1.1.21', +silly resolved _nodeVersion: 'v0.6.17', +silly resolved _defaultsLoaded: true, +silly resolved _from: 'qs@0.4.x', +silly resolved scripts: {} } ] +info into /Users/hank/node/everyauth/node_modules/express mkdirp@0.3.0 +info into /Users/hank/node/everyauth/node_modules/express mime@1.2.4 +info into /Users/hank/node/everyauth/node_modules/express qs@0.4.2 +info installOne mkdirp@0.3.0 +info installOne mime@1.2.4 +info installOne qs@0.4.2 +verbose from cache /Users/hank/.npm/mkdirp/0.3.0/package/package.json +info unbuild /Users/hank/node/everyauth/node_modules/express/node_modules/mkdirp +verbose from cache /Users/hank/.npm/mime/1.2.4/package/package.json +info unbuild /Users/hank/node/everyauth/node_modules/express/node_modules/mime +verbose from cache /Users/hank/.npm/qs/0.4.2/package/package.json +info unbuild /Users/hank/node/everyauth/node_modules/express/node_modules/qs +silly extracting entry .gitmodules +silly extracting entry .npmignore +silly extracting entry index.js +silly extracting entry package.json +verbose unpack /Users/hank/.npm/mkdirp/0.3.0/package.tgz +verbose unpack /Users/hank/.npm/mime/1.2.4/package.tgz +verbose unpack /Users/hank/.npm/qs/0.4.2/package.tgz +silly gunzTarPerm modes [ '755', '644' ] +silly gunzTarPerm modes [ '755', '644' ] +silly gunzTarPerm modes [ '755', '644' ] +silly extracting entry api.html +silly extracting entry History.md +silly extracting entry README.markdown +silly extracting entry test.js +silly extracting entry index.js +silly extracting entry Makefile +silly extracting entry lib/browser.js +silly extracting entry lib/index.js +silly extracting entry package.json +silly extracting entry Readme.md +silly extracting entry lib/node.js +silly extracting entry lib/parser.js +silly extracting entry examples/google.js +silly extracting entry examples/google.nested.js +silly extracting entry examples/learnboost.js +silly extracting entry test/client.test.js +silly extracting entry test/sauce.test.js +silly extracting entry test/soda.test.js +silly extracting entry lib/soda/client.js +silly extracting entry script/install.js +silly extracting entry vendor/webkit-server/.gitignore +silly extracting entry lib/soda/index.js +silly extracting entry lib/soda/sauce.js +silly extracting entry vendor/webkit-server/build.sh +silly extracting entry vendor/webkit-server/LICENSE +silly extracting entry vendor/webkit-server/README.markdown +silly extracting entry vendor/webkit-server/webkit_server.pro +silly extracting entry vendor/webkit-server/bin/Info.plist +silly extracting entry vendor/webkit-server/src/body.cpp +silly extracting entry vendor/webkit-server/src/Body.h +silly extracting entry package.json +silly extracting entry vendor/webkit-server/src/ClearCookies.cpp +silly extracting entry vendor/webkit-server/src/ClearCookies.h +silly extracting entry .npmignore +silly extracting entry LICENSE +silly extracting entry vendor/webkit-server/src/Command.cpp +silly extracting entry vendor/webkit-server/src/Command.h +silly extracting entry index.js +silly extracting entry .gitignore.orig +silly extracting entry package.json +silly extracting entry package.json +silly extracting entry vendor/webkit-server/src/CommandFactory.cpp +silly extracting entry vendor/webkit-server/src/CommandFactory.h +silly extracting entry .gitignore.rej +silly extracting entry examples/pow.js +silly extracting entry .npmignore +silly extracting entry benchmark.js +silly extracting entry README.md +silly extracting entry LICENSE +silly extracting entry vendor/webkit-server/src/CommandParser.cpp +silly extracting entry vendor/webkit-server/src/CommandParser.h +silly extracting entry examples/pow.js.orig +silly extracting entry examples.js +silly extracting entry index.js +silly extracting entry vendor/webkit-server/src/Connection.cpp +silly extracting entry vendor/webkit-server/src/Connection.h +silly extracting entry mime.js +silly extracting entry test.js +silly extracting entry examples/pow.js.rej +silly extracting entry README.markdown +silly extracting entry types/mime.types +silly extracting entry test/chmod.js +silly extracting entry types/node.types +silly extracting entry test/clobber.js +silly extracting entry test/mkdirp.js +silly extracting entry History.md +silly extracting entry .gitmodules +silly extracting entry vendor/webkit-server/src/Evaluate.cpp +silly extracting entry vendor/webkit-server/src/Evaluate.h +silly updated sha bytes 10240 +silly extracting entry test/perm.js +silly extracting entry test/perm_sync.js +info shasum 3026f197b98b823cb51209f3758eb1498a66442c +info shasum /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067094038-0.9576888564042747/tmp.tgz +verbose unpack /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067094038-0.9576888564042747/tmp.tgz +silly extracting entry lib/querystring.js +silly extracting entry Makefile +silly gunzTarPerm modes [ '755', '644' ] +silly extracting entry .travis.yml +silly extracting entry test/race.js +silly extracting entry test/rel.js +silly extracting entry .gitignore +silly extracting entry vendor/webkit-server/src/Execute.cpp +silly extracting entry vendor/webkit-server/src/Execute.h +silly extracting entry Readme.md +silly extracting entry test/parse.js +silly extracting entry .npmignore +silly extracting entry History.md +silly extracting entry test/sync.js +silly extracting entry test/umask.js +silly extracting entry test/stringify.js +silly extracting entry test/mocha.opts +silly extracting entry vendor/webkit-server/src/Find.cpp +silly extracting entry vendor/webkit-server/src/Find.h +silly extracting entry index.js +silly extracting entry Makefile +silly extracting entry vendor/webkit-server/src/find_command.h +silly extracting entry test/umask_sync.js +silly extracting entry package.json +silly extracting entry Readme.md +silly extracting entry vendor/webkit-server/src/FrameFocus.cpp +silly extracting entry vendor/webkit-server/src/FrameFocus.h +silly extracting entry example/app.js +silly extracting entry example/worker.js +silly extracting entry vendor/webkit-server/src/GetCookies.cpp +silly extracting entry vendor/webkit-server/src/GetCookies.h +silly extracting entry lib/debug.js +silly extracting entry vendor/webkit-server/src/Header.cpp +silly extracting entry vendor/webkit-server/src/Header.h +silly extracting entry vendor/webkit-server/src/Headers.cpp +silly extracting entry vendor/webkit-server/src/Headers.h +silly extracting entry vendor/webkit-server/src/JavascriptInvocation.cpp +silly extracting entry vendor/webkit-server/src/JavascriptInvocation.h +http 200 https://registry.npmjs.org/should +silly get cb [ 200, +silly get cb { vary: 'Accept', +silly get cb server: 'CouchDB/1.2.0 (Erlang OTP/R15B)', +silly get cb etag: '"D1LNETFI71OIUFRCKEA5YWEXP"', +silly get cb date: 'Tue, 19 Jun 2012 00:51:34 GMT', +silly get cb 'content-type': 'application/json', +silly get cb 'content-length': '45568' } ] +silly extracting entry vendor/webkit-server/src/main.cpp +silly extracting entry vendor/webkit-server/src/NetworkAccessManager.cpp +silly name, range, hasData 2 [ 'should', '>=0.0.4', true ] +silly versions [ 'should', +silly versions [ '0.0.1', +silly versions '0.0.2', +silly versions '0.0.3', +silly versions '0.0.4', +silly versions '0.1.0', +silly versions '0.2.0', +silly versions '0.2.1', +silly versions '0.3.0', +silly versions '0.3.1', +silly versions '0.3.2', +silly versions '0.4.0', +silly versions '0.4.1', +silly versions '0.4.2', +silly versions '0.5.0', +silly versions '0.5.1', +silly versions '0.6.0', +silly versions '0.6.1', +silly versions '0.6.2', +silly versions '0.6.3' ] ] +verbose bin dist [ '0.6-ares1.7.5-DEV-evundefined-openssl1.0.1-v83.6.6.25-darwin-x64-11.3.0', +verbose bin dist { shasum: 'd4b55335c8908f3a6c47970b687f750372acdc73', +verbose bin dist tarball: 'http://registry.npmjs.org/should/-/should-0.6.3.tgz' } ] +silly extracting entry vendor/webkit-server/src/NetworkAccessManager.h +silly extracting entry vendor/webkit-server/src/NetworkCookieJar.cpp +verbose addRemoteTarball [ 'https://registry.npmjs.org/should/-/should-0.6.3.tgz', +verbose addRemoteTarball 'd4b55335c8908f3a6c47970b687f750372acdc73' ] +verbose fetch to /var/folders/c7/xtgm_cp52r36sdnbx_6mq1hw0000gn/T/npm-1340067088577/1340067095135-0.6903506545349956/tmp.tgz +http GET https://registry.npmjs.org/should/-/should-0.6.3.tgz +silly extracting entry vendor/webkit-server/src/NetworkCookieJar.h +silly extracting entry vendor/webkit-server/src/Node.cpp diff --git a/example/server.js b/example/server.js index bd6d0870..83ace670 100644 --- a/example/server.js +++ b/example/server.js @@ -51,6 +51,10 @@ var usersBySoundCloudId = {}; var usersByMailchimpId = {}; var usersMailruId = {}; var usersByMendeleyId = {}; +var usersByDcId = {}; +var usersByWeiboId = {}; +var usersByRunKeeperId = {}; +var usersByMeetupId = {}; var usersByLogin = { 'brian@example.com': addUser({ login: 'brian@example.com', password: 'password'}) }; @@ -59,7 +63,15 @@ everyauth.everymodule .findUserById( function (id, callback) { callback(null, usersById[id]); }); - + +everyauth.dailycred + .appId(conf.dc.appId) + .findOrCreateUser( function (session, accessToken, accessTokenExtra, dcUserMetadata) { + return usersByDcId[dcUserMetadata.id] || + (usersByDcId[dcUserMetadata.id] = addUser('dailycred', dcUserMetadata)); + }) + .redirectPath('/'); + everyauth.azureacs .identityProviderUrl('https://acssample1.accesscontrol.windows.net/v2/wsfederation/') .entryPath('/auth/azureacs') @@ -271,7 +283,7 @@ everyauth.vimeo .consumerSecret(conf.vimeo.consumerSecret) .findOrCreateUser( function (sess, accessToken, accessSecret, vimeoUser) { return usersByVimeoId[vimeoUser.id] || - (usersByVimeoId[vimeoUser.id] = vimeoUser); + (usersByVimeoId[vimeoUser.id] = addUser('vimeo', vimeoUser)); }) .redirectPath('/') @@ -379,6 +391,14 @@ everyauth.mendeley }) .redirectPath('/'); +everyauth.runkeeper + .appId(conf.runkeeper.appId) + .appSecret(conf.runkeeper.appSecret) + .findOrCreateUser(function(sess, accessToken, accessSecret, user) { + return usersByRunKeeperId[user.userID] || (usersByRunKeeperId[user.userID] = addUser('runkeeper', user)); + }) + .redirectPath('/'); + everyauth .soundcloud .appId(conf.soundcloud.appId) @@ -410,6 +430,24 @@ everyauth (usersByMailchimpId[mailchimpUser.user_id] = addUser('mailchimp', mailchimpUser)); }) .redirectPath("/"); + +everyauth + .weibo + .appId(conf.weibo.appId) + .appSecret(conf.weibo.appSecret) + .findOrCreateUser( function (session, accessToken, accessTokenExtra, weiboUser){ + return usersByWeiboId[weiboUser.uid] || + (usersByWeiboId[weiboUser.uid] = addUser('weibo', weiboUser)); + }) + .redirectPath("/"); + +everyauth.meetup + .appId(conf.meetup.appId) + .appSecret(conf.meetup.appSecret) + .findOrCreateUser(function(sess, accessToken, accessSecret, user) { + return usersByMeetupId[user.id] || (usersByMeetupId[user.id] = addUser('meetup', user)); + }) + .redirectPath('/'); var app = express.createServer( express.bodyParser() diff --git a/example/views/home.jade b/example/views/home.jade index 4b39cd68..7538db71 100644 --- a/example/views/home.jade +++ b/example/views/home.jade @@ -45,6 +45,9 @@ #readability-login a(href='/auth/readability', style='border: 0px') img(style='border: 0px', src='https://www.readability.com/media/images/logo_chair.png') + #meetup-login + a(href='/auth/meetup', style='border: 0px') + img(style='border: 0px', src='http://img2.meetupstatic.com/img/header/logo.png') #dropbox-login a(href='/auth/dropbox', style='border: 0px') img(src='https://www.dropbox.com/static/16890/images/logo.png') @@ -86,11 +89,18 @@ #mendeley-login a(href='/auth/mendeley', style='border: 0px') img(src='http://d1rktifm8krpj.cloudfront.net/graphics/commonnew/logo-mendeley_1248201417297118.png', title='Login with Mendeley') + #runkeeper-login + a(href='/auth/runkeeper', style='border: 0px') + img(src='http://d2b4ufapzmnxpw.cloudfront.net/build/3572/static/kronos/images/logo.png', title='Login with Runkeeper') #openid-login form#openid(action='/auth/openid') label(for='openid_identifier') OpenID Identifier:   input(type='text', name='openid_identifier') input(type='submit') Login + #dailycred-login + a(href='/auth/dailycred') Login with Dailycred + #weibo-login + a(href='/auth/weibo') Login with sina weibo - else h2 Authenticated - if (everyauth.facebook) @@ -177,5 +187,15 @@ - if (everyauth.mendeley) h3 Mendeley User Data p= JSON.stringify(everyauth.mendeley.user) + - if (everyauth['dailycred']) + p= JSON.stringify(everyauth.dailycred.user.email) + - if (everyauth['weibo']) + p= JSON.stringify(everyauth.weibo.user) + - if (everyauth.runkeeper) + h3 Runkeeper User Data + p= JSON.stringify(everyauth.runkeeper.user) + - if (everyauth.meetup) + h3 Meetup User Data + p= JSON.stringify(everyauth.meetup.user) h3 a(href='/logout') Logout diff --git a/lib/modules/dailycred.js b/lib/modules/dailycred.js new file mode 100644 index 00000000..0f1179b0 --- /dev/null +++ b/lib/modules/dailycred.js @@ -0,0 +1,61 @@ +var oauthModule = require('./oauth2') + , url = require('url'); + +var dc = module.exports = +oauthModule.submodule('dailycred') + + .apiHost('https://www.dailycred.com') + .oauthHost('https://www.dailycred.com') + + .authPath('https://www.dailycred.com/oauth/authorize') + .accessTokenPath('/oauth/access_token') + .entryPath('/auth/dailycred') + .callbackPath('/auth/dailycred/callback') + + .authCallbackDidErr( function (req) { + var parsedUrl = url.parse(req.url, true); + return parsedUrl.query && !!parsedUrl.query.error; + }) + .handleAuthCallbackError( function (req, res) { + var parsedUrl = url.parse(req.url, true) + , errorDesc = parsedUrl.query.error_description; + if (res.render) { + res.render(__dirname + '/../views/auth-fail.jade', { + errorDescription: errorDesc + }); + } else { + // TODO Replace this with a nice fallback + throw new Error("You must configure handleAuthCallbackError if you are not using express"); + } + }) + + .fetchOAuthUser( function (accessToken) { + var p = this.Promise(); + this.oauth.get(this.apiHost() + '/graph/me.json', accessToken, function (err, data) { + if (err) return p.fail(err); + var oauthUser = JSON.parse(data); + p.fulfill(oauthUser); + }) + return p; + }) + .moduleErrback( function (err, seqValues) { + if (err instanceof Error) { + var next = seqValues.next; + return next(err); + } else if (err.extra) { + var facebookResponse = err.extra.res + , serverResponse = seqValues.res; + serverResponse.writeHead( + facebookResponse.statusCode + , facebookResponse.headers); + serverResponse.end(err.extra.data); + } else if (err.statusCode) { + var serverResponse = seqValues.res; + serverResponse.writeHead(err.statusCode); + serverResponse.end(err.data); + } else { + console.error(err); + throw new Error('Unsupported error type'); + } + }); + diff --git a/lib/modules/facebookCanvas.js b/lib/modules/facebookCanvas.js new file mode 100644 index 00000000..2c9bc102 --- /dev/null +++ b/lib/modules/facebookCanvas.js @@ -0,0 +1,76 @@ +var facebook = require('./facebook') + , crypto = require('crypto'); + +var fb = module.exports = + facebook.submodule("facebookCanvas") + .configurable({ + canvasPage: 'specify the URL configured for your Facebook Canvas Page via https://developers.facebook.com/apps/' + }) + .post('canvasPath', + 'the path configured for the Facebook canvas interface ("Canvas URL"), minus the hostname') + .step('fetchOAuthUserFromSignedRequest') + .description('handles the signed request from Facebook and returns the oauth user') + .accepts('req res') + .promises('oauthUser accessToken extra') + .canBreakTo('authCallbackErrorSteps') + .canBreakTo('requestAuthorizationSteps') + .step('getSession') + .accepts('req') + .promises('session') + .step('findOrCreateUser') + .accepts('session accessToken extra oauthUser') + .promises('user') + .step('compile') + .accepts('accessToken extra oauthUser user') + .promises('auth') + .step('addToSession') + .accepts('session auth') + .promises(null) + .step('sendResponse') + .accepts('res') + .promises(null) + + .canvasPath('/auth/facebook/canvas') + + .fetchOAuthUserFromSignedRequest( function (req, res) { + var signed_request = req.param('signed_request').split('.'); + var signature = signed_request[0].replace(/_/g, '/').replace(/-/g, '+'); + var data = signed_request[1]; + var decoded = new Buffer(data, 'base64').toString('utf8'); + var oauthUser = JSON.parse(decoded); + + if (oauthUser.algorithm !== 'HMAC-SHA256') { + return this.breakTo('authCallbackErrorSteps', req, res); + } + + var calculated = crypto.createHmac('sha256', this._appSecret).update(data).digest('base64'); + if (calculated != signature+"=") { + return this.breakTo('authCallbackErrorSteps', req, res); + } + + if (!oauthUser.user_id || oauthUser.user_id === null) { + // Need to get authorization first + return this.breakTo('requestAuthorizationSteps', req, res); + } + + // Dummy values used to satisfy subsequent steps + var accessToken = "access_token"; + var extra = "extra"; + + var p = this.Promise(); + p.fulfill(oauthUser, accessToken, extra); + return p; + }) + + .stepseq('requestAuthorizationSteps') + .step('getCanvasAuthUri') + .accepts('req res') + .promises('authUri') + .step('requestAuthUri') + .accepts('res authUri') + .promises(null) + + .getCanvasAuthUri( function (req, res) { + var authUri = "http://www.facebook.com/dialog/oauth?client_id="+ this._appId + "&redirect_uri=" + encodeURI(this._canvasPage); + return authUri; + }); diff --git a/lib/modules/github.js b/lib/modules/github.js index 927a9861..15390ee6 100644 --- a/lib/modules/github.js +++ b/lib/modules/github.js @@ -7,7 +7,7 @@ oauthModule.submodule('github') }) .oauthHost('https://github.com') - .apiHost('https://github.com/api/v2/json') + .apiHost('https://api.github.com') .authPath('/login/oauth/authorize') .accessTokenPath('/login/oauth/access_token') @@ -21,9 +21,9 @@ oauthModule.submodule('github') .fetchOAuthUser( function (accessToken) { var p = this.Promise(); - this.oauth.get(this.apiHost() + '/user/show', accessToken, function (err, data) { + this.oauth.get(this.apiHost() + '/user', accessToken, function (err, data) { if (err) return p.fail(err); - var oauthUser = JSON.parse(data).user; + var oauthUser = JSON.parse(data); p.fulfill(oauthUser); }) return p; diff --git a/lib/modules/meetup.js b/lib/modules/meetup.js new file mode 100644 index 00000000..b21b5414 --- /dev/null +++ b/lib/modules/meetup.js @@ -0,0 +1,32 @@ +var oauthModule = require('./oauth2') + , querystring= require('querystring'); + +var meetup = module.exports = +oauthModule.submodule('meetup') + + .oauthHost('https://secure.meetup.com') + .apiHost('https://api.meetup.com/2') + + .entryPath('/auth/meetup') + .callbackPath('/auth/meetup/callback') + + .authPath('/oauth2/authorize') + .authQueryParam('response_type', 'code') + + .accessTokenHttpMethod('post') + .accessTokenPath('/oauth2/access') + .postAccessTokenParamsVia('data') + .accessTokenParam('grant_type', 'authorization_code') + + .fetchOAuthUser( function (accessToken) { + var p = this.Promise(); + this.oauth.get(this.apiHost() + '/member/self', accessToken, function (err, data) { + if (err) return p.fail(err.error_message); + var oauthUser = JSON.parse(data); + p.fulfill(oauthUser); + }) + return p; + }) + .convertErr( function (data) { + return new Error(data.error_message); + }); diff --git a/lib/modules/oauth.js b/lib/modules/oauth.js index 65021a14..9cf34ed5 100644 --- a/lib/modules/oauth.js +++ b/lib/modules/oauth.js @@ -172,10 +172,16 @@ everyModule.submodule('oauth') promise = this.Promise(); mod.verifier = verifier; - sess.save( function (err) { - if (err) return promise.fail(err); - promise.fulfill(requestToken, verifier); - }); + try { + sess.save( function (err) { + if (err) return promise.fail(err); + promise.fulfill(requestToken, verifier); + }); + } + catch (err) { + console.log(err); + promise.fulfill(requestToken, verifier); + } return promise; }) .getSession( function(req) { @@ -210,10 +216,16 @@ everyModule.submodule('oauth') mod.accessToken = auth.accessToken; mod.accessTokenSecret = auth.accessTokenSecret; // this._super() ? - sess.save( function (err) { - if (err) return promise.fail(err); - promise.fulfill(); - }); + try { + sess.save( function (err) { + if (err) return promise.fail(err); + promise.fulfill(); + }); + } + catch (err) { + console.log(err); + promise.fulfill(); + } return promise; }) .sendResponse( function (res, data) { diff --git a/lib/modules/openid.js b/lib/modules/openid.js index 6f083fd8..4ceb5eab 100644 --- a/lib/modules/openid.js +++ b/lib/modules/openid.js @@ -45,6 +45,7 @@ everyModule.submodule('openid') .accepts('res') .promises(null) .sendToAuthenticationUri(function(req,res) { + var that = this; // Automatic hostname detection + assignment if (!this._myHostname || this._alwaysDetectHostname) { @@ -53,7 +54,7 @@ everyModule.submodule('openid') this.relyingParty.authenticate(req.query[this.openidURLField()], false, function(err,authenticationUrl){ if(err) return p.fail(err); - this.redirect(res, authenticationUrl); + that.redirect(res, authenticationUrl); }); }) .getSession( function(req) { diff --git a/lib/modules/runkeeper.js b/lib/modules/runkeeper.js new file mode 100644 index 00000000..895712a1 --- /dev/null +++ b/lib/modules/runkeeper.js @@ -0,0 +1,39 @@ +var oauthModule = require('./oauth2') + , request = require('request'); + +var runkeeper = module.exports = +oauthModule.submodule('runkeeper') + .configurable({ + scope: 'specify types of access: (no scope), non-expiring' + }) + .apiHost('https://api.runkeeper.com') + .oauthHost('https://runkeeper.com') + .authPath('/apps/authorize') + .accessTokenPath('/apps/token') + .entryPath('/auth/runkeeper') + .callbackPath('/auth/runkeeper/callback') + .authQueryParam('response_type', 'code') + .authQueryParam('scope', function () { + return this._scope && this.scope(); + }) + .accessTokenHttpMethod('post') + .postAccessTokenParamsVia('data') + .accessTokenParam('grant_type', 'authorization_code') + .fetchOAuthUser(function (accessToken) { + console.log("Access Token: ", accessToken); + var promise = this.Promise(); + request.get({ + url: this.apiHost() + '/user' + , headers: { + 'Authorization': 'Bearer ' + accessToken + } + }, function (err, res, body) { + if (err) return promise.fail(err); + if (parseInt(res.statusCode / 100, 10) !== 2) { + return promise.fail(body); + } + return promise.fulfill(JSON.parse(body)); + }); + + return promise; + }); diff --git a/lib/modules/smarterer.js b/lib/modules/smarterer.js new file mode 100644 index 00000000..78716faf --- /dev/null +++ b/lib/modules/smarterer.js @@ -0,0 +1,30 @@ +var oauthModule = require('./oauth2') + , querystring= require('querystring'); + +var smarterer = module.exports = +oauthModule.submodule('smarterer') + .oauthHost('https://smarterer.com') + .apiHost('https://smarterer.com') + + .entryPath('/auth/smarterer') + .callbackPath('/auth/smarterer/callback') + + .authQueryParam('callback_url', function() { + return this._myHostname + this._callbackPath; + }) + + .accessTokenParam('grant_type', 'authorization_code') + + + .fetchOAuthUser( function (accessToken) { + var p = this.Promise(); + this.oauth.get(this.apiHost() + '/api/badges', accessToken, function (err, data) { + if (err) return p.fail(err.error_message); + var oauthUser = JSON.parse(data); + p.fulfill(oauthUser); + }) + return p; + }) + .convertErr( function (data) { + return new Error(data.error_message); + }); diff --git a/lib/modules/tumblr.js b/lib/modules/tumblr.js index 52fd7ead..3793414e 100644 --- a/lib/modules/tumblr.js +++ b/lib/modules/tumblr.js @@ -1,7 +1,8 @@ var oauthModule = require('./oauth') - , Parser = require('xml2js').Parser; + , Parser = require('xml2js').Parser + , url = require('url'); -var twitter = module.exports = +var tumblr = module.exports = oauthModule.submodule('tumblr') .apiHost('http://www.tumblr.com/api') .oauthHost('http://www.tumblr.com') @@ -14,13 +15,32 @@ oauthModule.submodule('tumblr') if (err) return promise.fail(err); var parser = new Parser(); parser.on('end', function (result) { - var oauthUser = result.tumblelog['@']; + var oauthUser; + if(result.tumblelog instanceof Array){ + oauthUser = result.tumblelog[0]['@']; + } else { + oauthUser = result.tumblelog['@']; + } promise.fulfill(oauthUser); }); parser.parseString(data); }); return promise; }) + .authCallbackDidErr( function (req) { + var parsedUrl = url.parse(req.url, true); + return !parsedUrl.query || !parsedUrl.query.oauth_token; + }) + .handleAuthCallbackError( function (req, res) { + if (res.render) { + res.render(__dirname + '/../views/auth-fail.jade', { + errorDescription: 'The user denied your request' + }); + } else { + // TODO Replace this with a nice fallback + throw new Error("You must configure handleAuthCallbackError if you are not using express"); + } + }) .convertErr( function (data) { - return data.data; + return new Error(data.data); }); diff --git a/lib/modules/weibo.js b/lib/modules/weibo.js new file mode 100644 index 00000000..369b34b6 --- /dev/null +++ b/lib/modules/weibo.js @@ -0,0 +1,74 @@ +var oauthModule = require('./oauth2') + , querystring= require('querystring') + , request = require('request'); + +var weibo = module.exports = +oauthModule.submodule('weibo') + .configurable({ + scope: "There's no idea about weibo's scope" + }) + + //fetch weibo user needs userid in extra + .step('fetchOAuthUser') + .accepts('accessToken extra') + .promises('oauthUser') + + .oauthHost('https://api.weibo.com') + .apiHost('https://api.weibo.com') + + .authPath('/oauth2/authorize') + .authQueryParam('response_type', 'code') + + .accessTokenPath('/oauth2/access_token') + .accessTokenParam('grant_type', '') + .postAccessTokenParamsVia('data') + + .entryPath('/auth/weibo') + .callbackPath('/auth/weibo/callback') + + .authQueryParam('scope', function () { + return this._scope && this.scope(); + }) + + .getAccessToken( function (code) { + var p = this.Promise() + , url = this._oauthHost + this._accessTokenPath + , opts = { url: url }; + + opts.form = { + client_id: this._appId + , redirect_uri: this._myHostname + this._callbackPath + , code: code + , client_secret: this._appSecret + }; + + request.post( opts, function(err, res, body){ + var data; + if (err) { + p.fail(err); + } else { + data = JSON.parse(body); // sina weibo return a JSON with text/plain + p.fulfill(data.access_token, data); + delete data.access_token; + } + }); + return p; + }) + .fetchOAuthUser( function (accessToken, extra) { + var p = this.Promise(); + var uid = extra.uid; + var url = this.apiHost() + "/2/users/show.json?uid=" + uid; + + this.oauth.get(url, accessToken, function (err, user) { + if (err) { + p.fail(err); + }else{ + p.fulfill(JSON.parse(user)); + } + }); + + return p; + }) + .convertErr( function (err) { + return new Error(err.data ? err.data : err); + }); diff --git a/lib/modules/yahoohybrid.js b/lib/modules/yahoohybrid.js new file mode 100644 index 00000000..5655fddf --- /dev/null +++ b/lib/modules/yahoohybrid.js @@ -0,0 +1,62 @@ +var openidModule = require('./openid') + , OAuth = require('oauth').OAuth + , oid = require('openid') + , extractHostname = require('../utils').extractHostname; + +var yahoohybrid = module.exports = +openidModule.submodule('yahoohybrid') + .configurable({ + consumerKey: 'Consumer Key' + , consumerSecret: 'Consumer Secret' + }) + .definit( function () { + this.relyingParty = + new oid.RelyingParty(this._myHostname + this._callbackPath, null, false, false, [ + new oid.AttributeExchange({ + 'http://axschema.org/contact/email': 'required' + , 'http://axschema.org/namePerson/first': 'required' + , 'http://axschema.org/namePerson/last': 'required' + , 'http://axschema.org/namePerson': 'required' + }) + , new oid.OAuthHybrid({ + consumerKey: this._consumerKey + }) + ]); + + this.oauth = new OAuth( + "https://api.login.yahoo.com/oauth/v2/get_request_token" + , "https://api.login.yahoo.com/oauth/v2/get_token" + , this.consumerKey() + , this.consumerSecret() + , '1.0', null, 'HMAC-SHA1'); + }) + .verifyAttributes(function (req,res) { + var p = this.Promise() + oauth = this.oauth; + this.relyingParty.verifyAssertion(req, function (err, userAttributes) { + if(err) return p.fail(err); + oauth.getOAuthAccessToken(userAttributes['request_token'], undefined, function (err, oauthAccessToken, oauthAccessTokenSecret) { + if (err) return p.fail(err); + userAttributes['access_token'] = oauthAccessToken; + userAttributes['access_token_secret'] = oauthAccessTokenSecret; + p.fulfill(userAttributes) + }); + }); + return p; + }) + .sendToAuthenticationUri(function (req, res) { + + // Automatic hostname detection + assignment + if (!this._myHostname || this._alwaysDetectHostname) { + this.myHostname(extractHostname(req)); + } + + var self = this; + + this.relyingParty.authenticate('http://me.yahoo.com', false, function (err,authenticationUrl){ + if(err) return p.fail(err); + self.redirect(res, authenticationUrl); + }); + }) + .entryPath('/auth/yahoohybrid') + .callbackPath('/auth/yahoohybrid/callback'); diff --git a/media/meetup.ico b/media/meetup.ico new file mode 100644 index 00000000..55bc83c1 Binary files /dev/null and b/media/meetup.ico differ diff --git a/media/runkeeper.ico b/media/runkeeper.ico new file mode 100644 index 00000000..f5f98391 Binary files /dev/null and b/media/runkeeper.ico differ diff --git a/media/smarterer.ico b/media/smarterer.ico new file mode 100644 index 00000000..d676b1f3 Binary files /dev/null and b/media/smarterer.ico differ diff --git a/package.json b/package.json index 5b04f660..fc126243 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "everyauth", "description": "Auth solution (password, facebook, & more) for your node.js Connect & Express apps", - "version": "0.2.32", + "version": "0.3.0", "homepage": "https://github.com/bnoguchi/everyauth/", "repository": { "type": "git", diff --git a/test/util/expect.js b/test/util/expect.js index e9ca46f7..c18cef20 100644 --- a/test/util/expect.js +++ b/test/util/expect.js @@ -10,7 +10,7 @@ var expect = require('expect.js'); var Assertion = expect.Assertion , statusCodes = require('http').STATUS_CODES , j = function(elem){ return '[jQuery ' + i(elem.selector.replace(/^ *\* */, '')) + ']'; } - , i = require('sys').inspect; + , i = require('util').inspect; /** * Number strings.