@fedify/fedify 1.3.0-dev.502 → 1.3.0-dev.508

Sign up to get free protection for your applications and to get access to all the features.
package/CHANGES.md CHANGED
@@ -8,6 +8,15 @@ Version 1.3.0
8
8
 
9
9
  To be released.
10
10
 
11
+ - `MessageQueue`s now can be differently configured for incoming and outgoing
12
+ activities.
13
+
14
+ - Changed the type of `CreateFederationOptions.queue` option to
15
+ `FederationQueueOptions | MessageQueue | undefined` (was `MessageQueue |
16
+ undefined`).
17
+ - Added `FederationQueueOptions` interface.
18
+ - Added `FederationStartQueueOptions.queue` option.
19
+
11
20
  - Fedify now makes HTTP requests with the proper `User-Agent` header. [[#162]]
12
21
 
13
22
  - Added `getUserAgent()` function.
@@ -33,6 +42,63 @@ To be released.
33
42
  [#162]: https://github.com/dahlia/fedify/issues/162
34
43
 
35
44
 
45
+ Version 1.2.6
46
+ -------------
47
+
48
+ Released on December 19, 2024.
49
+
50
+ - Fix a bug where `Actor`'s `inbox` and `outbox` properties had not been
51
+ able to be set to an `OrderedCollectionPage` object, even though it is
52
+ a subtype of `OrderedCollection` according to Activity Vocabulary
53
+ specification. [[#165]]
54
+
55
+ - The type of `Application()` constructor's `inbox` and `outbox` options
56
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
57
+ (was `OrderedCollection | null | undefined`).
58
+ - The type of `Application.clone()` method's `inbox` and `outbox` options
59
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
60
+ (was `OrderedCollection | null | undefined`).
61
+ - The return type of `Application.getInbox()` and
62
+ `Application.getOutbox()` methods is now `OrderedCollection |
63
+ OrderedCollectionPage | null` (was `OrderedCollection | null`).
64
+ - The type of `Group()` constructor's `inbox` and `outbox` options is
65
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
66
+ `OrderedCollection | null | undefined`).
67
+ - The type of `Group.clone()` method's `inbox` and `outbox` options is
68
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
69
+ `OrderedCollection | null | undefined`).
70
+ - The return type of `Group.getInbox()` and `Group.getOutbox()` methods
71
+ is now `OrderedCollection | OrderedCollectionPage | null` (was
72
+ `OrderedCollection | null`).
73
+ - The type of `Organization()` constructor's `inbox` and `outbox` options
74
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
75
+ (was `OrderedCollection | null | undefined`).
76
+ - The type of `Organization.clone()` method's `inbox` and `outbox` options
77
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
78
+ (was `OrderedCollection | null | undefined`).
79
+ - The return type of `Organization.getInbox()` and
80
+ `Organization.getOutbox()` methods is now `OrderedCollection |
81
+ OrderedCollectionPage | null` (was `OrderedCollection | null`).
82
+ - The type of `Person()` constructor's `inbox` and `outbox` options is
83
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
84
+ `OrderedCollection | null | undefined`).
85
+ - The type of `Person.clone()` method's `inbox` and `outbox` options is
86
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
87
+ `OrderedCollection | null | undefined`).
88
+ - The return type of `Person.getInbox()` and `Person.getOutbox()` methods
89
+ is now `OrderedCollection | OrderedCollectionPage | null` (was
90
+ `OrderedCollection | null`).
91
+ - The type of `Service()` constructor's `inbox` and `outbox` options is
92
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
93
+ `OrderedCollection | null | undefined`).
94
+ - The type of `Service.clone()` method's `inbox` and `outbox` options is
95
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
96
+ `OrderedCollection | null | undefined`).
97
+ - The return type of `Service.getInbox()` and `Service.getOutbox()`
98
+ methods is now `OrderedCollection | OrderedCollectionPage | null` (was
99
+ `OrderedCollection | null`).
100
+
101
+
36
102
  Version 1.2.5
37
103
  -------------
38
104
 
