keybase-unofficial 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6f2d8d938af84a2c3cb88ab709c7170b8b79a547
4
- data.tar.gz: ce7cdf851aabb48d774c29b2f905fb78f25169fa
3
+ metadata.gz: db0b875052bf623f798762c590f519e6143115f7
4
+ data.tar.gz: b501af569c38574f42652f2417513371b4fc2f63
5
5
  SHA512:
6
- metadata.gz: 87fc6dd1a75b25d4384cb700222a5dfd4515f770c9403de60ddd4620401aa2e990b302a1ba0b99f0b29fbe794439b8914f02fec5a38843d0bbfc03390c9d87ac
7
- data.tar.gz: 58cf490ff1a1165de3b30b7449611cce2dc1c054bbaa9647db761d89da32d72e6ebf891856039909484e70ad7a8fd8733c64a1f239f4fa35444cda74bff0da14
6
+ metadata.gz: cd0c47e547ead2245567014a587f0023014e7d251710c3be188302b0f0915fff88fd45c952d763f391d02c30ce58a29e0e24c41dc8bbb3a5a80dff0bdf98b396
7
+ data.tar.gz: c38b9d94a32786fa374de4bbef4c09cd61d9e1bb3701d7bcda497fded963b3d3daaeacaac07386bbc76f51df80cd5dcd02233e94d87be272b01fa972caa7bfea
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  keybase-unofficial
2
2
  ==================
3
3
 
