@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
@@ -2,22 +2,21 @@
2
2
  import { Temporal } from "@js-temporal/polyfill";
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
 
5
- import { getDefaultActivityTransformers } from "./transformers-BFT6d7J5.js";
6
- import { deno_default, lookupWebFinger } from "./lookup-gMu_9ZKY.js";
7
- import { Activity, Collection, CollectionPage, CryptographicKey, Link, Multikey, Object as Object$1, OrderedCollection, OrderedCollectionPage, getTypeId } from "./actor-DiKHxw_H.js";
8
- import { doubleKnock, exportJwk, importJwk, validateCryptoKey, verifyRequest } from "./http-CUsGQiwU.js";
9
- import { detachSignature, doesActorOwnKey, getKeyOwner, hasSignature, signJsonLd, signObject, verifyJsonLd, verifyObject } from "./proof-xH0V1mdD.js";
10
- import { getNodeInfo, nodeInfoToJson } from "./types-BtUjyi5y.js";
11
- import { getAuthenticatedDocumentLoader, kvCache } from "./kv-cache-Bq6kUUoG.js";
12
- import { lookupObject, traverseCollection } from "./vocab-CAwj263k.js";
5
+ import { getDefaultActivityTransformers } from "./transformers-N_ip_y4P.js";
6
+ import { deno_default, doubleKnock, exportJwk, importJwk, validateCryptoKey, verifyRequest } from "./http-DbN7EWyT.js";
7
+ import { detachSignature, doesActorOwnKey, getKeyOwner, hasSignature, signJsonLd, signObject, verifyJsonLd, verifyObject } from "./proof-Q-IWSQjT.js";
8
+ import { getNodeInfo, nodeInfoToJson } from "./types-8l28uC8o.js";
9
+ import { getAuthenticatedDocumentLoader, kvCache } from "./kv-cache-CCkFOmOl.js";
13
10
  import { getLogger, withContext } from "@logtape/logtape";
11
+ import { Activity, Collection, CollectionPage, CryptographicKey, Link, Multikey, Object as Object$1, OrderedCollection, OrderedCollectionPage, getTypeId, lookupObject, traverseCollection } from "@fedify/vocab";
14
12
  import { SpanKind, SpanStatusCode, context, propagation, trace } from "@opentelemetry/api";
15
- import { getDocumentLoader } from "@fedify/vocab-runtime";
16
13
  import { cloneDeep } from "es-toolkit";
17
14
  import { Router } from "uri-template-router";
18
15
  import { parseTemplate } from "url-template";
19
16
  import { encodeHex } from "byte-encodings/hex";
20
17
  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";
18
+ import { getDocumentLoader } from "@fedify/vocab-runtime";
19
+ import { lookupWebFinger } from "@fedify/webfinger";
21
20
  import { domainToASCII } from "node:url";
22
21
 
23
22
  //#region src/federation/inbox.ts
@@ -338,7 +337,7 @@ var FederationBuilderImpl = class {
338
337
  this.collectionTypeIds = {};
339
338
  }
