@fedify/fedify 2.0.0-dev.1908 → 2.0.0-dev.196

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 +68 -35
  3. package/dist/{builder-GG0LDRaK.js → builder-R1Sfe-tb.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-i60L3ZJW.js +117 -0
  16. package/dist/{testing-bgnt5CjE.js → dist-B5f6a8Tt.js} +90 -110
  17. package/dist/{docloader-Buj0Y50A.js → docloader-BuOglEYx.js} +3 -3
  18. package/dist/{esm-vPU_GxaY.js → esm-DGl7uK1r.js} +32 -17
  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-ByZmUHwe.js → http-B5BgMxiO.js} +119 -9
  40. package/dist/{http-CTi-owaL.cjs → http-B_jtB30-.cjs} +132 -16
  41. package/dist/{http-M8k5mKc0.d.cts → http-ClB3pLcL.d.cts} +1 -1
  42. package/dist/{http-BbO0ejuk.d.ts → http-DLBDPal9.d.ts} +1 -1
  43. package/dist/{http-DO88HCOK.js → http-uzkhnm0W.js} +3 -2
  44. package/dist/{inbox-BwIgnk8R.js → inbox-CxrUTds4.js} +2 -1
  45. package/dist/{key-CrKmngwF.js → key-DBHCloAO.js} +3 -3
  46. package/dist/{keycache-CFv8xdnH.js → keycache-DRxpZ5r9.js} +1 -1
  47. package/dist/{keys-B2yaEG79.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-DN9pfMBe.js → kv-cache-BEeqyGER.js} +14 -1
  52. package/dist/{kv-cache-CykGg2IP.js → kv-cache-BqWqxam4.js} +2 -2
  53. package/dist/{kv-cache-BbklA4EG.cjs → kv-cache-DY6hQ8Rf.cjs} +2 -2
  54. package/dist/{ld-Ckl2k3lF.js → ld-CZgNIUGN.js} +4 -3
  55. package/dist/{middleware-X0RaVmfv.cjs → middleware-BaoVtoMl.cjs} +210 -194
  56. package/dist/{middleware-Dv90Gwc-.js → middleware-BqPcChYv.js} +164 -154
  57. package/dist/middleware-CnrWiFJI.cjs +12 -0
  58. package/dist/{middleware-CdPISvYD.js → middleware-CxwWsgSo.js} +162 -165
  59. package/dist/middleware-DoFisLae.js +26 -0
  60. package/dist/middleware-ZN9cd_L8.js +12 -0
  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-C8UEs7je.js → owner-BDvRiO5T.js} +44 -8
  86. package/dist/{owner-kQRGVXG1.d.ts → owner-BgI8C-VY.d.ts} +1 -2
  87. package/dist/{owner-B4HbyP8s.d.cts → owner-C-zfmVAD.d.cts} +1 -2
  88. package/dist/{proof-CDW6KgLA.js → proof-DzFse-Bn.js} +46 -11
  89. package/dist/{proof-CWKgvgzL.js → proof-XEPY5YKg.js} +3 -2
  90. package/dist/{proof-yc6sVqKg.cjs → proof-vmNsq1AQ.cjs} +63 -28
  91. package/dist/router-D9eI0s4b.js +118 -0
  92. package/dist/{send-z5jueBCW.js → send-BdhhZ2MN.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 +25 -36
  116. package/dist/actor-C6x8UgbE.cjs +0 -42079
  117. package/dist/actor-C76CDThG.js +0 -41647
  118. package/dist/actor-DqFajh9s.d.ts +0 -130
  119. package/dist/actor-DrFLTQdj.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-D17ydBQd.cjs +0 -265
  152. package/dist/lookup-DrCNfWHm.js +0 -253
  153. package/dist/lookup-yP6Lo5JV.js +0 -42178
  154. package/dist/middleware-BSCsvvh-.js +0 -26
  155. package/dist/middleware-GFpHLL1X.cjs +0 -15
  156. package/dist/middleware-pl3iXZpj.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-B4wXNBv8.js +0 -255
  242. package/dist/vocab-BCWe1Ih5.d.ts +0 -14905
  243. package/dist/vocab-CeDBzu-f.d.cts +0 -14903
  244. package/dist/vocab-Hqae4yux.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-DrCNfWHm.js";
7
- import { Activity, Collection, CollectionPage, CryptographicKey, Link, Multikey, Object as Object$1, OrderedCollection, OrderedCollectionPage, getTypeId } from "./actor-C76CDThG.js";
8
- import { doubleKnock, exportJwk, importJwk, validateCryptoKey, verifyRequest } from "./http-ByZmUHwe.js";
9
- import { detachSignature, doesActorOwnKey, getKeyOwner, hasSignature, signJsonLd, signObject, verifyJsonLd, verifyObject } from "./proof-CDW6KgLA.js";
10
- import { getNodeInfo, nodeInfoToJson } from "./types-BtUjyi5y.js";
11
- import { getAuthenticatedDocumentLoader, kvCache } from "./kv-cache-CykGg2IP.js";
12
- import { lookupObject, traverseCollection } from "./vocab-B4wXNBv8.js";
5
+ import { getDefaultActivityTransformers } from "./transformers-N_ip_y4P.js";
6
+ import { deno_default, doubleKnock, exportJwk, importJwk, validateCryptoKey, verifyRequest } from "./http-B5BgMxiO.js";
7
+ import { detachSignature, doesActorOwnKey, getKeyOwner, hasSignature, signJsonLd, signObject, verifyJsonLd, verifyObject } from "./proof-DzFse-Bn.js";
8
+ import { getNodeInfo, nodeInfoToJson } from "./types-8l28uC8o.js";
9
+ import { getAuthenticatedDocumentLoader, kvCache } from "./kv-cache-BqWqxam4.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-pl3iXZpj.js");
340
+ const { FederationImpl: FederationImpl$1 } = await import("./middleware-ZN9cd_L8.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 };
@@ -0,0 +1,12 @@
1
+
2
+ const { Temporal } = require("@js-temporal/polyfill");
3
+ const { URLPattern } = require("urlpattern-polyfill");
4
+
5
+ require('./transformers-BjBg6Lag.cjs');
6
+ require('./http-B_jtB30-.cjs');
7
+ const require_middleware = require('./middleware-BaoVtoMl.cjs');
8
+ require('./proof-vmNsq1AQ.cjs');
9
+ require('./types-B6z6CqIz.cjs');
10
+ require('./kv-cache-DY6hQ8Rf.cjs');
11
+
12
+ exports.FederationImpl = require_middleware.FederationImpl;