+2
-2
Cargo.lock
+2
-2
Cargo.lock
···
1796
1796
[[package]]
1797
1797
name = "fjall"
1798
1798
version = "2.11.2"
1799
-
source = "git+https://github.com/fjall-rs/fjall.git#42d811f7c8cc9004407d520d37d2a1d8d246c03d"
1799
+
source = "git+https://github.com/fjall-rs/fjall.git?rev=fb229572bb7d1d6966a596994dc1708e47ec57d8#fb229572bb7d1d6966a596994dc1708e47ec57d8"
1800
1800
dependencies = [
1801
1801
"byteorder",
1802
1802
"byteview",
···
6049
6049
"clap",
6050
6050
"dropshot",
6051
6051
"env_logger",
6052
-
"fjall 2.11.2 (git+https://github.com/fjall-rs/fjall.git)",
6052
+
"fjall 2.11.2 (git+https://github.com/fjall-rs/fjall.git?rev=fb229572bb7d1d6966a596994dc1708e47ec57d8)",
6053
6053
"getrandom 0.3.3",
6054
6054
"http",
6055
6055
"jetstream",
+2
spacedust/src/error.rs
+2
spacedust/src/error.rs
···
30
30
TooManySourcesWanted,
31
31
#[error("more wantedSubjectDids were requested than allowed (max 10,000)")]
32
32
TooManyDidsWanted,
33
+
#[error("more wantedSubjectPrefixes were requested than allowed (max 100)")]
34
+
TooManySubjectPrefixesWanted,
33
35
#[error("more wantedSubjects were requested than allowed (max 50,000)")]
34
36
TooManySubjectsWanted,
35
37
}
+11
-2
spacedust/src/server.rs
+11
-2
spacedust/src/server.rs
···
227
227
#[serde(default)]
228
228
pub wanted_subjects: HashSet<String>,
229
229
#[serde(default)]
230
+
pub wanted_subject_prefixes: HashSet<String>,
231
+
#[serde(default)]
230
232
pub wanted_subject_dids: HashSet<String>,
231
233
#[serde(default)]
232
234
pub wanted_sources: HashSet<String>,
···
241
243
///
242
244
/// The at-uri must be url-encoded
243
245
///
244
-
/// Pass this parameter multiple times to specify multiple collections, like
246
+
/// Pass this parameter multiple times to specify multiple subjects, like
245
247
/// `wantedSubjects=[...]&wantedSubjects=[...]`
246
248
pub wanted_subjects: String,
249
+
/// One or more at-uri, URI, or DID prefixes to receive links about
250
+
///
251
+
/// The uri must be url-encoded
252
+
///
253
+
/// Pass this parameter multiple times to specify multiple prefixes, like
254
+
/// `wantedSubjectPrefixes=[...]&wantedSubjectPrefixes=[...]`
255
+
pub wanted_subject_prefixes: String,
247
256
/// One or more DIDs to receive links about
248
257
///
249
-
/// Pass this parameter multiple times to specify multiple collections
258
+
/// Pass this parameter multiple times to specify multiple subjects
250
259
pub wanted_subject_dids: String,
251
260
/// One or more link sources to receive links about
252
261
///
+10
-1
spacedust/src/subscriber.rs
+10
-1
spacedust/src/subscriber.rs
···
124
124
let query = &self.query;
125
125
126
126
// subject + subject DIDs are logical OR
127
-
if !(query.wanted_subjects.is_empty() && query.wanted_subject_dids.is_empty()
127
+
if !(query.wanted_subjects.is_empty()
128
+
&& query.wanted_subject_prefixes.is_empty()
129
+
&& query.wanted_subject_dids.is_empty()
128
130
|| query.wanted_subjects.contains(&properties.subject)
131
+
|| query
132
+
.wanted_subject_prefixes
133
+
.iter()
134
+
.any(|p| properties.subject.starts_with(p))
129
135
|| properties
130
136
.subject_did
131
137
.as_ref()
···
154
160
}
155
161
if opts.wanted_subject_dids.len() > 10_000 {
156
162
return Err(SubscriberUpdateError::TooManyDidsWanted);
163
+
}
164
+
if opts.wanted_subject_prefixes.len() > 100 {
165
+
return Err(SubscriberUpdateError::TooManySubjectPrefixesWanted);
157
166
}
158
167
if opts.wanted_subjects.len() > 50_000 {
159
168
return Err(SubscriberUpdateError::TooManySubjectsWanted);