yonder 0.1 → 0.2

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
  SHA256:
3
- metadata.gz: 7d2f1e9e39e76d3943e13103c9fc57bab664b1eafdd5ff88f94c1b41c0ce1cbb
4
- data.tar.gz: 0c456c5e04016b65018ac80c4d88727576a170c59fd8e9a7510f10ea0c8366da
3
+ metadata.gz: cab3d792b4319fb93f505b1d689b3b873487f484e9ee1c1de2ca902644b45349
4
+ data.tar.gz: acd3ffb29382b246035e6410eafb5d344a467b0ce02e2ce7972842a38527b9e5
5
5
  SHA512:
6
- metadata.gz: 8921c8b1951f18dcb21578adcf87259525efe9e02b64c9fe8d9f9208bea9d59105372d4ea0ef18434ee82fd4114f7b14f1ed661da33129ddf1f512c405ebcaa7
7
- data.tar.gz: 878ee56b10802b4bc3b23b76313b06c0b1916b96809ab03162abf9624f376e486139db3b2c9920fe238a5d01f5b1fe2a5c07da43d3d0cc65c32ea6e3c1c98858
6
+ metadata.gz: db13171aee0b173178588517ce6edd291c18f01c510627cc856611eb01287ff7658fbd8c76bbf50673520903e2549ff63c241c270708ea29dafa84647752668a
7
+ data.tar.gz: 607c672ad910130a580e5f92a5f62fe7469d5bc3db4d19305ed42ed6ffa7894662d353343ba96f65e0e80f4e9a8728dc7979d897a861b222b46cc7976b4e2927
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Yonder
4
+ class Error < StandardError; end
5
+
6
+ class NetworkError < Error; end
7
+ class RequestError < Error; end
8
+ class InvalidParamsError < RequestError; end
9
+ class RateLimitedError < RequestError; end
10
+ class AuthenticationError < RequestError; end
11
+ class TokenInvalidError < AuthenticationError; end
12
+ class TokenExpiredError < AuthenticationError; end
13
+ class ResponseError < Error; end
14
+ end
@@ -1,3 +1,3 @@
1
1
  module Yonder
2
- VERSION = 0.1
2
+ VERSION = 0.2
3
3
  end
data/lib/yonder.rb CHANGED
@@ -4,15 +4,34 @@ $LOAD_PATH.unshift(__dir__)
4
4
 
5
5
  require 'httpx'
6
6
  require 'yonder/version'
7
+ require 'yonder/errors'
7
8
 
8
9
  module Yonder
9
10
  class << self
10
11
  BASE_URL = "https://bsky.social"
11
-
12
+ COLLECTION_POST = 'app.bsky.feed.post'
13
+ ERROR_MAPPING = {
14
+ 'AuthMissing' => AuthenticationError,
15
+ 'ExpiredToken' => TokenExpiredError,
16
+ 'InvalidToken' => TokenInvalidError
17
+ }
18
+
19
+ attr_accessor :api_host
12
20
  attr_accessor :access_token
13
21
  attr_accessor :refresh_token
14
22
 
15
- def create_record(user_did:, record:, collection: 'app.bsky.feed.post')
23
+ def create_post(user_did:, message:)
24
+ create_record(
25
+ user_did: user_did,
26
+ record: {
27
+ text: message,
28
+ createdAt: Time.now.iso8601
29
+ },
30
+ collection: COLLECTION_POST
31
+ )
32
+ end
33
+
34
+ def create_record(user_did:, record:, collection:)
16
35
  post("/com.atproto.repo.createRecord", params: {
17
36
  repo: user_did,
18
37
  collection: collection,
@@ -46,12 +65,17 @@ module Yonder
46
65
 
47
66
  response.raise_for_status
48
67
  response.json
68
+ rescue HTTPX::TimeoutError, HTTPX::ResolveError => e
69
+ raise Yonder::RequestError.new(e.message)
70
+ rescue HTTPX::HTTPError => e
71
+ klass = ERROR_MAPPING.dig(e.response.json['error']) || NetworkError
72
+ raise klass.new(e.response.json['message'])
49
73
  end
50
74
 
51
75
  def http_client
52
76
  client = HTTPX.with(
53
- origin: BASE_URL,
54
- headers: api_headers,
77
+ origin: @api_host || BASE_URL,
78
+ headers: { "user-agent": @user_agent || "yonder v#{Yonder::VERSION}" },
55
79
  base_path: '/xrpc'
56
80
  ).plugin(:auth)
57
81
 
@@ -59,11 +83,5 @@ module Yonder
59
83
 
60
84
  client.bearer_auth(@access_token)
61
85
  end
62
-
63
- def api_headers
64
- {
65
- "user-agent": @user_agent || "yonder v#{Yonder::VERSION}"
66
- }
67
- end
68
86
  end
69
87
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yonder
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
4
+ version: '0.2'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Bogan
@@ -31,6 +31,7 @@ extensions: []
31
31
  extra_rdoc_files: []
32
32
  files:
33
33
  - lib/yonder.rb
34
+ - lib/yonder/errors.rb
34
35
  - lib/yonder/version.rb
35
36
  homepage: http://github.com/waferbaby/yonder
36
37
  licenses: