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

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.
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