Atmosfire 0.0.1 → 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
  SHA256:
3
- metadata.gz: 2e059c19199525a9436b51dc419fa63dd881800b3a2bbb976350742da931a131
4
- data.tar.gz: b19e78694cf71cc16a563d0a8f7e6a863c9f216107cee4226efa1f553dd8ba57
3
+ metadata.gz: 162287999a23b418ef85804e5f3cd7c7b237545bd0e923103a4652d09c555a86
4
+ data.tar.gz: 60273f91549485a79b5feb9ebe74cf874dae08f9acf32d5ce1141425db999ca5
5
5
  SHA512:
6
- metadata.gz: f2abdb67eb28583c69ec45e6d1c8c140dd61b568060fe5dc95f74666cfb4bdb132c9c88fbcad15af46c4bb1f248a5f0a2edc28fd42231b9209909757ec765b6f
7
- data.tar.gz: 3073642340513a9c597586258dcb26c0451d085c297776730de66e35870c64b29728ddcad01b871019e9b13421712d93e2af7031b7a9c32eeab0100a232bfede
6
+ metadata.gz: 4fc45431dba36c103872cb929f67d04153cdc9850a1d39e2f99a762432d082d557988b6c1a4aca4ea070250ba304920b3fe7264f99d6edebc92d88ae6b802a32
7
+ data.tar.gz: e181db3af0bb47e2fbeb2eb10085f9a9f80686ae2f496c75e8315c400b7521b7ec448656e41011f2a219722cb844b15301feddfc6d397beff59ebab91cf154ab
@@ -8,19 +8,7 @@ module Atmosfire
8
8
  sig { params(url: String, atp_host: String).returns(T.nilable(AtUri)) }
9
9
 
10
10
  def at_uri(url, atp_host = "https://bsky.social")
