Module: Atmosfire::RequestUtils

Extended by:
T::Sig
Includes:
Kernel
Included in:
AtUriParser, Record, Repo, Atmosfire::Repo::Collection, Session
Defined in:
lib/atmosfire/requests.rb,
lib/atmosfire/at_uri.rb

Overview

Goal is to replace with pure XRPC eventually

Instance Method Summary collapse

Instance Method Details

#at_uri(url, atp_host = "https://bsky.social") ⇒ Object



10
11
12
# File 'lib/atmosfire/at_uri.rb', line 10

def at_uri(url, atp_host = "https://bsky.social")
  AtUriParser.parse(url, AtUriParser::RuleSets, pds: atp_host)
end

#create_session_uri(pds) ⇒ Object



28
29
30
# File 'lib/atmosfire/requests.rb', line 28

def create_session_uri(pds)
  "#{pds}/xrpc/com.atproto.server.createSession"
end

#default_authenticated_headers(session) ⇒ Object



60
61
62
63
64
# File 'lib/atmosfire/requests.rb', line 60

def default_authenticated_headers(session)
  default_headers.merge({
    Authorization: "Bearer #{session.access_token}",
  })
end

#default_headersObject



24
25
26
# File 'lib/atmosfire/requests.rb', line 24

def default_headers
  { "Content-Type" => "application/json" }
end

#delete_record_uri(pds) ⇒ Object



44
45
46
# File 'lib/atmosfire/requests.rb', line 44

def delete_record_uri(pds)
  "#{pds}/xrpc/com.atproto.repo.deleteRecord"
end

#delete_session_uri(pds) ⇒ Object



32
33
34
# File 'lib/atmosfire/requests.rb', line 32

def delete_session_uri(pds)
  "#{pds}/xrpc/com.atproto.server.deleteSession"
end

#get_paginated_data(session, method, key:, params:, cursor: nil, &map_block) ⇒ Object



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/atmosfire/requests.rb', line 89

def get_paginated_data(session, method, key:, params:, cursor: nil, &map_block)
  (send_data = (params.merge({ :limit => 100, :cursor => cursor })))
  response = session.xrpc.get.public_send(method, **send_data)
  data = response.dig(key)

  if data.nil? || data.empty?
    return []
  end

  results = block_given? ? data.map(&map_block) : data
  next_cursor = T.let(response.dig("cursor"), T.nilable(String))

  if next_cursor.nil?
    return results
  else
    return results + get_paginated_data(session, method, key: key, params: params, cursor: next_cursor, &map_block)
  end
end

#get_post_thread_uri(pds, query) ⇒ Object



56
57
58
# File 'lib/atmosfire/requests.rb', line 56

def get_post_thread_uri(pds, query)
  "#{pds}/xrpc/app.bsky.feed.getPostThread#{query_obj_to_query_params(query)}"
end

#get_session_uri(pds) ⇒ Object



40
41
42
# File 'lib/atmosfire/requests.rb', line 40

def get_session_uri(pds)
  "#{pds}/xrpc/com.atproto.server.getSession"
end

#mute_actor_uri(pds) ⇒ Object



48
49
50
# File 'lib/atmosfire/requests.rb', line 48

def mute_actor_uri(pds)
  "#{pds}/xrpc/app.bsky.graph.muteActor"
end

#query_obj_to_query_params(q) ⇒ Object



16
17
18
19
20
21
22
# File 'lib/atmosfire/requests.rb', line 16

def query_obj_to_query_params(q)
  out = "?"
  q.to_h.each do |key, value|
    out += "#{key}=#{value}&" unless value.nil? || (value.class.method_defined?(:empty?) && value.empty?)
  end
  out.slice(0...-1)
end

#refresh_session_uri(pds) ⇒ Object



36
37
38
# File 'lib/atmosfire/requests.rb', line 36

def refresh_session_uri(pds)
  "#{pds}/xrpc/com.atproto.server.refreshSession"
end

#refresh_token_headers(session) ⇒ Object



66
67
68
69
70
# File 'lib/atmosfire/requests.rb', line 66

def refresh_token_headers(session)
  default_headers.merge({
    Authorization: "Bearer #{session.refresh_token}",
  })
end

#resolve_handle(username, pds = "https://bsky.social") ⇒ Object



12
13
14
# File 'lib/atmosfire/requests.rb', line 12

def resolve_handle(username, pds = "https://bsky.social")
  (XRPC::Client.new(pds).get.com_atproto_identity_resolveHandle(handle: username))["did"]
end

#upload_blob_uri(pds) ⇒ Object



52
53
54
# File 'lib/atmosfire/requests.rb', line 52

def upload_blob_uri(pds)
  "#{pds}/xrpc/com.atproto.repo.uploadBlob"
end