Module: Yonder

Defined in:
lib/yonder.rb,
lib/yonder/errors.rb,
lib/yonder/session.rb,
lib/yonder/version.rb

Defined Under Namespace

Classes: AuthenticationError, Error, InvalidParamsError, NetworkError, RateLimitedError, RequestError, ResponseError, Session, TokenExpiredError, TokenInvalidError

Constant Summary collapse

BASE_URL =
"https://bsky.social"
COLLECTION_POST =
'app.bsky.feed.post'
ERROR_MAPPING =
{
  'AuthMissing' => AuthenticationError,
  'ExpiredToken' => TokenExpiredError,
  'InvalidToken' => TokenInvalidError
}
VERSION =
0.3

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.api_hostObject

Returns the value of attribute api_host.



20
21
22
# File 'lib/yonder.rb', line 20

def api_host
  @api_host
end

.sessionObject

Returns the value of attribute session.



21
22
23
# File 'lib/yonder.rb', line 21

def session
  @session
end

.user_agentObject

Returns the value of attribute user_agent.



22
23
24
# File 'lib/yonder.rb', line 22

def user_agent
  @user_agent
end

Class Method Details

.create_post(user_did:, message:) ⇒ Object



24
25
26
27
28
29
30
31
32
33
# File 'lib/yonder.rb', line 24

def create_post(user_did:, message:)
  create_record(
    user_did: user_did,
    record: {
      text: message,
      createdAt: Time.now.iso8601
    },
    collection: COLLECTION_POST
  )
end

.create_record(user_did:, record:, collection:) ⇒ Object



35
36
37
38
39
40
41
42
43
44
# File 'lib/yonder.rb', line 35

def create_record(user_did:, record:, collection:)
  post(
    endpoint: "/com.atproto.repo.createRecord",
    params: {
      repo: user_did,
      collection: collection,
      record: record
    }
  )
end

.create_session(username:, password:) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/yonder.rb', line 46

def create_session(username:, password:)
  response = post(
    endpoint: "/com.atproto.server.createSession",
    params: {
      identifier: username,
      password: password
    }
  )

  @session = Session.from_json(response)
  true
end

.get(endpoint:) ⇒ Object



69
70
71
# File 'lib/yonder.rb', line 69

def get(endpoint:)
  make_api_request(endpoint: endpoint, method: :get)
end

.post(endpoint:, params: {}, access_token: nil) ⇒ Object



73
74
75
# File 'lib/yonder.rb', line 73

def post(endpoint:, params: {}, access_token: nil)
  make_api_request(endpoint: endpoint, method: :post, params: params, access_token: access_token)
end

.refresh_sessionObject



59
60
61
62
63
64
65
66
67
# File 'lib/yonder.rb', line 59

def refresh_session
  response = post(
    endpoint: "/com.atproto.server.refreshSession",
    access_token: @session&.refresh_token
  )

  @session = Session.from_json(response)
  true
end