distributed-press-api-client 0.5.0 → 0.5.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: 99b6cf4b078aa2942ff5cfe6a4dc016d2ad25ea8494058cf65ce54296b854f06
4
- data.tar.gz: 6756613bc840361701d02b0995e1fd332408019f28f47a0cb64f9666620638eb
3
+ metadata.gz: d71c7df8ef3f10c5fee3bd932097b5d9732b7b3e6312ae8cd878bfacad8844eb
4
+ data.tar.gz: 19a8185a16426d751bf1ab65d2a6cc2a275da0462c35941ce36b298068f955a5
5
5
  SHA512:
6
- metadata.gz: ad7dc270c799ac8fdc4dd895d84b99cf46e0e99d66d6a4e6ee447935f69af3ce6aa5cb88a4923e41e2b26e0246d9f2b3ba94c28399c8b44976b326b314874c82
7
- data.tar.gz: d58c00c34eb85ffa85e36be7abf4ae5d889225fa4450ff4ee7b7fc768d417bdbf5d7768a25eeb19d7b3a121716a5103678b80c39dd69e922181fd47d8209a685
6
+ metadata.gz: 38fd044e662c670f844beffdf23647e0d14fc84470640f6ccf9d62444fa9952d8910f3add265b4ea65602ae12446dc76bb004f8267a0a2bae0ee2f4d7eb4549a
7
+ data.tar.gz: 10247775f6f326eabbcbf472c88f040f80e6202c57bf6e4aa1a50b7eda5d0224df49e0c8139fb2c2ad3ad7b1a9504358ef413b8434aeb7e2c5ef419b4f2fbd64
checksums.yaml.gz.sig ADDED
Binary file
@@ -35,6 +35,8 @@ class DistributedPress
35
35
  class Error < StandardError; end
36
36
  class ContentTooLargeError < Error; end
37
37
  class BrotliUnsupportedError < Error; end
38
+ class ActivityIdTooLargeError < Error; end
39
+ class EmptyResponseError < Error; end
38
40
 
39
41
  # Always cache
40
42
  caching true
@@ -43,9 +43,6 @@ class DistributedPress
43
43
  next unless object.key?(attribute)
44
44
  throw :total_items_reached if object['id'] && object['id'] == referenced[attribute]['id']
45
45
 
46
- require 'pry'
47
- binding.pry
48
-
49
46
  referenced[attribute].each(&block).each do |item|
50
47
  counter += 1
51
48
  enum << item
@@ -51,9 +51,13 @@ class DistributedPress
51
51
  # @param :uri [String, Addressable::URI]
52
52
  # @return [HTTParty::Response]
53
53
  def get(uri:)
54
+ original_uri = uri
54
55
  response = nil
56
+ counter = 0
55
57
 
56
58
  loop do
59
+ break if counter > 3
60
+
57
61
  uri = uris(uri)
58
62
  client = clients(uri)
59
63
  response = client.get(endpoint: uri.request_uri, parser: @parser)
@@ -75,12 +79,16 @@ class DistributedPress
75
79
  break if link.nil?
76
80
  break if link['href'].nil?
77
81
  break if link['href'].empty?
82
+ break if link['href'] == uri
78
83
 
79
84
  # Start loop again with the new URI
85
+ counter += 1
80
86
  uri = link['href']
81
87
  end
82
88
 
83
- response
89
+ response.tap do |r|
90
+ raise(client.class::EmptyResponseError, original_uri) unless r
91
+ end
84
92
  end
85
93
 
86
94
  # Gets a client for a URI
@@ -38,7 +38,16 @@ class DistributedPress
38
38
  #
39
39
  # @return [String]
40
40
  def endpoint
