@fedify/fedify 2.0.0-dev.1690 → 2.0.0-dev.170

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 (317) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +70 -34
  3. package/dist/{assert_rejects-DiIiJbZn.js → assert_rejects-Ce45JcFg.js} +1 -1
  4. package/dist/{assert_is_error-BPGph1Jx.js → assert_throws-BNXdRGWP.js} +31 -1
  5. package/dist/{builder-CYOcDUkj.js → builder-_MVsWtsS.js} +9 -8
  6. package/dist/{client-bgSdkFa2.d.ts → client-CUTUGgvJ.d.ts} +19 -19
  7. package/dist/{client-CnOdwLLN.js → client-Dg7OfUDA.js} +28 -23
  8. package/dist/{client-CegPX0Rn.d.cts → client-by-PEGAJ.d.cts} +19 -19
  9. package/dist/compat/mod.cjs +1 -1
  10. package/dist/compat/mod.d.cts +6 -12
  11. package/dist/compat/mod.d.ts +6 -12
  12. package/dist/compat/mod.js +1 -1
  13. package/dist/compat/transformers.test.js +19 -18
  14. package/dist/context-Bns6uTJq.js +109 -0
  15. package/dist/{context-ByZprN0S.d.ts → context-C7vzWilY.d.ts} +314 -182
  16. package/dist/{context-C5BsZkDr.d.cts → context-CrB9RFy5.d.cts} +314 -182
  17. package/dist/deno-DhWON59o.js +117 -0
  18. package/dist/{testing-BWNCAbL-.js → dist-B5f6a8Tt.js} +90 -111
  19. package/dist/{authdocloader-Brax1A32.js → docloader-Cni79dmb.js} +17 -8
  20. package/dist/{esm-DnIzfEj0.js → esm-DGl7uK1r.js} +32 -17
  21. package/dist/federation/builder.test.js +11 -11
  22. package/dist/federation/collection.test.js +5 -8
  23. package/dist/federation/handler.test.js +111 -24
  24. package/dist/federation/idempotency.test.js +24 -24
  25. package/dist/federation/inbox.test.js +5 -6
  26. package/dist/federation/keycache.test.js +4 -5
  27. package/dist/federation/kv.test.js +60 -9
  28. package/dist/federation/middleware.test.js +102 -101
  29. package/dist/federation/mod.cjs +8 -12
  30. package/dist/federation/mod.d.cts +7 -13
  31. package/dist/federation/mod.d.ts +7 -13
  32. package/dist/federation/mod.js +8 -13
  33. package/dist/federation/mq.test.js +9 -10
  34. package/dist/federation/negotiation.test.js +5 -8
  35. package/dist/federation/retry.test.js +2 -4
  36. package/dist/federation/router.test.js +6 -8
  37. package/dist/federation/send.test.js +55 -15
  38. package/dist/{webfinger/handler.test.js → federation/webfinger.test.js} +25 -24
  39. package/dist/{federation-H2_En3j5.cjs → federation-B431K2gm.cjs} +22 -0
  40. package/dist/{federation-D1U8YY9t.js → federation-BbZwNNWj.js} +28 -6
  41. package/dist/{http-C7vbQwbz.cjs → http-7RQPvAkX.cjs} +410 -14
  42. package/dist/{http-BxbM8sEy.js → http-CZXlv4xU.js} +371 -11
  43. package/dist/{http-D-e6AFwR.d.cts → http-ClB3pLcL.d.cts} +2 -2
  44. package/dist/{http-BNOYnVsU.js → http-CwsBL5_A.js} +3 -2
  45. package/dist/{http-D6Uj2x2y.d.ts → http-DLBDPal9.d.ts} +2 -2
  46. package/dist/{inbox-BRru9pX3.js → inbox-CukSCwad.js} +2 -1
  47. package/dist/{key-1KXru8Ug.js → key-DKkHKzvg.js} +3 -2
  48. package/dist/{keycache-CN61iGVj.js → keycache-DRxpZ5r9.js} +1 -1
  49. package/dist/{keys-BPdFKgiy.js → keys-ZbcByPg9.js} +2 -1
  50. package/dist/{kv-63Cil1MD.d.cts → kv-B4vFhIYL.d.cts} +30 -1
  51. package/dist/{kv-C7sopW2E.d.ts → kv-CYySNrsn.d.ts} +30 -1
  52. package/dist/{kv-CRZrzyXm.js → kv-QzKcOQgP.js} +22 -0
  53. package/dist/kv-cache-BEeqyGER.js +107 -0
  54. package/dist/kv-cache-BVA7CrnS.cjs +134 -0
  55. package/dist/kv-cache-HDuc4ZaJ.js +122 -0
  56. package/dist/{ld-Dv8DNNAT.js → ld-CM6OO5ar.js} +4 -2
  57. package/dist/middleware--i9t8nKh.js +26 -0
  58. package/dist/middleware-C567nJlD.cjs +12 -0
  59. package/dist/middleware-D9oWuacw.js +12 -0
  60. package/dist/{middleware-DY9B2lL8.js → middleware-DXRcwk_y.js} +185 -192
  61. package/dist/{middleware-BmoOlgc1.cjs → middleware-TufpQUzj.cjs} +251 -241
  62. package/dist/{middleware-Bz_A2jeJ.js → middleware-eDeNdyRA.js} +195 -191
  63. package/dist/mod-0p9zUdzg.d.cts +107 -0
  64. package/dist/mod-0qnPv4EC.d.cts +62 -0
  65. package/dist/{mod-Djzcw2ry.d.cts → mod-BrS8tiad.d.cts} +3 -3
  66. package/dist/mod-C3SOvTD1.d.ts +64 -0
  67. package/dist/{mod-8DMWKtQE.d.cts → mod-D6pS5_xJ.d.cts} +4 -4
  68. package/dist/{mod-BhUKmBJD.d.ts → mod-jOa7W503.d.ts} +3 -3
  69. package/dist/{mod-D6hQoxC5.d.ts → mod-waqu-BL_.d.ts} +4 -4
  70. package/dist/mod-xc20HhMD.d.ts +109 -0
  71. package/dist/mod.cjs +17 -112
  72. package/dist/mod.d.cts +11 -17
  73. package/dist/mod.d.ts +11 -17
  74. package/dist/mod.js +11 -17
  75. package/dist/nodeinfo/client.test.js +7 -10
  76. package/dist/nodeinfo/handler.test.js +23 -23
  77. package/dist/nodeinfo/mod.cjs +2 -3
  78. package/dist/nodeinfo/mod.d.cts +2 -4
  79. package/dist/nodeinfo/mod.d.ts +2 -4
  80. package/dist/nodeinfo/mod.js +2 -3
  81. package/dist/nodeinfo/types.test.js +6 -9
  82. package/dist/otel/exporter.test.js +893 -0
  83. package/dist/otel/mod.cjs +256 -0
  84. package/dist/otel/mod.d.cts +230 -0
  85. package/dist/otel/mod.d.ts +232 -0
  86. package/dist/otel/mod.js +255 -0
  87. package/dist/{owner-e3FYDhsk.js → owner-BOEfZQv2.js} +45 -8
  88. package/dist/{owner-hd9lvQcP.d.ts → owner-BgI8C-VY.d.ts} +2 -3
  89. package/dist/{owner-BN_tO3cY.d.cts → owner-C-zfmVAD.d.cts} +2 -3
  90. package/dist/{proof-B-eqv0Ug.cjs → proof-CaDQpGJD.cjs} +69 -33
  91. package/dist/{proof-DfgvA3al.js → proof-iYIDiv8I.js} +47 -11
  92. package/dist/{proof-6gFMwMNJ.js → proof-iw6KtIyj.js} +3 -2
  93. package/dist/router-D9eI0s4b.js +118 -0
  94. package/dist/{send-Tl9NOnmO.js → send-Bn8o0mjW.js} +9 -4
  95. package/dist/sig/http.test.js +11 -13
  96. package/dist/sig/key.test.js +9 -11
  97. package/dist/sig/ld.test.js +8 -10
  98. package/dist/sig/mod.cjs +7 -11
  99. package/dist/sig/mod.d.cts +3 -7
  100. package/dist/sig/mod.d.ts +3 -7
  101. package/dist/sig/mod.js +3 -7
  102. package/dist/sig/owner.test.js +33 -12
  103. package/dist/sig/proof.test.js +13 -14
  104. package/dist/testing/mod.d.ts +183 -7194
  105. package/dist/testing/mod.js +4 -4
  106. package/dist/{transformers-CoBS-oFG.cjs → transformers-BjBg6Lag.cjs} +2 -2
  107. package/dist/{transformers-BFT6d7J5.js → transformers-N_ip_y4P.js} +2 -2
  108. package/dist/{types-DqxyTxOf.js → types-8l28uC8o.js} +31 -26
  109. package/dist/{types-zqdWZh4O.cjs → types-B6z6CqIz.cjs} +33 -28
  110. package/dist/{types-BSuWJsOm.js → types-CPz01LGH.js} +3 -3
  111. package/dist/{runtime/authdocloader.test.js → utils/docloader.test.js} +13 -15
  112. package/dist/utils/kv-cache.test.js +211 -0
  113. package/dist/utils/mod.cjs +10 -0
  114. package/dist/utils/mod.d.cts +4 -0
  115. package/dist/utils/mod.d.ts +6 -0
  116. package/dist/utils/mod.js +9 -0
  117. package/package.json +34 -75
  118. package/dist/actor-Be0ThtXy.cjs +0 -42609
  119. package/dist/actor-ChbPLm6n.js +0 -42135
  120. package/dist/actor-D6K058Tb.d.cts +0 -128
  121. package/dist/actor-DuCeRiNh.js +0 -146
  122. package/dist/actor-T6RyhRgk.d.ts +0 -130
  123. package/dist/assert_throws-BOO88avQ.js +0 -39
  124. package/dist/authdocloader-CrxhFL8e.js +0 -52
  125. package/dist/authdocloader-OSn_teLV.cjs +0 -58
  126. package/dist/denokv-Bv33Xxea.js +0 -57
  127. package/dist/docloader-CCqXeagZ.cjs +0 -4861
  128. package/dist/docloader-CxWcuWqQ.d.ts +0 -221
  129. package/dist/docloader-D-MrRyHl.d.cts +0 -219
  130. package/dist/docloader-XK3y2jn5.js +0 -4795
  131. package/dist/fixtures/activitypub.academy/users/brauca_darradiul.json +0 -83
  132. package/dist/fixtures/example.com/announce.json +0 -6
  133. package/dist/fixtures/example.com/collection.json +0 -19
  134. package/dist/fixtures/example.com/create.json +0 -6
  135. package/dist/fixtures/example.com/cross-origin-actor.json +0 -6
  136. package/dist/fixtures/example.com/hong-gildong.json +0 -11
  137. package/dist/fixtures/example.com/invite.json +0 -7
  138. package/dist/fixtures/example.com/key.json +0 -7
  139. package/dist/fixtures/example.com/key2.json +0 -6
  140. package/dist/fixtures/example.com/object.json +0 -6
  141. package/dist/fixtures/example.com/orderedcollectionpage.json +0 -24
  142. package/dist/fixtures/example.com/paged/a.json +0 -13
  143. package/dist/fixtures/example.com/paged/b.json +0 -16
  144. package/dist/fixtures/example.com/paged-collection.json +0 -6
  145. package/dist/fixtures/example.com/person.json +0 -22
  146. package/dist/fixtures/example.com/person2.json +0 -40
  147. package/dist/fixtures/example.com/test.json +0 -5
  148. package/dist/fixtures/example.com/users/handle.json +0 -16
  149. package/dist/fixtures/example.com/wrong-type.json +0 -3
  150. package/dist/fixtures/media.example.com/avatars/test-avatar.jpg.json +0 -6
  151. package/dist/fixtures/oeee.cafe/ap/users/3609fd4e-d51d-4db8-9f04-4189815864dd.json +0 -24
  152. package/dist/fixtures/remote.domain/users/bob.json +0 -20
  153. package/dist/fixtures/server.example/users/alice.json +0 -20
  154. package/dist/fixtures/w3id.org/identity/v1.json +0 -152
  155. package/dist/fixtures/w3id.org/security/data-integrity/v1.json +0 -74
  156. package/dist/fixtures/w3id.org/security/multikey/v1.json +0 -35
  157. package/dist/fixtures/w3id.org/security/v1.json +0 -50
  158. package/dist/fixtures/wizard.casa/users/hongminhee.json +0 -69
  159. package/dist/fixtures/www.w3.org/ns/activitystreams.json +0 -379
  160. package/dist/fixtures/www.w3.org/ns/did/v1.json +0 -58
  161. package/dist/key-B3uag-rz.js +0 -10
  162. package/dist/key-BiBmb1Yy.cjs +0 -10
  163. package/dist/key-DK_nfU4I.js +0 -10
  164. package/dist/key-Z6ceKnZC.cjs +0 -290
  165. package/dist/key-jyNTxCvK.js +0 -260
  166. package/dist/lookup-BPviO8ij.js +0 -131
  167. package/dist/lookup-hnMAAU5r.cjs +0 -137
  168. package/dist/lookup-pV0JOsuV.js +0 -331
  169. package/dist/middleware-CI0-zw4U.js +0 -26
  170. package/dist/middleware-QNK-W-jE.cjs +0 -17
  171. package/dist/middleware-_vjt6FWU.js +0 -17
  172. package/dist/mod-CerN_Sza.d.ts +0 -104
  173. package/dist/mod-Cj1tHXBR.d.cts +0 -102
  174. package/dist/mod-CxkWO3Mg.d.cts +0 -307
  175. package/dist/mod-DBzN0aCM.d.ts +0 -115
  176. package/dist/mod-DlU8ISoa.d.ts +0 -309
  177. package/dist/mod-FZd39qVq.d.cts +0 -1
  178. package/dist/mod-g0xFzAP9.d.ts +0 -2
  179. package/dist/mod-jQ4OODsl.d.cts +0 -113
  180. package/dist/mq-B7R1Q-M5.d.cts +0 -140
  181. package/dist/mq-CRGm1e_F.d.ts +0 -143
  182. package/dist/runtime/docloader.test.js +0 -522
  183. package/dist/runtime/key.test.js +0 -103
  184. package/dist/runtime/langstr.test.d.ts +0 -3
  185. package/dist/runtime/langstr.test.js +0 -39
  186. package/dist/runtime/link.test.d.ts +0 -3
  187. package/dist/runtime/link.test.js +0 -61
  188. package/dist/runtime/mod.cjs +0 -25
  189. package/dist/runtime/mod.d.cts +0 -6
  190. package/dist/runtime/mod.d.ts +0 -8
  191. package/dist/runtime/mod.js +0 -13
  192. package/dist/runtime/multibase/multibase.test.d.ts +0 -3
  193. package/dist/runtime/multibase/multibase.test.js +0 -358
  194. package/dist/runtime/url.test.d.ts +0 -3
  195. package/dist/runtime/url.test.js +0 -45
  196. package/dist/src/vocab/accept.yaml +0 -15
  197. package/dist/src/vocab/activity.yaml +0 -98
  198. package/dist/src/vocab/add.yaml +0 -16
  199. package/dist/src/vocab/announce.yaml +0 -30
  200. package/dist/src/vocab/application.yaml +0 -324
  201. package/dist/src/vocab/arrive.yaml +0 -15
  202. package/dist/src/vocab/article.yaml +0 -46
  203. package/dist/src/vocab/audio.yaml +0 -11
  204. package/dist/src/vocab/block.yaml +0 -16
  205. package/dist/src/vocab/chatmessage.yaml +0 -50
  206. package/dist/src/vocab/collection.yaml +0 -154
  207. package/dist/src/vocab/collectionpage.yaml +0 -55
  208. package/dist/src/vocab/create.yaml +0 -28
  209. package/dist/src/vocab/dataintegrityproof.yaml +0 -56
  210. package/dist/src/vocab/delete.yaml +0 -27
  211. package/dist/src/vocab/didservice.yaml +0 -22
  212. package/dist/src/vocab/dislike.yaml +0 -14
  213. package/dist/src/vocab/document.yaml +0 -31
  214. package/dist/src/vocab/emoji.yaml +0 -12
  215. package/dist/src/vocab/emojireact.yaml +0 -17
  216. package/dist/src/vocab/endpoints.yaml +0 -85
  217. package/dist/src/vocab/event.yaml +0 -11
  218. package/dist/src/vocab/export.yaml +0 -9
  219. package/dist/src/vocab/flag.yaml +0 -15
  220. package/dist/src/vocab/follow.yaml +0 -19
  221. package/dist/src/vocab/group.yaml +0 -324
  222. package/dist/src/vocab/hashtag.yaml +0 -14
  223. package/dist/src/vocab/ignore.yaml +0 -14
  224. package/dist/src/vocab/image.yaml +0 -9
  225. package/dist/src/vocab/intransitiveactivity.yaml +0 -15
  226. package/dist/src/vocab/invite.yaml +0 -14
  227. package/dist/src/vocab/join.yaml +0 -14
  228. package/dist/src/vocab/key.yaml +0 -28
  229. package/dist/src/vocab/leave.yaml +0 -14
  230. package/dist/src/vocab/like.yaml +0 -16
  231. package/dist/src/vocab/link.yaml +0 -101
  232. package/dist/src/vocab/listen.yaml +0 -12
  233. package/dist/src/vocab/mention.yaml +0 -9
  234. package/dist/src/vocab/move.yaml +0 -15
  235. package/dist/src/vocab/multikey.yaml +0 -36
  236. package/dist/src/vocab/note.yaml +0 -48
  237. package/dist/src/vocab/object.yaml +0 -404
  238. package/dist/src/vocab/offer.yaml +0 -15
  239. package/dist/src/vocab/orderedcollection.yaml +0 -39
  240. package/dist/src/vocab/orderedcollectionpage.yaml +0 -50
  241. package/dist/src/vocab/organization.yaml +0 -324
  242. package/dist/src/vocab/page.yaml +0 -11
  243. package/dist/src/vocab/person.yaml +0 -324
  244. package/dist/src/vocab/place.yaml +0 -75
  245. package/dist/src/vocab/profile.yaml +0 -26
  246. package/dist/src/vocab/propertyvalue.yaml +0 -32
  247. package/dist/src/vocab/question.yaml +0 -103
  248. package/dist/src/vocab/read.yaml +0 -13
  249. package/dist/src/vocab/reject.yaml +0 -14
  250. package/dist/src/vocab/relationship.yaml +0 -52
  251. package/dist/src/vocab/remove.yaml +0 -14
  252. package/dist/src/vocab/service.yaml +0 -324
  253. package/dist/src/vocab/source.yaml +0 -26
  254. package/dist/src/vocab/tentativeaccept.yaml +0 -14
  255. package/dist/src/vocab/tentativereject.yaml +0 -14
  256. package/dist/src/vocab/tombstone.yaml +0 -24
  257. package/dist/src/vocab/travel.yaml +0 -16
  258. package/dist/src/vocab/undo.yaml +0 -26
  259. package/dist/src/vocab/update.yaml +0 -58
  260. package/dist/src/vocab/video.yaml +0 -11
  261. package/dist/src/vocab/view.yaml +0 -13
  262. package/dist/testing/docloader.test.js +0 -24
  263. package/dist/type-C69ZBu7f.js +0 -47010
  264. package/dist/vocab/actor.test.d.ts +0 -3
  265. package/dist/vocab/actor.test.js +0 -5965
  266. package/dist/vocab/lookup.test.d.ts +0 -3
  267. package/dist/vocab/lookup.test.js +0 -456
  268. package/dist/vocab/mod.cjs +0 -87
  269. package/dist/vocab/mod.d.cts +0 -6
  270. package/dist/vocab/mod.d.ts +0 -8
  271. package/dist/vocab/mod.js +0 -10
  272. package/dist/vocab/schema.yaml +0 -247
  273. package/dist/vocab/type.test.d.ts +0 -3
  274. package/dist/vocab/type.test.js +0 -25
  275. package/dist/vocab/vocab.test.d.ts +0 -3
  276. package/dist/vocab/vocab.test.js +0 -3787
  277. package/dist/vocab-B39-pFl9.cjs +0 -291
  278. package/dist/vocab-BI0Ak5lL.d.ts +0 -14924
  279. package/dist/vocab-BWoeZsME.js +0 -255
  280. package/dist/vocab-Dw1-yVGg.d.cts +0 -14922
  281. package/dist/webfinger/handler.test.d.ts +0 -3
  282. package/dist/webfinger/lookup.test.d.ts +0 -3
  283. package/dist/webfinger/lookup.test.js +0 -195
  284. package/dist/webfinger/mod.cjs +0 -9
  285. package/dist/webfinger/mod.d.cts +0 -4
  286. package/dist/webfinger/mod.d.ts +0 -6
  287. package/dist/webfinger/mod.js +0 -9
  288. package/dist/webfinger-BjOEdFPs.cjs +0 -4
  289. package/dist/webfinger-De_bU0iE.js +0 -4
  290. package/dist/x/cfworkers.cjs +0 -100
  291. package/dist/x/cfworkers.d.cts +0 -59
  292. package/dist/x/cfworkers.d.ts +0 -61
  293. package/dist/x/cfworkers.js +0 -98
  294. package/dist/x/cfworkers.test.d.ts +0 -3
  295. package/dist/x/cfworkers.test.js +0 -179
  296. package/dist/x/hono.cjs +0 -61
  297. package/dist/x/hono.d.cts +0 -54
  298. package/dist/x/hono.d.ts +0 -56
  299. package/dist/x/hono.js +0 -60
  300. package/dist/x/sveltekit.cjs +0 -69
  301. package/dist/x/sveltekit.d.cts +0 -46
  302. package/dist/x/sveltekit.d.ts +0 -48
  303. package/dist/x/sveltekit.js +0 -68
  304. /package/dist/{assert_not_equals-f3m3epl3.js → assert_not_equals-C80BG-_5.js} +0 -0
  305. /package/dist/{runtime/authdocloader.test.d.ts → federation/webfinger.test.d.ts} +0 -0
  306. /package/dist/{mod-1pDWKvUL.d.ts → mod-1E3W847c.d.ts} +0 -0
  307. /package/dist/{mod-C2tOeRkN.d.cts → mod-C81L6_lQ.d.cts} +0 -0
  308. /package/dist/{nodeinfo-DfycQ8Wf.js → nodeinfo-BlLsRSiT.js} +0 -0
  309. /package/dist/{nodeinfo-Co9lJrWl.cjs → nodeinfo-DuMYTpbZ.cjs} +0 -0
  310. /package/dist/{runtime/docloader.test.d.ts → otel/exporter.test.d.ts} +0 -0
  311. /package/dist/{runtime-DPYEDf-o.js → sig-CwuONEzF.js} +0 -0
  312. /package/dist/{runtime-C58AJWSv.cjs → sig-DeXX2xnj.cjs} +0 -0
  313. /package/dist/{std__assert-X-_kMxKM.js → std__assert-DWivtrGR.js} +0 -0
  314. /package/dist/{testing → utils}/docloader.test.d.ts +0 -0
  315. /package/dist/{runtime/key.test.d.ts → utils/kv-cache.test.d.ts} +0 -0
  316. /package/dist/{sig-ByHXzqUi.cjs → utils-Db0ZmjcD.cjs} +0 -0
  317. /package/dist/{sig-Cj3tk-ig.js → utils-Wranxuoe.js} +0 -0