@@ -157,6 +223,63 @@ Released on October 31, 2024.
157
223
  [#118]: https://github.com/dahlia/fedify/issues/118
158
224
 
159
225
 
226
+ Version 1.1.6
227
+ -------------
228
+
229
+ Released on November 19, 2024.
230
+
231
+ - Fix a bug where `Actor`'s `inbox` and `outbox` properties had not been
232
+ able to be set to an `OrderedCollectionPage` object, even though it is
233
+ a subtype of `OrderedCollection` according to Activity Vocabulary
234
+ specification. [[#165]]
235
+
236
+ - The type of `Application()` constructor's `inbox` and `outbox` options
237
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
238
+ (was `OrderedCollection | null | undefined`).
239
+ - The type of `Application.clone()` method's `inbox` and `outbox` options
240
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
241
+ (was `OrderedCollection | null | undefined`).
242
+ - The return type of `Application.getInbox()` and
243
+ `Application.getOutbox()` methods is now `OrderedCollection |
244
+ OrderedCollectionPage | null` (was `OrderedCollection | null`).
245
+ - The type of `Group()` constructor's `inbox` and `outbox` options is
246
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
247
+ `OrderedCollection | null | undefined`).
248
+ - The type of `Group.clone()` method's `inbox` and `outbox` options is
249
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
250
+ `OrderedCollection | null | undefined`).
251
+ - The return type of `Group.getInbox()` and `Group.getOutbox()` methods
252
+ is now `OrderedCollection | OrderedCollectionPage | null` (was
253
+ `OrderedCollection | null`).
254
+ - The type of `Organization()` constructor's `inbox` and `outbox` options
255
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
256
+ (was `OrderedCollection | null | undefined`).
257
+ - The type of `Organization.clone()` method's `inbox` and `outbox` options
258
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
259
+ (was `OrderedCollection | null | undefined`).
260
+ - The return type of `Organization.getInbox()` and
261
+ `Organization.getOutbox()` methods is now `OrderedCollection |
262
+ OrderedCollectionPage | null` (was `OrderedCollection | null`).
263
+ - The type of `Person()` constructor's `inbox` and `outbox` options is
264
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
265
+ `OrderedCollection | null | undefined`).
266
+ - The type of `Person.clone()` method's `inbox` and `outbox` options is
267
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
268
+ `OrderedCollection | null | undefined`).
269
+ - The return type of `Person.getInbox()` and `Person.getOutbox()` methods
270
+ is now `OrderedCollection | OrderedCollectionPage | null` (was
271
+ `OrderedCollection | null`).
272
+ - The type of `Service()` constructor's `inbox` and `outbox` options is
273
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
274
+ `OrderedCollection | null | undefined`).
275
+ - The type of `Service.clone()` method's `inbox` and `outbox` options is
276
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
277
+ `OrderedCollection | null | undefined`).
278
+ - The return type of `Service.getInbox()` and `Service.getOutbox()`
279
+ methods is now `OrderedCollection | OrderedCollectionPage | null` (was
280
+ `OrderedCollection | null`).
281
+
282
+
160
283
  Version 1.1.5
161
284
  -------------
162
285
 