41
- @endpoint ||= "/v1/#{actor}/inbox/likes/#{Base64.encode64(activity).delete("\n")}"
41
+ @endpoint ||=
42
+ begin
43
+ encoded_id = Base64.encode64(activity).delete("\n")
44
+
45
+ if encoded_id.size > 256
46
+ raise DistributedPress::V1::Social::Client::ActivityIdTooLargeError.new("Base64 encoding too large (256 char limit): #{activity}")
47
+ end
48
+
49
+ "/v1/#{actor}/inbox/likes/#{encoded_id}"
50
+ end
42
51
  end
43
52
  end
44
53
  end
@@ -44,32 +44,11 @@ class DistributedPress
44
44
  @object ||= dereferencer.get(uri: uri)
45
45
  end
46
46
 
47
- # Is this a public post?
48
- #
49
- # @return [Bool]
50
- def public?
51
- [slice(*%w[audience to]).values].flatten.include? PUBLIC
52
- end
53
-
54
- # Is it unlisted?
55
- #
56
- # @return [Bool]
57
- def unlisted?
58
- [self['cc']].flatten.include? PUBLIC
59
- end
60
-
61
- # It's not publicly available
62
- #
63
- # @return [Bool]
64
- def private?
65
- !public? && !unlisted?
66
- end
67
-
68
47
  def inspect
69
48
  "#{self.class.name}(#{uri})"
70
49
  end
71
50
 
72
- def_delegators :object, :[], :dig, :to_h, :to_json, :slice, :key?, :keys, :each
51
+ def_delegators :object, :[], :dig, :to_h, :to_json, :slice, :key?, :keys, :each, :public?, :unlisted?, :private?
73
52
  end
74
53
  end
75
54
  end
@@ -9,6 +9,11 @@ class DistributedPress
9
9
  class ReferencedObject
10
10
  extend Forwardable
11
11
 
12
+ # Public addressing doesn't lead to an activity
13
+ #
14
+ # @return [String]
15
+ PUBLIC = 'https://www.w3.org/ns/activitystreams#Public'
16
+
12
17
  # Mastodon hides self-replies
13
18
  URI_FIXES = %r{&?only_other_accounts=true&?}
14
19
  REFERENTIABLE_ATTRIBUTES =
@@ -48,7 +53,7 @@ class DistributedPress
48
53
  attr_reader :dereferencer
49
54
  attr_reader :referenced
50
55
 
51
- def_delegators :referenced, :[], :dig, :to_h, :to_json, :keys, :key?
56
+ def_delegators :referenced, :[], :dig, :to_h, :to_json, :keys, :key?, :slice
52
57
 
53
58
  def initialize(object:, dereferencer:, referenced: nil)
54
59
  @object = object
@@ -56,6 +61,30 @@ class DistributedPress
56
61
  @referenced = referenced || reference_object(object)
57
62
  end
58
63
 
64
+ # Is this a public post? A post is public when it's addressed to
65
+ # the public or doesn't have a recipient (like Like)
66
+ #
67
+ # @return [Bool]
68
+ def public?
69
+ recipients = [slice(*%w[audience to]).values].flatten
70
+
71
+ recipients.empty? || recipients.include?(PUBLIC)
72
+ end
73
+
74
+ # Is it unlisted?
75
+ #
76
+ # @return [Bool]
77
+ def unlisted?
78
+ [self['cc']].flatten.include? PUBLIC
79
+ end
80
+
81
+ # It's not publicly available
82
+ #
83
+ # @return [Bool]
84
+ def private?
85
+ !public? && !unlisted?
86
+ end
87
+
59
88
  def _dump(_)
60
89
  Marshal.dump([object, dereferencer])
61
90
  end
@@ -107,7 +136,7 @@ class DistributedPress
107
136
  new_object
108
137
  end
109
138
  when String
110
- if object == DistributedPress::V1::Social::Reference::PUBLIC
139
+ if object == PUBLIC
111
140
  object
112
141
  else
113
142
  dereferencer.references(dereferencer.uris(object.sub(URI_FIXES, '')))
@@ -38,7 +38,16 @@ class DistributedPress
38
38
  #