@@ -3,24 +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, deno_default, getDocumentLoader, getTypeId, kvCache, lookupWebFinger } from "./type-C69ZBu7f.js";
7
- import { getNodeInfo } from "./client-CnOdwLLN.js";
8
- import { RouterError, lookupObject, traverseCollection } from "./lookup-pV0JOsuV.js";
9
- import { nodeInfoToJson } from "./types-BSuWJsOm.js";
10
- import { exportJwk, importJwk, validateCryptoKey } from "./key-1KXru8Ug.js";
11
- import { verifyRequest } from "./http-BNOYnVsU.js";
12
- import { getAuthenticatedDocumentLoader } from "./authdocloader-Brax1A32.js";
13
- import { detachSignature, hasSignature, signJsonLd, verifyJsonLd } from "./ld-Dv8DNNAT.js";
14
- import { doesActorOwnKey, getKeyOwner } from "./owner-e3FYDhsk.js";
15
- import { signObject, verifyObject } from "./proof-6gFMwMNJ.js";
16
- import { routeActivity } from "./inbox-BRru9pX3.js";
17
- import { FederationBuilderImpl } from "./builder-CYOcDUkj.js";
6
+ import { deno_default } from "./deno-DhWON59o.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-DKkHKzvg.js";
11
+ import { verifyRequest } from "./http-CwsBL5_A.js";
12
+ import { detachSignature, hasSignature, signJsonLd, verifyJsonLd } from "./ld-CM6OO5ar.js";
13
+ import { doesActorOwnKey, getKeyOwner } from "./owner-BOEfZQv2.js";
14
+ import { signObject, verifyObject } from "./proof-iw6KtIyj.js";
15
+ import { getAuthenticatedDocumentLoader } from "./docloader-Cni79dmb.js";
16
+ import { kvCache } from "./kv-cache-BEeqyGER.js";
17
+ import { routeActivity } from "./inbox-CukSCwad.js";
18
+ import { FederationBuilderImpl } from "./builder-_MVsWtsS.js";
18
19
  import { buildCollectionSynchronizationHeader } from "./collection-CcnIw1qY.js";
