@fedify/fedify 2.0.0-dev.1961 → 2.0.0-dev.206

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 (266) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +66 -36
  3. package/dist/{builder-BrqBKkVi.js → builder-BU9qEchZ.js} +5 -3
  4. package/dist/{client-BsGzbnV-.d.ts → client-CUTUGgvJ.d.ts} +18 -18
  5. package/dist/{client-pY7-3icS.js → client-Dg7OfUDA.js} +28 -23
  6. package/dist/{client-94iWEfQa.d.cts → client-by-PEGAJ.d.cts} +18 -18
  7. package/dist/compat/mod.cjs +1 -1
  8. package/dist/compat/mod.d.cts +6 -10
  9. package/dist/compat/mod.d.ts +6 -10
  10. package/dist/compat/mod.js +1 -1
  11. package/dist/compat/transformers.test.js +22 -21
  12. package/dist/context-Bns6uTJq.js +109 -0
  13. package/dist/{context-V-XS2_6O.d.ts → context-C7vzWilY.d.ts} +63 -65
  14. package/dist/{context-PxGADCsD.d.cts → context-CrB9RFy5.d.cts} +63 -65
  15. package/dist/deno-BUTHG7dM.js +117 -0
  16. package/dist/{testing-DpRy1YTU.js → dist-B5f6a8Tt.js} +90 -110
  17. package/dist/{docloader-HB61Uc88.js → docloader-BaYIAi2d.js} +3 -3
  18. package/dist/{esm-DaZiDvFW.js → esm-DGl7uK1r.js} +1 -1
  19. package/dist/federation/builder.test.js +7 -5
  20. package/dist/federation/collection.test.js +2 -3
  21. package/dist/federation/handler.test.js +110 -22
  22. package/dist/federation/idempotency.test.js +23 -22
  23. package/dist/federation/inbox.test.js +4 -3
  24. package/dist/federation/keycache.test.js +4 -4
  25. package/dist/federation/kv.test.js +56 -3
  26. package/dist/federation/middleware.test.js +95 -93
  27. package/dist/federation/mod.cjs +8 -10
  28. package/dist/federation/mod.d.cts +7 -11
  29. package/dist/federation/mod.d.ts +7 -11
  30. package/dist/federation/mod.js +8 -11
  31. package/dist/federation/mq.test.js +5 -6
  32. package/dist/federation/negotiation.test.js +2 -3
  33. package/dist/federation/retry.test.js +2 -3
  34. package/dist/federation/router.test.js +2 -2
  35. package/dist/federation/send.test.js +51 -9
  36. package/dist/{webfinger/handler.test.js → federation/webfinger.test.js} +24 -22
  37. package/dist/{federation-CRpdnOMS.cjs → federation-B431K2gm.cjs} +22 -0
  38. package/dist/{federation-jcR8-ZxP.js → federation-BbZwNNWj.js} +28 -6
  39. package/dist/{http-B2bao4EB.js → http-BxDH6plL.js} +3 -2
  40. package/dist/{http-M8k5mKc0.d.cts → http-ClB3pLcL.d.cts} +1 -1
  41. package/dist/{http-BbO0ejuk.d.ts → http-DLBDPal9.d.ts} +1 -1
  42. package/dist/{http-CUsGQiwU.js → http-DbN7EWyT.js} +119 -9
  43. package/dist/{http-BxgYWxTY.cjs → http-xz1rOLDK.cjs} +132 -16
  44. package/dist/{inbox-CAojlSWc.js → inbox-Cv5jVEEr.js} +2 -1
  45. package/dist/{key-Dz-KWCap.js → key-s_Hu2h8g.js} +3 -3
  46. package/dist/{keycache-Czcf33al.js → keycache-DRxpZ5r9.js} +1 -1
  47. package/dist/{keys-BN4nelft.js → keys-ZbcByPg9.js} +1 -1
  48. package/dist/{kv-Bxr0Q87_.d.cts → kv-B4vFhIYL.d.cts} +30 -1
  49. package/dist/{kv-BKNZ-Tb-.d.ts → kv-CYySNrsn.d.ts} +30 -1
  50. package/dist/{kv-CRZrzyXm.js → kv-QzKcOQgP.js} +22 -0
  51. package/dist/{kv-cache-5j5Pb-V6.cjs → kv-cache-BCBmDkwr.cjs} +2 -2
  52. package/dist/{kv-cache-DN9pfMBe.js → kv-cache-BEeqyGER.js} +14 -1
  53. package/dist/{kv-cache-Bq6kUUoG.js → kv-cache-CCkFOmOl.js} +2 -2
  54. package/dist/{ld-CEJHYq8u.js → ld-DXqgYcc9.js} +4 -3
  55. package/dist/middleware-CTmdJqh8.cjs +12 -0
  56. package/dist/middleware-CjwpmFSb.js +26 -0
  57. package/dist/{middleware-DgrceAHB.js → middleware-DzYMj3P9.js} +162 -165
  58. package/dist/middleware-FbKIfGNn.js +12 -0
  59. package/dist/{middleware-DW3rJHWy.cjs → middleware-IW3LA3Vi.cjs} +210 -194
  60. package/dist/{middleware-Df9OWALM.js → middleware-mAVYJs2q.js} +164 -154
  61. package/dist/{mod-DMpuiKXi.d.cts → mod-0p9zUdzg.d.cts} +6 -6
  62. package/dist/mod-0qnPv4EC.d.cts +62 -0
  63. package/dist/{mod-DgxG-byT.d.cts → mod-BrS8tiad.d.cts} +2 -2
  64. package/dist/mod-C3SOvTD1.d.ts +64 -0
  65. package/dist/{mod-BoRKfJPE.d.cts → mod-D6pS5_xJ.d.cts} +4 -4
  66. package/dist/{mod-D5Z2tISD.d.ts → mod-jOa7W503.d.ts} +2 -2
  67. package/dist/{mod-Cdo6SYlJ.d.ts → mod-waqu-BL_.d.ts} +4 -4
  68. package/dist/{mod-aAE2wOWV.d.ts → mod-xc20HhMD.d.ts} +6 -6
  69. package/dist/mod.cjs +11 -93
  70. package/dist/mod.d.cts +11 -15
  71. package/dist/mod.d.ts +11 -15
  72. package/dist/mod.js +11 -15
  73. package/dist/nodeinfo/client.test.js +3 -4
  74. package/dist/nodeinfo/handler.test.js +22 -21
  75. package/dist/nodeinfo/mod.cjs +2 -2
  76. package/dist/nodeinfo/mod.d.cts +2 -2
  77. package/dist/nodeinfo/mod.d.ts +2 -2
  78. package/dist/nodeinfo/mod.js +2 -2
  79. package/dist/nodeinfo/types.test.js +2 -3
  80. package/dist/otel/exporter.test.js +893 -0
  81. package/dist/otel/mod.cjs +256 -0
  82. package/dist/otel/mod.d.cts +230 -0
  83. package/dist/otel/mod.d.ts +232 -0
  84. package/dist/otel/mod.js +255 -0
  85. package/dist/{owner-kQRGVXG1.d.ts → owner-BgI8C-VY.d.ts} +1 -2
  86. package/dist/{owner-B4HbyP8s.d.cts → owner-C-zfmVAD.d.cts} +1 -2
  87. package/dist/{owner-JwI-WzF-.js → owner-VcVFcfvO.js} +44 -8
  88. package/dist/{proof-CObJuclI.cjs → proof-LJKB8sTg.cjs} +63 -28
  89. package/dist/{proof-xH0V1mdD.js → proof-Q-IWSQjT.js} +46 -11
  90. package/dist/{proof-Dhqndmfg.js → proof-VthB8GiV.js} +3 -2
  91. package/dist/router-D9eI0s4b.js +118 -0
  92. package/dist/{send-1o7D-GGL.js → send-Bb7N5G5a.js} +9 -4
  93. package/dist/sig/http.test.js +6 -7
  94. package/dist/sig/key.test.js +5 -5
  95. package/dist/sig/ld.test.js +6 -6
  96. package/dist/sig/mod.cjs +3 -5
  97. package/dist/sig/mod.d.cts +3 -5
  98. package/dist/sig/mod.d.ts +3 -5
  99. package/dist/sig/mod.js +3 -5
  100. package/dist/sig/owner.test.js +29 -6
  101. package/dist/sig/proof.test.js +6 -6
  102. package/dist/testing/mod.d.ts +70 -6999
  103. package/dist/testing/mod.js +4 -3
  104. package/dist/{transformers-CoBS-oFG.cjs → transformers-BjBg6Lag.cjs} +2 -2
  105. package/dist/{transformers-BFT6d7J5.js → transformers-N_ip_y4P.js} +2 -2
  106. package/dist/{types-BtUjyi5y.js → types-8l28uC8o.js} +30 -25
  107. package/dist/{types-CWgzGaqk.cjs → types-B6z6CqIz.cjs} +30 -25
  108. package/dist/{types-C2XVl6gj.js → types-CPz01LGH.js} +3 -3
  109. package/dist/utils/docloader.test.js +7 -8
  110. package/dist/utils/kv-cache.test.js +5 -3
  111. package/dist/utils/mod.cjs +3 -5
  112. package/dist/utils/mod.d.cts +3 -4
  113. package/dist/utils/mod.d.ts +3 -4
  114. package/dist/utils/mod.js +3 -5
  115. package/package.json +24 -35
  116. package/dist/actor-DhgrrgXz.cjs +0 -42079
  117. package/dist/actor-DiKHxw_H.js +0 -41647
  118. package/dist/actor-DqFajh9s.d.ts +0 -130
  119. package/dist/actor-Kqyoic-M.js +0 -146
  120. package/dist/actor-f2NtjyCg.d.cts +0 -128
  121. package/dist/fixtures/activitypub.academy/users/brauca_darradiul.json +0 -83
  122. package/dist/fixtures/example.com/announce.json +0 -6
  123. package/dist/fixtures/example.com/collection.json +0 -19
  124. package/dist/fixtures/example.com/create.json +0 -6
  125. package/dist/fixtures/example.com/cross-origin-actor.json +0 -6
  126. package/dist/fixtures/example.com/hong-gildong.json +0 -11
  127. package/dist/fixtures/example.com/invite.json +0 -7
  128. package/dist/fixtures/example.com/key.json +0 -7
  129. package/dist/fixtures/example.com/key2.json +0 -6
  130. package/dist/fixtures/example.com/object.json +0 -6
  131. package/dist/fixtures/example.com/orderedcollectionpage.json +0 -24
  132. package/dist/fixtures/example.com/paged/a.json +0 -13
  133. package/dist/fixtures/example.com/paged/b.json +0 -16
  134. package/dist/fixtures/example.com/paged-collection.json +0 -6
  135. package/dist/fixtures/example.com/person.json +0 -22
  136. package/dist/fixtures/example.com/person2.json +0 -40
  137. package/dist/fixtures/example.com/test.json +0 -5
  138. package/dist/fixtures/example.com/users/handle.json +0 -16
  139. package/dist/fixtures/example.com/wrong-type.json +0 -3
  140. package/dist/fixtures/media.example.com/avatars/test-avatar.jpg.json +0 -6
  141. package/dist/fixtures/oeee.cafe/ap/users/3609fd4e-d51d-4db8-9f04-4189815864dd.json +0 -24
  142. package/dist/fixtures/remote.domain/users/bob.json +0 -20
  143. package/dist/fixtures/server.example/users/alice.json +0 -20
  144. package/dist/fixtures/w3id.org/identity/v1.json +0 -152
  145. package/dist/fixtures/w3id.org/security/data-integrity/v1.json +0 -74
  146. package/dist/fixtures/w3id.org/security/multikey/v1.json +0 -35
  147. package/dist/fixtures/w3id.org/security/v1.json +0 -50
  148. package/dist/fixtures/wizard.casa/users/hongminhee.json +0 -69
  149. package/dist/fixtures/www.w3.org/ns/activitystreams.json +0 -379
  150. package/dist/fixtures/www.w3.org/ns/did/v1.json +0 -58
  151. package/dist/lookup-D8hvtZHY.js +0 -42178
  152. package/dist/lookup-_Hap2IXS.cjs +0 -265
  153. package/dist/lookup-gMu_9ZKY.js +0 -253
  154. package/dist/middleware-19QFZj7b.js +0 -26
  155. package/dist/middleware-BbbcXY4w.cjs +0 -15
  156. package/dist/middleware-CSTK543z.js +0 -15
  157. package/dist/mod-BlVovdcy.d.ts +0 -309
  158. package/dist/mod-BxRCHTz-.d.cts +0 -307
  159. package/dist/mod-C58MZ7Wx.d.cts +0 -113
  160. package/dist/mod-CcDPcLJW.d.cts +0 -1
  161. package/dist/mod-Ds0mpFZU.d.ts +0 -115
  162. package/dist/mod-bjzj5QIb.d.ts +0 -2
  163. package/dist/src/vocab/accept.yaml +0 -15
  164. package/dist/src/vocab/activity.yaml +0 -98
  165. package/dist/src/vocab/add.yaml +0 -16
  166. package/dist/src/vocab/announce.yaml +0 -30
  167. package/dist/src/vocab/application.yaml +0 -324
  168. package/dist/src/vocab/arrive.yaml +0 -15
  169. package/dist/src/vocab/article.yaml +0 -46
  170. package/dist/src/vocab/audio.yaml +0 -11
  171. package/dist/src/vocab/block.yaml +0 -16
  172. package/dist/src/vocab/chatmessage.yaml +0 -50
  173. package/dist/src/vocab/collection.yaml +0 -154
  174. package/dist/src/vocab/collectionpage.yaml +0 -55
  175. package/dist/src/vocab/create.yaml +0 -28
  176. package/dist/src/vocab/dataintegrityproof.yaml +0 -56
  177. package/dist/src/vocab/delete.yaml +0 -27
  178. package/dist/src/vocab/didservice.yaml +0 -22
  179. package/dist/src/vocab/dislike.yaml +0 -14
  180. package/dist/src/vocab/document.yaml +0 -31
  181. package/dist/src/vocab/emoji.yaml +0 -12
  182. package/dist/src/vocab/emojireact.yaml +0 -17
  183. package/dist/src/vocab/endpoints.yaml +0 -85
  184. package/dist/src/vocab/event.yaml +0 -11
  185. package/dist/src/vocab/export.yaml +0 -9
  186. package/dist/src/vocab/flag.yaml +0 -15
  187. package/dist/src/vocab/follow.yaml +0 -19
  188. package/dist/src/vocab/group.yaml +0 -324
  189. package/dist/src/vocab/hashtag.yaml +0 -14
  190. package/dist/src/vocab/ignore.yaml +0 -14
  191. package/dist/src/vocab/image.yaml +0 -9
  192. package/dist/src/vocab/intransitiveactivity.yaml +0 -15
  193. package/dist/src/vocab/invite.yaml +0 -14
  194. package/dist/src/vocab/join.yaml +0 -14
  195. package/dist/src/vocab/key.yaml +0 -28
  196. package/dist/src/vocab/leave.yaml +0 -14
  197. package/dist/src/vocab/like.yaml +0 -16
  198. package/dist/src/vocab/link.yaml +0 -101
  199. package/dist/src/vocab/listen.yaml +0 -12
  200. package/dist/src/vocab/mention.yaml +0 -9
  201. package/dist/src/vocab/move.yaml +0 -15
  202. package/dist/src/vocab/multikey.yaml +0 -36
  203. package/dist/src/vocab/note.yaml +0 -48
  204. package/dist/src/vocab/object.yaml +0 -404
  205. package/dist/src/vocab/offer.yaml +0 -15
  206. package/dist/src/vocab/orderedcollection.yaml +0 -39
  207. package/dist/src/vocab/orderedcollectionpage.yaml +0 -50
  208. package/dist/src/vocab/organization.yaml +0 -324
  209. package/dist/src/vocab/page.yaml +0 -11
  210. package/dist/src/vocab/person.yaml +0 -324
  211. package/dist/src/vocab/place.yaml +0 -75
  212. package/dist/src/vocab/profile.yaml +0 -26
  213. package/dist/src/vocab/propertyvalue.yaml +0 -32
  214. package/dist/src/vocab/question.yaml +0 -103
  215. package/dist/src/vocab/read.yaml +0 -13
  216. package/dist/src/vocab/reject.yaml +0 -14
  217. package/dist/src/vocab/relationship.yaml +0 -52
  218. package/dist/src/vocab/remove.yaml +0 -14
  219. package/dist/src/vocab/service.yaml +0 -324
  220. package/dist/src/vocab/source.yaml +0 -26
  221. package/dist/src/vocab/tentativeaccept.yaml +0 -14
  222. package/dist/src/vocab/tentativereject.yaml +0 -14
  223. package/dist/src/vocab/tombstone.yaml +0 -24
  224. package/dist/src/vocab/travel.yaml +0 -16
  225. package/dist/src/vocab/undo.yaml +0 -26
  226. package/dist/src/vocab/update.yaml +0 -58
  227. package/dist/src/vocab/video.yaml +0 -11
  228. package/dist/src/vocab/view.yaml +0 -13
  229. package/dist/testing/docloader.test.js +0 -22
  230. package/dist/vocab/actor.test.js +0 -5963
  231. package/dist/vocab/lookup.test.d.ts +0 -3
  232. package/dist/vocab/lookup.test.js +0 -454
  233. package/dist/vocab/mod.cjs +0 -86
  234. package/dist/vocab/mod.d.cts +0 -4
  235. package/dist/vocab/mod.d.ts +0 -6
  236. package/dist/vocab/mod.js +0 -9
  237. package/dist/vocab/type.test.d.ts +0 -3
  238. package/dist/vocab/type.test.js +0 -24
  239. package/dist/vocab/vocab.test.d.ts +0 -3
  240. package/dist/vocab/vocab.test.js +0 -9397
  241. package/dist/vocab-BCWe1Ih5.d.ts +0 -14905
  242. package/dist/vocab-CAwj263k.js +0 -255
  243. package/dist/vocab-CeDBzu-f.d.cts +0 -14903
  244. package/dist/vocab-DgHGCFcw.cjs +0 -291
  245. package/dist/webfinger/handler.test.d.ts +0 -3
  246. package/dist/webfinger/lookup.test.d.ts +0 -3
  247. package/dist/webfinger/lookup.test.js +0 -193
  248. package/dist/webfinger/mod.cjs +0 -8
  249. package/dist/webfinger/mod.d.cts +0 -2
  250. package/dist/webfinger/mod.d.ts +0 -4
  251. package/dist/webfinger/mod.js +0 -8
  252. package/dist/webfinger-C72Y8lrh.js +0 -4
  253. package/dist/webfinger-vAtLmxOF.cjs +0 -4
  254. /package/dist/{collection-BzWsN9pB.js → collection-CcnIw1qY.js} +0 -0
  255. /package/dist/{testing/docloader.test.d.ts → federation/webfinger.test.d.ts} +0 -0
  256. /package/dist/{mod-CVgZgliM.d.ts → mod-1E3W847c.d.ts} +0 -0
  257. /package/dist/{mod-B-hUPT2N.d.cts → mod-C81L6_lQ.d.cts} +0 -0
  258. /package/dist/{negotiation-C4nFufNk.js → negotiation-5NPJL6zp.js} +0 -0
  259. /package/dist/{nodeinfo-BnthBobC.js → nodeinfo-BlLsRSiT.js} +0 -0
  260. /package/dist/{nodeinfo-CdN0rEnZ.cjs → nodeinfo-DuMYTpbZ.cjs} +0 -0
  261. /package/dist/{vocab/actor.test.d.ts → otel/exporter.test.d.ts} +0 -0
  262. /package/dist/{retry-CfF8Gn4d.js → retry-D4GJ670a.js} +0 -0
  263. /package/dist/{sig-C34-oHBl.js → sig-CwuONEzF.js} +0 -0
  264. /package/dist/{sig-YYj5tCnr.cjs → sig-DeXX2xnj.cjs} +0 -0
  265. /package/dist/{utils-DyRU1gdZ.cjs → utils-Db0ZmjcD.cjs} +0 -0
  266. /package/dist/{utils-D-Va7aXC.js → utils-Wranxuoe.js} +0 -0
