@fedify/fedify 1.1.4 → 1.1.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. package/CHANGES.md +232 -0
  2. package/esm/federation/handler.js +15 -1
  3. package/esm/runtime/key.js +1 -1
  4. package/esm/sig/http.js +9 -1
  5. package/esm/testing/fixtures/example.com/orderedcollectionpage +24 -0
  6. package/esm/vocab/application.yaml +2 -0
  7. package/esm/vocab/group.yaml +2 -0
  8. package/esm/vocab/organization.yaml +2 -0
  9. package/esm/vocab/person.yaml +2 -0
  10. package/esm/vocab/service.yaml +2 -0
  11. package/esm/vocab/vocab.js +450 -110
  12. package/package.json +1 -1
  13. package/types/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/concat.d.ts.map +1 -1
  14. package/types/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/copy.d.ts.map +1 -1
  15. package/types/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/ends_with.d.ts.map +1 -1
  16. package/types/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/equals.d.ts.map +1 -1
  17. package/types/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/includes_needle.d.ts.map +1 -1
  18. package/types/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/index_of_needle.d.ts.map +1 -1
  19. package/types/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/last_index_of_needle.d.ts.map +1 -1
  20. package/types/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/mod.d.ts.map +1 -1
  21. package/types/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/repeat.d.ts.map +1 -1
  22. package/types/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/starts_with.d.ts.map +1 -1
  23. package/types/deps/jsr.io/@std/http/1.0.10/_negotiation/common.d.ts.map +1 -0
  24. package/types/deps/jsr.io/@std/http/1.0.10/_negotiation/encoding.d.ts.map +1 -0
  25. package/types/deps/jsr.io/@std/http/1.0.10/_negotiation/language.d.ts.map +1 -0
  26. package/types/deps/jsr.io/@std/http/1.0.10/_negotiation/media_type.d.ts.map +1 -0
  27. package/types/deps/jsr.io/@std/http/1.0.10/negotiation.d.ts.map +1 -0
  28. package/types/federation/handler.d.ts.map +1 -1
  29. package/types/sig/http.d.ts.map +1 -1
  30. package/types/vocab/vocab.d.ts +30 -30
  31. package/types/vocab/vocab.d.ts.map +1 -1
  32. package/types/deps/jsr.io/@std/http/1.0.9/_negotiation/common.d.ts.map +0 -1
  33. package/types/deps/jsr.io/@std/http/1.0.9/_negotiation/encoding.d.ts.map +0 -1
  34. package/types/deps/jsr.io/@std/http/1.0.9/_negotiation/language.d.ts.map +0 -1
  35. package/types/deps/jsr.io/@std/http/1.0.9/_negotiation/media_type.d.ts.map +0 -1
  36. package/types/deps/jsr.io/@std/http/1.0.9/negotiation.d.ts.map +0 -1
  37. /package/esm/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/concat.js +0 -0
  38. /package/esm/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/copy.js +0 -0
  39. /package/esm/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/ends_with.js +0 -0
  40. /package/esm/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/equals.js +0 -0
  41. /package/esm/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/includes_needle.js +0 -0
  42. /package/esm/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/index_of_needle.js +0 -0
  43. /package/esm/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/last_index_of_needle.js +0 -0
  44. /package/esm/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/mod.js +0 -0
  45. /package/esm/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/repeat.js +0 -0
  46. /package/esm/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/starts_with.js +0 -0
  47. /package/esm/deps/jsr.io/@std/http/{1.0.9 → 1.0.10}/_negotiation/common.js +0 -0
  48. /package/esm/deps/jsr.io/@std/http/{1.0.9 → 1.0.10}/_negotiation/encoding.js +0 -0
  49. /package/esm/deps/jsr.io/@std/http/{1.0.9 → 1.0.10}/_negotiation/language.js +0 -0
  50. /package/esm/deps/jsr.io/@std/http/{1.0.9 → 1.0.10}/_negotiation/media_type.js +0 -0
  51. /package/esm/deps/jsr.io/@std/http/{1.0.9 → 1.0.10}/negotiation.js +0 -0
  52. /package/types/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/concat.d.ts +0 -0
  53. /package/types/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/copy.d.ts +0 -0
  54. /package/types/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/ends_with.d.ts +0 -0
  55. /package/types/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/equals.d.ts +0 -0
  56. /package/types/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/includes_needle.d.ts +0 -0
  57. /package/types/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/index_of_needle.d.ts +0 -0
  58. /package/types/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/last_index_of_needle.d.ts +0 -0
  59. /package/types/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/mod.d.ts +0 -0
  60. /package/types/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/repeat.d.ts +0 -0
  61. /package/types/deps/jsr.io/@std/bytes/{1.0.3 → 1.0.4}/starts_with.d.ts +0 -0
  62. /package/types/deps/jsr.io/@std/http/{1.0.9 → 1.0.10}/_negotiation/common.d.ts +0 -0
  63. /package/types/deps/jsr.io/@std/http/{1.0.9 → 1.0.10}/_negotiation/encoding.d.ts +0 -0
  64. /package/types/deps/jsr.io/@std/http/{1.0.9 → 1.0.10}/_negotiation/language.d.ts +0 -0
  65. /package/types/deps/jsr.io/@std/http/{1.0.9 → 1.0.10}/_negotiation/media_type.d.ts +0 -0
  66. /package/types/deps/jsr.io/@std/http/{1.0.9 → 1.0.10}/negotiation.d.ts +0 -0
