@fedify/fedify 0.9.0-dev.177 → 0.9.0-dev.181

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of @fedify/fedify might be problematic. Click here for more details.

Files changed (271) hide show
  1. package/CHANGES.md +13 -0
  2. package/esm/deps/jsr.io/@std/encoding/{0.224.2 → 0.224.3}/base64.js +14 -7
  3. package/esm/deps/jsr.io/@std/encoding/{0.224.2 → 0.224.3}/hex.js +24 -7
  4. package/esm/deps/jsr.io/@std/semver/0.224.1/can_parse.js +30 -0
  5. package/esm/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/compare.js +17 -0
  6. package/esm/deps/jsr.io/@std/semver/0.224.1/difference.js +37 -0
  7. package/esm/deps/jsr.io/@std/semver/0.224.1/equals.js +27 -0
  8. package/esm/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/format.js +14 -1
  9. package/esm/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/format_range.js +9 -1
  10. package/esm/deps/jsr.io/@std/semver/0.224.1/greater_or_equal.js +25 -0
  11. package/esm/deps/jsr.io/@std/semver/0.224.1/greater_than.js +27 -0
  12. package/esm/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/greater_than_range.js +19 -1
  13. package/esm/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/increment.js +18 -2
  14. package/esm/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/is_range.js +10 -0
  15. package/esm/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/is_semver.js +16 -0
  16. package/esm/deps/jsr.io/@std/semver/0.224.1/less_or_equal.js +25 -0
  17. package/esm/deps/jsr.io/@std/semver/0.224.1/less_than.js +25 -0
  18. package/esm/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/less_than_range.js +21 -3
  19. package/esm/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/max_satisfying.js +12 -0
  20. package/esm/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/min_satisfying.js +12 -0
  21. package/esm/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/mod.js +3 -2
  22. package/esm/deps/jsr.io/@std/semver/0.224.1/not_equals.js +24 -0
  23. package/esm/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/parse.js +16 -0
  24. package/esm/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/parse_range.js +18 -0
  25. package/esm/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/range_intersects.js +16 -1
  26. package/esm/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/range_max.js +16 -5
  27. package/esm/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/range_min.js +16 -5
  28. package/esm/deps/jsr.io/@std/semver/0.224.1/satisfies.js +26 -0
  29. package/esm/deps/jsr.io/@std/semver/0.224.1/test_range.js +28 -0
  30. package/esm/deps/jsr.io/@std/semver/0.224.1/try_parse.js +30 -0
  31. package/esm/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/try_parse_range.js +16 -1
  32. package/esm/federation/collection.js +1 -1
  33. package/esm/federation/handler.js +1 -1
  34. package/esm/federation/middleware.js +7 -3
  35. package/esm/httpsig/mod.js +60 -283
  36. package/esm/nodeinfo/types.js +1 -1
  37. package/esm/runtime/docloader.js +3 -3
  38. package/esm/runtime/key.js +1 -1
  39. package/esm/sig/http.js +229 -0
  40. package/esm/{httpsig → sig}/key.js +0 -3
  41. package/esm/sig/mod.js +8 -0
  42. package/esm/sig/owner.js +94 -0
  43. package/esm/vocab/tombstone.yaml +20 -0
  44. package/esm/vocab/vocab.js +165 -0
  45. package/package.json +7 -1
  46. package/types/deps/jsr.io/@std/assert/0.225.3/assert.d.ts.map +1 -0
  47. package/types/deps/jsr.io/@std/assert/0.225.3/assertion_error.d.ts.map +1 -0
  48. package/types/deps/jsr.io/@std/encoding/{0.224.2/_util.d.ts → 0.224.3/_validate_binary_like.d.ts} +1 -1
  49. package/types/deps/jsr.io/@std/encoding/0.224.3/_validate_binary_like.d.ts.map +1 -0
  50. package/types/deps/jsr.io/@std/encoding/{0.224.2 → 0.224.3}/base64.d.ts +9 -4
  51. package/types/deps/jsr.io/@std/encoding/0.224.3/base64.d.ts.map +1 -0
  52. package/types/deps/jsr.io/@std/encoding/0.224.3/hex.d.ts +37 -0
  53. package/types/deps/jsr.io/@std/encoding/0.224.3/hex.d.ts.map +1 -0
  54. package/types/deps/jsr.io/@std/http/{0.224.1 → 0.224.2}/_negotiation/common.d.ts.map +1 -1
  55. package/types/deps/jsr.io/@std/http/{0.224.1 → 0.224.2}/_negotiation/encoding.d.ts.map +1 -1
  56. package/types/deps/jsr.io/@std/http/{0.224.1 → 0.224.2}/_negotiation/language.d.ts.map +1 -1
  57. package/types/deps/jsr.io/@std/http/{0.224.1 → 0.224.2}/_negotiation/media_type.d.ts.map +1 -1
  58. package/types/deps/jsr.io/@std/http/{0.224.1 → 0.224.2}/negotiation.d.ts +27 -6
  59. package/types/deps/jsr.io/@std/http/0.224.2/negotiation.d.ts.map +1 -0
  60. package/types/deps/jsr.io/@std/semver/0.224.1/_constants.d.ts.map +1 -0
  61. package/types/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/_shared.d.ts.map +1 -1
  62. package/types/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/_test_comparator_set.d.ts.map +1 -1
  63. package/types/deps/jsr.io/@std/semver/0.224.1/can_parse.d.ts +17 -0
  64. package/types/deps/jsr.io/@std/semver/0.224.1/can_parse.d.ts.map +1 -0
  65. package/types/deps/jsr.io/@std/semver/0.224.1/compare.d.ts +28 -0
  66. package/types/deps/jsr.io/@std/semver/0.224.1/compare.d.ts.map +1 -0
  67. package/types/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/constants.d.ts.map +1 -1
  68. package/types/deps/jsr.io/@std/semver/0.224.1/difference.d.ts +27 -0
  69. package/types/deps/jsr.io/@std/semver/0.224.1/difference.d.ts.map +1 -0
  70. package/types/deps/jsr.io/@std/semver/0.224.1/equals.d.ts +24 -0
  71. package/types/deps/jsr.io/@std/semver/0.224.1/equals.d.ts.map +1 -0
  72. package/types/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/format.d.ts +14 -1
  73. package/types/deps/jsr.io/@std/semver/0.224.1/format.d.ts.map +1 -0
  74. package/types/deps/jsr.io/@std/semver/0.224.1/format_range.d.ts +17 -0
  75. package/types/deps/jsr.io/@std/semver/0.224.1/format_range.d.ts.map +1 -0
  76. package/types/deps/jsr.io/@std/semver/0.224.1/greater_or_equal.d.ts +24 -0
  77. package/types/deps/jsr.io/@std/semver/0.224.1/greater_or_equal.d.ts.map +1 -0
  78. package/types/deps/jsr.io/@std/semver/0.224.1/greater_than.d.ts +24 -0
  79. package/types/deps/jsr.io/@std/semver/0.224.1/greater_than.d.ts.map +1 -0
  80. package/types/deps/jsr.io/@std/semver/0.224.1/greater_than_range.d.ts +22 -0
  81. package/types/deps/jsr.io/@std/semver/0.224.1/greater_than_range.d.ts.map +1 -0
  82. package/types/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/increment.d.ts +18 -2
  83. package/types/deps/jsr.io/@std/semver/0.224.1/increment.d.ts.map +1 -0
  84. package/types/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/is_range.d.ts +10 -0
  85. package/types/deps/jsr.io/@std/semver/0.224.1/is_range.d.ts.map +1 -0
  86. package/types/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/is_semver.d.ts +16 -0
  87. package/types/deps/jsr.io/@std/semver/0.224.1/is_semver.d.ts.map +1 -0
  88. package/types/deps/jsr.io/@std/semver/0.224.1/less_or_equal.d.ts +24 -0
  89. package/types/deps/jsr.io/@std/semver/0.224.1/less_or_equal.d.ts.map +1 -0
  90. package/types/deps/jsr.io/@std/semver/0.224.1/less_than.d.ts +24 -0
  91. package/types/deps/jsr.io/@std/semver/0.224.1/less_than.d.ts.map +1 -0
  92. package/types/deps/jsr.io/@std/semver/0.224.1/less_than_range.d.ts +22 -0
  93. package/types/deps/jsr.io/@std/semver/0.224.1/less_than_range.d.ts.map +1 -0
  94. package/types/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/max_satisfying.d.ts +12 -0
  95. package/types/deps/jsr.io/@std/semver/0.224.1/max_satisfying.d.ts.map +1 -0
  96. package/types/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/min_satisfying.d.ts +12 -0
  97. package/types/deps/jsr.io/@std/semver/0.224.1/min_satisfying.d.ts.map +1 -0
  98. package/types/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/mod.d.ts +3 -2
  99. package/types/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/mod.d.ts.map +1 -1
  100. package/types/deps/jsr.io/@std/semver/0.224.1/not_equals.d.ts +23 -0
  101. package/types/deps/jsr.io/@std/semver/0.224.1/not_equals.d.ts.map +1 -0
  102. package/types/deps/jsr.io/@std/semver/0.224.1/parse.d.ts +25 -0
  103. package/types/deps/jsr.io/@std/semver/0.224.1/parse.d.ts.map +1 -0
  104. package/types/deps/jsr.io/@std/semver/0.224.1/parse_range.d.ts +26 -0
  105. package/types/deps/jsr.io/@std/semver/0.224.1/parse_range.d.ts.map +1 -0
  106. package/types/deps/jsr.io/@std/semver/0.224.1/range_intersects.d.ts +24 -0
  107. package/types/deps/jsr.io/@std/semver/0.224.1/range_intersects.d.ts.map +1 -0
  108. package/types/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/range_max.d.ts +16 -5
  109. package/types/deps/jsr.io/@std/semver/0.224.1/range_max.d.ts.map +1 -0
  110. package/types/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/range_min.d.ts +16 -5
  111. package/types/deps/jsr.io/@std/semver/0.224.1/range_min.d.ts.map +1 -0
  112. package/types/deps/jsr.io/@std/semver/0.224.1/satisfies.d.ts +24 -0
  113. package/types/deps/jsr.io/@std/semver/0.224.1/satisfies.d.ts.map +1 -0
  114. package/types/deps/jsr.io/@std/semver/0.224.1/test_range.d.ts +27 -0
  115. package/types/deps/jsr.io/@std/semver/0.224.1/test_range.d.ts.map +1 -0
  116. package/types/deps/jsr.io/@std/semver/0.224.1/try_parse.d.ts +21 -0
  117. package/types/deps/jsr.io/@std/semver/0.224.1/try_parse.d.ts.map +1 -0
  118. package/types/deps/jsr.io/@std/semver/0.224.1/try_parse_range.d.ts +23 -0
  119. package/types/deps/jsr.io/@std/semver/0.224.1/try_parse_range.d.ts.map +1 -0
  120. package/types/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/types.d.ts +7 -2
  121. package/types/deps/jsr.io/@std/semver/0.224.1/types.d.ts.map +1 -0
  122. package/types/deps/jsr.io/@std/text/{0.224.0 → 0.224.1}/_util.d.ts.map +1 -1
  123. package/types/deps/jsr.io/@std/text/{0.224.0 → 0.224.1}/case.d.ts.map +1 -1
  124. package/types/deps/jsr.io/@std/text/0.224.1/closest_string.d.ts.map +1 -0
  125. package/types/deps/jsr.io/@std/text/0.224.1/compare_similarity.d.ts.map +1 -0
  126. package/types/deps/jsr.io/@std/text/{0.224.0 → 0.224.1}/levenshtein_distance.d.ts.map +1 -1
  127. package/types/deps/jsr.io/@std/text/0.224.1/mod.d.ts.map +1 -0
  128. package/types/deps/jsr.io/@std/text/0.224.1/word_similarity_sort.d.ts.map +1 -0
  129. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/_dumper/dumper.d.ts.map +1 -1
  130. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/_dumper/dumper_state.d.ts.map +1 -1
  131. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/_error.d.ts.map +1 -1
  132. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/_loader/loader.d.ts.map +1 -1
  133. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/_loader/loader_state.d.ts.map +1 -1
  134. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/_mark.d.ts.map +1 -1
  135. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/_state.d.ts.map +1 -1
  136. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/_type/binary.d.ts.map +1 -1
  137. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/_type/bool.d.ts.map +1 -1
  138. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/_type/float.d.ts.map +1 -1
  139. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/_type/function.d.ts.map +1 -1
  140. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/_type/int.d.ts.map +1 -1
  141. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/_type/map.d.ts.map +1 -1
  142. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/_type/merge.d.ts.map +1 -1
  143. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/_type/mod.d.ts.map +1 -1
  144. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/_type/nil.d.ts.map +1 -1
  145. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/_type/omap.d.ts.map +1 -1
  146. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/_type/pairs.d.ts.map +1 -1
  147. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/_type/regexp.d.ts.map +1 -1
  148. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/_type/seq.d.ts.map +1 -1
  149. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/_type/set.d.ts.map +1 -1
  150. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/_type/str.d.ts.map +1 -1
  151. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/_type/timestamp.d.ts.map +1 -1
  152. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/_type/undefined.d.ts.map +1 -1
  153. package/types/deps/jsr.io/@std/yaml/0.224.1/_utils.d.ts.map +1 -0
  154. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/mod.d.ts.map +1 -1
  155. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/parse.d.ts.map +1 -1
  156. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/schema/core.d.ts.map +1 -1
  157. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/schema/default.d.ts.map +1 -1
  158. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/schema/extended.d.ts.map +1 -1
  159. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/schema/failsafe.d.ts.map +1 -1
  160. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/schema/json.d.ts.map +1 -1
  161. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/schema/mod.d.ts.map +1 -1
  162. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/schema.d.ts.map +1 -1
  163. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/stringify.d.ts.map +1 -1
  164. package/types/deps/jsr.io/@std/yaml/{0.224.0 → 0.224.1}/type.d.ts.map +1 -1
  165. package/types/federation/middleware.d.ts.map +1 -1
  166. package/types/httpsig/mod.d.ts +45 -48
  167. package/types/httpsig/mod.d.ts.map +1 -1
  168. package/types/nodeinfo/types.d.ts +1 -1
  169. package/types/sig/http.d.ts +54 -0
  170. package/types/sig/http.d.ts.map +1 -0
  171. package/types/sig/http.test.d.ts.map +1 -0
  172. package/types/{httpsig → sig}/key.d.ts +0 -3
  173. package/types/sig/key.d.ts.map +1 -0
  174. package/types/sig/key.test.d.ts.map +1 -0
  175. package/types/sig/mod.d.ts +9 -0
  176. package/types/sig/mod.d.ts.map +1 -0
  177. package/types/sig/owner.d.ts +50 -0
  178. package/types/sig/owner.d.ts.map +1 -0
  179. package/types/sig/owner.test.d.ts.map +1 -0
  180. package/types/vocab/vocab.d.ts +143 -0
  181. package/types/vocab/vocab.d.ts.map +1 -1
  182. package/esm/deps/jsr.io/@std/semver/0.224.0/can_parse.js +0 -15
  183. package/esm/deps/jsr.io/@std/semver/0.224.0/difference.js +0 -16
  184. package/esm/deps/jsr.io/@std/semver/0.224.0/equals.js +0 -11
  185. package/esm/deps/jsr.io/@std/semver/0.224.0/greater_or_equal.js +0 -9
  186. package/esm/deps/jsr.io/@std/semver/0.224.0/greater_than.js +0 -11
  187. package/esm/deps/jsr.io/@std/semver/0.224.0/less_or_equal.js +0 -9
  188. package/esm/deps/jsr.io/@std/semver/0.224.0/less_than.js +0 -9
  189. package/esm/deps/jsr.io/@std/semver/0.224.0/not_equals.js +0 -9
  190. package/esm/deps/jsr.io/@std/semver/0.224.0/satisfies.js +0 -11
  191. package/esm/deps/jsr.io/@std/semver/0.224.0/test_range.js +0 -13
  192. package/esm/deps/jsr.io/@std/semver/0.224.0/try_parse.js +0 -17
  193. package/types/deps/jsr.io/@std/encoding/0.224.2/_util.d.ts.map +0 -1
  194. package/types/deps/jsr.io/@std/encoding/0.224.2/base64.d.ts.map +0 -1
  195. package/types/deps/jsr.io/@std/encoding/0.224.2/hex.d.ts +0 -24
  196. package/types/deps/jsr.io/@std/encoding/0.224.2/hex.d.ts.map +0 -1
  197. package/types/deps/jsr.io/@std/http/0.224.1/negotiation.d.ts.map +0 -1
  198. package/types/deps/jsr.io/@std/semver/0.224.0/_constants.d.ts.map +0 -1
  199. package/types/deps/jsr.io/@std/semver/0.224.0/can_parse.d.ts +0 -2
  200. package/types/deps/jsr.io/@std/semver/0.224.0/can_parse.d.ts.map +0 -1
  201. package/types/deps/jsr.io/@std/semver/0.224.0/compare.d.ts +0 -11
  202. package/types/deps/jsr.io/@std/semver/0.224.0/compare.d.ts.map +0 -1
  203. package/types/deps/jsr.io/@std/semver/0.224.0/difference.d.ts +0 -6
  204. package/types/deps/jsr.io/@std/semver/0.224.0/difference.d.ts.map +0 -1
  205. package/types/deps/jsr.io/@std/semver/0.224.0/equals.d.ts +0 -8
  206. package/types/deps/jsr.io/@std/semver/0.224.0/equals.d.ts.map +0 -1
  207. package/types/deps/jsr.io/@std/semver/0.224.0/format.d.ts.map +0 -1
  208. package/types/deps/jsr.io/@std/semver/0.224.0/format_range.d.ts +0 -9
  209. package/types/deps/jsr.io/@std/semver/0.224.0/format_range.d.ts.map +0 -1
  210. package/types/deps/jsr.io/@std/semver/0.224.0/greater_or_equal.d.ts +0 -8
  211. package/types/deps/jsr.io/@std/semver/0.224.0/greater_or_equal.d.ts.map +0 -1
  212. package/types/deps/jsr.io/@std/semver/0.224.0/greater_than.d.ts +0 -8
  213. package/types/deps/jsr.io/@std/semver/0.224.0/greater_than.d.ts.map +0 -1
  214. package/types/deps/jsr.io/@std/semver/0.224.0/greater_than_range.d.ts +0 -4
  215. package/types/deps/jsr.io/@std/semver/0.224.0/greater_than_range.d.ts.map +0 -1
  216. package/types/deps/jsr.io/@std/semver/0.224.0/increment.d.ts.map +0 -1
  217. package/types/deps/jsr.io/@std/semver/0.224.0/is_range.d.ts.map +0 -1
  218. package/types/deps/jsr.io/@std/semver/0.224.0/is_semver.d.ts.map +0 -1
  219. package/types/deps/jsr.io/@std/semver/0.224.0/less_or_equal.d.ts +0 -8
  220. package/types/deps/jsr.io/@std/semver/0.224.0/less_or_equal.d.ts.map +0 -1
  221. package/types/deps/jsr.io/@std/semver/0.224.0/less_than.d.ts +0 -8
  222. package/types/deps/jsr.io/@std/semver/0.224.0/less_than.d.ts.map +0 -1
  223. package/types/deps/jsr.io/@std/semver/0.224.0/less_than_range.d.ts +0 -4
  224. package/types/deps/jsr.io/@std/semver/0.224.0/less_than_range.d.ts.map +0 -1
  225. package/types/deps/jsr.io/@std/semver/0.224.0/max_satisfying.d.ts.map +0 -1
  226. package/types/deps/jsr.io/@std/semver/0.224.0/min_satisfying.d.ts.map +0 -1
  227. package/types/deps/jsr.io/@std/semver/0.224.0/not_equals.d.ts +0 -8
  228. package/types/deps/jsr.io/@std/semver/0.224.0/not_equals.d.ts.map +0 -1
  229. package/types/deps/jsr.io/@std/semver/0.224.0/parse.d.ts +0 -9
  230. package/types/deps/jsr.io/@std/semver/0.224.0/parse.d.ts.map +0 -1
  231. package/types/deps/jsr.io/@std/semver/0.224.0/parse_range.d.ts +0 -8
  232. package/types/deps/jsr.io/@std/semver/0.224.0/parse_range.d.ts.map +0 -1
  233. package/types/deps/jsr.io/@std/semver/0.224.0/range_intersects.d.ts +0 -9
  234. package/types/deps/jsr.io/@std/semver/0.224.0/range_intersects.d.ts.map +0 -1
  235. package/types/deps/jsr.io/@std/semver/0.224.0/range_max.d.ts.map +0 -1
  236. package/types/deps/jsr.io/@std/semver/0.224.0/range_min.d.ts.map +0 -1
  237. package/types/deps/jsr.io/@std/semver/0.224.0/satisfies.d.ts +0 -9
  238. package/types/deps/jsr.io/@std/semver/0.224.0/satisfies.d.ts.map +0 -1
  239. package/types/deps/jsr.io/@std/semver/0.224.0/test_range.d.ts +0 -12
  240. package/types/deps/jsr.io/@std/semver/0.224.0/test_range.d.ts.map +0 -1
  241. package/types/deps/jsr.io/@std/semver/0.224.0/try_parse.d.ts +0 -8
  242. package/types/deps/jsr.io/@std/semver/0.224.0/try_parse.d.ts.map +0 -1
  243. package/types/deps/jsr.io/@std/semver/0.224.0/try_parse_range.d.ts +0 -8
  244. package/types/deps/jsr.io/@std/semver/0.224.0/try_parse_range.d.ts.map +0 -1
  245. package/types/deps/jsr.io/@std/semver/0.224.0/types.d.ts.map +0 -1
  246. package/types/deps/jsr.io/@std/text/0.224.0/closest_string.d.ts.map +0 -1
  247. package/types/deps/jsr.io/@std/text/0.224.0/compare_similarity.d.ts.map +0 -1
  248. package/types/deps/jsr.io/@std/text/0.224.0/mod.d.ts.map +0 -1
  249. package/types/deps/jsr.io/@std/text/0.224.0/word_similarity_sort.d.ts.map +0 -1
  250. package/types/deps/jsr.io/@std/yaml/0.224.0/_utils.d.ts.map +0 -1
  251. package/types/httpsig/key.d.ts.map +0 -1
  252. package/types/httpsig/key.test.d.ts.map +0 -1
  253. /package/esm/deps/jsr.io/@std/encoding/{0.224.2/_util.js → 0.224.3/_validate_binary_like.js} +0 -0
  254. /package/esm/deps/jsr.io/@std/http/{0.224.1 → 0.224.2}/_negotiation/common.js +0 -0
  255. /package/esm/deps/jsr.io/@std/http/{0.224.1 → 0.224.2}/_negotiation/encoding.js +0 -0
  256. /package/esm/deps/jsr.io/@std/http/{0.224.1 → 0.224.2}/_negotiation/language.js +0 -0
  257. /package/esm/deps/jsr.io/@std/http/{0.224.1 → 0.224.2}/_negotiation/media_type.js +0 -0
  258. /package/esm/deps/jsr.io/@std/http/{0.224.1 → 0.224.2}/negotiation.js +0 -0
  259. /package/esm/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/_constants.js +0 -0
  260. /package/esm/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/_shared.js +0 -0
  261. /package/esm/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/_test_comparator_set.js +0 -0
  262. /package/esm/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/constants.js +0 -0
  263. /package/esm/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/types.js +0 -0
  264. /package/types/deps/jsr.io/@std/http/{0.224.1 → 0.224.2}/_negotiation/common.d.ts +0 -0
  265. /package/types/deps/jsr.io/@std/http/{0.224.1 → 0.224.2}/_negotiation/encoding.d.ts +0 -0
  266. /package/types/deps/jsr.io/@std/http/{0.224.1 → 0.224.2}/_negotiation/language.d.ts +0 -0
  267. /package/types/deps/jsr.io/@std/http/{0.224.1 → 0.224.2}/_negotiation/media_type.d.ts +0 -0
  268. /package/types/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/_constants.d.ts +0 -0
  269. /package/types/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/_shared.d.ts +0 -0
  270. /package/types/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/_test_comparator_set.d.ts +0 -0
  271. /package/types/deps/jsr.io/@std/semver/{0.224.0 → 0.224.1}/constants.d.ts +0 -0
