jekyll-activity-pub 0.1.0rc16 → 0.1.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/lib/jekyll/activity_pub/actor.rb +0 -1
- data/lib/jekyll/activity_pub/following.rb +25 -0
- data/lib/jekyll/activity_pub/instance_v1.rb +130 -0
- data/lib/jekyll/activity_pub/{instance.rb → instance_v2.rb} +10 -26
- data/lib/jekyll/activity_pub/notifier.rb +0 -5
- data/lib/jekyll/activity_pub.rb +3 -1
- data/lib/jekyll-activity-pub.rb +11 -8
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b01de6dccd0e03a7936d3c107f755e7f5d663e8d8e9622007f57a0a2ff0228d0
|
4
|
+
data.tar.gz: 4477807387c5b864b337299662f5c564f1c46407d47c213e27b264971cd3b823
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cda61088586cd05fa26155db048fd66845a2c32e8a66c05c51d7e8624a49048e0528cb1ccb24ea1ad21ca2d71002be6b3696a12e2ad013d2d3889328ca73fd58
|
7
|
+
data.tar.gz: 7fa8b2e1c900c0e65a82b2cf96bf408574a4e40167cf9e0d0317aadcfabf7f17c2f3e05d609e4dfa3a704740b176c10adb91c97541ba4160228e09afac2583bd
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'ordered_collection'
|
4
|
+
|
5
|
+
module Jekyll
|
6
|
+
module ActivityPub
|
7
|
+
# An empty collection of followed actors
|
8
|
+
class Following < OrderedCollection
|
9
|
+
# Initialize with default data
|
10
|
+
#
|
11
|
+
# @param :site [Jekyll::Site]
|
12
|
+
# @param :actor [Jekyll::ActivityPub::Actor]
|
13
|
+
# @param :base [String]
|
14
|
+
# @param :dir [String]
|
15
|
+
# @param :name [String]
|
16
|
+
def initialize(site, actor, base = '', dir = '', name = 'following.jsonld')
|
17
|
+
super(site, base, dir, name)
|
18
|
+
|
19
|
+
actor.data['following'] = absolute_url(url)
|
20
|
+
|
21
|
+
trigger_hooks :post_init
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,130 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'jekyll/page'
|
4
|
+
require_relative 'helper'
|
5
|
+
require_relative 'version'
|
6
|
+
|
7
|
+
module Jekyll
|
8
|
+
module ActivityPub
|
9
|
+
# Points to site's metadata
|
10
|
+
class InstanceV1 < Jekyll::Page
|
11
|
+
include Helper
|
12
|
+
|
13
|
+
# Initialize with default data
|
14
|
+
#
|
15
|
+
# @param :site [Jekyll::Site]
|
16
|
+
# @param :base [String]
|
17
|
+
# @param :dir [String]
|
18
|
+
# @param :name [String]
|
19
|
+
def initialize(site, base = '', dir = 'api/v1', name = 'instance')
|
20
|
+
@context = StubContext.new(registers: { site: site })
|
21
|
+
|
22
|
+
super(site, base, dir, name)
|
23
|
+
|
24
|
+
trigger_hooks :post_init
|
25
|
+
end
|
26
|
+
|
27
|
+
def permalink
|
28
|
+
'api/v1/instance/'
|
29
|
+
end
|
30
|
+
|
31
|
+
def output_ext
|
32
|
+
'.json'
|
33
|
+
end
|
34
|
+
|
35
|
+
def read_yaml(*)
|
36
|
+
self.data = {
|
37
|
+
'uri' => hostname,
|
38
|
+
'title' => public_name,
|
39
|
+
'short_description' => summary,
|
40
|
+
'description' => summary,
|
41
|
+
'email' => email,
|
42
|
+
'version' => Jekyll::ActivityPub::VERSION,
|
43
|
+
'urls' => {},
|
44
|
+
'stats' => {
|
45
|
+
'user_count' => 1,
|
46
|
+
'status_count' => 0,
|
47
|
+
'domain_count' => 1
|
48
|
+
},
|
49
|
+
'thumbnail' => conditional_absolute_url(avatar),
|
50
|
+
'languages' => languages,
|
51
|
+
'registrations' => false,
|
52
|
+
'approval_required' => false,
|
53
|
+
'invites_enabled' => false,
|
54
|
+
'configuration' => {
|
55
|
+
'accounts' => {},
|
56
|
+
'statuses' => {},
|
57
|
+
'media_attachments' => {},
|
58
|
+
'polls' => {}
|
59
|
+
},
|
60
|
+
'contact_account' => {
|
61
|
+
'id' => 1,
|
62
|
+
'username' => username,
|
63
|
+
'acct' => username,
|
64
|
+
'display_name' => public_name,
|
65
|
+
'locked' => false,
|
66
|
+
'bot' => false,
|
67
|
+
'discoverable' => true,
|
68
|
+
'group' => false,
|
69
|
+
'created_at' => published.xmlschema,
|
70
|
+
'note' => summary,
|
71
|
+
'url' => site.config['url'],
|
72
|
+
'uri' => site.config['url'],
|
73
|
+
'avatar' => conditional_absolute_url(avatar),
|
74
|
+
'avatar_static' => conditional_absolute_url(avatar),
|
75
|
+
'header' => conditional_absolute_url(header),
|
76
|
+
'header_static' => conditional_absolute_url(header),
|
77
|
+
'followers_count' => 0,
|
78
|
+
'following_count' => 0,
|
79
|
+
'statuses_count' => 0,
|
80
|
+
'last_status_at' => nil,
|
81
|
+
'noindex' => false,
|
82
|
+
'emojis' => [],
|
83
|
+
'roles' => [],
|
84
|
+
'fields' => []
|
85
|
+
},
|
86
|
+
'rules' => []
|
87
|
+
}
|
88
|
+
end
|
89
|
+
|
90
|
+
def increase_local_posts_counter!
|
91
|
+
data['stats']['status_count'] += 1
|
92
|
+
data['contact_account']['statuses_count'] += 1
|
93
|
+
nil
|
94
|
+
end
|
95
|
+
|
96
|
+
def increase_last_status!(last_status)
|
97
|
+
self.last_status_at = last_status if !last_status_at || last_status_at < last_status
|
98
|
+
end
|
99
|
+
|
100
|
+
private
|
101
|
+
|
102
|
+
def last_status_at
|
103
|
+
data['contact_account']['last_status_at']
|
104
|
+
end
|
105
|
+
|
106
|
+
def last_status_at=(last_status)
|
107
|
+
data['contact_account']['last_status_at'] = last_status
|
108
|
+
end
|
109
|
+
|
110
|
+
# @return [String,nil]
|
111
|
+
def header
|
112
|
+
@header ||= [find_best_value_for(site.config, %w[activity_pub images], %w[image path])].flatten.compact.first
|
113
|
+
end
|
114
|
+
|
115
|
+
# @return [Array<String>]
|
116
|
+
def languages
|
117
|
+
@languages ||= site.config['locales'] || [locale]
|
118
|
+
end
|
119
|
+
|
120
|
+
# @return [String,nil]
|
121
|
+
def email
|
122
|
+
@email ||= find_best_value_for(site.config, %w[activity_pub email], 'email')
|
123
|
+
end
|
124
|
+
|
125
|
+
def avatar
|
126
|
+
@avatar ||= [find_best_value_for(site.config, %w[activity_pub icons], 'logo')].flatten.compact.first
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
@@ -1,13 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
require_relative 'helper'
|
5
|
-
require_relative 'version'
|
3
|
+
require_relative 'instance_v1'
|
6
4
|
|
7
5
|
module Jekyll
|
8
6
|
module ActivityPub
|
9
7
|
# Points to site's metadata
|
10
|
-
class
|
8
|
+
class InstanceV2 < InstanceV1
|
11
9
|
include Helper
|
12
10
|
|
13
11
|
# Initialize with default data
|
@@ -17,21 +15,13 @@ module Jekyll
|
|
17
15
|
# @param :dir [String]
|
18
16
|
# @param :name [String]
|
19
17
|
def initialize(site, base = '', dir = 'api/v2', name = 'instance')
|
20
|
-
@context = StubContext.new(registers: { site: site })
|
21
|
-
|
22
18
|
super(site, base, dir, name)
|
23
|
-
|
24
|
-
trigger_hooks :post_init
|
25
19
|
end
|
26
20
|
|
27
21
|
def permalink
|
28
22
|
'api/v2/instance/'
|
29
23
|
end
|
30
24
|
|
31
|
-
def output_ext
|
32
|
-
'.json'
|
33
|
-
end
|
34
|
-
|
35
25
|
def read_yaml(*)
|
36
26
|
self.data = {
|
37
27
|
'domain' => hostname,
|
@@ -92,25 +82,19 @@ module Jekyll
|
|
92
82
|
}
|
93
83
|
end
|
94
84
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
def header
|
99
|
-
@header ||= [find_best_value_for(site.config, %w[activity_pub images], %w[image path])].flatten.compact.first
|
85
|
+
def increase_local_posts_counter!
|
86
|
+
data['contact']['account']['statuses_count'] += 1
|
87
|
+
nil
|
100
88
|
end
|
101
89
|
|
102
|
-
|
103
|
-
def languages
|
104
|
-
@languages ||= site.config['locales'] || [locale]
|
105
|
-
end
|
90
|
+
private
|
106
91
|
|
107
|
-
|
108
|
-
|
109
|
-
@email ||= find_best_value_for(site.config, %w[activity_pub email], 'email')
|
92
|
+
def last_status_at
|
93
|
+
data['contact']['account']['last_status_at']
|
110
94
|
end
|
111
95
|
|
112
|
-
def
|
113
|
-
|
96
|
+
def last_status_at=(last_status)
|
97
|
+
data['contact']['account']['last_status_at'] = last_status
|
114
98
|
end
|
115
99
|
end
|
116
100
|
end
|
data/lib/jekyll/activity_pub.rb
CHANGED
@@ -11,7 +11,9 @@ require_relative 'activity_pub/public_key'
|
|
11
11
|
require_relative 'activity_pub/nodeinfo'
|
12
12
|
require_relative 'activity_pub/nodeinfo_20'
|
13
13
|
require_relative 'activity_pub/nodeinfo_21'
|
14
|
-
require_relative 'activity_pub/
|
14
|
+
require_relative 'activity_pub/instance_v1'
|
15
|
+
require_relative 'activity_pub/instance_v2'
|
16
|
+
require_relative 'activity_pub/following'
|
15
17
|
|
16
18
|
module Jekyll
|
17
19
|
# ActivityPub
|
data/lib/jekyll-activity-pub.rb
CHANGED
@@ -29,7 +29,14 @@ Jekyll::Hooks.register :site, :post_read, priority: :low do |site|
|
|
29
29
|
site.pages << site.config['webfinger'] = webfinger = Jekyll::ActivityPub::WebFinger.new(site, actor)
|
30
30
|
site.pages << site.config['outbox'] = Jekyll::ActivityPub::Outbox.new(site, actor)
|
31
31
|
site.pages << site.config['host-meta'] = Jekyll::ActivityPub::HostMeta.new(site, webfinger)
|
32
|
-
site.pages <<
|
32
|
+
site.pages << Jekyll::ActivityPub::Following.new(site, actor)
|
33
|
+
|
34
|
+
# Instances
|
35
|
+
site.config['instances'] = [Jekyll::ActivityPub::InstanceV1, Jekyll::ActivityPub::InstanceV2].map do |instance|
|
36
|
+
instance.new(site).tap do |i|
|
37
|
+
site.pages << i
|
38
|
+
end
|
39
|
+
end
|
33
40
|
|
34
41
|
# Nodeinfo
|
35
42
|
site.config['nodeinfos'] = [Jekyll::ActivityPub::Nodeinfo20, Jekyll::ActivityPub::Nodeinfo21].map do |nodeinfo|
|
@@ -97,13 +104,9 @@ Jekyll::Hooks.register(:documents, :post_convert, priority: :high) do |doc|
|
|
97
104
|
outbox.data['orderedItems'] << action
|
98
105
|
|
99
106
|
site.config['nodeinfos'].map(&:increase_local_posts_counter!)
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
last_status_at = site.config['instance'].data['contact']['account']['last_status_at']
|
104
|
-
|
105
|
-
if !last_status_at || last_status_at < doc.date
|
106
|
-
site.config['instance'].data['contact']['account']['last_status_at'] = doc.date
|
107
|
+
site.config['instances'].each do |instance|
|
108
|
+
instance.increase_local_posts_counter!
|
109
|
+
instance.increase_last_status!(doc.date)
|
107
110
|
end
|
108
111
|
|
109
112
|
site.pages << action
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-activity-pub
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sutty
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-12-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: distributed-press-api-client
|
@@ -149,10 +149,12 @@ files:
|
|
149
149
|
- lib/jekyll/activity_pub/delete.rb
|
150
150
|
- lib/jekyll/activity_pub/document.rb
|
151
151
|
- lib/jekyll/activity_pub/errors.rb
|
152
|
+
- lib/jekyll/activity_pub/following.rb
|
152
153
|
- lib/jekyll/activity_pub/helper.rb
|
153
154
|
- lib/jekyll/activity_pub/host_meta.rb
|
154
155
|
- lib/jekyll/activity_pub/image.rb
|
155
|
-
- lib/jekyll/activity_pub/
|
156
|
+
- lib/jekyll/activity_pub/instance_v1.rb
|
157
|
+
- lib/jekyll/activity_pub/instance_v2.rb
|
156
158
|
- lib/jekyll/activity_pub/nodeinfo.rb
|
157
159
|
- lib/jekyll/activity_pub/nodeinfo_20.rb
|
158
160
|
- lib/jekyll/activity_pub/nodeinfo_21.rb
|
@@ -196,9 +198,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
196
198
|
version: '2.7'
|
197
199
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
198
200
|
requirements:
|
199
|
-
- - "
|
201
|
+
- - ">="
|
200
202
|
- !ruby/object:Gem::Version
|
201
|
-
version:
|
203
|
+
version: '0'
|
202
204
|
requirements: []
|
203
205
|
rubygems_version: 3.3.26
|
204
206
|
signing_key:
|