39
39
  # @return [String]
40
40
  def endpoint
41
- @endpoint ||= "/v1/#{actor}/inbox/replies/#{Base64.encode64(activity).delete("\n")}"
41
+ @endpoint ||=
42
+ begin
43
+ encoded_id = Base64.encode64(activity).delete("\n")
44
+
45
+ if encoded_id.size > 256
46
+ raise DistributedPress::V1::Social::Client::ActivityIdTooLargeError.new("Base64 encoding too large (256 char limit): #{activity}")
47
+ end
48
+
49
+ "/v1/#{actor}/inbox/replies/#{encoded_id}"
50
+ end
42
51
  end
43
52
  end
44
53
  end
@@ -38,7 +38,16 @@ class DistributedPress
38
38
  #
39
39
  # @return [String]
40
40
  def endpoint
41
- @endpoint ||= "/v1/#{actor}/inbox/shares/#{Base64.encode64(activity).delete("\n")}"
41
+ @endpoint ||=
42
+ begin
43
+ encoded_id = Base64.encode64(activity).delete("\n")
44
+
45
+ if encoded_id.size > 256
46
+ raise DistributedPress::V1::Social::Client::ActivityIdTooLargeError.new("Base64 encoding too large (256 char limit): #{activity}")
47
+ end
48
+
49
+ "/v1/#{actor}/inbox/shares/#{encoded_id}"
50
+ end
42
51
  end
43
52
  end
44
53
  end
@@ -3,5 +3,5 @@
3
3
  # API client
4
4
  class DistributedPress
5
5
  # Version
6
- VERSION = '0.5.0'
6
+ VERSION = '0.5.2'
7
7
  end
data.tar.gz.sig ADDED
@@ -0,0 +1,2 @@
1
+ ?�l��Ŏ8f���K��A�x���
2
+ d�ޮO�1f�2�Wm��ׄ5�J��� c����{�tYc��T�zJ�P��6�7�I}�����z���3���M�x�����l��I�=c���h�b��$����\PZ���M�-���7~�@ё9<].�Fk ��o�:Yw�mz��a�P'��Y[��h�a�l�{��������*�(#={U�������гF�O�Zo��a̜5`�Y(�_��<�>����f۵F.���of?ϥ�.��d?��������T�����5�,��hs�-`�W��-6��~�;G2"׳���|� nZ��o�iE���z<xZ\���-�-��qE����>�W�r���$�qg9�����1�
metadata CHANGED
@@ -1,14 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: distributed-press-api-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - f
8
8
  autorequire:
9
9
  bindir: bin