@@ -1,5 +1,5 @@
1
1
  import * as dntShim from "../_dnt.shims.js";
2
- import { decodeBase64, encodeBase64 } from "../deps/jsr.io/@std/encoding/0.224.2/base64.js";
2
+ import { decodeBase64, encodeBase64 } from "../deps/jsr.io/@std/encoding/0.224.3/base64.js";
3
3
  /**
4
4
  * Imports a PEM-SPKI formatted public key.
5
5
  * @param pem The PEM-SPKI formatted public key.
@@ -0,0 +1,229 @@
1
+ import * as dntShim from "../_dnt.shims.js";
2
+ import { getLogger } from "@logtape/logtape";
3
+ import { equals } from "../deps/jsr.io/@std/bytes/0.224.0/mod.js";
4
+ import { decodeBase64, encodeBase64 } from "../deps/jsr.io/@std/encoding/0.224.3/base64.js";
5
+ import { fetchDocumentLoader, } from "../runtime/docloader.js";
6
+ import { isActor } from "../vocab/actor.js";
7
+ import { CryptographicKey, Object as ASObject } from "../vocab/vocab.js";
8
+ import { validateCryptoKey } from "./key.js";
9
+ /**
10
+ * Signs a request using the given private key.
11
+ * @param request The request to sign.
12
+ * @param privateKey The private key to use for signing.
13
+ * @param keyId The key ID to use for the signature. It will be used by the
14
+ * verifier.
15
+ * @returns The signed request.
16
+ * @throws {TypeError} If the private key is invalid or unsupported.
17
+ */
18
+ export async function signRequest(request, privateKey, keyId) {
19
+ validateCryptoKey(privateKey, "private");
20
+ const url = new URL(request.url);
21
+ const body = request.method !== "GET" && request.method !== "HEAD"
22
+ ? await request.arrayBuffer()
23
+ : null;
24
+ const headers = new Headers(request.headers);
25
+ if (!headers.has("Host")) {
26
+ headers.set("Host", url.host);
27
+ }
28
+ if (!headers.has("Digest") && body != null) {
29
+ const digest = await dntShim.crypto.subtle.digest("SHA-256", body);
30
+ headers.set("Digest", `sha-256=${encodeBase64(digest)}`);
31
+ }
32
+ if (!headers.has("Date")) {
33
+ headers.set("Date", new Date().toUTCString());
34
+ }
35
+ const serialized = [
36
+ ["(request-target)", `${request.method.toLowerCase()} ${url.pathname}`],
37
+ ...headers,
38
+ ];
39
+ const headerNames = serialized.map(([name]) => name);
40
+ const message = serialized
41
+ .map(([name, value]) => `${name}: ${value.trim()}`).join("\n");
42
+ // TODO: support other than RSASSA-PKCS1-v1_5:
43
+ const signature = await dntShim.crypto.subtle.sign("RSASSA-PKCS1-v1_5", privateKey, new TextEncoder().encode(message));
44
+ const sigHeader = `keyId="${keyId.href}",headers="${headerNames.join(" ")}",signature="${encodeBase64(signature)}"`;
45
+ headers.set("Signature", sigHeader);
46
+ return new Request(request, {
47
+ headers,
48
+ body,
49
+ });
50
+ }
51
+ const supportedHashAlgorithms = {
52
+ "sha": "SHA-1",
53
+ "sha-256": "SHA-256",
54
+ "sha-512": "SHA-512",
55
+ };
56
+ /**
57
+ * Verifies the signature of a request.
58
+ *
59
+ * Note that this function consumes the request body, so it should not be used
60
+ * if the request body is already consumed. Consuming the request body after
61
+ * calling this function is okay, since this function clones the request
62
+ * under the hood.
63
+ *
64
+ * @param request The request to verify.
65
+ * @param options Options for verifying the request.
66
+ * @returns The public key of the verified signature, or `null` if the signature
67
+ * could not be verified.
68
+ */
69
+ export async function verifyRequest(request, { documentLoader, contextLoader, timeWindow, currentTime } = {}) {
70
+ const logger = getLogger(["fedify", "sig", "http"]);
71
+ request = request.clone();
72
+ const dateHeader = request.headers.get("Date");
73
+ if (dateHeader == null) {
74
+ logger.debug("Failed to verify; no Date header found.", { headers: Object.fromEntries(request.headers.entries()) });
75
+ return null;
76
+ }
77
+ const sigHeader = request.headers.get("Signature");
78
+ if (sigHeader == null) {
79
+ logger.debug("Failed to verify; no Signature header found.", { headers: Object.fromEntries(request.headers.entries()) });
80
+ return null;
81
+ }
82
+ const digestHeader = request.headers.get("Digest");
83
+ if (request.method !== "GET" && request.method !== "HEAD" &&
84
+ digestHeader == null) {
85
+ logger.debug("Failed to verify; no Digest header found.", { headers: Object.fromEntries(request.headers.entries()) });
86
+ return null;
87
+ }
88
+ let body = null;
89
+ if (digestHeader != null) {
90
+ body = await request.arrayBuffer();
91
+ const digests = digestHeader.split(",").map((pair) => pair.includes("=") ? pair.split("=", 2) : [pair, ""]);
92
+ let matched = false;
93
+ for (let [algo, digestBase64] of digests) {
94
+ algo = algo.trim().toLowerCase();
95
+ if (!(algo in supportedHashAlgorithms))
96
+ continue;
97
+ const digest = decodeBase64(digestBase64);
98
+ const expectedDigest = await dntShim.crypto.subtle.digest(supportedHashAlgorithms[algo], body);
99
+ if (!equals(digest, new Uint8Array(expectedDigest))) {
100
+ logger.debug("Failed to verify; digest mismatch ({algorithm}): " +
101
+ "{digest} != {expectedDigest}.", {
102
+ algorithm: algo,
103
+ digest: digestBase64,
104
+ expectedDigest: encodeBase64(expectedDigest),
105
+ });
106
+ return null;
107
+ }
108
+ matched = true;
109
+ }
110
+ if (!matched) {
111
+ logger.debug("Failed to verify; no supported digest algorithm found. " +
112
+ "Supported: {supportedAlgorithms}; found: {algorithms}.", {
113
+ supportedAlgorithms: Object.keys(supportedHashAlgorithms),
114
+ algorithms: digests.map(([algo]) => algo),
115
+ });
116
+ return null;
117
+ }
118
+ }
119
+ const date = dntShim.Temporal.Instant.from(new Date(dateHeader).toISOString());
120
+ const now = currentTime ?? dntShim.Temporal.Now.instant();
121
+ const tw = timeWindow ?? { minutes: 1 };
122
+ if (dntShim.Temporal.Instant.compare(date, now.add(tw)) > 0) {
123
+ logger.debug("Failed to verify; Date is too far in the future.", { date: date.toString(), now: now.toString() });
124
+ return null;
125
+ }
126
+ else if (dntShim.Temporal.Instant.compare(date, now.subtract(tw)) < 0) {
127
+ logger.debug("Failed to verify; Date is too far in the past.", { date: date.toString(), now: now.toString() });
128
+ return null;
129
+ }
130
+ const sigValues = Object.fromEntries(sigHeader.split(",").map((pair) => pair.match(/^\s*([A-Za-z]+)="([^"]*)"\s*$/)).filter((m) => m != null).map((m) => m.slice(1, 3)));
131
+ if (!("keyId" in sigValues)) {
132
+ logger.debug("Failed to verify; no keyId field found in the Signature header.", { signature: sigHeader });
133
+ return null;
134
+ }
135
+ else if (!("headers" in sigValues)) {
136
+ logger.debug("Failed to verify; no headers field found in the Signature header.", { signature: sigHeader });
137
+ return null;
138
+ }
139
+ else if (!("signature" in sigValues)) {
140
+ logger.debug("Failed to verify; no signature field found in the Signature header.", { signature: sigHeader });
141
+ return null;
142
+ }
143
+ const { keyId, headers, signature } = sigValues;
144
+ logger.debug("Fetching key {keyId} to verify signature...", { keyId });
145
+ let document;
146
+ try {
147
+ const remoteDocument = await (documentLoader ?? fetchDocumentLoader)(keyId);
148
+ document = remoteDocument.document;
149
+ }
150
+ catch (_) {
151
+ logger.debug("Failed to fetch key {keyId}.", { keyId });
152
+ return null;
153
+ }
154
+ let object;
155
+ try {
156
+ object = await ASObject.fromJsonLd(document, {
157
+ documentLoader,
158
+ contextLoader,
159
+ });
160
+ }
161
+ catch (e) {
162
+ if (!(e instanceof TypeError))
163
+ throw e;
164
+ try {
165
+ object = await CryptographicKey.fromJsonLd(document, {
166
+ documentLoader,
167
+ contextLoader,
168
+ });
169
+ }
170
+ catch (e) {
171
+ if (e instanceof TypeError) {
172
+ logger.debug("Failed to verify; key {keyId} returned an invalid object.", { keyId });
173
+ return null;
174
+ }
175
+ throw e;
176
+ }
177
+ }
178
+ let key = null;
179
+ if (object instanceof CryptographicKey)
180
+ key = object;
181
+ else if (isActor(object)) {
182
+ for await (const k of object.getPublicKeys({ documentLoader, contextLoader })) {
183
+ if (k.id?.href === keyId) {
184
+ key = k;
185
+ break;
186
+ }
187
+ }
188
+ if (key == null) {
189
+ logger.debug("Failed to verify; object {keyId} returned an {actorType}, " +
190
+ "but has no key matching {keyId}.", { keyId, actorType: object.constructor.name });
191
+ return null;
192
+ }
193
+ }
194
+ else {
195
+ logger.debug("Failed to verify; key {keyId} returned an invalid object.", { keyId });
196
+ return null;
197
+ }
198
+ if (key.publicKey == null) {
199
+ logger.debug("Failed to verify; key {keyId} has no publicKeyPem field.", { keyId });
200
+ return null;
201
+ }
202
+ const headerNames = headers.split(/\s+/g);
203
+ if (!headerNames.includes("(request-target)") || !headerNames.includes("date")) {
204
+ logger.debug("Failed to verify; required headers missing in the Signature header: " +
205
+ "{headers}.", { headers });
206
+ return null;
207
+ }
208
+ if (body != null && !headerNames.includes("digest")) {
209
+ logger.debug("Failed to verify; required headers missing in the Signature header: " +
210
+ "{headers}.", { headers });
211
+ return null;
212
+ }
213
+ const message = headerNames.map((name) => `${name}: ` +
214
+ (name == "(request-target)"
215
+ ? `${request.method.toLowerCase()} ${new URL(request.url).pathname}`
216
+ : name == "host"
217
+ ? request.headers.get("host") ?? new URL(request.url).host
218
+ : request.headers.get(name))).join("\n");
219
+ const sig = decodeBase64(signature);
220
+ // TODO: support other than RSASSA-PKCS1-v1_5:
221
+ const verified = await dntShim.crypto.subtle.verify("RSASSA-PKCS1-v1_5", key.publicKey, sig, new TextEncoder().encode(message));
222
+ if (!verified) {
223
+ logger.debug("Failed to verify; signature {signature} is invalid. " +
224
+ "Check if the key is correct or if the signed message is correct. " +
225
+ "The message to sign is:\n{message}", { signature, message });
226
+ return null;
227
+ }
228
+ return key;
229
+ }
@@ -28,7 +28,6 @@ export function validateCryptoKey(key, type) {
28
28
  /**
29
29
  * Generates a key pair which is appropriate for Fedify.
30
30
  * @returns The generated key pair.
31
- * @since 0.3.0
32
31
  */
33
32
  export function generateCryptoKeyPair() {
34
33
  return dntShim.crypto.subtle.generateKey({
@@ -44,7 +43,6 @@ export function generateCryptoKeyPair() {
44
43
  * @returns The exported key in JWK format. The key is suitable for
45
44
  * serialization and storage.
46
45
  * @throws {TypeError} If the key is invalid or unsupported.
47
- * @since 0.3.0
48
46
  */
49
47
  export async function exportJwk(key) {
50
48
  validateCryptoKey(key);
@@ -56,7 +54,6 @@ export async function exportJwk(key) {
56
54
  * @param type Which type of key to import, either `"public"`" or `"private"`".
57
55
  * @returns The imported key.
58
56
  * @throws {TypeError} If the key is invalid or unsupported.
59
- * @since 0.3.0
60
57
  */
61
58
  export async function importJwk(jwk, type) {
62
59
  const key = await dntShim.crypto.subtle.importKey("jwk", jwk, { name: "RSASSA-PKCS1-v1_5", hash: "SHA-256" }, true, type === "public" ? ["verify"] : ["sign"]);
package/esm/sig/mod.js ADDED
@@ -0,0 +1,8 @@
1
+ /**
2
+ * HTTP Signatures implementation.
3
+ *
4
+ * @module
5
+ */
6
+ export { signRequest, verifyRequest, } from "./http.js";
7
+ export { exportJwk, generateCryptoKeyPair, importJwk } from "./key.js";
8
+ export { doesActorOwnKey, getKeyOwner, } from "./owner.js";
@@ -0,0 +1,94 @@
1
+ import { fetchDocumentLoader, } from "../runtime/docloader.js";
2
+ import { isActor } from "../vocab/actor.js";
3
+ import { CryptographicKey, Object as ASObject, } from "../vocab/vocab.js";
4
+ export { exportJwk, generateCryptoKeyPair, importJwk } from "./key.js";
5
+ /**
6
+ * Checks if the actor of the given activity owns the specified key.
7
+ * @param activity The activity to check.
8
+ * @param key The public key to check.
9
+ * @param options Options for checking the key ownership.
10
+ * @returns Whether the actor is the owner of the key.
11
+ */
12
+ export async function doesActorOwnKey(activity, key, options) {
13
+ if (key.ownerId != null) {
14
+ return key.ownerId.href === activity.actorId?.href;
15
+ }
16
+ const actor = await activity.getActor(options);
17
+ if (actor == null || !isActor(actor))
18
+ return false;
19
+ for (const publicKeyId of actor.publicKeyIds) {
20
+ if (key.id != null && publicKeyId.href === key.id.href)
21
+ return true;
22
+ }
23
+ return false;
24
+ }
25
+ /**
26
+ * Gets the actor that owns the specified key. Returns `null` if the key has no
27
+ * known owner.
28
+ *
29
+ * @param keyId The ID of the key to check, or the key itself.
30
+ * @param options Options for getting the key owner.
31
+ * @returns The actor that owns the key, or `null` if the key has no known
32
+ * owner.
33
+ */
34
+ export async function getKeyOwner(keyId, options) {
35
+ const documentLoader = options.documentLoader ?? fetchDocumentLoader;
36
+ const contextLoader = options.contextLoader ?? fetchDocumentLoader;
37
+ let object;
38
+ if (keyId instanceof CryptographicKey) {
39
+ object = keyId;
40
+ if (object.id == null)
41
+ return null;
42
+ keyId = object.id;
43
+ }
44
+ else {
45
+ let keyDoc;
46
+ try {
47
+ const { document } = await documentLoader(keyId.href);
48
+ keyDoc = document;
49
+ }
50
+ catch (_) {
51
+ return null;
52
+ }
53
+ try {
54
+ object = await ASObject.fromJsonLd(keyDoc, {
55
+ documentLoader,
56
+ contextLoader,
57
+ });
58
+ }
59
+ catch (e) {
60
+ if (!(e instanceof TypeError))
61
+ throw e;
62
+ try {
63
+ object = await CryptographicKey.fromJsonLd(keyDoc, {
64
+ documentLoader,
65
+ contextLoader,
66
+ });
67
+ }
68
+ catch (e) {
69
+ if (e instanceof TypeError)
70
+ return null;
71
+ throw e;
72
+ }
73
+ }
74
+ }
75
+ let owner = null;
76
+ if (object instanceof CryptographicKey) {
77
+ if (object.ownerId == null)
78
+ return null;
79
+ owner = await object.getOwner({ documentLoader, contextLoader });
80
+ }
81
+ else if (isActor(object)) {
82
+ owner = object;
83
+ }
84
+ else {
85
+ return null;
86
+ }
87
+ if (owner == null)
88
+ return null;
89
+ for (const kid of owner.publicKeyIds) {
90
+ if (kid.href === keyId.href)
91
+ return owner;
92
+ }
93
+ return null;
94
+ }
@@ -0,0 +1,20 @@
1
+ $schema: ../codegen/schema.yaml
2
+ name: Tombstone
3
+ uri: "https://www.w3.org/ns/activitystreams#Tombstone"
4
+ extends: "https://www.w3.org/ns/activitystreams#Object"
5
+ entity: true
6
+ description: |
7
+ A `Tombstone` represents a content object that has been deleted.
8
+ It can be used in {@link Collection}s to signify that there used to be
9
+ an object at this position, but it has been deleted.
10
+ defaultContext: "https://www.w3.org/ns/activitystreams"
11
+
12
+ properties:
13
+ - singularName: deleted
14
+ functional: true
15
+ uri: "https://www.w3.org/ns/activitystreams#deleted"
16
+ description: |
17
+ On a `Tombstone` object, the `deleted` property is a timestamp for when
18
+ the object was deleted.
19
+ range:
20
+ - "http://www.w3.org/2001/XMLSchema#dateTime"
@@ -2151,6 +2151,10 @@ export class Object {
2151
2151
  delete values["@type"];
2152
2152
  return await Service.fromJsonLd(values, options);
2153
2153
  }
2154
+ if (values["@type"].includes("https://www.w3.org/ns/activitystreams#Tombstone")) {
2155
+ delete values["@type"];
2156
+ return await Tombstone.fromJsonLd(values, options);
2157
+ }
2154
2158
  if (!values["@type"].includes("https://www.w3.org/ns/activitystreams#Object")) {
2155
2159
  throw new TypeError("Invalid type: " + values["@type"]);
2156
2160
  }
@@ -2208,6 +2212,7 @@ export class Object {
2208
2212
  "https://www.w3.org/ns/activitystreams#Profile",
2209
2213
  "https://www.w3.org/ns/activitystreams#Relationship",
2210
2214
  "https://www.w3.org/ns/activitystreams#Service",
2215
+ "https://www.w3.org/ns/activitystreams#Tombstone",
2211
2216
  ].some((t) => v["@type"].includes(t))
2212
2217
  ? await _a.fromJsonLd(v, options)
2213
2218
  : typeof v === "object" && "@type" in v &&
@@ -2344,6 +2349,7 @@ export class Object {
2344
2349
  "https://www.w3.org/ns/activitystreams#Profile",
2345
2350
  "https://www.w3.org/ns/activitystreams#Relationship",
2346
2351
  "https://www.w3.org/ns/activitystreams#Service",
2352
+ "https://www.w3.org/ns/activitystreams#Tombstone",
2347
2353
  ].some((t) => v["@type"].includes(t))
2348
2354
  ? await _a.fromJsonLd(v, options)
2349
2355
  : typeof v === "object" && "@type" in v &&
@@ -2435,6 +2441,7 @@ export class Object {
2435
2441
  "https://www.w3.org/ns/activitystreams#Profile",
2436
2442
  "https://www.w3.org/ns/activitystreams#Relationship",
2437
2443
  "https://www.w3.org/ns/activitystreams#Service",
2444
+ "https://www.w3.org/ns/activitystreams#Tombstone",
2438
2445
  ].some((t) => v["@type"].includes(t))
2439
2446
  ? await _a.fromJsonLd(v, options)
2440
2447
  : typeof v === "object" && "@type" in v &&
@@ -2526,6 +2533,7 @@ export class Object {
2526
2533
  "https://www.w3.org/ns/activitystreams#Profile",
2527
2534
  "https://www.w3.org/ns/activitystreams#Relationship",
2528
2535
  "https://www.w3.org/ns/activitystreams#Service",
2536
+ "https://www.w3.org/ns/activitystreams#Tombstone",
2529
2537
  ].some((t) => v["@type"].includes(t))
2530
2538
  ? await _a.fromJsonLd(v, options)
2531
2539
  : typeof v === "object" && "@type" in v &&
@@ -2593,6 +2601,7 @@ export class Object {
2593
2601
  "https://www.w3.org/ns/activitystreams#Profile",
2594
2602
  "https://www.w3.org/ns/activitystreams#Relationship",
2595
2603
  "https://www.w3.org/ns/activitystreams#Service",
2604
+ "https://www.w3.org/ns/activitystreams#Tombstone",
2596
2605
  ].some((t) => v["@type"].includes(t))
2597
2606
  ? await _a.fromJsonLd(v, options)
2598
2607
  : typeof v === "object" && "@type" in v &&
@@ -2668,6 +2677,7 @@ export class Object {
2668
2677
  "https://www.w3.org/ns/activitystreams#Profile",
2669
2678
  "https://www.w3.org/ns/activitystreams#Relationship",
2670
2679
  "https://www.w3.org/ns/activitystreams#Service",
2680
+ "https://www.w3.org/ns/activitystreams#Tombstone",
2671
2681
  ].some((t) => v["@type"].includes(t))
2672
2682
  ? await _a.fromJsonLd(v, options)
2673
2683
  : undefined;
@@ -2770,6 +2780,7 @@ export class Object {
2770
2780
  "https://www.w3.org/ns/activitystreams#Profile",
2771
2781
  "https://www.w3.org/ns/activitystreams#Relationship",
2772
2782
  "https://www.w3.org/ns/activitystreams#Service",
2783
+ "https://www.w3.org/ns/activitystreams#Tombstone",
2773
2784
  ].some((t) => v["@type"].includes(t))
2774
2785
  ? await _a.fromJsonLd(v, options)
2775
2786
  : typeof v === "object" && "@type" in v &&
@@ -7058,6 +7069,7 @@ export class Collection extends Object {
7058
7069
  "https://www.w3.org/ns/activitystreams#Profile",
7059
7070
  "https://www.w3.org/ns/activitystreams#Relationship",
7060
7071
  "https://www.w3.org/ns/activitystreams#Service",
7072
+ "https://www.w3.org/ns/activitystreams#Tombstone",
7061
7073
  ].some((t) => v["@type"].includes(t))
7062
7074
  ? await Object.fromJsonLd(v, options)
7063
7075
  : typeof v === "object" && "@type" in v &&
@@ -10246,6 +10258,7 @@ export class Link {
10246
10258
  "https://www.w3.org/ns/activitystreams#Profile",
10247
10259
  "https://www.w3.org/ns/activitystreams#Relationship",
10248
10260
  "https://www.w3.org/ns/activitystreams#Service",
10261
+ "https://www.w3.org/ns/activitystreams#Tombstone",
10249
10262
  ].some((t) => v["@type"].includes(t))
10250
10263
  ? await Object.fromJsonLd(v, options)
10251
10264
  : undefined;
@@ -15912,6 +15925,158 @@ export class Service extends Object {
15912
15925
  return "Service " + inspect(proxy, options);
15913
15926
  }
15914
15927
  }
15928
+ /** A `Tombstone` represents a content object that has been deleted.
15929
+ * It can be used in {@link Collection}s to signify that there used to be
15930
+ * an object at this position, but it has been deleted.
15931
+ */
15932
+ export class Tombstone extends Object {
15933
+ /**
15934
+ * The type URI of {@link Tombstone}: `https://www.w3.org/ns/activitystreams#Tombstone`.
15935
+ */
15936
+ static get typeId() {
15937
+ return new URL("https://www.w3.org/ns/activitystreams#Tombstone");
15938
+ }
15939
+ #_8g8g4LiVMhFTXskuDEqx4ascxUr = [];
15940
+ /**
15941
+ * Constructs a new instance of Tombstone with the given values.
15942
+ * @param values The values to initialize the instance with.
15943
+ * @param options The options to use for initialization.
15944
+ */
15945
+ constructor(values, { documentLoader, contextLoader, } = {}) {
15946
+ super(values, { documentLoader, contextLoader });
15947
+ if ("deleted" in values && values.deleted != null) {
15948
+ this.#_8g8g4LiVMhFTXskuDEqx4ascxUr = [values.deleted];
15949
+ }
15950
+ }
15951
+ /**
15952
+ * Clones this instance, optionally updating it with the given values.
15953
+ * @param values The values to update the clone with.
15954
+ * @options The options to use for cloning.
15955
+ * @returns The cloned instance.
15956
+ */
15957
+ clone(values = {}, options = {}) {
15958
+ const clone = super.clone(values, options);
15959
+ clone.#_8g8g4LiVMhFTXskuDEqx4ascxUr = this.#_8g8g4LiVMhFTXskuDEqx4ascxUr;
15960
+ if ("deleted" in values && values.deleted != null) {
15961
+ clone.#_8g8g4LiVMhFTXskuDEqx4ascxUr = [values.deleted];
15962
+ }
15963
+ return clone;
15964
+ }
15965
+ /** On a `Tombstone` object, the `deleted` property is a timestamp for when
15966
+ * the object was deleted.
15967
+ */
15968
+ get deleted() {
15969
+ if (this.#_8g8g4LiVMhFTXskuDEqx4ascxUr.length < 1)
15970
+ return null;
15971
+ return this.#_8g8g4LiVMhFTXskuDEqx4ascxUr[0];
15972
+ }
15973
+ /**
15974
+ * Converts this object to a JSON-LD structure.
15975
+ * @returns The JSON-LD representation of this object.
15976
+ */
15977
+ async toJsonLd(options = {}) {
15978
+ options = {
15979
+ ...options,
15980
+ contextLoader: options.contextLoader ?? fetchDocumentLoader,
15981
+ };
15982
+ // deno-lint-ignore no-unused-vars prefer-const
15983
+ let array;
15984
+ const baseValues = await super.toJsonLd({
15985
+ ...options,
15986
+ expand: true,
15987
+ });
15988
+ const values = baseValues[0];
15989
+ array = [];
15990
+ for (const v of this.#_8g8g4LiVMhFTXskuDEqx4ascxUr) {
15991
+ array.push({
15992
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime",
15993
+ "@value": v.toString(),
15994
+ });
15995
+ }
15996
+ if (array.length > 0) {
15997
+ values["https://www.w3.org/ns/activitystreams#deleted"] = array;
15998
+ }
15999
+ values["@type"] = ["https://www.w3.org/ns/activitystreams#Tombstone"];
16000
+ if (this.id)
16001
+ values["@id"] = this.id.href;
16002
+ if (options.expand) {
16003
+ return await jsonld.expand(values, { documentLoader: options.contextLoader });
16004
+ }
16005
+ return await jsonld.compact(values, "https://www.w3.org/ns/activitystreams", { documentLoader: options.contextLoader });
16006
+ }
16007
+ /**
16008
+ * Converts a JSON-LD structure to an object of this type.
16009
+ * @param json The JSON-LD structure to convert.
16010
+ * @returns The object of this type.
16011
+ * @throws {TypeError} If the given `json` is invalid.
16012
+ */
16013
+ static async fromJsonLd(json, options = {}) {
16014
+ if (typeof json === "undefined") {
16015
+ throw new TypeError("Invalid JSON-LD: undefined.");
16016
+ }
16017
+ else if (json === null)
16018
+ throw new TypeError("Invalid JSON-LD: null.");
16019
+ options = {
16020
+ ...options,
16021
+ documentLoader: options.documentLoader ?? fetchDocumentLoader,
16022
+ contextLoader: options.contextLoader ?? fetchDocumentLoader,
16023
+ };
16024
+ // deno-lint-ignore no-explicit-any
16025
+ let values;
16026
+ if (globalThis.Object.keys(json).length == 0) {
16027
+ values = {};
16028
+ }
16029
+ else {
16030
+ const expanded = await jsonld.expand(json, {
16031
+ documentLoader: options.contextLoader,
16032
+ keepFreeFloatingNodes: true,
16033
+ });
16034
+ values =
16035
+ // deno-lint-ignore no-explicit-any
16036
+ (expanded[0] ?? {});
16037
+ }
16038
+ if ("@type" in values) {
16039
+ if (!values["@type"].includes("https://www.w3.org/ns/activitystreams#Tombstone")) {
16040
+ throw new TypeError("Invalid type: " + values["@type"]);
16041
+ }
16042
+ }
16043
+ const instance = await super.fromJsonLd(values, options);
16044
+ if (!(instance instanceof Tombstone)) {
16045
+ throw new TypeError("Unexpected type: " + instance.constructor.name);
16046
+ }
16047
+ const _8g8g4LiVMhFTXskuDEqx4ascxUr = [];
16048
+ for (const v of values["https://www.w3.org/ns/activitystreams#deleted"] ?? []) {
16049
+ if (v == null)
16050
+ continue;
16051
+ _8g8g4LiVMhFTXskuDEqx4ascxUr.push(dntShim.Temporal.Instant.from(v["@value"]));
16052
+ }
16053
+ instance.#_8g8g4LiVMhFTXskuDEqx4ascxUr = _8g8g4LiVMhFTXskuDEqx4ascxUr;
16054
+ return instance;
16055
+ }
16056
+ _getCustomInspectProxy() {
16057
+ const proxy = super._getCustomInspectProxy();
16058
+ const _8g8g4LiVMhFTXskuDEqx4ascxUr = this.#_8g8g4LiVMhFTXskuDEqx4ascxUr
16059
+ // deno-lint-ignore no-explicit-any
16060
+ .map((v) => v instanceof URL
16061
+ ? {
16062
+ [Symbol.for("Deno.customInspect")]: (inspect, options) => "URL " + inspect(v.href, options),
16063
+ [Symbol.for("nodejs.util.inspect.custom")]: (_depth, options, inspect) => "URL " + inspect(v.href, options),
16064
+ }
16065
+ : v);
16066
+ if (_8g8g4LiVMhFTXskuDEqx4ascxUr.length == 1) {
16067
+ proxy.deleted = _8g8g4LiVMhFTXskuDEqx4ascxUr[0];
16068
+ }
16069
+ return proxy;
16070
+ }
16071
+ [Symbol.for("Deno.customInspect")](inspect, options) {
16072
+ const proxy = this._getCustomInspectProxy();
16073
+ return "Tombstone " + inspect(proxy, options);
16074
+ }
16075
+ [Symbol.for("nodejs.util.inspect.custom")](_depth, options, inspect) {
16076
+ const proxy = this._getCustomInspectProxy();
16077
+ return "Tombstone " + inspect(proxy, options);
16078
+ }
16079
+ }
15915
16080
  /** Indicates that the `actor` is undoing the `object`. In most cases,
15916
16081
  * the `object` will be an {@link Activity} describing some previously performed
15917
16082
  * action (for instance, a person may have previously "liked" an article but,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fedify/fedify",
3
- "version": "0.9.0-dev.177+a1fe6aa8",
3
+ "version": "0.9.0-dev.181+d5e0642c",
4
4
  "description": "An ActivityPub server framework",
5
5
  "keywords": [
6
6
  "ActivityPub",
@@ -53,6 +53,12 @@
53
53
  "default": "./esm/runtime/mod.js"
54
54
  }
55
55
  },
56
+ "./sig": {
57
+ "import": {
58
+ "types": "./types/sig/mod.d.ts",
59
+ "default": "./esm/sig/mod.js"
60
+ }
61
+ },
56
62
  "./vocab": {
57
63
  "import": {
58
64
  "types": "./types/vocab/mod.d.ts",
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/0.225.3/assert.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,SAAK,GAAG,OAAO,CAAC,IAAI,CAI5D"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertion_error.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/0.225.3/assertion_error.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,iCAAiC;gBACrB,OAAO,EAAE,MAAM;CAI5B"}
@@ -1,2 +1,2 @@
1
1
  export declare function validateBinaryLike(source: unknown): Uint8Array;
2
- //# sourceMappingURL=_util.d.ts.map
2
+ //# sourceMappingURL=_validate_binary_like.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_validate_binary_like.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/encoding/0.224.3/_validate_binary_like.ts"],"names":[],"mappings":"AAeA,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,UAAU,CAa9D"}