@@ -3,25 +3,28 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { Activity, Collection, CollectionPage, CryptographicKey, Link, Multikey, Object as Object$1, OrderedCollection, OrderedCollectionPage, RouterError, deno_default, getTypeId, lookupObject, lookupWebFinger, traverseCollection } from "./lookup-D8hvtZHY.js";
7
- import { getNodeInfo } from "./client-pY7-3icS.js";
8
- import { nodeInfoToJson } from "./types-C2XVl6gj.js";
9
- import { exportJwk, importJwk, validateCryptoKey } from "./key-Dz-KWCap.js";
10
- import { verifyRequest } from "./http-B2bao4EB.js";
11
- import { detachSignature, hasSignature, signJsonLd, verifyJsonLd } from "./ld-CEJHYq8u.js";
12
- import { doesActorOwnKey, getKeyOwner } from "./owner-JwI-WzF-.js";
13
- import { signObject, verifyObject } from "./proof-Dhqndmfg.js";
14
- import { getAuthenticatedDocumentLoader } from "./docloader-HB61Uc88.js";
15
- import { kvCache } from "./kv-cache-DN9pfMBe.js";
16
- import { routeActivity } from "./inbox-CAojlSWc.js";
17
- import { FederationBuilderImpl } from "./builder-BrqBKkVi.js";
18
- import { buildCollectionSynchronizationHeader } from "./collection-BzWsN9pB.js";
19
- import { KvKeyCache } from "./keycache-Czcf33al.js";
20
- import { acceptsJsonLd } from "./negotiation-C4nFufNk.js";
21
- import { createExponentialBackoffPolicy } from "./retry-CfF8Gn4d.js";
22
- import { extractInboxes, sendActivity } from "./send-1o7D-GGL.js";
23
- import { getDocumentLoader } from "@fedify/vocab-runtime";
6
+ import { deno_default } from "./deno-BUTHG7dM.js";
7
+ import { getNodeInfo } from "./client-Dg7OfUDA.js";
8
+ import { RouterError } from "./router-D9eI0s4b.js";
9
+ import { nodeInfoToJson } from "./types-CPz01LGH.js";
10
+ import { exportJwk, importJwk, validateCryptoKey } from "./key-s_Hu2h8g.js";
11
+ import { verifyRequest } from "./http-BxDH6plL.js";
12
+ import { detachSignature, hasSignature, signJsonLd, verifyJsonLd } from "./ld-DXqgYcc9.js";
13
+ import { doesActorOwnKey, getKeyOwner } from "./owner-VcVFcfvO.js";
14
+ import { signObject, verifyObject } from "./proof-VthB8GiV.js";
15
+ import { getAuthenticatedDocumentLoader } from "./docloader-BaYIAi2d.js";
16
+ import { kvCache } from "./kv-cache-BEeqyGER.js";
17
+ import { routeActivity } from "./inbox-Cv5jVEEr.js";
18
+ import { FederationBuilderImpl } from "./builder-BU9qEchZ.js";
19
+ import { buildCollectionSynchronizationHeader } from "./collection-CcnIw1qY.js";
20
+ import { KvKeyCache } from "./keycache-DRxpZ5r9.js";
21
+ import { acceptsJsonLd } from "./negotiation-5NPJL6zp.js";
22
+ import { createExponentialBackoffPolicy } from "./retry-D4GJ670a.js";
23
+ import { extractInboxes, sendActivity } from "./send-Bb7N5G5a.js";
24
24
  import { getLogger, withContext } from "@logtape/logtape";
