npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

node-keybase

v0.0.5

Published

Keybase.io library for node.js

Downloads

8

Readme

#node-keybase

Keybase.io api library for Node.js

#Usage

node-keybase is just a 1-for-1 mapping to the Keybase API

##constructor

node-keybase can be initialized with a username/email and passphrase for authentication or it can be passed in later login.

var Keybase = require('node-keybase')
  , keybase = new Keybase(/* username_or_email, passphrase */)

signup

docs

Signup through the api. (currently requires an invitation code)

keybase.signup({
  name: "Lol",
  username: "lollerblades",
  email: "[email protected]",
  passphrase: "keep it secret keep it safe",
  invitation_id: "342128cecb14dbe6af0fab0d"
}, function(err, result) {})

Example Output

{
  "status": {
      "code": 0
  },
  "csrf_token": "lgHZIDFjZmY0Nzlj..."  
}

getsalt

docs

getsalt can have the username/email passed in or use the username/email that was passed in during initialization.

keybase.getsalt(/* USERNAME_OR_EMAIL, */ function(err, result) {})

Example Output

{
  "status": {
    "code": 0,
    "name": "OK"
  },
  "salt": "32355c2e7843513463263...",
  "csrf_token": "lgHZIDAxNzM1NzR...",
  "login_session": "lgHZIDhlY2I0..."
}

login

docs

login can have the username/email and passphrase passed in or use the values passed in during initialization.

keybase.login(/* USERNAME_OR_EMAIL, PASSPHRASE, */ function(err, result) {})

Example Output

{
"status": {
  "code": 0,
  "name": "OK"
},
 "session": "lgHZIDU1YzA3OWJmNWYx...",
 "me":      "/* {user object} */"
}

user/lookup

docs

You can look up users by usernames, domain, twitter, github, or key_fingerprint.

You can also specify which fields of the user objects you want in the result by specifying them in the fields option.

keybase.user_lookup({
  usernames: ['max'],
  domain: ['keybase.io'],
  twitter: ['maxtaco'],
  key_fingerprint: ['94aa3a5bdbd40ea549cabaf9fbc07d6a97016cb3']
  fields: ['basics']
}, function(err, result) {})

Example Output

// note that `them` is an array because certain lookups
// such as `domain` and `usernames` (which itself can be a list)
// can produce multiple results
{
  "status": {
    "code": 0,
    "name": "OK"
  },
  "them": [{
    "id": "9a2c8a8ac48162723c7992570c87da00",
    "basics": {
      "username": "maxtaco",
      "ctime": 1399919269,
      "mtime": 1399919269,
      "id_version": 5,
      "track_version": 1,
      "last_id_change": 1399919279
    },
    "pictures": {
      "primary": {
        "url": "https://s3.amazonaws.com/ke..._square_200.png",
        "width": 200,
        "height": 200
      }
    },
    "public_keys": {
      "primary": {
        "key_fingerprint": "e53878dbb0e644cff5f10e20fa9930221099dd13",
        "kid": "0101995d003...",
        "key_type": 1,
        "bundle": "-----BEGIN PGP PUBLIC KEY.../*cropped for display*/",
        "mtime": 1400074240,
        "ctime": 1400074240,
        "ukbid": "4f8bc40c19626b015308fcb9ef8c5811",
      }
    }
  }],
  "csrf_token": "lgHZIDQ1NTU0ODE3NzY5ZmM5N..."
}

user/autocomplete

docs

Fuzzy search for users

keybase.user_autocomplete('max',  function(err, result){
})

Example Output

{
  "status": {
    "code": 0,
    "name": "OK"
  },
  "completions": [
    {
      "total_score": 2,
      "components": {
        "username": {
          "val": "max",
          "score": 0
        },
        "key_fingerprint": {
          "val": "937b2cf047755301683ee3cfe19e4459d269c142",
          "score": 0
        },
        "full_name": {
          "val": "Max Krohn",
          "score": 0
        },
        "github": {
          "val": "maxtaco",
          "score": 1
        },
        "twitter": {
          "val": "maxtaco",
          "score": 1
        },
        "websites": [
          {
            "val": "oneshallpass.com",
            "score": 0,
            "protocol": "https:"
          },
          {
            "val": "keybase.io",
            "score": 0,
            "protocol": "https:"
          },
          {
            "val": "oneshallpass.com",
            "score": 0,
            "protocol": "dns"
          },
          {
            "val": "maxk.org",
            "score": 0,
            "protocol": "dns"
          }
        ]
      },
      "uid": "dbb165b7879fe7b1174df73bed0b9500",
      "thumbnail": "https://s3.amazonaws.com/key...f.jpeg",
      "is_followee": true
    }
  ],
  "csrf_token": "lgHZIDIzMjYwYzJjZTE5NDIwZjk3YjU4..."
}