19
- import { KvKeyCache } from "./keycache-CN61iGVj.js";
20
+ import { KvKeyCache } from "./keycache-DRxpZ5r9.js";
20
21
  import { acceptsJsonLd } from "./negotiation-5NPJL6zp.js";
21
22
  import { createExponentialBackoffPolicy } from "./retry-D4GJ670a.js";
22
- import { extractInboxes, sendActivity } from "./send-Tl9NOnmO.js";
23
+ import { extractInboxes, sendActivity } from "./send-Bn8o0mjW.js";
23
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";
24
28
  import { SpanKind, SpanStatusCode, context, propagation, trace } from "@opentelemetry/api";
25
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";
26
30
  import { domainToASCII } from "node:url";
@@ -61,7 +65,7 @@ function autoIdAssigner(activity, context$1) {
61
65
  * activity like this:
62
66
  *
63
67
  * ```typescript
64
- * import { Follow, Person } from "@fedify/fedify/vocab";
68
+ * import { Follow, Person } from "@fedify/vocab";
65
69
  * const input = new Follow({
66
70
  * id: new URL("http://example.com/activities/1"),
67
71
  * actor: new Person({
@@ -80,7 +84,7 @@ function autoIdAssigner(activity, context$1) {
80
84
  * The result of applying this transformer would be:
81
85
  *
82
86
  * ```typescript
83
- * import { Follow, Person } from "@fedify/fedify/vocab";
87
+ * import { Follow, Person } from "@fedify/vocab";
84
88
  * const output = new Follow({
85
89
  * id: new URL("http://example.com/activities/1"),
86
90
  * actor: new URL("http://example.com/actors/1"),
@@ -153,151 +157,6 @@ function handleNodeInfoJrd(_request, context$1) {
153
157
  return Promise.resolve(response);
154
158
  }
155
159
 
156
- //#endregion
157
- //#region src/vocab/constants.ts
158
- /**
159
- * The special public collection for [public addressing]. *Do not mutate this
160
- * object.*
161
- *
162
- * [public addressing]: https://www.w3.org/TR/activitypub/#public-addressing
163
- *
164
- * @since 0.7.0
165
- */
166
- const PUBLIC_COLLECTION = new URL("https://www.w3.org/ns/activitystreams#Public");
167
-
168
- //#endregion
169
- //#region src/webfinger/handler.ts
170
- const logger = getLogger([
171
- "fedify",
172
- "webfinger",
173
- "server"
174
- ]);
175
- /**
176
- * Handles a WebFinger request. You would not typically call this function
177
- * directly, but instead use {@link Federation.fetch} method.
178
- * @param request The WebFinger request to handle.
179
- * @param parameters The parameters for handling the request.
180
- * @returns The response to the request.
181
- */
182
- async function handleWebFinger(request, options) {
183
- if (options.tracer == null) return await handleWebFingerInternal(request, options);
184
- return await options.tracer.startActiveSpan("webfinger.handle", { kind: SpanKind.SERVER }, async (span) => {
185
- try {
186
- const response = await handleWebFingerInternal(request, options);
187
- span.setStatus({ code: response.ok ? SpanStatusCode.UNSET : SpanStatusCode.ERROR });
188
- return response;
189
- } catch (error) {
190
- span.setStatus({
191
- code: SpanStatusCode.ERROR,
192
- message: String(error)
193
- });
194
- throw error;
195
- } finally {
196
- span.end();
197
- }
198
- });
199
- }
200
- async function handleWebFingerInternal(request, { context: context$1, host, actorDispatcher, actorHandleMapper, actorAliasMapper, onNotFound, span, webFingerLinksDispatcher }) {
201
- if (actorDispatcher == null) {
202
- logger.error("Actor dispatcher is not set.");
203
- return await onNotFound(request);
204
- }
205
- const resource = context$1.url.searchParams.get("resource");
206
- if (resource == null) return new Response("Missing resource parameter.", { status: 400 });
207
- span?.setAttribute("webfinger.resource", resource);
208
- let resourceUrl;
209
- try {
210
- resourceUrl = new URL(resource);
211
- } catch (e) {
212
- if (e instanceof TypeError) return new Response("Invalid resource URL.", { status: 400 });
213
- throw e;
214
- }
215
- span?.setAttribute("webfinger.resource.scheme", resourceUrl.protocol.replace(/:$/, ""));
216
- async function mapUsernameToIdentifier(username) {
217
- if (actorHandleMapper == null) {
218
- logger.error("No actor handle mapper is set; use the WebFinger username {username} as the actor's internal identifier.", { username });
219
- return username;
220
- }
221
- const identifier$1 = await actorHandleMapper(context$1, username);
222
- if (identifier$1 == null) {
223
- logger.error("Actor {username} not found.", { username });
224
- return null;
225
- }
226
- return identifier$1;
227
- }
228
- let identifier = null;
229
- const uriParsed = context$1.parseUri(resourceUrl);
230
- if (uriParsed?.type != "actor") {
231
- const match = /^acct:([^@]+)@([^@]+)$/.exec(resource);
232
- if (match == null) {
233
- const result = await actorAliasMapper?.(context$1, resourceUrl);
234
- if (result == null) return await onNotFound(request);
235
- if ("identifier" in result) identifier = result.identifier;
236
- else identifier = await mapUsernameToIdentifier(result.username);
237
- } else {
238
- const portMatch = /:\d+$/.exec(match[2]);
239
- const normalizedHost = portMatch == null ? domainToASCII(match[2].toLowerCase()) : domainToASCII(match[2].substring(0, portMatch.index).toLowerCase()) + portMatch[0];
240
- if (normalizedHost != context$1.url.host && normalizedHost != host) return await onNotFound(request);
241
- else {
242
- identifier = await mapUsernameToIdentifier(match[1]);
243
- resourceUrl = new URL(`acct:${match[1]}@${normalizedHost}`);
244
- }
245
- }
246
- } else identifier = uriParsed.identifier;
247
- if (identifier == null) return await onNotFound(request);
248
- const actor = await actorDispatcher(context$1, identifier);
249
- if (actor == null) {
250
- logger.error("Actor {identifier} not found.", { identifier });
251
- return await onNotFound(request);
252
- }
253
- const links = [{
254
- rel: "self",
255
- href: context$1.getActorUri(identifier).href,
256
- type: "application/activity+json"
257
- }];
258
- for (const url of actor.urls) if (url instanceof Link && url.href != null) links.push({
259
- rel: url.rel ?? "http://webfinger.net/rel/profile-page",
260
- href: url.href.href,
261
- type: url.mediaType == null ? void 0 : url.mediaType
262
- });
263
- else if (url instanceof URL) links.push({
264
- rel: "http://webfinger.net/rel/profile-page",
265
- href: url.href
266
- });
267
- for await (const image of actor.getIcons()) {
268
- if (image.url?.href == null) continue;
269
- const link = {
270
- rel: "http://webfinger.net/rel/avatar",
271
- href: image.url.href.toString()
272
- };
273
- if (image.mediaType != null) link.type = image.mediaType;
274
- links.push(link);
275
- }
276
- if (webFingerLinksDispatcher != null) {
277
- const customLinks = await webFingerLinksDispatcher(context$1, resourceUrl);
278
- if (customLinks != null) for (const link of customLinks) links.push(link);
279
- }
280
- const aliases = [];
281
- if (resourceUrl.protocol != "acct:" && actor.preferredUsername != null) {
282
- aliases.push(`acct:${actor.preferredUsername}@${host ?? context$1.url.host}`);
283
- if (host != null && host !== context$1.url.host) aliases.push(`acct:${actor.preferredUsername}@${context$1.url.host}`);
284
- }
285
- if (resourceUrl.href !== context$1.getActorUri(identifier).href) aliases.push(context$1.getActorUri(identifier).href);
286
- if (resourceUrl.protocol === "acct:" && host != null && host !== context$1.url.host && !resourceUrl.href.endsWith(`@${host}`)) {
287
- const username = resourceUrl.href.replace(/^acct:/, "").replace(/@.*$/, "");
288
- aliases.push(`acct:${username}@${host}`);
289
- }
290
- const jrd = {
291
- subject: resourceUrl.href,
292
- aliases,
293
- links
294
- };
295
- return new Response(JSON.stringify(jrd), { headers: {
296
- "Content-Type": "application/jrd+json",
297
- "Access-Control-Allow-Origin": "*"
298
- } });
299
- }
300
-
301
160
  //#endregion
302
161
  //#region src/federation/handler.ts
303
162
  /**
@@ -779,6 +638,13 @@ async function handleInboxInternal(request, parameters, span) {
779
638
  }
780
639
  if (activity.id != null) span.setAttribute("activitypub.activity.id", activity.id.href);
781
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
+ });
782
648
  if (httpSigKey != null && !await doesActorOwnKey(activity, httpSigKey, ctx)) {
783
649
  logger$2.error("The signer ({keyId}) and the actor ({actorId}) do not match.", {
784
650
  activity: json,
@@ -838,7 +704,7 @@ async function handleInboxInternal(request, parameters, span) {
838
704
  /**
839
705
  * Handles a custom collection request.
840
706
  * @template TItem The type of items in the collection.
841
- * @template TParams The parameter names of the requested URL.
707
+ * @template TParam The parameter names of the requested URL.
842
708
  * @template TContext The type of the context, extending {@link RequestContext}.
843
709
  * @template TContextData The context data to pass to the `TContext`.
844
710
  * @param request The HTTP request.
@@ -856,7 +722,7 @@ async function _handleCustomCollection(request, { name, values, context: context
856
722
  /**
857
723
  * Handles an ordered collection request.
858
724
  * @template TItem The type of items in the collection.
859
- * @template TParams The parameter names of the requested URL.
725
+ * @template TParam The parameter names of the requested URL.
860
726
  * @template TContext The type of the context, extending {@link RequestContext}.
861
727
  * @template TContextData The context data to pass to the `TContext`.
862
728
  * @param request The HTTP request.
@@ -876,7 +742,7 @@ async function _handleOrderedCollection(request, { name, values, context: contex
876
742
  * The main flow is on `getCollection`, `dispatch`.
877
743
  *
878
744
  * @template TItem The type of items in the collection.
879
- * @template TParams The parameter names of the requested URL.
745
+ * @template TParam The parameter names of the requested URL.
880
746
  * @template TContext The type of the context. {@link Context} or {@link RequestContext}.
881
747
  * @template TContextData The context data to pass to the `TContext`.
882
748
  * @template TCollection The type of the collection, extending {@link Collection}.
@@ -910,14 +776,14 @@ var CustomCollectionHandler = class {
910
776
  #collection = null;
911
777
  /**
912
778
  * Creates a new CustomCollection instance.
913
- * @param {string} name The name of the collection.
914
- * @param {TParams} values The parameter values for the collection.
915
- * @param {TContext} context The request context.
916
- * @param {CustomCollectionCallbacks} callbacks The collection callbacks.
917
- * @param {TracerProvider} tracerProvider The tracer provider for telemetry.
918
- * @param {ConstructorWithTypeId<TCollection>} Collection The Collection constructor.
919
- * @param {ConstructorWithTypeId<TCollectionPage>} CollectionPage The CollectionPage constructor.
920
- * @param {(item: TItem) => boolean} filterPredicate Optional filter predicate for items.
779
+ * @param name The name of the collection.
780
+ * @param values The parameter values for the collection.
781
+ * @param context The request context.
782
+ * @param callbacks The collection callbacks.
783
+ * @param tracerProvider The tracer provider for telemetry.
784
+ * @param Collection The Collection constructor.
785
+ * @param CollectionPage The CollectionPage constructor.
786
+ * @param filterPredicate Optional filter predicate for items.
921
787
  */
922
788
  constructor(name, values, context$1, callbacks, tracerProvider = trace.getTracerProvider(), Collection$1, CollectionPage$1, filterPredicate) {
923
789
  this.name = name;
@@ -1042,7 +908,7 @@ var CustomCollectionHandler = class {
1042
908
  /**
1043
909
  * Creates a function to wrap the dispatcher so tracing can be applied.
1044
910
  * @param params Parameters including cursor and total items.
1045
- * @returns {(span: Span) => Promise<PageItems<TItem>>} A function that handles the span operation.
911
+ * @returns A function that handles the span operation.
1046
912
  */
1047
913
  spanPages = ({ totalItems = null, cursor = null }) => async (span) => {
1048
914
  try {
@@ -1063,23 +929,23 @@ var CustomCollectionHandler = class {
1063
929
  };
1064
930
  /**
1065
931
  * Dispatches the collection request to get items.
1066
- * @param {string | null} cursor The cursor for pagination, or null for the first page.
1067
- * @returns {Promise<PageItems<TItem>>} A promise that resolves to the page items.
932
+ * @param cursor The cursor for pagination, or null for the first page.
933
+ * @returns A promise that resolves to the page items.
1068
934
  */
1069
935
  async dispatch(cursor = null) {
1070
936
  return await this.#dispatcher(this.context, this.values, cursor) ?? new ItemsNotFoundError().throw();
1071
937
  }
1072
938
  /**
1073
939
  * Filters the items in the collection.
1074
- * @param {TItem[]} items The items to filter.
1075
- * @returns {(Object | Link | URL)[]} The filtered items.
940
+ * @param items The items to filter.
941
+ * @returns The filtered items.
1076
942
  */
1077
943
  filterItems(items) {
1078
944
  return filterCollectionItems(items, this.name, this.filterPredicate);
1079
945
  }
1080
946
  /**
1081
947
  * Appends a cursor to the URL if it exists.
1082
- * @param {string | null | undefined} cursor The cursor to append, or null/undefined.
948
+ * @param cursor The cursor to append, or null/undefined.
1083
949
  * @returns The URL with cursor appended, or null if cursor is null/undefined.
1084
950
  */
1085
951
  appendToUrl(cursor) {
@@ -1087,8 +953,7 @@ var CustomCollectionHandler = class {
1087
953
  }
1088
954
  /**
1089
955
  * Gets the stored collection or collection page.
1090
- * @returns {Promise<TCollection | TCollectionPage>} A promise that resolves to
1091
- the collection or collection page.
956
+ * @returns A promise that resolves to the collection or collection page.
1092
957
  */
1093
958
  get collection() {
1094
959
  if (this.#collection === null) this.#collection = this.getCollection();
@@ -1096,8 +961,8 @@ var CustomCollectionHandler = class {
1096
961
  }
1097
962
  /**
1098
963
  * Gets the total number of items in the collection.
1099
- * @returns {Promise<number | null>} A promise that
1100
- resolves to the total items count, or null if not available.
964
+ * @returns A promise that resolves to the total items count,
965
+ * or null if not available.
1101
966
  */
1102
967
  get totalItems() {
1103
968
  if (this.#totalItems === void 0) this.totalItems = this.callbacks.counter?.(this.context, this.values);
@@ -1113,8 +978,8 @@ var CustomCollectionHandler = class {
1113
978
  }
1114
979
  /**
1115
980
  * Gets the first cursor for pagination.
1116
- * @returns {Promise<string | null>} A promise that resolves to the first cursor,
1117
- or null if not available.
981
+ * @returns A promise that resolves to the first cursor,
982
+ * or null if not available.
1118
983
  */
1119
984
  get firstCursor() {
1120
985
  const cursor = this.callbacks.firstCursor?.(this.context, this.values);
@@ -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
  /**
@@ -1319,7 +1316,6 @@ var FederationImpl = class extends FederationBuilderImpl {
1319
1316
  firstKnock;
1320
1317
  constructor(options) {
1321
1318
  super();
1322
- const logger$2 = getLogger(["fedify", "federation"]);
1323
1319
  this.kv = options.kv;
1324
1320
  this.kvPrefixes = {
1325
1321
  activityIdempotence: ["_fedify", "activityIdempotence"],
@@ -1367,8 +1363,9 @@ var FederationImpl = class extends FederationBuilderImpl {
1367
1363
  this.router.trailingSlashInsensitive = options.trailingSlashInsensitive ?? false;
1368
1364
  this._initializeRouter();
1369
1365
  if (options.allowPrivateAddress || options.userAgent != null) {
1370
- if (options.contextLoader != null) throw new TypeError("Cannot set contextLoader with allowPrivateAddress or userAgent options.");
1371
- else if (options.authenticatedDocumentLoaderFactory != null) throw new TypeError("Cannot set authenticatedDocumentLoaderFactory with allowPrivateAddress or userAgent options.");
1366
+ if (options.documentLoaderFactory != null) throw new TypeError("Cannot set documentLoaderFactory with allowPrivateAddress or userAgent options.");
1367
+ if (options.contextLoaderFactory != null) throw new TypeError("Cannot set contextLoaderFactory with allowPrivateAddress or userAgent options.");
1368
+ if (options.authenticatedDocumentLoaderFactory != null) throw new TypeError("Cannot set authenticatedDocumentLoaderFactory with allowPrivateAddress or userAgent options.");
1372
1369
  }
1373
1370
  const { allowPrivateAddress, userAgent } = options;
1374
1371
  this.allowPrivateAddress = allowPrivateAddress ?? false;
@@ -1382,11 +1379,7 @@ var FederationImpl = class extends FederationBuilderImpl {
1382
1379
  prefix: this.kvPrefixes.remoteDocument
1383
1380
  });
1384
1381
  });
1385
- if (options.contextLoader != null) {
1386
- if (options.contextLoaderFactory != null) throw new TypeError("Cannot set both contextLoader and contextLoaderFactory options at a time; use contextLoaderFactory only.");
1387
- this.contextLoaderFactory = () => options.contextLoader;
1388
- logger$2.warn("The contextLoader option is deprecated; use contextLoaderFactory option instead.");
1389
- } else this.contextLoaderFactory = options.contextLoaderFactory ?? this.documentLoaderFactory;
1382
+ this.contextLoaderFactory = options.contextLoaderFactory ?? this.documentLoaderFactory;
1390
1383
  this.authenticatedDocumentLoaderFactory = options.authenticatedDocumentLoaderFactory ?? ((identity) => getAuthenticatedDocumentLoader(identity, {
1391
1384
  allowPrivateAddress,
1392
1385
  userAgent,