25
+ import { Activity, Collection, CollectionPage, CryptographicKey, Link, Multikey, Object as Object$1, OrderedCollection, OrderedCollectionPage, getTypeId, lookupObject, traverseCollection } from "@fedify/vocab";
26
+ import { getDocumentLoader } from "@fedify/vocab-runtime";
27
+ import { lookupWebFinger } from "@fedify/webfinger";
25
28
  import { SpanKind, SpanStatusCode, context, propagation, trace } from "@opentelemetry/api";
26
29
  import { ATTR_HTTP_REQUEST_HEADER, ATTR_HTTP_REQUEST_METHOD, ATTR_HTTP_RESPONSE_HEADER, ATTR_HTTP_RESPONSE_STATUS_CODE, ATTR_URL_FULL } from "@opentelemetry/semantic-conventions";
27
30
  import { domainToASCII } from "node:url";
@@ -62,7 +65,7 @@ function autoIdAssigner(activity, context$1) {
62
65
  * activity like this:
63
66
  *
64
67
  * ```typescript
65
- * import { Follow, Person } from "@fedify/fedify/vocab";
68
+ * import { Follow, Person } from "@fedify/vocab";
66
69
  * const input = new Follow({
67
70
  * id: new URL("http://example.com/activities/1"),
68
71
  * actor: new Person({
@@ -81,7 +84,7 @@ function autoIdAssigner(activity, context$1) {
81
84
  * The result of applying this transformer would be:
82
85
  *
83
86
  * ```typescript
84
- * import { Follow, Person } from "@fedify/fedify/vocab";
87
+ * import { Follow, Person } from "@fedify/vocab";
85
88
  * const output = new Follow({
86
89
  * id: new URL("http://example.com/activities/1"),
87
90
  * actor: new URL("http://example.com/actors/1"),
@@ -154,151 +157,6 @@ function handleNodeInfoJrd(_request, context$1) {
154
157
  return Promise.resolve(response);
155
158
  }
156
159
 
157
- //#endregion
158
- //#region src/vocab/constants.ts
159
- /**
160
- * The special public collection for [public addressing]. *Do not mutate this
161
- * object.*
162
- *
163
- * [public addressing]: https://www.w3.org/TR/activitypub/#public-addressing
164
- *
165
- * @since 0.7.0
166
- */
167
- const PUBLIC_COLLECTION = new URL("https://www.w3.org/ns/activitystreams#Public");
168
-
169
- //#endregion
170
- //#region src/webfinger/handler.ts
171
- const logger = getLogger([
172
- "fedify",
173
- "webfinger",
174
- "server"
175
- ]);
176
- /**
177
- * Handles a WebFinger request. You would not typically call this function
178
- * directly, but instead use {@link Federation.fetch} method.
179
- * @param request The WebFinger request to handle.
180
- * @param parameters The parameters for handling the request.
181
- * @returns The response to the request.
182
- */
183
- async function handleWebFinger(request, options) {
184
- if (options.tracer == null) return await handleWebFingerInternal(request, options);
185
- return await options.tracer.startActiveSpan("webfinger.handle", { kind: SpanKind.SERVER }, async (span) => {
186
- try {
187
- const response = await handleWebFingerInternal(request, options);
188
- span.setStatus({ code: response.ok ? SpanStatusCode.UNSET : SpanStatusCode.ERROR });
189
- return response;
190
- } catch (error) {
191
- span.setStatus({
192
- code: SpanStatusCode.ERROR,
193
- message: String(error)
194
- });
195
- throw error;
196
- } finally {
197
- span.end();
198
- }
199
- });
200
- }
201
- async function handleWebFingerInternal(request, { context: context$1, host, actorDispatcher, actorHandleMapper, actorAliasMapper, onNotFound, span, webFingerLinksDispatcher }) {
202
- if (actorDispatcher == null) {
203
- logger.error("Actor dispatcher is not set.");
204
- return await onNotFound(request);
205
- }
206
- const resource = context$1.url.searchParams.get("resource");
207
- if (resource == null) return new Response("Missing resource parameter.", { status: 400 });
208
- span?.setAttribute("webfinger.resource", resource);
209
- let resourceUrl;
210
- try {
211
- resourceUrl = new URL(resource);
212
- } catch (e) {
213
- if (e instanceof TypeError) return new Response("Invalid resource URL.", { status: 400 });
214
- throw e;
215
- }
216
- span?.setAttribute("webfinger.resource.scheme", resourceUrl.protocol.replace(/:$/, ""));
217
- async function mapUsernameToIdentifier(username) {
218
- if (actorHandleMapper == null) {
219
- logger.error("No actor handle mapper is set; use the WebFinger username {username} as the actor's internal identifier.", { username });
220
- return username;
221
- }
222
- const identifier$1 = await actorHandleMapper(context$1, username);
223
- if (identifier$1 == null) {
224
- logger.error("Actor {username} not found.", { username });
225
- return null;
226
- }
227
- return identifier$1;
228
- }
229
- let identifier = null;
230
- const uriParsed = context$1.parseUri(resourceUrl);
231
- if (uriParsed?.type != "actor") {
232
- const match = /^acct:([^@]+)@([^@]+)$/.exec(resource);
233
- if (match == null) {
234
- const result = await actorAliasMapper?.(context$1, resourceUrl);
235
- if (result == null) return await onNotFound(request);
236
- if ("identifier" in result) identifier = result.identifier;
237
- else identifier = await mapUsernameToIdentifier(result.username);
238
- } else {
239
- const portMatch = /:\d+$/.exec(match[2]);
240
- const normalizedHost = portMatch == null ? domainToASCII(match[2].toLowerCase()) : domainToASCII(match[2].substring(0, portMatch.index).toLowerCase()) + portMatch[0];
241
- if (normalizedHost != context$1.url.host && normalizedHost != host) return await onNotFound(request);
242
- else {
243
- identifier = await mapUsernameToIdentifier(match[1]);
244
- resourceUrl = new URL(`acct:${match[1]}@${normalizedHost}`);
245
- }
246
- }
247
- } else identifier = uriParsed.identifier;
248
- if (identifier == null) return await onNotFound(request);
249
- const actor = await actorDispatcher(context$1, identifier);
250
- if (actor == null) {
251
- logger.error("Actor {identifier} not found.", { identifier });
252
- return await onNotFound(request);
253
- }
254
- const links = [{
255
- rel: "self",
256
- href: context$1.getActorUri(identifier).href,
257
- type: "application/activity+json"
258
- }];
259
- for (const url of actor.urls) if (url instanceof Link && url.href != null) links.push({
260
- rel: url.rel ?? "http://webfinger.net/rel/profile-page",
261
- href: url.href.href,
262
- type: url.mediaType == null ? void 0 : url.mediaType
263
- });
264
- else if (url instanceof URL) links.push({
265
- rel: "http://webfinger.net/rel/profile-page",
266
- href: url.href
267
- });
268
- for await (const image of actor.getIcons()) {
269
- if (image.url?.href == null) continue;
270
- const link = {
271
- rel: "http://webfinger.net/rel/avatar",
272
- href: image.url.href.toString()
273
- };
274
- if (image.mediaType != null) link.type = image.mediaType;
275
- links.push(link);
276
- }
277
- if (webFingerLinksDispatcher != null) {
278
- const customLinks = await webFingerLinksDispatcher(context$1, resourceUrl);
279
- if (customLinks != null) for (const link of customLinks) links.push(link);
280
- }
281
- const aliases = [];
282
- if (resourceUrl.protocol != "acct:" && actor.preferredUsername != null) {
283
- aliases.push(`acct:${actor.preferredUsername}@${host ?? context$1.url.host}`);
284
- if (host != null && host !== context$1.url.host) aliases.push(`acct:${actor.preferredUsername}@${context$1.url.host}`);
285
- }
286
- if (resourceUrl.href !== context$1.getActorUri(identifier).href) aliases.push(context$1.getActorUri(identifier).href);
287
- if (resourceUrl.protocol === "acct:" && host != null && host !== context$1.url.host && !resourceUrl.href.endsWith(`@${host}`)) {
288
- const username = resourceUrl.href.replace(/^acct:/, "").replace(/@.*$/, "");
289
- aliases.push(`acct:${username}@${host}`);
290
- }
291
- const jrd = {
292
- subject: resourceUrl.href,
293
- aliases,
294
- links
295
- };
296
- return new Response(JSON.stringify(jrd), { headers: {
297
- "Content-Type": "application/jrd+json",
298
- "Access-Control-Allow-Origin": "*"
299
- } });
300
- }
301
-
302
160
  //#endregion
303
161
  //#region src/federation/handler.ts
304
162
  /**
@@ -780,6 +638,13 @@ async function handleInboxInternal(request, parameters, span) {
780
638
  }
781
639
  if (activity.id != null) span.setAttribute("activitypub.activity.id", activity.id.href);
782
640
  span.setAttribute("activitypub.activity.type", getTypeId(activity).href);
641
+ span.addEvent("activitypub.activity.received", {
642
+ "activitypub.activity.json": JSON.stringify(json),
643
+ "activitypub.activity.verified": activity != null,
644
+ "ld_signatures.verified": ldSigVerified,
645
+ "http_signatures.verified": httpSigKey != null,
646
+ "http_signatures.key_id": httpSigKey?.id?.href ?? ""
647
+ });
783
648
  if (httpSigKey != null && !await doesActorOwnKey(activity, httpSigKey, ctx)) {
784
649
  logger$2.error("The signer ({keyId}) and the actor ({actorId}) do not match.", {
785
650
  activity: json,
@@ -1282,6 +1147,138 @@ async function respondWithObjectIfAcceptable(object, request, options) {
1282
1147
  return response;
1283
1148
  }
1284
1149
 
1150
+ //#endregion
1151
+ //#region src/federation/webfinger.ts
1152
+ const logger = getLogger([
1153
+ "fedify",
1154
+ "webfinger",
1155
+ "server"
1156
+ ]);
1157
+ /**
1158
+ * Handles a WebFinger request. You would not typically call this function
1159
+ * directly, but instead use {@link Federation.fetch} method.
1160
+ * @param request The WebFinger request to handle.
1161
+ * @param parameters The parameters for handling the request.
1162
+ * @returns The response to the request.
1163
+ */
1164
+ async function handleWebFinger(request, options) {
1165
+ if (options.tracer == null) return await handleWebFingerInternal(request, options);
1166
+ return await options.tracer.startActiveSpan("webfinger.handle", { kind: SpanKind.SERVER }, async (span) => {
1167
+ try {
1168
+ const response = await handleWebFingerInternal(request, options);
1169
+ span.setStatus({ code: response.ok ? SpanStatusCode.UNSET : SpanStatusCode.ERROR });
1170
+ return response;
1171
+ } catch (error) {
1172
+ span.setStatus({
1173
+ code: SpanStatusCode.ERROR,
1174
+ message: String(error)
1175
+ });
1176
+ throw error;
1177
+ } finally {
1178
+ span.end();
1179
+ }
1180
+ });
1181
+ }
1182
+ async function handleWebFingerInternal(request, { context: context$1, host, actorDispatcher, actorHandleMapper, actorAliasMapper, onNotFound, span, webFingerLinksDispatcher }) {
1183
+ if (actorDispatcher == null) {
1184
+ logger.error("Actor dispatcher is not set.");
1185
+ return await onNotFound(request);
1186
+ }
1187
+ const resource = context$1.url.searchParams.get("resource");
1188
+ if (resource == null) return new Response("Missing resource parameter.", { status: 400 });
1189
+ span?.setAttribute("webfinger.resource", resource);
1190
+ let resourceUrl;
1191
+ try {
1192
+ resourceUrl = new URL(resource);
1193
+ } catch (e) {
1194
+ if (e instanceof TypeError) return new Response("Invalid resource URL.", { status: 400 });
1195
+ throw e;
1196
+ }
1197
+ span?.setAttribute("webfinger.resource.scheme", resourceUrl.protocol.replace(/:$/, ""));
1198
+ async function mapUsernameToIdentifier(username) {
1199
+ if (actorHandleMapper == null) {
1200
+ logger.error("No actor handle mapper is set; use the WebFinger username {username} as the actor's internal identifier.", { username });
1201
+ return username;
1202
+ }
1203
+ const identifier$1 = await actorHandleMapper(context$1, username);
1204
+ if (identifier$1 == null) {
1205
+ logger.error("Actor {username} not found.", { username });
1206
+ return null;
1207
+ }
1208
+ return identifier$1;
1209
+ }
1210
+ let identifier = null;
1211
+ const uriParsed = context$1.parseUri(resourceUrl);
1212
+ if (uriParsed?.type != "actor") {
1213
+ const match = /^acct:([^@]+)@([^@]+)$/.exec(resource);
1214
+ if (match == null) {
1215
+ const result = await actorAliasMapper?.(context$1, resourceUrl);
1216
+ if (result == null) return await onNotFound(request);
1217
+ if ("identifier" in result) identifier = result.identifier;
1218
+ else identifier = await mapUsernameToIdentifier(result.username);
1219
+ } else {
1220
+ const portMatch = /:\d+$/.exec(match[2]);
1221
+ const normalizedHost = portMatch == null ? domainToASCII(match[2].toLowerCase()) : domainToASCII(match[2].substring(0, portMatch.index).toLowerCase()) + portMatch[0];
1222
+ if (normalizedHost != context$1.url.host && normalizedHost != host) return await onNotFound(request);
1223
+ else {
1224
+ identifier = await mapUsernameToIdentifier(match[1]);
1225
+ resourceUrl = new URL(`acct:${match[1]}@${normalizedHost}`);
1226
+ }
1227
+ }
1228
+ } else identifier = uriParsed.identifier;
1229
+ if (identifier == null) return await onNotFound(request);
1230
+ const actor = await actorDispatcher(context$1, identifier);
1231
+ if (actor == null) {
1232
+ logger.error("Actor {identifier} not found.", { identifier });
1233
+ return await onNotFound(request);
1234
+ }
1235
+ const links = [{
1236
+ rel: "self",
1237
+ href: context$1.getActorUri(identifier).href,
1238
+ type: "application/activity+json"
1239
+ }];
1240
+ for (const url of actor.urls) if (url instanceof Link && url.href != null) links.push({
1241
+ rel: url.rel ?? "http://webfinger.net/rel/profile-page",
1242
+ href: url.href.href,
1243
+ type: url.mediaType == null ? void 0 : url.mediaType
1244
+ });
1245
+ else if (url instanceof URL) links.push({
1246
+ rel: "http://webfinger.net/rel/profile-page",
1247
+ href: url.href
1248
+ });
1249
+ for await (const image of actor.getIcons()) {
1250
+ if (image.url?.href == null) continue;
1251
+ links.push({
1252
+ rel: "http://webfinger.net/rel/avatar",
1253
+ href: image.url.href.toString(),
1254
+ ...image.mediaType != null && { type: image.mediaType }
1255
+ });
1256
+ }
1257
+ if (webFingerLinksDispatcher != null) {
1258
+ const customLinks = await webFingerLinksDispatcher(context$1, resourceUrl);
1259
+ if (customLinks != null) for (const link of customLinks) links.push(link);
1260
+ }
1261
+ const aliases = [];
1262
+ if (resourceUrl.protocol != "acct:" && actor.preferredUsername != null) {
1263
+ aliases.push(`acct:${actor.preferredUsername}@${host ?? context$1.url.host}`);
1264
+ if (host != null && host !== context$1.url.host) aliases.push(`acct:${actor.preferredUsername}@${context$1.url.host}`);
1265
+ }
1266
+ if (resourceUrl.href !== context$1.getActorUri(identifier).href) aliases.push(context$1.getActorUri(identifier).href);
1267
+ if (resourceUrl.protocol === "acct:" && host != null && host !== context$1.url.host && !resourceUrl.href.endsWith(`@${host}`)) {
1268
+ const username = resourceUrl.href.replace(/^acct:/, "").replace(/@.*$/, "");
1269
+ aliases.push(`acct:${username}@${host}`);
1270
+ }
1271
+ const jrd = {
1272
+ subject: resourceUrl.href,
1273
+ aliases,
1274
+ links
1275
+ };
1276
+ return new Response(JSON.stringify(jrd), { headers: {
1277
+ "Content-Type": "application/jrd+json",
1278
+ "Access-Control-Allow-Origin": "*"
1279
+ } });
1280
+ }
1281
+
1285
1282
  //#endregion
1286
1283
  //#region src/federation/middleware.ts
1287
1284
  /**
@@ -0,0 +1,12 @@
1
+
2
+ import { Temporal } from "@js-temporal/polyfill";
3
+ import { URLPattern } from "urlpattern-polyfill";
4
+
5
+ import "./transformers-N_ip_y4P.js";
6
+ import "./http-DbN7EWyT.js";
7
+ import { ContextImpl, FederationImpl, InboxContextImpl, KvSpecDeterminer, createFederation } from "./middleware-mAVYJs2q.js";
8
+ import "./proof-Q-IWSQjT.js";
9
+ import "./types-8l28uC8o.js";
10
+ import "./kv-cache-CCkFOmOl.js";
11
+
12
+ export { FederationImpl };