11
- rulesets = [
12
- AtUriParser.create_rule(%r{^#{Regexp.escape("https://")}(bsky\.app)/profile/(.+)/post/([\w]+)$}) do |handle, collection, rkey, pds|
13
- handle.start_with?("did:") ? did = handle : did = resolve_handle(handle, pds)
14
- AtUri.new(did, "app.bsky.feed.post", rkey)
15
- end,
16
-
17
- AtUriParser.create_rule(%r{^at://(.+)/(.+)/(\w+)$}) do |handle, collection, rkey, pds|
18
- handle.start_with?("did:") ? did = handle : did = resolve_handle(handle, pds)
19
- AtUri.new(did, collection, rkey)
20
- end,
21
-
22
- ]
23
- AtUriParser.parse(url, rulesets, pds: atp_host)
11
+ AtUriParser.parse(url, AtUriParser::RuleSets, pds: atp_host)
24
12
  end
25
13
  end
26
14
  end
@@ -28,6 +16,8 @@ end
28
16
  module Atmosfire
29
17
  module AtUriParser
30
18
  extend T::Sig
19
+ include RequestUtils
20
+
31
21
  Rule = Struct.new(:pattern, :transform)
32
22
 
33
23
  sig { params(url: String, rulesets: T::Array[Rule], pds: String).returns(T.nilable(AtUri)) }
@@ -49,20 +39,24 @@ module Atmosfire
49
39
  end
50
40
  Rule.new(pattern, transform)
51
41
  end
42
+ RuleSets = [
43
+ AtUriParser.create_rule(%r{^#{Regexp.escape("https://")}(bsky\.app)/profile/(.+)/post/([\w]+)$}) do |_, handle, rkey, pds|
44
+ handle.start_with?("did:") ? did = handle : did = resolve_handle(handle, pds)
45
+ AtUri.new(repo: did, collection: "app.bsky.feed.post", rkey: rkey)
46
+ end,
47
+
48
+ AtUriParser.create_rule(%r{^at://(.+)/(.+)/(\w+)$}) do |handle, collection, rkey, pds|
49
+ handle.start_with?("did:") ? did = handle : did = resolve_handle(handle, pds)
50
+ AtUri.new(repo: did, collection: collection, rkey: rkey)
51
+ end,
52
+ ]
52
53
  end
53
54
 
54
- AtUri = Struct.new :repo, :collection, :rkey do
55
+ class AtUri < T::Struct
55
56
  extend T::Sig
56
-
57
- def initialize(*args)
58
- if args.count == 1
59
- parts = args[0].split("/")
60
- repo, collection, rkey = parts[2], parts[3], parts[4]
61
- elsif args.count == 3
62
- repo, collection, rkey = args
63
- end
64
- super(repo, collection, rkey)
65
- end
57
+ const :repo, T.any(Atmosfire::Repo, String)
58
+ const :collection, T.nilable(T.any(Atmosfire::Repo::Collection, String))
59
+ const :rkey, T.nilable(String)
66
60
 
67
61
  sig { returns(String) }
68
62
 
@@ -1,19 +1,16 @@
1
- # typed: true
1
+ # typed: strict
2
2
  module Atmosfire
3
3
  class Repo
4
- Collection = Struct.new :repo, :collection do
4
+ class Collection < T::Struct
5
5
  include RequestUtils
6
6
  extend T::Sig
7
7
 
8
- sig { params(repo: Atmosfire::Repo, lexicon_name: String).void }
9
-
10
- def initialize(repo, lexicon_name)
11
- super(repo, lexicon_name)
12
- end
8
+ const(:repo, Atmosfire::Repo)
9
+ const(:collection, String)
13
10
 
14
11
  sig { params(limit: Integer).returns(T::Array[Atmosfire::Record]) }
15
12
 
16
- def list_records(limit = 10)
13
+ def list(limit = 10)
17
14
  self.repo.pds_endpoint
18
15
  .get.com_atproto_repo_listRecords(
19
16
  repo: self.repo.did,
@@ -27,10 +24,16 @@ module Atmosfire
27
24
 
28
25
  sig { returns(String) }
29
26
 
30
- def to_s
27
+ def to_uri
31
28
  "at://#{self.repo.did}/#{self.collection}"
32
29
  end
33
30
 
31
+ sig { returns(String) }
32
+
33
+ def to_s
34
+ @collection
35
+ end
36
+
34
37
  sig { params(rkey: String).returns(T.nilable(Atmosfire::Record)) }
35
38
 
36
39
  def [](rkey)
@@ -4,24 +4,32 @@ module Atmosfire
4
4
  extend T::Sig
5
5
  class << self
6
6
  extend T::Sig
7
+ include RequestUtils
7
8
 
8
9
  sig { params(json_hash: Hash).returns(T.nilable(Atmosfire::Record)) }
9
10
 
10
11
  def from_hash(json_hash)
12
+ return nil if json_hash["value"].nil?
11
13
  timestamp = nil
12
- timestamp = Time.parse json_hash["value"]["createdAt"] if json_hash["value"]["createdAt"]
14
+ timestamp = Time.parse json_hash["value"]["createdAt"] if json_hash["value"] && json_hash["value"]["createdAt"]
13
15
  raw_content = json_hash["value"]
14
- new(AtUri.new(json_hash["uri"]), json_hash["cid"], timestamp, raw_content)
16
+ new(
17
+ at_uri(
18
+ T.must(json_hash["uri"])
19
+ ),
20
+ json_hash["cid"],
21
+ timestamp, raw_content
22
+ )
15
23
  end
16
24
 
17
25
  sig { params(uri: Atmosfire::AtUri, pds: String).returns(T.nilable(Atmosfire::Record)) }
18
26
 
19
27
  def from_uri(uri, pds = "https://bsky.social")
20
- self.from_hash XRPC::Client.new(pds).get.com_atproto_repo_getRecord(
21
- repo: uri.repo,
22
- collection: uri.collection,
28
+ from_hash(XRPC::Client.new(pds).get.com_atproto_repo_getRecord(
29
+ repo: uri.repo.to_s,
30
+ collection: "#{uri.collection}",
23
31
  rkey: uri.rkey,
24
- )
32
+ ))
25
33
  end
26
34
 
27
35
  sig { params(content_hash: Hash, session: Atmosfire::Session, rkey: T.nilable(String)).returns(T.nilable(Atmosfire::Record)) }
@@ -29,19 +37,17 @@ module Atmosfire
29
37
  def create(content_hash, session, rkey = nil)
30
38
  return nil if content_hash["$type"].nil?
31
39
  if rkey.nil?
32
- rec = from_uri(session.xrpc.post.com_atproto_repo_createRecord(
40
+ from_uri(at_uri(session.xrpc.post.com_atproto_repo_createRecord(
33
41
  repo: session.did,
34
42
  collection: content_hash["$type"],
35
43
  record: content_hash,
36
- )["uri"])
37
- return rec
38
- else rec = from_uri(session.xrpc.post.com_atproto_repo_createRecord(
44
+ )["uri"]))
45
+ else from_uri(at_uri(session.xrpc.post.com_atproto_repo_createRecord(
39
46
  repo: session.did,
40
47
  collection: content_hash["$type"],
41
48
  rkey: rkey,
42
49
  record: content_hash,
43
- )["uri"])
44
- return rec; end
50
+ )["uri"])) end
45
51
  end
46
52
  end
47
53
 
@@ -6,6 +6,11 @@ class Atmosfire::Repo
6
6
 
7
7
  sig { params(username: String, pds: String, open: T::Boolean, authenticate: T.nilable(Atmosfire::Session)).void }
8
8
 
9
+ # @param username [String] The username or DID (Decentralized Identifier) to use.
10
+ # @param pds [String] The URL of the personal data server (default: "https://bsky.social").
11
+ # @param open [Boolean] Whether to open the repository or not (default: true).
12
+ # @param authenticate [NilClass, Object] Additional authentication data (default: nil).
13
+
9
14
  def initialize(username, pds = "https://bsky.social", open: true, authenticate: nil)
10
15
  @pds = pds
11
16
  @pds_endpoint = XRPC::Client.new(pds)
@@ -24,6 +29,16 @@ class Atmosfire::Repo
24
29
  @collections = describe_repo["collections"]
25
30
  end
26
31
 
32
+ sig { returns(String) }
33
+
34
+ def to_uri
35
+ "at://#{@did}"
36
+ end
37
+
38
+ def to_s
39
+ @did
40
+ end
41
+
27
42
  sig { returns(Hash) }
28
43
 
29
44
  def describe_repo
@@ -39,7 +54,7 @@ class Atmosfire::Repo
39
54
  sig { params(collection: String).returns(Atmosfire::Repo::Collection) }
40
55
 
41
56
  def [](collection)
42
- Collection.new(self, collection)
57
+ Collection.new(repo: self, collection: collection)
43
58
  end
44
59
 
45
60
  attr_reader :did, :record_list, :pds, :pds_endpoint
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Atmosfire
2
3
  class Error < StandardError; end
3
4
 
@@ -38,10 +39,6 @@ module Atmosfire
38
39
  "#{pds}/xrpc/com.atproto.server.getSession"
39
40
  end
40
41
 
41
- def create_record_uri(pds)
42
- "#{pds}/xrpc/com.atproto.repo.createRecord"
43
- end
44
-
45
42
  def delete_record_uri(pds)
46
43
  "#{pds}/xrpc/com.atproto.repo.deleteRecord"
47
44
  end
@@ -1,7 +1,5 @@
1
1
  # typed: true
2
2
 
3
- require "atmosfire/requests"
4
-
5
3
  module Atmosfire
6
4
  Credentials = Struct.new :username, :pw, :pds do
7
5
  extend T::Sig
@@ -1,3 +1,4 @@
1
+ # typed: strict
1
2
  module Atmosfire
2
- VERSION = "0.0.1"
3
+ VERSION = "0.0.3"
3
4
  end
data/lib/atmosfire.rb CHANGED
@@ -2,8 +2,9 @@
2
2
  # frozen_string_literal: true
3
3
  require "sorbet-runtime"
4
4
  require "xrpc"
5
- require "atmosfire/at_uri"
5
+ require "atmosfire/requests"
6
6
  require "atmosfire/session"
7
7
  require "atmosfire/collection"
8
8
  require "atmosfire/repo"
9
9
  require "atmosfire/record"
10
+ require "atmosfire/at_uri"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Atmosfire
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shreyan Jain