skyfall 0.2.5 → 0.3.0
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 +4 -4
- data/CHANGELOG.md +8 -0
- data/lib/skyfall/label.rb +63 -0
- data/lib/skyfall/messages/labels_message.rb +23 -0
- data/lib/skyfall/messages/websocket_message.rb +2 -0
- data/lib/skyfall/stream.rb +14 -26
- data/lib/skyfall/version.rb +1 -1
- metadata +82 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 34e2166dc123a74140ce5cae67d3c000c1f88972d15cbe8a2550bde11ba4034d
|
4
|
+
data.tar.gz: 334f4b8b0ddce03b2258a0266e01e08cac9528924ac13380e91b66a0bb1217b8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f56ab132941d80a577e5f3ba630b58d6f99548d0cde398fdb4f15e7c24d9557c3b0243d64a3940c18bf370afb219df3282c935300fc0359b6b0e00915b7002ca
|
7
|
+
data.tar.gz: 4bd7672a9450d8b1ec80ec679b69e6ba4242c4a6554865e296e7a347769795239b99a95539fe0b637407c2736b0716dfc8d1c3a9dea2d8d7a9654b47158262c9
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## [0.3.0] - 2024-03-21
|
2
|
+
|
3
|
+
- added support for labeller firehose, served by labeller services at the `com.atproto.label.subscribeLabels` endpoint (aliased as `:subscribe_labels`)
|
4
|
+
- the `#labels` messages from the labeller firehose are parsed into a `LabelsMessage`, which includes a `labels` array of `Label` objects
|
5
|
+
- `Stream` callbacks can now also be assigned via setters, e.g. `stream.on_message = proc { ... }`
|
6
|
+
- added default error handler to `Stream` which logs the error to `$stdout` - set `stream.on_error = nil` to disable
|
7
|
+
- added Ruby stdlib dependencies explicitly to the gemspec - fixes a warning in Ruby 3.3 when requiring `base64`, which will be extracted as an optional gem in 3.4
|
8
|
+
|
1
9
|
## [0.2.5] - 2024-03-14
|
2
10
|
|
3
11
|
- added `:bsky_labeler` record type symbol & collection constant
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require_relative 'errors'
|
2
|
+
require 'time'
|
3
|
+
|
4
|
+
module Skyfall
|
5
|
+
class Label
|
6
|
+
attr_reader :data
|
7
|
+
|
8
|
+
def initialize(data)
|
9
|
+
@data = data
|
10
|
+
|
11
|
+
raise DecodeError.new("Missing version: #{data}") unless data.has_key?('ver')
|
12
|
+
raise DecodeError.new("Invalid version: #{ver}") unless ver.is_a?(Integer) && ver >= 1
|
13
|
+
raise UnsupportedError.new("Unsupported version: #{ver}") unless ver == 1
|
14
|
+
|
15
|
+
raise DecodeError.new("Missing source: #{data}") unless data.has_key?('src')
|
16
|
+
raise DecodeError.new("Invalid source: #{src}") unless src.is_a?(String) && src.start_with?('did:')
|
17
|
+
|
18
|
+
raise DecodeError.new("Missing uri: #{data}") unless data.has_key?('uri')
|
19
|
+
raise DecodeError.new("Invalid uri: #{uri}") unless uri.is_a?(String)
|
20
|
+
raise DecodeError.new("Invalid uri: #{uri}") unless uri.start_with?('at://') || uri.start_with?('did:')
|
21
|
+
end
|
22
|
+
|
23
|
+
def version
|
24
|
+
@data['ver']
|
25
|
+
end
|
26
|
+
|
27
|
+
def authority
|
28
|
+
@data['src']
|
29
|
+
end
|
30
|
+
|
31
|
+
def subject
|
32
|
+
@data['uri']
|
33
|
+
end
|
34
|
+
|
35
|
+
def cid
|
36
|
+
@cid ||= @data['cid'] && CID.from_json(@data['cid'])
|
37
|
+
end
|
38
|
+
|
39
|
+
def value
|
40
|
+
@data['val']
|
41
|
+
end
|
42
|
+
|
43
|
+
def negation?
|
44
|
+
!!@data['neg']
|
45
|
+
end
|
46
|
+
|
47
|
+
def created_at
|
48
|
+
@created_at ||= Time.parse(@data['cts'])
|
49
|
+
end
|
50
|
+
|
51
|
+
def expires_at
|
52
|
+
@expires_at ||= @data['exp'] && Time.parse(@data['exp'])
|
53
|
+
end
|
54
|
+
|
55
|
+
alias ver version
|
56
|
+
alias src authority
|
57
|
+
alias uri subject
|
58
|
+
alias val value
|
59
|
+
alias neg negation?
|
60
|
+
alias cts created_at
|
61
|
+
alias exp expires_at
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require_relative 'websocket_message'
|
2
|
+
require_relative '../label'
|
3
|
+
|
4
|
+
module Skyfall
|
5
|
+
class LabelsMessage
|
6
|
+
using Skyfall::Extensions
|
7
|
+
|
8
|
+
attr_reader :type_object, :data_object
|
9
|
+
attr_reader :type, :seq
|
10
|
+
|
11
|
+
def initialize(type_object, data_object)
|
12
|
+
@type_object = type_object
|
13
|
+
@data_object = data_object
|
14
|
+
|
15
|
+
@type = @type_object['t'][1..-1].to_sym
|
16
|
+
@seq = @data_object['seq']
|
17
|
+
end
|
18
|
+
|
19
|
+
def labels
|
20
|
+
@labels ||= @data_object['labels'].map { |x| Label.new(x) }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -12,6 +12,7 @@ module Skyfall
|
|
12
12
|
require_relative 'handle_message'
|
13
13
|
require_relative 'identity_message'
|
14
14
|
require_relative 'info_message'
|
15
|
+
require_relative 'labels_message'
|
15
16
|
require_relative 'tombstone_message'
|
16
17
|
require_relative 'unknown_message'
|
17
18
|
|
@@ -28,6 +29,7 @@ module Skyfall
|
|
28
29
|
when '#handle' then HandleMessage
|
29
30
|
when '#identity' then IdentityMessage
|
30
31
|
when '#info' then InfoMessage
|
32
|
+
when '#labels' then LabelsMessage
|
31
33
|
when '#tombstone' then TombstoneMessage
|
32
34
|
else UnknownMessage
|
33
35
|
end
|
data/lib/skyfall/stream.rb
CHANGED
@@ -7,11 +7,15 @@ require 'uri'
|
|
7
7
|
module Skyfall
|
8
8
|
class Stream
|
9
9
|
SUBSCRIBE_REPOS = "com.atproto.sync.subscribeRepos"
|
10
|
+
SUBSCRIBE_LABELS = "com.atproto.label.subscribeLabels"
|
10
11
|
|
11
12
|
NAMED_ENDPOINTS = {
|
12
|
-
:subscribe_repos => SUBSCRIBE_REPOS
|
13
|
+
:subscribe_repos => SUBSCRIBE_REPOS,
|
14
|
+
:subscribe_labels => SUBSCRIBE_LABELS
|
13
15
|
}
|
14
16
|
|
17
|
+
EVENTS = %w(message raw_message connecting connect disconnect reconnect error)
|
18
|
+
|
15
19
|
MAX_RECONNECT_INTERVAL = 300
|
16
20
|
|
17
21
|
attr_accessor :heartbeat_timeout, :heartbeat_interval, :cursor, :auto_reconnect
|
@@ -23,6 +27,8 @@ module Skyfall
|
|
23
27
|
@handlers = {}
|
24
28
|
@auto_reconnect = true
|
25
29
|
@connection_attempts = 0
|
30
|
+
|
31
|
+
@handlers[:error] = proc { |e| puts "ERROR: #{e}" }
|
26
32
|
end
|
27
33
|
|
28
34
|
def connect
|
@@ -104,32 +110,14 @@ module Skyfall
|
|
104
110
|
|
105
111
|
alias close disconnect
|
106
112
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
def on_raw_message(&block)
|
112
|
-
@handlers[:raw_message] = block
|
113
|
-
end
|
114
|
-
|
115
|
-
def on_connecting(&block)
|
116
|
-
@handlers[:connecting] = block
|
117
|
-
end
|
118
|
-
|
119
|
-
def on_connect(&block)
|
120
|
-
@handlers[:connect] = block
|
121
|
-
end
|
122
|
-
|
123
|
-
def on_disconnect(&block)
|
124
|
-
@handlers[:disconnect] = block
|
125
|
-
end
|
126
|
-
|
127
|
-
def on_error(&block)
|
128
|
-
@handlers[:error] = block
|
129
|
-
end
|
113
|
+
EVENTS.each do |event|
|
114
|
+
define_method "on_#{event}" do |&block|
|
115
|
+
@handlers[event.to_sym] = block
|
116
|
+
end
|
130
117
|
|
131
|
-
|
132
|
-
|
118
|
+
define_method "on_#{event}=" do |block|
|
119
|
+
@handlers[event.to_sym] = block
|
120
|
+
end
|
133
121
|
end
|
134
122
|
|
135
123
|
def inspectable_variables
|
data/lib/skyfall/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: skyfall
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kuba Suder
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-03-
|
11
|
+
date: 2024-03-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: base32
|
@@ -50,20 +50,96 @@ dependencies:
|
|
50
50
|
- - ">="
|
51
51
|
- !ruby/object:Gem::Version
|
52
52
|
version: 0.5.9.6
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: eventmachine
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '1.2'
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 1.2.7
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '1.2'
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: 1.2.7
|
53
73
|
- !ruby/object:Gem::Dependency
|
54
74
|
name: faye-websocket
|
55
75
|
requirement: !ruby/object:Gem::Requirement
|
56
76
|
requirements:
|
57
77
|
- - "~>"
|
58
78
|
- !ruby/object:Gem::Version
|
59
|
-
version: 0.11
|
79
|
+
version: '0.11'
|
80
|
+
type: :runtime
|
81
|
+
prerelease: false
|
82
|
+
version_requirements: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - "~>"
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0.11'
|
87
|
+
- !ruby/object:Gem::Dependency
|
88
|
+
name: base64
|
89
|
+
requirement: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - "~>"
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0.1'
|
94
|
+
type: :runtime
|
95
|
+
prerelease: false
|
96
|
+
version_requirements: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - "~>"
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '0.1'
|
101
|
+
- !ruby/object:Gem::Dependency
|
102
|
+
name: stringio
|
103
|
+
requirement: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - "~>"
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '3.0'
|
108
|
+
type: :runtime
|
109
|
+
prerelease: false
|
110
|
+
version_requirements: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - "~>"
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '3.0'
|
115
|
+
- !ruby/object:Gem::Dependency
|
116
|
+
name: time
|
117
|
+
requirement: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
119
|
+
- - "~>"
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: '0.3'
|
122
|
+
type: :runtime
|
123
|
+
prerelease: false
|
124
|
+
version_requirements: !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - "~>"
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: '0.3'
|
129
|
+
- !ruby/object:Gem::Dependency
|
130
|
+
name: uri
|
131
|
+
requirement: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - "~>"
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: '0.13'
|
60
136
|
type: :runtime
|
61
137
|
prerelease: false
|
62
138
|
version_requirements: !ruby/object:Gem::Requirement
|
63
139
|
requirements:
|
64
140
|
- - "~>"
|
65
141
|
- !ruby/object:Gem::Version
|
66
|
-
version: 0.
|
142
|
+
version: '0.13'
|
67
143
|
description: "\n Skyfall is a Ruby library for connecting to the \"firehose\" of
|
68
144
|
the Bluesky social network, i.e. a websocket which\n streams all new posts and
|
69
145
|
everything else happening on the Bluesky network in real time. The code connects
|
@@ -89,10 +165,12 @@ files:
|
|
89
165
|
- lib/skyfall/collection.rb
|
90
166
|
- lib/skyfall/errors.rb
|
91
167
|
- lib/skyfall/extensions.rb
|
168
|
+
- lib/skyfall/label.rb
|
92
169
|
- lib/skyfall/messages/commit_message.rb
|
93
170
|
- lib/skyfall/messages/handle_message.rb
|
94
171
|
- lib/skyfall/messages/identity_message.rb
|
95
172
|
- lib/skyfall/messages/info_message.rb
|
173
|
+
- lib/skyfall/messages/labels_message.rb
|
96
174
|
- lib/skyfall/messages/tombstone_message.rb
|
97
175
|
- lib/skyfall/messages/unknown_message.rb
|
98
176
|
- lib/skyfall/messages/websocket_message.rb
|