<user>/key.asc

docs

Get the Public Key for a Keybase user

keybase.public_key_for_username('max', function(err, result){
})

Example Output

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG/MacGPG2 v2.0.22 (Darwin)
Comment: GPGTools - https://gpgtools.org

mQINBFJS084BEADG1jpg0YCEakf3VPbQTB8Sgthxh/SlisDcSsIqM33gjINJmWYz
6l8YbLRRfr0bNB1KSiEdCBbbx1eUZ6qlhbE+xXmpnxNkD3pauVyo5KMWMaDVgpDP
HcKH0hSiNmvR+DiOjn9dCQorx1rkB6NHkdKsVaEGPgdDuHTmQM9nRNw5/vTuyHkq
DBCFmYHsouCCDxBsEf0IQmIGabU3d8JWWnWbW1L1f9t/raaO9BIRv8WovsvJKGzw
PU5Qz9g0TQ3edl+tCPXEjj6RYOwGqy3d1LS73mRNTlCuOhwkvOMsfvKH5bwByeM4
60Ib/ZtKfpgop77ZTFyIPcP/YiToe5v2ts4Quwb8wy5akYr1aB4xzN/HucnJ8QGi
HYGNTCpyIIYHaomS4nAqnMhs4UWBE2WF/2rWKCTvWtd3m6jBUgcsP9eazJgUmgKj
hBEz9bsfcLPSH9lnfcj00AgEW8EF9bBNMAYc/BX4hAk0RRhh/dBf9ow4kRZBqgR/
c/f5nyOmCvQK7km5dz9jmMvMBIQZ4cqJP4NrEdRQh/xzio1wk40PKziZQwBlx1mS
iNPRgkeclwCaumxds9671gyHQjEGa7moPHfe/6zvduZ28yzbhq8ydZkfpq6YUrc8
GRtP/isXqlhSJ0dpsYA5njnIJE0GuhkNAYw7PUsLxQH0KP8Obu2ahnnu9wARAQAB
tCJDaHJpcyBDb3luZSA8Y2hyaXNAY2hyaXNjb3luZS5jb20+iQI+BBMBAgAoBQJS
UtPOAhsvBQkHhh+ABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRD7wH1qlwFs
s6M7D/9UayLmZoIkNY266Wnl6wu5lcpxJ+c7v5/+VQEEmpI++D8HMURiHU+MXVFX
HxQEUm5KcoFDX81hl+G4KKlQlpcnX7QkkF7ZT9FFQj5SeKPkNmQxsqNhQNdfIboT
WcNmrQHcQu/EJRjFdWHpD5wKDFwIrsTNAiVzwMIue69MgDuw3xXJiF2xjM9GvWlI
CPiiOPTWoYCjhR3g0eYqyUTAuSfEkExDarKciBzOjGbOsUz5SjSqOu3GKQDAYhXd
UZ3VVEz+B5kxvggqs8WXo86vzYI1OvGO2N61JysQpnE6dtMmKKh91YYKoEKPY4iz
xSEssQLlCFJMU73eotlgqOwbsjsD/XoWCUvRKzAf4MuL3wsJcc5cdY6wk08GWk71
/Qm74jiAxqSGH/5znmPYfTCzvxcxm4Me9zEbRSmaZscDiZluaImJHErDNXH4CxPl
orP8yaEbTuqDVuJx5DEjnWemCVbN3u1U2FCjxloeV5aOdH3jhlMrCY5mO6rw8Vh/
DI1zro3A7/PJ+tCsj3luJwhthD4TLmZlQqeAqaZ6gNinVGNwSeQT9num0DBUPBtQ
ky44+lS810RL54YxfZ1fMaLCNdVDXaepuCbyusHSBA0Cq1tNioFai1eT
=MqTh
-----END PGP PUBLIC KEY BLOCK-----

key/add

NOTICE: Does not support private keys yet

docs

Add a public/private key. See docs for acceptable key formats and order of uploading.

keybase.key_add({
  public_key: PUBLIC_KEY,
  private_key: PRIVATE_KEY,
  is_primary: true //set as primary key
}, function(err, result){})

Example Output

{
  "status": {
    "code": 0,
    "name": "OK"
  },
  "kid":            "0101d9d962be6ee38cdadedd6...",
  "csrf_token":     "lgHZIDU1YzA3OWJmNWYxNjUwZ...",
  "is_primary":     true
}

