@fedify/fedify 1.2.4 → 1.2.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 +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