340
339
  async build(options) {
341
- const { FederationImpl: FederationImpl$1 } = await import("./middleware-CSTK543z.js");
340
+ const { FederationImpl: FederationImpl$1 } = await import("./middleware-FbKIfGNn.js");
342
341
  const f = new FederationImpl$1(options);
343
342
  const trailingSlashInsensitiveValue = f.router.trailingSlashInsensitive;
344
343
  f.router = this.router.clone();
@@ -1490,6 +1489,13 @@ async function handleInboxInternal(request, parameters, span) {
1490
1489
  }
1491
1490
  if (activity.id != null) span.setAttribute("activitypub.activity.id", activity.id.href);
1492
1491
  span.setAttribute("activitypub.activity.type", getTypeId(activity).href);
1492
+ span.addEvent("activitypub.activity.received", {
1493
+ "activitypub.activity.json": JSON.stringify(json),
1494
+ "activitypub.activity.verified": activity != null,
1495
+ "ld_signatures.verified": ldSigVerified,
1496
+ "http_signatures.verified": httpSigKey != null,
1497
+ "http_signatures.key_id": httpSigKey?.id?.href ?? ""
1498
+ });
1493
1499
  if (httpSigKey != null && !await doesActorOwnKey(activity, httpSigKey, ctx)) {
1494
1500
  logger$1.error("The signer ({keyId}) and the actor ({actorId}) do not match.", {
1495
1501
  activity: json,
@@ -2030,139 +2036,6 @@ function handleNodeInfoJrd(_request, context$1) {
2030
2036
  return Promise.resolve(response);
2031
2037
  }
2032
2038
 
2033
- //#endregion
2034
- //#region src/webfinger/handler.ts
2035
- const logger = getLogger([
2036
- "fedify",
2037
- "webfinger",
2038
- "server"
2039
- ]);
2040
- /**
2041
- * Handles a WebFinger request. You would not typically call this function
2042
- * directly, but instead use {@link Federation.fetch} method.
2043
- * @param request The WebFinger request to handle.
2044
- * @param parameters The parameters for handling the request.
2045
- * @returns The response to the request.
2046
- */
2047
- async function handleWebFinger(request, options) {
2048
- if (options.tracer == null) return await handleWebFingerInternal(request, options);
2049
- return await options.tracer.startActiveSpan("webfinger.handle", { kind: SpanKind.SERVER }, async (span) => {
2050
- try {
2051
- const response = await handleWebFingerInternal(request, options);
2052
- span.setStatus({ code: response.ok ? SpanStatusCode.UNSET : SpanStatusCode.ERROR });
2053
- return response;
2054
- } catch (error) {
2055
- span.setStatus({
2056
- code: SpanStatusCode.ERROR,
2057
- message: String(error)
2058
- });
2059
- throw error;
2060
- } finally {
2061
- span.end();
2062
- }
2063
- });
2064
- }
2065
- async function handleWebFingerInternal(request, { context: context$1, host, actorDispatcher, actorHandleMapper, actorAliasMapper, onNotFound, span, webFingerLinksDispatcher }) {
2066
- if (actorDispatcher == null) {
2067
- logger.error("Actor dispatcher is not set.");
2068
- return await onNotFound(request);
2069
- }
2070
- const resource = context$1.url.searchParams.get("resource");
2071
- if (resource == null) return new Response("Missing resource parameter.", { status: 400 });
2072
- span?.setAttribute("webfinger.resource", resource);
2073
- let resourceUrl;
2074
- try {
2075
- resourceUrl = new URL(resource);
2076
- } catch (e) {
2077
- if (e instanceof TypeError) return new Response("Invalid resource URL.", { status: 400 });
2078
- throw e;
2079
- }
2080
- span?.setAttribute("webfinger.resource.scheme", resourceUrl.protocol.replace(/:$/, ""));
2081
- async function mapUsernameToIdentifier(username) {
2082
- if (actorHandleMapper == null) {
2083
- logger.error("No actor handle mapper is set; use the WebFinger username {username} as the actor's internal identifier.", { username });
2084
- return username;
2085
- }
2086
- const identifier$1 = await actorHandleMapper(context$1, username);
2087
- if (identifier$1 == null) {
2088
- logger.error("Actor {username} not found.", { username });
2089
- return null;
2090
- }
2091
- return identifier$1;
2092
- }
2093
- let identifier = null;
2094
- const uriParsed = context$1.parseUri(resourceUrl);
2095
- if (uriParsed?.type != "actor") {
2096
- const match = /^acct:([^@]+)@([^@]+)$/.exec(resource);
2097
- if (match == null) {
2098
- const result = await actorAliasMapper?.(context$1, resourceUrl);
2099
- if (result == null) return await onNotFound(request);
2100
- if ("identifier" in result) identifier = result.identifier;
2101
- else identifier = await mapUsernameToIdentifier(result.username);
2102
- } else {
2103
- const portMatch = /:\d+$/.exec(match[2]);
2104
- const normalizedHost = portMatch == null ? domainToASCII(match[2].toLowerCase()) : domainToASCII(match[2].substring(0, portMatch.index).toLowerCase()) + portMatch[0];
2105
- if (normalizedHost != context$1.url.host && normalizedHost != host) return await onNotFound(request);
2106
- else {
2107
- identifier = await mapUsernameToIdentifier(match[1]);
2108
- resourceUrl = new URL(`acct:${match[1]}@${normalizedHost}`);
2109
- }
2110
- }
2111
- } else identifier = uriParsed.identifier;
2112
- if (identifier == null) return await onNotFound(request);
2113
- const actor = await actorDispatcher(context$1, identifier);
2114
- if (actor == null) {
2115
- logger.error("Actor {identifier} not found.", { identifier });
2116
- return await onNotFound(request);
2117
- }
2118
- const links = [{
2119
- rel: "self",
2120
- href: context$1.getActorUri(identifier).href,
2121
- type: "application/activity+json"
2122
- }];
2123
- for (const url of actor.urls) if (url instanceof Link && url.href != null) links.push({
2124
- rel: url.rel ?? "http://webfinger.net/rel/profile-page",
2125
- href: url.href.href,
2126
- type: url.mediaType == null ? void 0 : url.mediaType
2127
- });
2128
- else if (url instanceof URL) links.push({
2129
- rel: "http://webfinger.net/rel/profile-page",
2130
- href: url.href
2131
- });
2132
- for await (const image of actor.getIcons()) {
2133
- if (image.url?.href == null) continue;
2134
- const link = {
2135
- rel: "http://webfinger.net/rel/avatar",
2136
- href: image.url.href.toString()
2137
- };
2138
- if (image.mediaType != null) link.type = image.mediaType;
2139
- links.push(link);
2140
- }
2141
- if (webFingerLinksDispatcher != null) {
2142
- const customLinks = await webFingerLinksDispatcher(context$1, resourceUrl);
2143
- if (customLinks != null) for (const link of customLinks) links.push(link);
2144
- }
2145
- const aliases = [];
2146
- if (resourceUrl.protocol != "acct:" && actor.preferredUsername != null) {
2147
- aliases.push(`acct:${actor.preferredUsername}@${host ?? context$1.url.host}`);
2148
- if (host != null && host !== context$1.url.host) aliases.push(`acct:${actor.preferredUsername}@${context$1.url.host}`);
2149
- }
2150
- if (resourceUrl.href !== context$1.getActorUri(identifier).href) aliases.push(context$1.getActorUri(identifier).href);
2151
- if (resourceUrl.protocol === "acct:" && host != null && host !== context$1.url.host && !resourceUrl.href.endsWith(`@${host}`)) {
2152
- const username = resourceUrl.href.replace(/^acct:/, "").replace(/@.*$/, "");
2153
- aliases.push(`acct:${username}@${host}`);
2154
- }
2155
- const jrd = {
2156
- subject: resourceUrl.href,
2157
- aliases,
2158
- links
2159
- };
2160
- return new Response(JSON.stringify(jrd), { headers: {
2161
- "Content-Type": "application/jrd+json",
2162
- "Access-Control-Allow-Origin": "*"
2163
- } });
2164
- }
2165
-
2166
2039
  //#endregion
2167
2040
  //#region src/federation/retry.ts
2168
2041
  /**
@@ -2189,8 +2062,8 @@ function createExponentialBackoffPolicy(options = {}) {
2189
2062
  milliseconds *= 1 + Math.random();
2190
2063
  milliseconds = Math.round(milliseconds);
2191
2064
  }
2192
- const delay$1 = Temporal.Duration.from({ milliseconds });
2193
- return Temporal.Duration.compare(delay$1, maxDelay) > 0 ? maxDelay : delay$1;
2065
+ const delay = Temporal.Duration.from({ milliseconds });
2066
+ return Temporal.Duration.compare(delay, maxDelay) > 0 ? maxDelay : delay;
2194
2067
  };
2195
2068
  }
2196
2069
 
@@ -2242,7 +2115,7 @@ function sendActivity(options) {
2242
2115
  await sendActivityInternal({
2243
2116
  ...options,
2244
2117
  tracerProvider
2245
- });
2118
+ }, span);
2246
2119
  } catch (e) {
2247
2120
  span.setStatus({
2248
2121
  code: SpanStatusCode.ERROR,
@@ -2254,7 +2127,7 @@ function sendActivity(options) {
2254
2127
  }
2255
2128
  });
2256
2129
  }
2257
- async function sendActivityInternal({ activity, activityId, keys, inbox, headers, specDeterminer, tracerProvider }) {
2130
+ async function sendActivityInternal({ activity, activityId, keys, inbox, headers, specDeterminer, tracerProvider }, span) {
2258
2131
  const logger$1 = getLogger([
2259
2132
  "fedify",
2260
2133
  "federation",
@@ -2309,6 +2182,143 @@ async function sendActivityInternal({ activity, activityId, keys, inbox, headers
2309
2182
  });
2310
2183
  throw new Error(`Failed to send activity ${activityId} to ${inbox.href} (${response.status} ${response.statusText}):\n${error}`);
2311
2184
  }
2185
+ span.addEvent("activitypub.activity.sent", {
2186
+ "activitypub.activity.json": JSON.stringify(activity),
2187
+ "activitypub.inbox.url": inbox.href,
2188
+ "activitypub.activity.id": activityId ?? ""
2189
+ });
2190
+ }
2191
+
2192
+ //#endregion
2193
+ //#region src/federation/webfinger.ts
2194
+ const logger = getLogger([
2195
+ "fedify",
2196
+ "webfinger",
2197
+ "server"
2198
+ ]);
2199
+ /**
2200
+ * Handles a WebFinger request. You would not typically call this function
2201
+ * directly, but instead use {@link Federation.fetch} method.
2202
+ * @param request The WebFinger request to handle.
2203
+ * @param parameters The parameters for handling the request.
2204
+ * @returns The response to the request.
2205
+ */
2206
+ async function handleWebFinger(request, options) {
2207
+ if (options.tracer == null) return await handleWebFingerInternal(request, options);
2208
+ return await options.tracer.startActiveSpan("webfinger.handle", { kind: SpanKind.SERVER }, async (span) => {
2209
+ try {
2210
+ const response = await handleWebFingerInternal(request, options);
2211
+ span.setStatus({ code: response.ok ? SpanStatusCode.UNSET : SpanStatusCode.ERROR });
2212
+ return response;
2213
+ } catch (error) {
2214
+ span.setStatus({
2215
+ code: SpanStatusCode.ERROR,
2216
+ message: String(error)
2217
+ });
2218
+ throw error;
2219
+ } finally {
2220
+ span.end();
2221
+ }
2222
+ });
2223
+ }
2224
+ async function handleWebFingerInternal(request, { context: context$1, host, actorDispatcher, actorHandleMapper, actorAliasMapper, onNotFound, span, webFingerLinksDispatcher }) {
2225
+ if (actorDispatcher == null) {
2226
+ logger.error("Actor dispatcher is not set.");
2227
+ return await onNotFound(request);
2228
+ }
2229
+ const resource = context$1.url.searchParams.get("resource");
2230
+ if (resource == null) return new Response("Missing resource parameter.", { status: 400 });
2231
+ span?.setAttribute("webfinger.resource", resource);
2232
+ let resourceUrl;
2233
+ try {
2234
+ resourceUrl = new URL(resource);
2235
+ } catch (e) {
2236
+ if (e instanceof TypeError) return new Response("Invalid resource URL.", { status: 400 });
2237
+ throw e;
2238
+ }
2239
+ span?.setAttribute("webfinger.resource.scheme", resourceUrl.protocol.replace(/:$/, ""));
2240
+ async function mapUsernameToIdentifier(username) {
2241
+ if (actorHandleMapper == null) {
2242
+ logger.error("No actor handle mapper is set; use the WebFinger username {username} as the actor's internal identifier.", { username });
2243
+ return username;
2244
+ }
2245
+ const identifier$1 = await actorHandleMapper(context$1, username);
2246
+ if (identifier$1 == null) {
2247
+ logger.error("Actor {username} not found.", { username });
2248
+ return null;
2249
+ }
2250
+ return identifier$1;
2251
+ }
2252
+ let identifier = null;
2253
+ const uriParsed = context$1.parseUri(resourceUrl);
2254
+ if (uriParsed?.type != "actor") {
2255
+ const match = /^acct:([^@]+)@([^@]+)$/.exec(resource);
2256
+ if (match == null) {
2257
+ const result = await actorAliasMapper?.(context$1, resourceUrl);
2258
+ if (result == null) return await onNotFound(request);
2259
+ if ("identifier" in result) identifier = result.identifier;
2260
+ else identifier = await mapUsernameToIdentifier(result.username);
2261
+ } else {
2262
+ const portMatch = /:\d+$/.exec(match[2]);
2263
+ const normalizedHost = portMatch == null ? domainToASCII(match[2].toLowerCase()) : domainToASCII(match[2].substring(0, portMatch.index).toLowerCase()) + portMatch[0];
2264
+ if (normalizedHost != context$1.url.host && normalizedHost != host) return await onNotFound(request);
2265
+ else {
2266
+ identifier = await mapUsernameToIdentifier(match[1]);
2267
+ resourceUrl = new URL(`acct:${match[1]}@${normalizedHost}`);
2268
+ }
2269
+ }
2270
+ } else identifier = uriParsed.identifier;
2271
+ if (identifier == null) return await onNotFound(request);
2272
+ const actor = await actorDispatcher(context$1, identifier);
2273
+ if (actor == null) {
2274
+ logger.error("Actor {identifier} not found.", { identifier });
2275
+ return await onNotFound(request);
2276
+ }
2277
+ const links = [{
2278
+ rel: "self",
2279
+ href: context$1.getActorUri(identifier).href,
2280
+ type: "application/activity+json"
2281
+ }];
2282
+ for (const url of actor.urls) if (url instanceof Link && url.href != null) links.push({
2283
+ rel: url.rel ?? "http://webfinger.net/rel/profile-page",
2284
+ href: url.href.href,
2285
+ type: url.mediaType == null ? void 0 : url.mediaType
2286
+ });
2287
+ else if (url instanceof URL) links.push({
2288
+ rel: "http://webfinger.net/rel/profile-page",
2289
+ href: url.href
2290
+ });
2291
+ for await (const image of actor.getIcons()) {
2292
+ if (image.url?.href == null) continue;
2293
+ links.push({
2294
+ rel: "http://webfinger.net/rel/avatar",
2295
+ href: image.url.href.toString(),
2296
+ ...image.mediaType != null && { type: image.mediaType }
2297
+ });
2298
+ }
2299
+ if (webFingerLinksDispatcher != null) {
2300
+ const customLinks = await webFingerLinksDispatcher(context$1, resourceUrl);
2301
+ if (customLinks != null) for (const link of customLinks) links.push(link);
2302
+ }
2303
+ const aliases = [];
2304
+ if (resourceUrl.protocol != "acct:" && actor.preferredUsername != null) {
2305
+ aliases.push(`acct:${actor.preferredUsername}@${host ?? context$1.url.host}`);
2306
+ if (host != null && host !== context$1.url.host) aliases.push(`acct:${actor.preferredUsername}@${context$1.url.host}`);
2307
+ }
2308
+ if (resourceUrl.href !== context$1.getActorUri(identifier).href) aliases.push(context$1.getActorUri(identifier).href);
2309
+ if (resourceUrl.protocol === "acct:" && host != null && host !== context$1.url.host && !resourceUrl.href.endsWith(`@${host}`)) {
2310
+ const username = resourceUrl.href.replace(/^acct:/, "").replace(/@.*$/, "");
2311
+ aliases.push(`acct:${username}@${host}`);
2312
+ }
2313
+ const jrd = {
2314
+ subject: resourceUrl.href,
2315
+ aliases,
2316
+ links
2317
+ };
2318
+ return new Response(JSON.stringify(jrd), { headers: {
2319
+ "Content-Type": "application/jrd+json",
2320
+ "Access-Control-Allow-Origin": "*"
2321
+ } });
2312
2322
  }
2313
2323
 
2314
2324
  //#endregion
@@ -2615,11 +2625,11 @@ var FederationImpl = class extends FederationBuilderImpl {
2615
2625
  });
2616
2626
  throw error;
2617
2627
  }
2618
- const delay$1 = this.outboxRetryPolicy({
2628
+ const delay = this.outboxRetryPolicy({
2619
2629
  elapsedTime: Temporal.Instant.from(message.started).until(Temporal.Now.instant()),
2620
2630
  attempts: message.attempt
2621
2631
  });
2622
- if (delay$1 != null) {
2632
+ if (delay != null) {
2623
2633
  logger$1.error("Failed to send activity {activityId} to {inbox} (attempt #{attempt}); retry...:\n{error}", {
2624
2634
  ...logData,
2625
2635
  error
@@ -2627,7 +2637,7 @@ var FederationImpl = class extends FederationBuilderImpl {
2627
2637
  await this.outboxQueue?.enqueue({
2628
2638
  ...message,
2629
2639
  attempt: message.attempt + 1
2630
- }, { delay: Temporal.Duration.compare(delay$1, { seconds: 0 }) < 0 ? Temporal.Duration.from({ seconds: 0 }) : delay$1 });
2640
+ }, { delay: Temporal.Duration.compare(delay, { seconds: 0 }) < 0 ? Temporal.Duration.from({ seconds: 0 }) : delay });
2631
2641
  } else logger$1.error("Failed to send activity {activityId} to {inbox} after {attempt} attempts; giving up:\n{error}", {
2632
2642
  ...logData,
2633
2643
  error
@@ -2714,11 +2724,11 @@ var FederationImpl = class extends FederationBuilderImpl {
2714
2724
  span$1.end();
2715
2725
  throw error;
2716
2726
  }
2717
- const delay$1 = this.inboxRetryPolicy({
2727
+ const delay = this.inboxRetryPolicy({
2718
2728
  elapsedTime: Temporal.Instant.from(message.started).until(Temporal.Now.instant()),
2719
2729
  attempts: message.attempt
2720
2730
  });
2721
- if (delay$1 != null) {
2731
+ if (delay != null) {
2722
2732
  logger$1.error("Failed to process the incoming activity {activityId} (attempt #{attempt}); retry...:\n{error}", {
2723
2733
  error,
2724
2734
  attempt: message.attempt,
@@ -2729,7 +2739,7 @@ var FederationImpl = class extends FederationBuilderImpl {
2729
2739
  await this.inboxQueue?.enqueue({
2730
2740
  ...message,
2731
2741
  attempt: message.attempt + 1
2732
- }, { delay: Temporal.Duration.compare(delay$1, { seconds: 0 }) < 0 ? Temporal.Duration.from({ seconds: 0 }) : delay$1 });
2742
+ }, { delay: Temporal.Duration.compare(delay, { seconds: 0 }) < 0 ? Temporal.Duration.from({ seconds: 0 }) : delay });
2733
2743
  } else logger$1.error("Failed to process the incoming activity {activityId} after {trial} attempts; giving up:\n{error}", {
2734
2744
  error,
2735
2745
  activityId: activity.id?.href,
@@ -4144,4 +4154,4 @@ function getRequestId(request) {
4144
4154
  }
4145
4155
 
4146
4156
  //#endregion
4147
- export { ContextImpl, FederationImpl, InboxContextImpl, KvSpecDeterminer, Router$1 as Router, RouterError, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, respondWithObject, respondWithObjectIfAcceptable };
4157
+ export { ContextImpl, FederationImpl, InboxContextImpl, KvSpecDeterminer, Router$1 as Router, RouterError, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, handleWebFinger, respondWithObject, respondWithObjectIfAcceptable };
@@ -1,5 +1,5 @@
1
- import { HttpMessageSignaturesSpecDeterminer } from "./http-M8k5mKc0.cjs";
2
- import { KvKey, KvStore } from "./kv-Bxr0Q87_.cjs";
1
+ import { HttpMessageSignaturesSpecDeterminer } from "./http-ClB3pLcL.cjs";
2
+ import { KvKey, KvStore } from "./kv-B4vFhIYL.cjs";
3
3
  import { DocumentLoader, DocumentLoaderFactoryOptions } from "@fedify/vocab-runtime";
4
4
  import { TracerProvider } from "@opentelemetry/api";
5
5
 
@@ -72,16 +72,16 @@ interface KvCacheParameters {
72
72
  /**
73
73
  * The document loader to decorate with a cache.
74
74
  */
75
- loader: DocumentLoader;
75
+ readonly loader: DocumentLoader;
76
76
  /**
77
77
  * The key–value store to use for backing the cache.
78
78
  */
79
- kv: KvStore;
79
+ readonly kv: KvStore;
80
80
  /**
81
81
  * The key prefix to use for namespacing the cache.
82
82
  * `["_fedify", "remoteDocument"]` by default.
83
83
  */
84
- prefix?: KvKey;
84
+ readonly prefix?: KvKey;
85
85
  /**
86
86
  * The per-URL cache rules in the array of `[urlPattern, duration]` pairs
87
87
  * where `urlPattern` is either a string, a {@link URL}, or
@@ -90,7 +90,7 @@ interface KvCacheParameters {
90
90
  *
91
91
  * By default, 5 minutes for all URLs.
92
92
  */
93
- rules?: [string | URL | URLPattern, Temporal.Duration | Temporal.DurationLike][];
93
+ readonly rules?: readonly [string | URL | URLPattern, Temporal.Duration | Temporal.DurationLike][];
94
94
  }
95
95
  /**
96
96
  * Decorates a {@link DocumentLoader} with a cache backed by a {@link Deno.Kv}.
@@ -0,0 +1,62 @@
1
+ import { ActorAliasMapper, ActorDispatcher, ActorHandleMapper, RequestContext, WebFingerLinksDispatcher } from "./context-CrB9RFy5.cjs";
2
+ import { Span, Tracer } from "@opentelemetry/api";
3
+
4
+ //#region src/federation/webfinger.d.ts
5
+ /**
6
+ * Parameters for {@link handleWebFinger}.
7
+ */
8
+ interface WebFingerHandlerParameters<TContextData> {
9
+ /**
10
+ * The request context.
11
+ */
12
+ context: RequestContext<TContextData>;
13
+ /**
14
+ * The canonical hostname of the server, if it's explicitly configured.
15
+ * @since 1.5.0
16
+ */
17
+ host?: string;
18
+ /**
19
+ * The callback for dispatching the actor.
20
+ */
21
+ actorDispatcher?: ActorDispatcher<TContextData>;
22
+ /**
23
+ * The callback for mapping a WebFinger username to the corresponding actor's
24
+ * internal identifier, or `null` if the username is not found.
25
+ * @since 0.15.0
26
+ */
27
+ actorHandleMapper?: ActorHandleMapper<TContextData>;
28
+ /**
29
+ * The callback for mapping a WebFinger query to the corresponding actor's
30
+ * internal identifier or username, or `null` if the query is not found.
31
+ * @since 1.4.0
32
+ */
33
+ actorAliasMapper?: ActorAliasMapper<TContextData>;
34
+ /**
35
+ * The callback for dispatching the Links of webFinger.
36
+ */
37
+ webFingerLinksDispatcher?: WebFingerLinksDispatcher<TContextData>;
38
+ /**
39
+ * The function to call when the actor is not found.
40
+ */
41
+ onNotFound(request: Request): Response | Promise<Response>;
42
+ /**
43
+ * The OpenTelemetry tracer.
44
+ * @since 1.3.0
45
+ */
46
+ tracer?: Tracer;
47
+ /**
48
+ * The span for the request.
49
+ * @since 1.3.0
50
+ */
51
+ span?: Span;
52
+ }
53
+ /**
54
+ * Handles a WebFinger request. You would not typically call this function
55
+ * directly, but instead use {@link Federation.fetch} method.
56
+ * @param request The WebFinger request to handle.
57
+ * @param parameters The parameters for handling the request.
58
+ * @returns The response to the request.
59
+ */
60
+ declare function handleWebFinger<TContextData>(request: Request, options: WebFingerHandlerParameters<TContextData>): Promise<Response>;
61
+ //#endregion
62
+ export { WebFingerHandlerParameters, handleWebFinger };
@@ -1,5 +1,5 @@
1
- import { CryptographicKey, DataIntegrityProof, Multikey, Object as Object$1 } from "./vocab-CeDBzu-f.cjs";
2
- import { KeyCache } from "./http-M8k5mKc0.cjs";
1
+ import { KeyCache } from "./http-ClB3pLcL.cjs";
2
+ import { CryptographicKey, DataIntegrityProof, Multikey, Object as Object$1 } from "@fedify/vocab";
3
3
  import { DocumentLoader } from "@fedify/vocab-runtime";
4
4
  import { TracerProvider } from "@opentelemetry/api";
5
5
 
@@ -0,0 +1,64 @@
1
+ import { Temporal } from "@js-temporal/polyfill";
2
+ import { URLPattern } from "urlpattern-polyfill";
3
+ import { ActorAliasMapper, ActorDispatcher, ActorHandleMapper, RequestContext, WebFingerLinksDispatcher } from "./context-C7vzWilY.js";
4
+ import { Span, Tracer } from "@opentelemetry/api";
5
+
6
+ //#region src/federation/webfinger.d.ts
7
+ /**
8
+ * Parameters for {@link handleWebFinger}.
9
+ */
10
+ interface WebFingerHandlerParameters<TContextData> {
11
+ /**
12
+ * The request context.
13
+ */
14
+ context: RequestContext<TContextData>;
15
+ /**
16
+ * The canonical hostname of the server, if it's explicitly configured.
17
+ * @since 1.5.0
18
+ */
19
+ host?: string;
20
+ /**
21
+ * The callback for dispatching the actor.
22
+ */
23
+ actorDispatcher?: ActorDispatcher<TContextData>;
24
+ /**
25
+ * The callback for mapping a WebFinger username to the corresponding actor's
26
+ * internal identifier, or `null` if the username is not found.
27
+ * @since 0.15.0
28
+ */
29
+ actorHandleMapper?: ActorHandleMapper<TContextData>;
30
+ /**
31
+ * The callback for mapping a WebFinger query to the corresponding actor's
32
+ * internal identifier or username, or `null` if the query is not found.
33
+ * @since 1.4.0
34
+ */
35
+ actorAliasMapper?: ActorAliasMapper<TContextData>;
36
+ /**
37
+ * The callback for dispatching the Links of webFinger.
38
+ */
39
+ webFingerLinksDispatcher?: WebFingerLinksDispatcher<TContextData>;
40
+ /**
41
+ * The function to call when the actor is not found.
42
+ */
43
+ onNotFound(request: Request): Response | Promise<Response>;
44
+ /**
45
+ * The OpenTelemetry tracer.
46
+ * @since 1.3.0
47
+ */
48
+ tracer?: Tracer;
49
+ /**
50
+ * The span for the request.
51
+ * @since 1.3.0
52
+ */
53
+ span?: Span;
54
+ }
55
+ /**
56
+ * Handles a WebFinger request. You would not typically call this function
57
+ * directly, but instead use {@link Federation.fetch} method.
58
+ * @param request The WebFinger request to handle.
59
+ * @param parameters The parameters for handling the request.
60
+ * @returns The response to the request.
61
+ */
62
+ declare function handleWebFinger<TContextData>(request: Request, options: WebFingerHandlerParameters<TContextData>): Promise<Response>;
63
+ //#endregion
64
+ export { WebFingerHandlerParameters, handleWebFinger };
@@ -1,5 +1,5 @@
1
- import { Activity } from "./vocab-CeDBzu-f.cjs";
2
- import { ActivityTransformer, Context } from "./context-PxGADCsD.cjs";
1
+ import { ActivityTransformer, Context } from "./context-CrB9RFy5.cjs";
2
+ import { Activity } from "@fedify/vocab";
3
3
 
4
4
  //#region src/compat/transformers.d.ts
5
5
 
@@ -28,7 +28,7 @@ declare function autoIdAssigner<TContextData>(activity: Activity, context: Conte
28
28
  * activity like this:
29
29
  *
30
30
  * ```typescript
31
- * import { Follow, Person } from "@fedify/fedify/vocab";
31
+ * import { Follow, Person } from "@fedify/vocab";
32
32
  * const input = new Follow({
33
33
  * id: new URL("http://example.com/activities/1"),
34
34
  * actor: new Person({
@@ -47,7 +47,7 @@ declare function autoIdAssigner<TContextData>(activity: Activity, context: Conte
47
47
  * The result of applying this transformer would be:
48
48
  *
49
49
  * ```typescript
50
- * import { Follow, Person } from "@fedify/fedify/vocab";
50
+ * import { Follow, Person } from "@fedify/vocab";
51
51
  * const output = new Follow({
52
52
  * id: new URL("http://example.com/activities/1"),
53
53
  * actor: new URL("http://example.com/actors/1"),
@@ -1,7 +1,7 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
- import { CryptographicKey, DataIntegrityProof, Multikey, Object as Object$1 } from "./vocab-BCWe1Ih5.js";
4
- import { KeyCache } from "./http-BbO0ejuk.js";
3
+ import { KeyCache } from "./http-DLBDPal9.js";
4
+ import { CryptographicKey, DataIntegrityProof, Multikey, Object as Object$1 } from "@fedify/vocab";
5
5
  import { TracerProvider } from "@opentelemetry/api";
6
6
  import { DocumentLoader } from "@fedify/vocab-runtime";
7
7
 
@@ -1,7 +1,7 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
- import { Activity } from "./vocab-BCWe1Ih5.js";
4
- import { ActivityTransformer, Context } from "./context-V-XS2_6O.js";
3
+ import { ActivityTransformer, Context } from "./context-C7vzWilY.js";
4
+ import { Activity } from "@fedify/vocab";
5
5
 
6
6
  //#region src/compat/transformers.d.ts
7
7
 
@@ -30,7 +30,7 @@ declare function autoIdAssigner<TContextData>(activity: Activity, context: Conte
30
30
  * activity like this:
31
31
  *
32
32
  * ```typescript
33
- * import { Follow, Person } from "@fedify/fedify/vocab";
33
+ * import { Follow, Person } from "@fedify/vocab";
34
34
  * const input = new Follow({
35
35
  * id: new URL("http://example.com/activities/1"),
36
36
  * actor: new Person({
@@ -49,7 +49,7 @@ declare function autoIdAssigner<TContextData>(activity: Activity, context: Conte
49
49
  * The result of applying this transformer would be:
50
50
  *
51
51
  * ```typescript
52
- * import { Follow, Person } from "@fedify/fedify/vocab";
52
+ * import { Follow, Person } from "@fedify/vocab";
53
53
  * const output = new Follow({
54
54
  * id: new URL("http://example.com/activities/1"),
55
55
  * actor: new URL("http://example.com/actors/1"),