@@ -322,6 +445,63 @@ Released on October 20, 2024.
322
445
  [#150]: https://github.com/dahlia/fedify/issues/150
323
446
 
324
447
 
448
+ Version 1.0.10
449
+ --------------
450
+
451
+ Released on December 19, 2024.
452
+
453
+ - Fix a bug where `Actor`'s `inbox` and `outbox` properties had not been
454
+ able to be set to an `OrderedCollectionPage` object, even though it is
455
+ a subtype of `OrderedCollection` according to Activity Vocabulary
456
+ specification. [[#165]]
457
+
458
+ - The type of `Application()` constructor's `inbox` and `outbox` options
459
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
460
+ (was `OrderedCollection | null | undefined`).
461
+ - The type of `Application.clone()` method's `inbox` and `outbox` options
462
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
463
+ (was `OrderedCollection | null | undefined`).
464
+ - The return type of `Application.getInbox()` and
465
+ `Application.getOutbox()` methods is now `OrderedCollection |
466
+ OrderedCollectionPage | null` (was `OrderedCollection | null`).
467
+ - The type of `Group()` constructor's `inbox` and `outbox` options is
468
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
469
+ `OrderedCollection | null | undefined`).
470
+ - The type of `Group.clone()` method's `inbox` and `outbox` options is
471
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
472
+ `OrderedCollection | null | undefined`).
473
+ - The return type of `Group.getInbox()` and `Group.getOutbox()` methods
474
+ is now `OrderedCollection | OrderedCollectionPage | null` (was
475
+ `OrderedCollection | null`).
476
+ - The type of `Organization()` constructor's `inbox` and `outbox` options
477
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
478
+ (was `OrderedCollection | null | undefined`).
479
+ - The type of `Organization.clone()` method's `inbox` and `outbox` options
480
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
481
+ (was `OrderedCollection | null | undefined`).
482
+ - The return type of `Organization.getInbox()` and
483
+ `Organization.getOutbox()` methods is now `OrderedCollection |
484
+ OrderedCollectionPage | null` (was `OrderedCollection | null`).
485
+ - The type of `Person()` constructor's `inbox` and `outbox` options is
486
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
487
+ `OrderedCollection | null | undefined`).
488
+ - The type of `Person.clone()` method's `inbox` and `outbox` options is
489
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
490
+ `OrderedCollection | null | undefined`).
491
+ - The return type of `Person.getInbox()` and `Person.getOutbox()` methods
492
+ is now `OrderedCollection | OrderedCollectionPage | null` (was
493
+ `OrderedCollection | null`).
494
+ - The type of `Service()` constructor's `inbox` and `outbox` options is
495
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
496
+ `OrderedCollection | null | undefined`).
497
+ - The type of `Service.clone()` method's `inbox` and `outbox` options is
498
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
499
+ `OrderedCollection | null | undefined`).
500
+ - The return type of `Service.getInbox()` and `Service.getOutbox()`
501
+ methods is now `OrderedCollection | OrderedCollectionPage | null` (was
502
+ `OrderedCollection | null`).
503
+
504
+
325
505
  Version 1.0.9
326
506
  -------------
327
507
 