10
- cert_chain: []
11
- date: 2024-08-02 00:00:00.000000000 Z
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIEYDCCAsigAwIBAgIBATANBgkqhkiG9w0BAQsFADA7MQ4wDAYDVQQDDAVmYXVu
14
+ bzEVMBMGCgmSJomT8ixkARkWBXN1dHR5MRIwEAYKCZImiZPyLGQBGRYCbmwwHhcN
15
+ MjUwMTA3MTczMTQ1WhcNMjYwMTA3MTczMTQ1WjA7MQ4wDAYDVQQDDAVmYXVubzEV
16
+ MBMGCgmSJomT8ixkARkWBXN1dHR5MRIwEAYKCZImiZPyLGQBGRYCbmwwggGiMA0G
17
+ CSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDqrFZ8PCNQbaW1incHEZp/OZTIt7bZ
18
+ TMKmkVLeRDqsSBGWTGdZbzRS6idn0vUKlTTnclPPG7dXw1r+AiYVdwIdjx16SLV1
19
+ ipbT/ezdzchfBVQHqdvExszAlL689iUnM9r22KkAXSzidSWuySjA5BY+8p1S2QO5
20
+ NcuB/+R5JRybVn6g500EB60jAZNUMM+2OlDqzS7oVqObOZ8zl8/HJaJnBGNNYLbN
21
+ cUY6qV9/0HUD2fS/eidBUGhg4jPKWHLHOZuXHPmGyE8bqdKC9T+Jbk/8KFM+SW7B
22
+ i4nZK4afoA6IT3KfQr5xnuyH0sUQj9M9eevWcGeGMTUv+ZiWM9zdJdyOvKhqjenX
23
+ G32KTR1tPgV6TK5jWyi7AHGos+2huBlKCsIJzDuw4zxs5cT9cVbkJFYHRIFQIHKq
24
+ gKSsTSUFt1ehfGtF/rLpv+Cm75BfZPi7OMePVE2FBaXBOvSRi0cYJkmuap9BjOut
25
+ OfvhZ41piDp/Kh0Cjgl1+o/fWTCh27yxb50CAwEAAaNvMG0wCQYDVR0TBAIwADAL
26
+ BgNVHQ8EBAMCBLAwHQYDVR0OBBYEFIH0kjcsF7inzAwy488EEY5thfpiMBkGA1Ud
27
+ EQQSMBCBDmZhdW5vQHN1dHR5Lm5sMBkGA1UdEgQSMBCBDmZhdW5vQHN1dHR5Lm5s
28
+ MA0GCSqGSIb3DQEBCwUAA4IBgQCEo4E1ZAjlzw7LeJlju4BWUvKLjrbGiDNBYQir
29
+ lmyHhYXWV3gnozs08sM3BNzwsPwDwIhYOu3Kc+36DtEpKToUxqEGbsxX8uGzyp88
30
+ HTlaNsaHCZBeB2wgUYcIeO2lKdNu+V9WxfTRhYu+02OfLRv65qSfm6uck1Ml1Cg/
31
+ tn1Y7mLHSdnWPZCQhQZA0wX/SFL64DeozAwJLhYtKneU/m5PEqv9nNnJVCLlbODB
32
+ zFTjbsKtpWxNN+xWsJbjukggS8uX1400WqyjUCitDxDJknP+xeAg8wt2wT+IC1X1
33
+ zMY8gjxoBfwPum74cBTaZzYMpeGaS1fJ3N4NBU+SHLRDiKaVZzEnoNyJDHnsXXrX
34
+ MvF98+bTUHC9xcklH7RCO5uqUOq7cxIcMjzx3cpR6+AW6zXYQBjWfNB9KfaAstZy
35
+ cpurTQHNJfL/ah+9dYbgDXdG5HAAjRMAsWSvERw95YdN9XzQZCdUk5wUs+A6cNtO
36
+ AZZUMTVYNx8JqUeemxlXBRjsD/s=
37
+ -----END CERTIFICATE-----
38
+ date: 2025-01-29 00:00:00.000000000 Z
12
39
  dependencies:
13
40
  - !ruby/object:Gem::Dependency
14
41
  name: addressable
@@ -374,7 +401,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
374
401
  - !ruby/object:Gem::Version
375
402
  version: '0'
376
403
  requirements: []
377
- rubygems_version: 3.3.26
404
+ rubygems_version: 3.3.27
378
405
  signing_key:
379
406
  specification_version: 4
380
407
  summary: Distributed Press API Client
metadata.gz.sig ADDED
@@ -0,0 +1,2 @@
1
+ �& �w#����� w���S�z��\���ܩP�ܰ��^(�듑v����]� ��R����� ���:pFJ\��-�j�/�w��w���3�++jʒ(z�fcJ ���
2
+ �U����m�n����Y����Gl3��O�>l����+b���@������bp�crҍ�n�t�½Io�����,n�'G�˰��Um�A����ؗ�}Yp�����'d�����R�LC��g���ۭ����<�-.�,����i�B!j�A�q�/����A��=�}٧�����`�@e-����A Wz� �:��>=�ϻ����>aUyj;�Ե�o45��L�#M�l�?����WM�;q쿸s�����?L^D��6]�U�3<m��