package/CHANGES.md CHANGED
@@ -3,6 +3,82 @@
3
3
  Fedify changelog
4
4
  ================
5
5
 
6
+ Version 1.1.6
7
+ -------------
8
+
9
+ Released on November 19, 2024.
10
+
11
+ - Fix a bug where `Actor`'s `inbox` and `outbox` properties had not been
12
+ able to be set to an `OrderedCollectionPage` object, even though it is
13
+ a subtype of `OrderedCollection` according to Activity Vocabulary
14
+ specification. [[#165]]
15
+
16
+ - The type of `Application()` constructor's `inbox` and `outbox` options
17
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
18
+ (was `OrderedCollection | null | undefined`).
19
+ - The type of `Application.clone()` method's `inbox` and `outbox` options
20
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
21
+ (was `OrderedCollection | null | undefined`).
22
+ - The return type of `Application.getInbox()` and
23
+ `Application.getOutbox()` methods is now `OrderedCollection |
24
+ OrderedCollectionPage | null` (was `OrderedCollection | null`).
25
+ - The type of `Group()` constructor's `inbox` and `outbox` options is
26
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
27
+ `OrderedCollection | null | undefined`).
28
+ - The type of `Group.clone()` method's `inbox` and `outbox` options is
29
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
30
+ `OrderedCollection | null | undefined`).
31
+ - The return type of `Group.getInbox()` and `Group.getOutbox()` methods
32
+ is now `OrderedCollection | OrderedCollectionPage | null` (was
33
+ `OrderedCollection | null`).
34
+ - The type of `Organization()` constructor's `inbox` and `outbox` options
35
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
36
+ (was `OrderedCollection | null | undefined`).
37
+ - The type of `Organization.clone()` method's `inbox` and `outbox` options
38
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
39
+ (was `OrderedCollection | null | undefined`).
40
+ - The return type of `Organization.getInbox()` and
41
+ `Organization.getOutbox()` methods is now `OrderedCollection |
42
+ OrderedCollectionPage | null` (was `OrderedCollection | null`).
43
+ - The type of `Person()` constructor's `inbox` and `outbox` options is
44
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
45
+ `OrderedCollection | null | undefined`).
46
+ - The type of `Person.clone()` method's `inbox` and `outbox` options is
47
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
48
+ `OrderedCollection | null | undefined`).
49
+ - The return type of `Person.getInbox()` and `Person.getOutbox()` methods
50
+ is now `OrderedCollection | OrderedCollectionPage | null` (was
51
+ `OrderedCollection | null`).
52
+ - The type of `Service()` constructor's `inbox` and `outbox` options is
53
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
54
+ `OrderedCollection | null | undefined`).
55
+ - The type of `Service.clone()` method's `inbox` and `outbox` options is
56
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
57
+ `OrderedCollection | null | undefined`).
58
+ - The return type of `Service.getInbox()` and `Service.getOutbox()`
59
+ methods is now `OrderedCollection | OrderedCollectionPage | null` (was
60
+ `OrderedCollection | null`).
61
+
62
+
63
+ Version 1.1.5
64
+ -------------
65
+
66
+ Released on December 14, 2024.
67
+
68
+ - Suppressed a `TypeError` with a message <q>unusable</q> due to Node.js's
69
+ mysterious behavior. [[#159]]
70
+
71
+ - The `verifyRequest()` function no longer throws a `TypeError`
72
+ when a given `Request` object's body is already consumed or locked.
73
+ Instead, it logs an error message to the `["fedify", "sig", "http"]`
74
+ logger category and returns `null`.
75
+ - The `Federation.fetch()` method no longer throws a `TypeError`
76
+ when a given `Request` object's body is already consumed or locked.
77
+ Instead, it logs an error message to the `["fedify", "federation",
78
+ "inbox"]` logger category and responds with a `500 Internal Server
79
+ Error`.
80
+
81
+
6
82
  Version 1.1.4
7
83
  -------------
8
84
 
@@ -149,6 +225,82 @@ Released on October 20, 2024.
149
225
  [#150]: https://github.com/dahlia/fedify/issues/150
150
226
 
151
227
 
228
+ Version 1.0.10
229
+ --------------
230
+
231
+ Released on December 19, 2024.
232
+
233
+ - Fix a bug where `Actor`'s `inbox` and `outbox` properties had not been
234
+ able to be set to an `OrderedCollectionPage` object, even though it is
235
+ a subtype of `OrderedCollection` according to Activity Vocabulary
236
+ specification. [[#165]]
237
+
238
+ - The type of `Application()` constructor's `inbox` and `outbox` options
239
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
240
+ (was `OrderedCollection | null | undefined`).
241
+ - The type of `Application.clone()` method's `inbox` and `outbox` options
242
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
243
+ (was `OrderedCollection | null | undefined`).
244
+ - The return type of `Application.getInbox()` and
245
+ `Application.getOutbox()` methods is now `OrderedCollection |
246
+ OrderedCollectionPage | null` (was `OrderedCollection | null`).
247
+ - The type of `Group()` constructor's `inbox` and `outbox` options is
248
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
249
+ `OrderedCollection | null | undefined`).
250
+ - The type of `Group.clone()` method's `inbox` and `outbox` options is
251
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
252
+ `OrderedCollection | null | undefined`).
253
+ - The return type of `Group.getInbox()` and `Group.getOutbox()` methods
254
+ is now `OrderedCollection | OrderedCollectionPage | null` (was
255
+ `OrderedCollection | null`).
256
+ - The type of `Organization()` constructor's `inbox` and `outbox` options
257
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
258
+ (was `OrderedCollection | null | undefined`).
259
+ - The type of `Organization.clone()` method's `inbox` and `outbox` options
260
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
261
+ (was `OrderedCollection | null | undefined`).
262
+ - The return type of `Organization.getInbox()` and
263
+ `Organization.getOutbox()` methods is now `OrderedCollection |
264
+ OrderedCollectionPage | null` (was `OrderedCollection | null`).
265
+ - The type of `Person()` constructor's `inbox` and `outbox` options is
266
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
267
+ `OrderedCollection | null | undefined`).
268
+ - The type of `Person.clone()` method's `inbox` and `outbox` options is
269
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
270
+ `OrderedCollection | null | undefined`).
271
+ - The return type of `Person.getInbox()` and `Person.getOutbox()` methods
272
+ is now `OrderedCollection | OrderedCollectionPage | null` (was
273
+ `OrderedCollection | null`).
274
+ - The type of `Service()` constructor's `inbox` and `outbox` options is
275
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
276
+ `OrderedCollection | null | undefined`).
277
+ - The type of `Service.clone()` method's `inbox` and `outbox` options is
278
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
279
+ `OrderedCollection | null | undefined`).
280
+ - The return type of `Service.getInbox()` and `Service.getOutbox()`
281
+ methods is now `OrderedCollection | OrderedCollectionPage | null` (was
282
+ `OrderedCollection | null`).
283
+
284
+
285
+ Version 1.0.9
286
+ -------------
287
+
288
+ Released on December 14, 2024.
289
+
290
+ - Suppressed a `TypeError` with a message <q>unusable</q> due to Node.js's
291
+ mysterious behavior. [[#159]]
292
+
293
+ - The `verifyRequest()` function no longer throws a `TypeError`
294
+ when a given `Request` object's body is already consumed or locked.
295
+ Instead, it logs an error message to the `["fedify", "sig", "http"]`
296
+ logger category and returns `null`.
297
+ - The `Federation.fetch()` method no longer throws a `TypeError`
298
+ when a given `Request` object's body is already consumed or locked.
299
+ Instead, it logs an error message to the `["fedify", "federation",
300
+ "inbox"]` logger category and responds with a `500 Internal Server
301
+ Error`.
302
+
303
+
152
304
  Version 1.0.8
153
305
  -------------
154
306
 
@@ -414,6 +566,86 @@ Released on September 26, 2024.
414
566
  [#137]: https://github.com/dahlia/fedify/issues/137
415
567
 
416
568
 
569
+ Version 0.15.8
570
+ --------------
571
+
572
+ Released on November 159, 2024.
573
+
574
+ - Fix a bug where `Actor`'s `inbox` and `outbox` properties had not been
575
+ able to be set to an `OrderedCollectionPage` object, even though it is
576
+ a subtype of `OrderedCollection` according to Activity Vocabulary
577
+ specification. [[#165]]
578
+
579
+ - The type of `Application()` constructor's `inbox` and `outbox` options
580
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
581
+ (was `OrderedCollection | null | undefined`).
582
+ - The type of `Application.clone()` method's `inbox` and `outbox` options
583
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
584
+ (was `OrderedCollection | null | undefined`).
585
+ - The return type of `Application.getInbox()` and
586
+ `Application.getOutbox()` methods is now `OrderedCollection |
587
+ OrderedCollectionPage | null` (was `OrderedCollection | null`).
588
+ - The type of `Group()` constructor's `inbox` and `outbox` options is
589
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
590
+ `OrderedCollection | null | undefined`).
591
+ - The type of `Group.clone()` method's `inbox` and `outbox` options is
592
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
593
+ `OrderedCollection | null | undefined`).
594
+ - The return type of `Group.getInbox()` and `Group.getOutbox()` methods
595
+ is now `OrderedCollection | OrderedCollectionPage | null` (was
596
+ `OrderedCollection | null`).
597
+ - The type of `Organization()` constructor's `inbox` and `outbox` options
598
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
599
+ (was `OrderedCollection | null | undefined`).
600
+ - The type of `Organization.clone()` method's `inbox` and `outbox` options
601
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
602
+ (was `OrderedCollection | null | undefined`).
603
+ - The return type of `Organization.getInbox()` and
604
+ `Organization.getOutbox()` methods is now `OrderedCollection |
605
+ OrderedCollectionPage | null` (was `OrderedCollection | null`).
606
+ - The type of `Person()` constructor's `inbox` and `outbox` options is
607
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
608
+ `OrderedCollection | null | undefined`).
609
+ - The type of `Person.clone()` method's `inbox` and `outbox` options is
610
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
611
+ `OrderedCollection | null | undefined`).
612
+ - The return type of `Person.getInbox()` and `Person.getOutbox()` methods
613
+ is now `OrderedCollection | OrderedCollectionPage | null` (was
614
+ `OrderedCollection | null`).
615
+ - The type of `Service()` constructor's `inbox` and `outbox` options is
616
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
617
+ `OrderedCollection | null | undefined`).
618
+ - The type of `Service.clone()` method's `inbox` and `outbox` options is
619
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
620
+ `OrderedCollection | null | undefined`).
621
+ - The return type of `Service.getInbox()` and `Service.getOutbox()`
622
+ methods is now `OrderedCollection | OrderedCollectionPage | null` (was
623
+ `OrderedCollection | null`).
624
+
625
+ [#165]: https://github.com/dahlia/fedify/issues/165
626
+
627
+
628
+ Version 0.15.7
629
+ --------------
630
+
631
+ Released on November 14, 2024.
632
+
633
+ - Suppressed a `TypeError` with a message <q>unusable</q> due to Node.js's
634
+ mysterious behavior. [[#159]]
635
+
636
+ - The `verifyRequest()` function no longer throws a `TypeError`
637
+ when a given `Request` object's body is already consumed or locked.
638
+ Instead, it logs an error message to the `["fedify", "sig", "http"]`
639
+ logger category and returns `null`.
640
+ - The `Federation.fetch()` method no longer throws a `TypeError`
641
+ when a given `Request` object's body is already consumed or locked.
642
+ Instead, it logs an error message to the `["fedify", "federation",
643
+ "inbox"]` logger category and responds with a `500 Internal Server
644
+ Error`.
645
+
646
+ [#159]: https://github.com/dahlia/fedify/issues/159
647
+
648
+
417
649
  Version 0.15.6
418
650
  --------------
419
651
 
@@ -1,6 +1,6 @@
1
1
  import * as dntShim from "../_dnt.shims.js";
2
2
  import { getLogger } from "@logtape/logtape";
3
- import { accepts } from "../deps/jsr.io/@std/http/1.0.9/negotiation.js";
3
+ import { accepts } from "../deps/jsr.io/@std/http/1.0.10/negotiation.js";
4
4
  import { verifyRequest } from "../sig/http.js";
5
5
  import { detachSignature, verifyJsonLd } from "../sig/ld.js";
6
6
  import { doesActorOwnKey } from "../sig/owner.js";
@@ -188,6 +188,20 @@ export async function handleInbox(request, { identifier, context, inboxContextFa
188
188
  return await onNotFound(request);
189
189
  }
190
190
  }
191
+ if (request.bodyUsed) {
192
+ logger.error("Request body has already been read.", { identifier });
193
+ return new Response("Internal server error.", {
194
+ status: 500,
195
+ headers: { "Content-Type": "text/plain; charset=utf-8" },
196
+ });
197
+ }
198
+ else if (request.body?.locked) {
199
+ logger.error("Request body is locked.", { identifier });
200
+ return new Response("Internal server error.", {
201
+ status: 500,
202
+ headers: { "Content-Type": "text/plain; charset=utf-8" },
203
+ });
204
+ }
191
205
  let json;
192
206
  try {
193
207
  json = await request.clone().json();
@@ -1,6 +1,6 @@
1
1
  import * as dntShim from "../_dnt.shims.js";
2
2
  import { createPublicKey } from "node:crypto";
3
- import { concat } from "../deps/jsr.io/@std/bytes/1.0.3/concat.js";
3
+ import { concat } from "../deps/jsr.io/@std/bytes/1.0.4/concat.js";
4
4
  import { decodeBase64, encodeBase64 } from "../deps/jsr.io/@std/encoding/1.0.5/base64.js";
5
5
  import { decodeBase64Url } from "../deps/jsr.io/@std/encoding/1.0.5/base64url.js";
6
6
  import { decodeHex } from "../deps/jsr.io/@std/encoding/1.0.5/hex.js";
package/esm/sig/http.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as dntShim from "../_dnt.shims.js";
2
2
  import { getLogger } from "@logtape/logtape";
3
- import { equals } from "../deps/jsr.io/@std/bytes/1.0.3/mod.js";
3
+ import { equals } from "../deps/jsr.io/@std/bytes/1.0.4/mod.js";
4
4
  import { decodeBase64, encodeBase64 } from "../deps/jsr.io/@std/encoding/1.0.5/base64.js";
5
5
  import { CryptographicKey } from "../vocab/vocab.js";
6
6
  import { fetchKey, validateCryptoKey } from "./key.js";
@@ -69,6 +69,14 @@ const supportedHashAlgorithms = {
69
69
  */
70
70
  export async function verifyRequest(request, { documentLoader, contextLoader, timeWindow, currentTime, keyCache } = {}) {
71
71
  const logger = getLogger(["fedify", "sig", "http"]);
72
+ if (request.bodyUsed) {
73
+ logger.error("Failed to verify; the request body is already consumed.", { url: request.url });
74
+ return null;
75
+ }
76
+ else if (request.body?.locked) {
77
+ logger.error("Failed to verify; the request body is locked.", { url: request.url });
78
+ return null;
79
+ }
72
80
  const originalRequest = request;
73
81
  request = request.clone();
74
82
  const dateHeader = request.headers.get("Date");
@@ -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
+ }
@@ -105,6 +105,7 @@ properties:
105
105
  and dropping any activities already seen.
106
106
  range:
107
107
  - "https://www.w3.org/ns/activitystreams#OrderedCollection"
108
+ - "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
108
109
 
109
110
  - singularName: outbox
110
111
  functional: true
@@ -123,6 +124,7 @@ properties:
123
124
  implementing and deploying the server.
124
125
  range:
125
126
  - "https://www.w3.org/ns/activitystreams#OrderedCollection"
127
+ - "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
126
128
 
127
129
  - singularName: following
128
130
  functional: true
@@ -105,6 +105,7 @@ properties:
105
105
  and dropping any activities already seen.
106
106
  range:
107
107
  - "https://www.w3.org/ns/activitystreams#OrderedCollection"
108
+ - "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
108
109
 
109
110
  - singularName: outbox
110
111
  functional: true
@@ -123,6 +124,7 @@ properties:
123
124
  implementing and deploying the server.
124
125
  range:
125
126
  - "https://www.w3.org/ns/activitystreams#OrderedCollection"
127
+ - "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
126
128
 
127
129
  - singularName: following
128
130
  functional: true
@@ -105,6 +105,7 @@ properties:
105
105
  and dropping any activities already seen.
106
106
  range:
107
107
  - "https://www.w3.org/ns/activitystreams#OrderedCollection"
108
+ - "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
108
109
 
109
110
  - singularName: outbox
110
111
  functional: true
@@ -123,6 +124,7 @@ properties:
123
124
  implementing and deploying the server.
124
125
  range:
125
126
  - "https://www.w3.org/ns/activitystreams#OrderedCollection"
127
+ - "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
126
128
 
127
129
  - singularName: following
128
130
  functional: true
@@ -105,6 +105,7 @@ properties:
105
105
  and dropping any activities already seen.
106
106
  range:
107
107
  - "https://www.w3.org/ns/activitystreams#OrderedCollection"
108
+ - "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
108
109
 
109
110
  - singularName: outbox
110
111
  functional: true
@@ -123,6 +124,7 @@ properties:
123
124
  implementing and deploying the server.
124
125
  range:
125
126
  - "https://www.w3.org/ns/activitystreams#OrderedCollection"
127
+ - "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
126
128
 
127
129
  - singularName: following
128
130
  functional: true
@@ -105,6 +105,7 @@ properties:
105
105
  and dropping any activities already seen.
106
106
  range:
107
107
  - "https://www.w3.org/ns/activitystreams#OrderedCollection"
108
+ - "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
108
109
 
109
110
  - singularName: outbox
110
111
  functional: true
@@ -123,6 +124,7 @@ properties:
123
124
  implementing and deploying the server.
124
125
  range:
125
126
  - "https://www.w3.org/ns/activitystreams#OrderedCollection"
127
+ - "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
126
128
 
127
129
  - singularName: following
128
130
  functional: true