4
+ [![Gem Version](https://badge.fury.io/rb/keybase-unofficial.svg)](https://badge.fury.io/rb/keybase-unofficial)
5
+
4
6
  An unofficial ruby library for Keybase and the Keybase API.
5
7
 
6
8
  Work in progress.
@@ -4,8 +4,10 @@ require_relative "keybase/user"
4
4
  require_relative "keybase/kbfs"
5
5
  require_relative "keybase/api"
6
6
 
7
+ # The primary namespace for keybase-unofficial.
7
8
  module Keybase
8
- VERSION = "0.0.2".freeze
9
+ # keybase-unofficial's current version
10
+ VERSION = "0.0.3".freeze
9
11
 
10
12
  extend Configuration
11
13
  end
@@ -4,10 +4,23 @@ require "ostruct"
4
4
  require "uri"
5
5
 
6
6
  module Keybase
7
+ # Represents (parts of) the Keybase REST API.
7
8
  class API
9
+ # The base URL for the majority of API calls.
8
10
  BASE_URL = "https://keybase.io/_/api/1.0"
9
11
 
10
12
  class << self
13
+ # Look up a user, users, or external identity.
14
+ # @param query [Hash] the request parameters
15
+ # @option query username [String] the username to look up
16
+ # @option query usernames [Array<String>] multiple usernames to look up
17
+ # @return [OpenStruct] a struct mapping of the JSON response
18
+ # @example
19
+ # Keybase::API.lookup username: "yossarian"
20
+ # Keybase::API.lookup github: "woodruffw"
21
+ # @note Any identity supported by keybase should work (e.g, `domain`,
22
+ # `hackernews`, `reddit`, `github`, etc.)
23
+ # @see https://keybase.io/docs/api/1.0/call/user/lookup
11
24
  def lookup(**query)
12
25
  if query[:usernames]
13
26
  query[:usernames] = query[:usernames].join(",")
@@ -17,21 +30,50 @@ module Keybase
17
30
  JSON.parse(response.body, object_class: OpenStruct)
18
31
  end
19
32
 
33
+ # Search Keybase for identity components.
34
+ # @param query [String] the string to search for
35
+ # @return [OpenStruct] a struct mapping of the JSON response
36
+ # @example
37
+ # Keybase::API.autocomplete "William Woodruff"
38
+ # @see https://keybase.io/docs/api/1.0/call/user/autocomplete
20
39
  def autocomplete(query)
21
40
  response = Faraday.get "#{BASE_URL}/user/autocomplete.json", q: query
22
41
  JSON.parse(response.body, object_class: OpenStruct)
23
42
  end
24
43
 
44
+ # Discover Keybase users from external identities.
45
+ # @param query [Hash] the request parameters
46
+ # @option query flatten [Boolean] whether or not to remove duplicates
47
+ # @option query usernames_only [Boolean] whether or not to reply with
48
+ # only names
49
+ # @return [OpenStruct] a struct mapping of the JSON response
50
+ # @example
51
+ # Keybase::API.discover github: "woodruffw", flatten: true
52
+ # @note Any identity supported by keybase should work (e.g, `domain`,
53
+ # `hackernews`, `reddit`, `github`, etc.)
54
+ # @see https://keybase.io/docs/api/1.0/call/user/discover
25
55
  def discover(**query)
26
56
  response = Faraday.get "#{BASE_URL}/user/discover.json", query
27
57
  JSON.parse(response.body, object_class: OpenStruct)
28
58
  end
29
59
 
60
+ # Retrieve the current site-wide Merkle root hash.
61
+ # @param query [Hash] the request parameters
62
+ # @option query seqno [Integer] a specific Merkle root to return, if found
63
+ # @option query ctime [Integer] return the first root on or after the
64
+ # given time (UTC)
65
+ # @return [OpenStruct] a struct mapping of the JSON response
66
+ # @see https://keybase.io/docs/api/1.0/call/merkle/root
30
67
  def merkle_root(**query)
31
68
  response = Faraday.get "#{BASE_URL}/merkle/root.json", query
32
69
  JSON.parse(response.body, object_class: OpenStruct)
33
70
  end
34
71
 
72
+ # Retrieve a Merkle node corresponding to a given hash.
73
+ # @param query [Hash] the request parameters
74
+ # @option query hash [String] the hash of the block to look up
75
+ # @return [OpenStruct] a struct mapping of the JSON response
76
+ # @see https://keybase.io/docs/api/1.0/call/merkle/block
35
77
  def merkle_block(**query)
36
78
  response = Faraday.get "#{BASE_URL}/merkle/block.json", query
37
79
  JSON.parse(response.body, object_class: OpenStruct)
@@ -1,29 +1,38 @@
1
1
  require "json"
2
2
 
3
3
  module Keybase
4
+ # Methods and constants related to a local Keybase installation.
4
5
  module Configuration
6
+ # The Keybase configuration directory.
5
7
  CONFIG_DIR = File.expand_path("~/.config/keybase").freeze
6
8
 
9
+ # The Keybase configuration file.
7
10
  CONFIG_FILE = File.join(CONFIG_DIR, "config.json").freeze
8
11
 
12
+ # The hash from Keybase's configuration file.
9
13
  CONFIG_HASH = JSON.parse(File.read(CONFIG_FILE)).freeze
10
14
 
15
+ # @return [String] the currently logged-in user
11
16
  def current_user
12
17
  CONFIG_HASH["current_user"]
13
18
  end
14
19
 
20
+ # @return [Array<Keybase::User>] a list of all local users known to Keybase
15
21
  def users
16
22
  CONFIG_HASH["users"].map { |_, v| Keybase::User.new(v) }
17
23
  end
18
24
 
25
+ # @return [String] the user's private KBFS directory
19
26
  def private_dir
20
27
  "/keybase/private/#{current_user}"
21
28
  end
22
29
 
30
+ # @return [String] the user's public KBFS directory
23
31
  def public_dir
24
32
  "/keybase/public/#{current_user}"
25
33
  end
26
34
 
35
+ # @return [Boolean] whether or not Keybase is currently running
27
36
  def running?
28
37
  # is there a more efficient way to do this that doesn't involve an exec?
29
38
  Dir["/proc/[0-9]*/comm"].any? do |comm|
@@ -31,6 +40,8 @@ module Keybase
31
40
  end
32
41
  end
33
42
 
43
+ # @return [String] the running Keybase's version string
44
+ # @raise [KeybaseNotRunningError] if Keybase is not running
34
45
  def running_version
35
46
  raise KeybaseNotRunningError unless Keybase.running?
36
47
  `keybase --version`.split[2]
@@ -1,13 +1,16 @@
1
1
  module Keybase
2
+ # A top-level exception for the library.
2
3
  class KeybaseError < RuntimeError
3
4
  end
4
5
 
6
+ # Raised whenever Keybase is not running locally.
5
7
  class KeybaseNotRunningError < KeybaseError
6
8
  def initialize
7
9
  super "keybase needs to be running"
8
10
  end
9
11
  end
10
12
 
13
+ # Raised whenever KBFS is not running locally.
11
14
  class KBFSNotRunningError < KeybaseError
12
15
  def initialize
13
16
  super "KBFS needs to be enabled and running"
@@ -1,5 +1,9 @@
1
1
  module Keybase
2
+ # Represents the Keybase filesystem.
3
+ # @note This is just a stub for the time being.
2
4
  class KBFS
5
+ # @raise [KeybaseNotRunningError] unless Keybase is running
6
+ # @raise [KBFSNotRunningError] unless KBFS is running
3
7
  def initialize
4
8
  raise KeybaseNotRunningError unless Keybase.running?
5
9
  raise KBFSNotRunningError unless Dir.exist?("/keybase")
@@ -1,6 +1,19 @@
1
1
  module Keybase
2
+ # Represents a user known to the local Keybase process.
3
+ # These are (presumably) users that have been logged into locally.
2
4
  class User
3
- attr_reader :device, :id, :name, :salt
5
+ # @return [String] the device's unique identifier
6
+ attr_reader :device
7
+
8
+ # @return [String] the user's unique identifier
9
+ attr_reader :id
10
+
11
+ # @return [String] the user's Keybase username
12
+ attr_reader :name
13
+
14
+ # @return [String] some kind of salt
15
+ # @note I have no idea what this field does.
16
+ attr_reader :salt
4
17
 
5
18
  def initialize(hsh)
6
19
  @device = hsh["device"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: keybase-unofficial
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Woodruff
@@ -14,14 +14,14 @@ dependencies:
14
14
  name: faraday
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  description: A unofficial library for Keybase