@@ -606,6 +786,65 @@ Released on September 26, 2024.
606
786
  [#137]: https://github.com/dahlia/fedify/issues/137
607
787
 
608
788
 
789
+ Version 0.15.8
790
+ --------------
791
+
792
+ Released on November 159, 2024.
793
+
794
+ - Fix a bug where `Actor`'s `inbox` and `outbox` properties had not been
795
+ able to be set to an `OrderedCollectionPage` object, even though it is
796
+ a subtype of `OrderedCollection` according to Activity Vocabulary
797
+ specification. [[#165]]
798
+
799
+ - The type of `Application()` constructor's `inbox` and `outbox` options
800
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
801
+ (was `OrderedCollection | null | undefined`).
802
+ - The type of `Application.clone()` method's `inbox` and `outbox` options
803
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
804
+ (was `OrderedCollection | null | undefined`).
805
+ - The return type of `Application.getInbox()` and
806
+ `Application.getOutbox()` methods is now `OrderedCollection |
807
+ OrderedCollectionPage | null` (was `OrderedCollection | null`).
808
+ - The type of `Group()` constructor's `inbox` and `outbox` options is
809
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
810
+ `OrderedCollection | null | undefined`).
811
+ - The type of `Group.clone()` method's `inbox` and `outbox` options is
812
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
813
+ `OrderedCollection | null | undefined`).
814
+ - The return type of `Group.getInbox()` and `Group.getOutbox()` methods
815
+ is now `OrderedCollection | OrderedCollectionPage | null` (was
816
+ `OrderedCollection | null`).
817
+ - The type of `Organization()` constructor's `inbox` and `outbox` options
818
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
819
+ (was `OrderedCollection | null | undefined`).
820
+ - The type of `Organization.clone()` method's `inbox` and `outbox` options
821
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
822
+ (was `OrderedCollection | null | undefined`).
823
+ - The return type of `Organization.getInbox()` and
824
+ `Organization.getOutbox()` methods is now `OrderedCollection |
825
+ OrderedCollectionPage | null` (was `OrderedCollection | null`).
826
+ - The type of `Person()` constructor's `inbox` and `outbox` options is
827
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
828
+ `OrderedCollection | null | undefined`).
829
+ - The type of `Person.clone()` method's `inbox` and `outbox` options is
830
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
831
+ `OrderedCollection | null | undefined`).
832
+ - The return type of `Person.getInbox()` and `Person.getOutbox()` methods
833
+ is now `OrderedCollection | OrderedCollectionPage | null` (was
834
+ `OrderedCollection | null`).
835
+ - The type of `Service()` constructor's `inbox` and `outbox` options is
836
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
837
+ `OrderedCollection | null | undefined`).
838
+ - The type of `Service.clone()` method's `inbox` and `outbox` options is
839
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
840
+ `OrderedCollection | null | undefined`).
841
+ - The return type of `Service.getInbox()` and `Service.getOutbox()`
842
+ methods is now `OrderedCollection | OrderedCollectionPage | null` (was
843
+ `OrderedCollection | null`).
844
+
845
+ [#165]: https://github.com/dahlia/fedify/issues/165
846
+
847
+
609
848
  Version 0.15.7
610
849
  --------------
611
850
 
package/esm/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "@fedify/fedify",
3
- "version": "1.3.0-dev.502+58ce0c02",
3
+ "version": "1.3.0-dev.508+e0101b9f",
4
4
  "license": "MIT",
5
5
  "exports": {
6
6
  ".": "./mod.ts",
@@ -28,8 +28,10 @@ export function createFederation(options) {
28
28
  export class FederationImpl {
29
29
  kv;
30
30
  kvPrefixes;
31
- queue;
32
- queueStarted;
31
+ inboxQueue;
32
+ outboxQueue;
33
+ inboxQueueStarted;
34
+ outboxQueueStarted;
33
35
  manuallyStartQueue;
34
36
  router;
35
37
  nodeInfoDispatcher;
@@ -66,8 +68,20 @@ export class FederationImpl {
66
68
  }),
67
69
  ...(options.kvPrefixes ?? {}),
68
70
  };
69
- this.queue = options.queue;
70
- this.queueStarted = false;
71
+ if (options.queue == null) {
72
+ this.inboxQueue = undefined;
73
+ this.outboxQueue = undefined;
74
+ }
75
+ else if ("enqueue" in options.queue && "listen" in options.queue) {
76
+ this.inboxQueue = options.queue;
77
+ this.outboxQueue = options.queue;
78
+ }
79
+ else {
80
+ this.inboxQueue = options.queue.inbox;
81
+ this.outboxQueue = options.queue.outbox;
82
+ }
83
+ this.inboxQueueStarted = false;
84
+ this.outboxQueueStarted = false;
71
85
  this.manuallyStartQueue = options.manuallyStartQueue ?? false;
72
86
  this.router = new Router({
73
87
  trailingSlashInsensitive: options.trailingSlashInsensitive,
@@ -112,13 +126,26 @@ export class FederationImpl {
112
126
  this.inboxRetryPolicy = options.inboxRetryPolicy ??
113
127
  createExponentialBackoffPolicy();
114
128
  }
115
- async #startQueue(ctxData, signal) {
116
- if (this.queue != null && !this.queueStarted) {
117
- const logger = getLogger(["fedify", "federation", "queue"]);
118
- logger.debug("Starting a task queue.");
119
- this.queueStarted = true;
120
- await this.queue?.listen((msg) => this.#listenQueue(ctxData, msg), { signal });
121
- }
129
+ async #startQueue(ctxData, signal, queue) {
130
+ if (this.inboxQueue == null && this.outboxQueue == null)
131
+ return;
132
+ const logger = getLogger(["fedify", "federation", "queue"]);
133
+ const promises = [];
134
+ if (this.inboxQueue != null && (queue == null || queue === "inbox") &&
135
+ !this.inboxQueueStarted) {
136
+ logger.debug("Starting an inbox task worker.");
137
+ this.inboxQueueStarted = true;
138
+ promises.push(this.inboxQueue.listen((msg) => this.#listenQueue(ctxData, msg), { signal }));
139
+ }
140
+ if (this.outboxQueue != null &&
141
+ this.outboxQueue !== this.inboxQueue &&
142
+ (queue == null || queue === "outbox") &&
143
+ !this.outboxQueueStarted) {
144
+ logger.debug("Starting an outbox task worker.");
145
+ this.outboxQueueStarted = true;
146
+ promises.push(this.outboxQueue.listen((msg) => this.#listenQueue(ctxData, msg), { signal }));
147
+ }
148
+ await Promise.all(promises);
122
149
  }
123
150
  #listenQueue(ctxData, message) {
124
151
  return withContext({ messageId: message.id }, async () => {
@@ -182,7 +209,7 @@ export class FederationImpl {
182
209
  if (delay != null) {
183
210
  logger.error("Failed to send activity {activityId} to {inbox} (attempt " +
184
211
  "#{attempt}); retry...:\n{error}", { ...logData, error });
185
- this.queue?.enqueue({
212
+ this.outboxQueue?.enqueue({
186
213
  ...message,
187
214
  attempt: message.attempt + 1,
188
215
  }, {
@@ -276,7 +303,7 @@ export class FederationImpl {
276
303
  activity: message.activity,
277
304
  recipient: message.identifier,
278
305
  });
279
- this.queue?.enqueue({
306
+ this.inboxQueue?.enqueue({
280
307
  ...message,
281
308
  attempt: message.attempt + 1,
282
309
  }, {
@@ -308,7 +335,7 @@ export class FederationImpl {
308
335
  });
309
336
  }
310
337
  startQueue(contextData, options = {}) {
311
- return this.#startQueue(contextData, options.signal);
338
+ return this.#startQueue(contextData, options.signal, options.queue);
312
339
  }
313
340
  createContext(urlOrRequest, contextData) {
314
341
  return urlOrRequest instanceof Request
@@ -928,7 +955,7 @@ export class FederationImpl {
928
955
  })),
929
956
  });
930
957
  }
931
- if (immediate || this.queue == null) {
958
+ if (immediate || this.outboxQueue == null) {
932
959
  if (immediate) {
933
960
  logger.debug("Sending activity immediately without queue since immediate option " +
934
961
  "is set.", { activityId: activity.id.href, activity: jsonLd });
@@ -973,7 +1000,7 @@ export class FederationImpl {
973
1000
  "Collection-Synchronization": await buildCollectionSynchronizationHeader(collectionSync, inboxes[inbox]),
974
1001
  },
975
1002
  };
976
- this.queue.enqueue(message);
1003
+ this.outboxQueue.enqueue(message);
977
1004
  }
978
1005
  }
979
1006
  fetch(request, options) {
@@ -1107,7 +1134,7 @@ export class FederationImpl {
1107
1134
  inboxContextFactory: context.toInboxContext.bind(context),
1108
1135
  kv: this.kv,
1109
1136
  kvPrefixes: this.kvPrefixes,
1110
- queue: this.queue,
1137
+ queue: this.inboxQueue,
1111
1138
  actorDispatcher: this.actorCallbacks?.dispatcher,
1112
1139
  inboxListeners: this.inboxListeners,
1113
1140
  inboxErrorHandler: this.inboxErrorHandler,
@@ -1838,7 +1865,7 @@ export class InboxContextImpl extends ContextImpl {
1838
1865
  activityId,
1839
1866
  activity: this.activity,
1840
1867
  });
1841
- if (options?.immediate || this.federation.queue == null) {
1868
+ if (options?.immediate || this.federation.outboxQueue == null) {
1842
1869
  if (options?.immediate) {
1843
1870
  logger.debug("Forwarding activity immediately without queue since immediate " +
1844
1871
  "option is set.");
@@ -1877,7 +1904,7 @@ export class InboxContextImpl extends ContextImpl {
1877
1904
  attempt: 0,
1878
1905
  headers: {},
1879
1906
  };
1880
- this.federation.queue.enqueue(message);
1907
+ this.federation.outboxQueue.enqueue(message);
1881
1908
  }
1882
1909
  }
1883
1910
  }
@@ -0,0 +1,24 @@
1
+ {
2
+ "@context": "https://www.w3.org/ns/activitystreams",
3
+ "id": "https://example.com/orderedcollectionpage",
4
+ "type": "OrderedCollectionPage",
5
+ "partOf": "https://example.com/orderedcollectionpage",
6
+ "totalItems": 1,
7
+ "orderedItems": [
8
+ {
9
+ "id": "https://example.com/activities/1",
10
+ "type": "Create",
11
+ "published": "2024-11-19T15:24:56Z",
12
+ "actor": "https://example.com/users/1",
13
+ "to": "https://www.w3.org/ns/activitystreams#Public",
14
+ "object": {
15
+ "id": "https://example.com/notes/1",
16
+ "type": "Note",
17
+ "content": "This is a simple note",
18
+ "attributedTo": "https://example.com/users/1",
19
+ "to": "https://www.w3.org/ns/activitystreams#Public",
20
+ "published": "2024-11-19T15:24:56Z"
21
+ }
22
+ }
23
+ ]
24
+ }
@@ -106,6 +106,7 @@ properties:
106
106
  and dropping any activities already seen.
107
107
  range:
108
108
  - "https://www.w3.org/ns/activitystreams#OrderedCollection"
109
+ - "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
109
110
 
110
111
  - singularName: outbox
111
112
  functional: true
@@ -124,6 +125,7 @@ properties:
124
125
  implementing and deploying the server.
125
126
  range:
126
127
  - "https://www.w3.org/ns/activitystreams#OrderedCollection"
128
+ - "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
127
129
 
128
130
  - singularName: following
129
131
  functional: true
@@ -106,6 +106,7 @@ properties:
106
106
  and dropping any activities already seen.
107
107
  range:
108
108
  - "https://www.w3.org/ns/activitystreams#OrderedCollection"
109
+ - "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
109
110
 
110
111
  - singularName: outbox
111
112
  functional: true
@@ -124,6 +125,7 @@ properties:
124
125
  implementing and deploying the server.
125
126
  range:
126
127
  - "https://www.w3.org/ns/activitystreams#OrderedCollection"
128
+ - "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
127
129
 
128
130
  - singularName: following
129
131
  functional: true
@@ -106,6 +106,7 @@ properties:
106
106
  and dropping any activities already seen.
107
107
  range:
108
108
  - "https://www.w3.org/ns/activitystreams#OrderedCollection"
109
+ - "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
109
110
 
110
111
  - singularName: outbox
111
112
  functional: true
@@ -124,6 +125,7 @@ properties:
124
125
  implementing and deploying the server.
125
126
  range:
126
127
  - "https://www.w3.org/ns/activitystreams#OrderedCollection"
128
+ - "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
127
129
 
128
130
  - singularName: following
129
131
  functional: true
@@ -106,6 +106,7 @@ properties:
106
106
  and dropping any activities already seen.
107
107
  range:
108
108
  - "https://www.w3.org/ns/activitystreams#OrderedCollection"
109
+ - "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
109
110
 
110
111
  - singularName: outbox
111
112
  functional: true
@@ -124,6 +125,7 @@ properties:
124
125
  implementing and deploying the server.
125
126
  range:
126
127
  - "https://www.w3.org/ns/activitystreams#OrderedCollection"
128
+ - "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
127
129
 
128
130
  - singularName: following
129
131
  functional: true
@@ -106,6 +106,7 @@ properties:
106
106
  and dropping any activities already seen.
107
107
  range:
108
108
  - "https://www.w3.org/ns/activitystreams#OrderedCollection"
109
+ - "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
109
110
 
110
111
  - singularName: outbox
111
112
  functional: true
@@ -124,6 +125,7 @@ properties:
124
125
  implementing and deploying the server.
125
126
  range:
126
127
  - "https://www.w3.org/ns/activitystreams#OrderedCollection"
128
+ - "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
127
129
 
128
130
  - singularName: following
129
131
  functional: true