@fedify/fedify 1.2.4 → 1.2.6

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.
Files changed (66) hide show
  1. package/CHANGES.md +308 -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.2.6
7
+ -------------
8
+
9
+ Released on December 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.2.5
64
+ -------------
65
+
66
+ Released on November 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.2.4
7
83
  -------------
8
84
 
@@ -108,6 +184,82 @@ Released on October 31, 2024.
108
184
  [#118]: https://github.com/dahlia/fedify/issues/118
109
185
 
110
186
 
187
+ Version 1.1.6
188
+ -------------
189
+
190
+ Released on November 19, 2024.
191
+
192
+ - Fix a bug where `Actor`'s `inbox` and `outbox` properties had not been
193
+ able to be set to an `OrderedCollectionPage` object, even though it is
194
+ a subtype of `OrderedCollection` according to Activity Vocabulary
195
+ specification. [[#165]]
196
+
197
+ - The type of `Application()` constructor's `inbox` and `outbox` options
198
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
199
+ (was `OrderedCollection | null | undefined`).
200
+ - The type of `Application.clone()` method's `inbox` and `outbox` options
201
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
202
+ (was `OrderedCollection | null | undefined`).
203
+ - The return type of `Application.getInbox()` and
204
+ `Application.getOutbox()` methods is now `OrderedCollection |
205
+ OrderedCollectionPage | null` (was `OrderedCollection | null`).
206
+ - The type of `Group()` constructor's `inbox` and `outbox` options is
207
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
208
+ `OrderedCollection | null | undefined`).
209
+ - The type of `Group.clone()` method's `inbox` and `outbox` options is
210
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
211
+ `OrderedCollection | null | undefined`).
212
+ - The return type of `Group.getInbox()` and `Group.getOutbox()` methods
213
+ is now `OrderedCollection | OrderedCollectionPage | null` (was
214
+ `OrderedCollection | null`).
215
+ - The type of `Organization()` constructor's `inbox` and `outbox` options
216
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
217
+ (was `OrderedCollection | null | undefined`).
218
+ - The type of `Organization.clone()` method's `inbox` and `outbox` options
219
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
220
+ (was `OrderedCollection | null | undefined`).
221
+ - The return type of `Organization.getInbox()` and
222
+ `Organization.getOutbox()` methods is now `OrderedCollection |
223
+ OrderedCollectionPage | null` (was `OrderedCollection | null`).
224
+ - The type of `Person()` constructor's `inbox` and `outbox` options is
225
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
226
+ `OrderedCollection | null | undefined`).
227
+ - The type of `Person.clone()` method's `inbox` and `outbox` options is
228
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
229
+ `OrderedCollection | null | undefined`).
230
+ - The return type of `Person.getInbox()` and `Person.getOutbox()` methods
231
+ is now `OrderedCollection | OrderedCollectionPage | null` (was
232
+ `OrderedCollection | null`).
233
+ - The type of `Service()` constructor's `inbox` and `outbox` options is
234
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
235
+ `OrderedCollection | null | undefined`).
236
+ - The type of `Service.clone()` method's `inbox` and `outbox` options is
237
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
238
+ `OrderedCollection | null | undefined`).
239
+ - The return type of `Service.getInbox()` and `Service.getOutbox()`
240
+ methods is now `OrderedCollection | OrderedCollectionPage | null` (was
241
+ `OrderedCollection | null`).
242
+
243
+
244
+ Version 1.1.5
245
+ -------------
246
+
247
+ Released on December 14, 2024.
248
+
249
+ - Suppressed a `TypeError` with a message <q>unusable</q> due to Node.js's
250
+ mysterious behavior. [[#159]]
251
+
252
+ - The `verifyRequest()` function no longer throws a `TypeError`
253
+ when a given `Request` object's body is already consumed or locked.
254
+ Instead, it logs an error message to the `["fedify", "sig", "http"]`
255
+ logger category and returns `null`.
256
+ - The `Federation.fetch()` method no longer throws a `TypeError`
257
+ when a given `Request` object's body is already consumed or locked.
258
+ Instead, it logs an error message to the `["fedify", "federation",
259
+ "inbox"]` logger category and responds with a `500 Internal Server
260
+ Error`.
261
+
262
+
111
263
  Version 1.1.4
112
264
  -------------
113
265
 
@@ -254,6 +406,82 @@ Released on October 20, 2024.
254
406
  [#150]: https://github.com/dahlia/fedify/issues/150
255
407
 
256
408
 
409
+ Version 1.0.10
410
+ --------------
411
+
412
+ Released on December 19, 2024.
413
+
414
+ - Fix a bug where `Actor`'s `inbox` and `outbox` properties had not been
415
+ able to be set to an `OrderedCollectionPage` object, even though it is
416
+ a subtype of `OrderedCollection` according to Activity Vocabulary
417
+ specification. [[#165]]
418
+
419
+ - The type of `Application()` constructor's `inbox` and `outbox` options
420
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
421
+ (was `OrderedCollection | null | undefined`).
422
+ - The type of `Application.clone()` method's `inbox` and `outbox` options
423
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
424
+ (was `OrderedCollection | null | undefined`).
425
+ - The return type of `Application.getInbox()` and
426
+ `Application.getOutbox()` methods is now `OrderedCollection |
427
+ OrderedCollectionPage | null` (was `OrderedCollection | null`).
428
+ - The type of `Group()` constructor's `inbox` and `outbox` options is
429
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
430
+ `OrderedCollection | null | undefined`).
431
+ - The type of `Group.clone()` method's `inbox` and `outbox` options is
432
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
433
+ `OrderedCollection | null | undefined`).
434
+ - The return type of `Group.getInbox()` and `Group.getOutbox()` methods
435
+ is now `OrderedCollection | OrderedCollectionPage | null` (was
436
+ `OrderedCollection | null`).
437
+ - The type of `Organization()` constructor's `inbox` and `outbox` options
438
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
439
+ (was `OrderedCollection | null | undefined`).
440
+ - The type of `Organization.clone()` method's `inbox` and `outbox` options
441
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
442
+ (was `OrderedCollection | null | undefined`).
443
+ - The return type of `Organization.getInbox()` and
444
+ `Organization.getOutbox()` methods is now `OrderedCollection |
445
+ OrderedCollectionPage | null` (was `OrderedCollection | null`).
446
+ - The type of `Person()` constructor's `inbox` and `outbox` options is
447
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
448
+ `OrderedCollection | null | undefined`).
449
+ - The type of `Person.clone()` method's `inbox` and `outbox` options is
450
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
451
+ `OrderedCollection | null | undefined`).
452
+ - The return type of `Person.getInbox()` and `Person.getOutbox()` methods
453
+ is now `OrderedCollection | OrderedCollectionPage | null` (was
454
+ `OrderedCollection | null`).
455
+ - The type of `Service()` constructor's `inbox` and `outbox` options is
456
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
457
+ `OrderedCollection | null | undefined`).
458
+ - The type of `Service.clone()` method's `inbox` and `outbox` options is
459
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
460
+ `OrderedCollection | null | undefined`).
461
+ - The return type of `Service.getInbox()` and `Service.getOutbox()`
462
+ methods is now `OrderedCollection | OrderedCollectionPage | null` (was
463
+ `OrderedCollection | null`).
464
+
465
+
466
+ Version 1.0.9
467
+ -------------
468
+
469
+ Released on December 14, 2024.
470
+
471
+ - Suppressed a `TypeError` with a message <q>unusable</q> due to Node.js's
472
+ mysterious behavior. [[#159]]
473
+
474
+ - The `verifyRequest()` function no longer throws a `TypeError`
475
+ when a given `Request` object's body is already consumed or locked.
476
+ Instead, it logs an error message to the `["fedify", "sig", "http"]`
477
+ logger category and returns `null`.
478
+ - The `Federation.fetch()` method no longer throws a `TypeError`
479
+ when a given `Request` object's body is already consumed or locked.
480
+ Instead, it logs an error message to the `["fedify", "federation",
481
+ "inbox"]` logger category and responds with a `500 Internal Server
482
+ Error`.
483
+
484
+
257
485
  Version 1.0.8
258
486
  -------------
259
487
 
@@ -519,6 +747,86 @@ Released on September 26, 2024.
519
747
  [#137]: https://github.com/dahlia/fedify/issues/137
520
748
 
521
749
 
750
+ Version 0.15.8
751
+ --------------
752
+
753
+ Released on November 159, 2024.
754
+
755
+ - Fix a bug where `Actor`'s `inbox` and `outbox` properties had not been
756
+ able to be set to an `OrderedCollectionPage` object, even though it is
757
+ a subtype of `OrderedCollection` according to Activity Vocabulary
758
+ specification. [[#165]]
759
+
760
+ - The type of `Application()` constructor's `inbox` and `outbox` options
761
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
762
+ (was `OrderedCollection | null | undefined`).
763
+ - The type of `Application.clone()` method's `inbox` and `outbox` options
764
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
765
+ (was `OrderedCollection | null | undefined`).
766
+ - The return type of `Application.getInbox()` and
767
+ `Application.getOutbox()` methods is now `OrderedCollection |
768
+ OrderedCollectionPage | null` (was `OrderedCollection | null`).
769
+ - The type of `Group()` constructor's `inbox` and `outbox` options is
770
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
771
+ `OrderedCollection | null | undefined`).
772
+ - The type of `Group.clone()` method's `inbox` and `outbox` options is
773
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
774
+ `OrderedCollection | null | undefined`).
775
+ - The return type of `Group.getInbox()` and `Group.getOutbox()` methods
776
+ is now `OrderedCollection | OrderedCollectionPage | null` (was
777
+ `OrderedCollection | null`).
778
+ - The type of `Organization()` constructor's `inbox` and `outbox` options
779
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
780
+ (was `OrderedCollection | null | undefined`).
781
+ - The type of `Organization.clone()` method's `inbox` and `outbox` options
782
+ is now `OrderedCollection | OrderedCollectionPage | null | undefined`
783
+ (was `OrderedCollection | null | undefined`).
784
+ - The return type of `Organization.getInbox()` and
785
+ `Organization.getOutbox()` methods is now `OrderedCollection |
786
+ OrderedCollectionPage | null` (was `OrderedCollection | null`).
787
+ - The type of `Person()` constructor's `inbox` and `outbox` options is
788
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
789
+ `OrderedCollection | null | undefined`).
790
+ - The type of `Person.clone()` method's `inbox` and `outbox` options is
791
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
792
+ `OrderedCollection | null | undefined`).
793
+ - The return type of `Person.getInbox()` and `Person.getOutbox()` methods
794
+ is now `OrderedCollection | OrderedCollectionPage | null` (was
795
+ `OrderedCollection | null`).
796
+ - The type of `Service()` constructor's `inbox` and `outbox` options is
797
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
798
+ `OrderedCollection | null | undefined`).
799
+ - The type of `Service.clone()` method's `inbox` and `outbox` options is
800
+ now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
801
+ `OrderedCollection | null | undefined`).
802
+ - The return type of `Service.getInbox()` and `Service.getOutbox()`
803
+ methods is now `OrderedCollection | OrderedCollectionPage | null` (was
804
+ `OrderedCollection | null`).
805
+
806
+ [#165]: https://github.com/dahlia/fedify/issues/165
807
+
808
+
809
+ Version 0.15.7
810
+ --------------
811
+
812
+ Released on November 14, 2024.
813
+
814
+ - Suppressed a `TypeError` with a message <q>unusable</q> due to Node.js's
815
+ mysterious behavior. [[#159]]
816
+
817
+ - The `verifyRequest()` function no longer throws a `TypeError`
818
+ when a given `Request` object's body is already consumed or locked.
819
+ Instead, it logs an error message to the `["fedify", "sig", "http"]`
820
+ logger category and returns `null`.
821
+ - The `Federation.fetch()` method no longer throws a `TypeError`
822
+ when a given `Request` object's body is already consumed or locked.
823
+ Instead, it logs an error message to the `["fedify", "federation",
824
+ "inbox"]` logger category and responds with a `500 Internal Server
825
+ Error`.
826
+
827
+ [#159]: https://github.com/dahlia/fedify/issues/159
828
+
829
+
522
830
  Version 0.15.6
523
831
  --------------
524
832
 
@@ -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, { recipient, context, inboxContextFac
188
188
  return await onNotFound(request);
189
189
  }
190
190
  }
191
+ if (request.bodyUsed) {
192
+ logger.error("Request body has already been read.", { recipient });
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.", { recipient });
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
+ }
@@ -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