key/fetch

docs

Fetch a public/private key. See docs for more info.

keybase.key_fetch({pgp_key_ids: ['6052b2ad31a6631c', '980A3F0D01FE04DF'], ops: 1}, function(err, result){})

Example Output

{
  "status": {
    "code": 0,
    "name": "OK"
  },
  "keys": [
    {
      "bundle": "-----BEGIN PGP PUBLIC KEY BLOCK----- ..."
      "uid": "dbb165b7879fe7b1174df73bed0b9500",
      "username": "max",
      "key_type": 1,
      "kid": "01013ef90b4c4e62121d12a51d18569b57996002c8bdccc9b2740935c9e4a07d20b40a",
      "self_signed": 1,
      "primary_bundle_in_keyring": 1,
      "self_sign_type": 1,
      "subkeys": {
        "6052b2ad31a6631c": {
          "flags": 47,
          "is_primary": 1
        },
        "980a3f0d01fe04df": {
          "flags": 46,
          "is_primary": 0
        }
      },
      "secret": 0
    }
  ]
}

key/revoke

docs

Revoke a public/private key. if no kid is specified the primary key is revoked.

keybase.key_revoke(/* {kid: KEY_ID}, */ function(err, result){})

Example Output

{
  "status": {
    "code": 0,
    "name": "OK"
  },
  "csrf_token": "lgHZIDU1YzA3OWJmNWYxNjUwZ..."
}

session/killall

docs

Kill all active sessions for user.

keybase.session_killall(function(err, result){})

Example Output

{
  "status": {
    "code": 0,
    "name": "OK"
  },
  "csrf_token": "lgHZIDU1YzA3OWJmNWYxNjUwZ..."
}

sig/next_seqno

docs

Get the next sequence number in the user's signature chain, returning also the hash of the previous block.

keybase.sig_next_seqno(function(err, result){})

Example Output

{
  "status": {
    "code": 0,
    "name": "OK"
  },
  "prev":       "c450220f5235fcb646a66dfb4225dd65...",
  "seqno": 2,
  "csrf_token": "lgHZIDVhMjYwOTQ3OTM5OGNhODljYzRh..."
}

sig/post

docs

Not implemented

Example Output

{
   "status" : {
      "code" : 0,
      "name" : "OK"
   },
  "proof_text": "Verifying myself: I am maxtaco on Key...",
  "sig_id": "2232c5e872bce853606daae410ea3516999539c79...",
  "proof_id": "24be5e265b1ff1be02a70310",
  "payload_hash": "c450220f5235fcb646a66dfb4225dd65334...",
  "csrf_token": "lgHZIDVhMjYwOTQ3OTM5OGNhODljYzRhNzQ1M..."
}

sig/post_auth

docs

Not implemented

Example Output

{
  "status": {
    "code": 0,
    "name": "OK"
  }
  "auth_token" : "fd2667b9b396150603ea0b567eaf3334c3..."
}

merkle/root

docs

Not implemented

Example Output

{
  "status": {
    "code": 0,
    "name": "OK"
  },
  "hash": "803b4d2024952280c1cc10f408596951b5d23e...",
  "seqno": 1052,
  "ctime_string": "2014-04-27T12:46:05.000Z",
  "ctime": 1398602765,
  "sig": "-----BEGIN PGP MESSAGE-----
Version: GnuPG...",
  "payload_json": "{"body":{"key":{"fingerprint":"03...",
  "txid": "49fde49b575382954b42920d91057915"
}

merkle/block

docs

Not implemented

Example Output

{
  "status": {
    "code": 0,
    "name": "OK"
  },
  "hash": "c9e6dd2ead7218258fffa150b...",
  "value": {
    "tab": {
      "00": "d70b05a791acae2c6072d5bf3086b26...",
      "01": "92a4ff6f918d257f06f1eb5c296d86e...",
      "02": "2a7d1e7e3cafed7146eebf0d60c0d05...",
      "03": "12e4e169bcbe0a42500677902a95c95...",
      "04": "6e57ba5f779aa825762d1da47de4879...",
      "05": "02ad26b594b431b0bd331781065350d...",
      "06": "119e58ac656977c5d2edc296d5ca17c...",
      "07": "cc2e1ae9a976a5fc824a258d4c006ab...",
      ...
    },
    "type": 1
  },
  "value_string": "{\"tab\":{\"00\":\"d70b05a...\"}"
  "ctime": "2014-04-23T21:29:33.000Z",
  "type": 1
}