@fedify/fedify 2.4.0-pr.936.41 → 2.5.0-dev.2271

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 (244) hide show
  1. package/README.md +50 -39
  2. package/dist/{assert-CJ1KXcvv.mjs → assert-D1Eafmd_.mjs} +1 -1
  3. package/dist/{assert_equals-BV7oLMxm.mjs → assert_equals-Z6IcEbWU.mjs} +2 -28
  4. package/dist/assert_exists-cffSpJ7X.mjs +28 -0
  5. package/dist/assert_false-CPdRnc3E.mjs +23 -0
  6. package/dist/assert_greater_or_equal-BlafOF4-.mjs +31 -0
  7. package/dist/{assert_instance_of-Q9KTBnrf.mjs → assert_instance_of-mrXWWNY-.mjs} +1 -1
  8. package/dist/{assert_not_equals-EPJPoxuf.mjs → assert_not_equals-CpPK2t89.mjs} +2 -1
  9. package/dist/assert_rejects-CTptdYck.mjs +39 -0
  10. package/dist/{assert_strict_equals-Ec20AUwa.mjs → assert_strict_equals-CYvBmkpC.mjs} +2 -1
  11. package/dist/{assert_throws-NiFfqbnH.mjs → assert_throws-BYITOvPO.mjs} +2 -1
  12. package/dist/assertion_error-B-cx0fFA.mjs +31 -0
  13. package/dist/audience-CHQ-FlLD.mjs +95 -0
  14. package/dist/{builder-DonuxRl_.mjs → builder-Bda6LK7A.mjs} +169 -14
  15. package/dist/{circuit-breaker-CBGyz5F7.mjs → circuit-breaker-XJ53md4S.mjs} +224 -17
  16. package/dist/circuit-breaker-test-utils-DW6YC_Pe.mjs +14 -0
  17. package/dist/{client-CjF5IYQS.mjs → client-CEnNz8O7.mjs} +144 -8
  18. package/dist/{codec-BBga-FWI.mjs → codec-C6rTrpIp.mjs} +26 -3
  19. package/dist/{collection-BIhlldqK.mjs → collection-CnnP1UAv.mjs} +1 -1
  20. package/dist/compat/mod.cjs +1 -1
  21. package/dist/compat/mod.d.cts +1 -1
  22. package/dist/compat/mod.d.ts +1 -1
  23. package/dist/compat/mod.js +1 -1
  24. package/dist/compat/outgoing-jsonld.test.mjs +71 -3
  25. package/dist/compat/public-audience.test.mjs +14 -5
  26. package/dist/compat/secured-document.test.d.mts +2 -0
  27. package/dist/compat/secured-document.test.mjs +58 -0
  28. package/dist/compat/transformers.test.mjs +5 -5
  29. package/dist/compound-proof-B-9mXxFW.mjs +989 -0
  30. package/dist/{context-Zii1f5xS.d.ts → context-7NyiqIcg.d.ts} +1600 -25
  31. package/dist/{context-BJXxPElm.mjs → context-8Tu9kea0.mjs} +21 -63
  32. package/dist/{context-lxX6I7as.d.cts → context-tsYPJ2Ew.d.cts} +1600 -25
  33. package/dist/{deno-BHzKn9Ig.mjs → deno-oR5aJKpU.mjs} +1 -1
  34. package/dist/dist-DJQM4u7i.mjs +189 -0
  35. package/dist/docloader-DBoYbvYW.mjs +87 -0
  36. package/dist/{esm-yYQfPhIY.mjs → esm-BHXXx4Wx.mjs} +13 -6
  37. package/dist/federation/audience.test.d.mts +2 -0
  38. package/dist/federation/audience.test.mjs +130 -0
  39. package/dist/federation/builder.test.mjs +54 -5
  40. package/dist/federation/circuit-breaker.test.mjs +838 -7
  41. package/dist/federation/collection.test.mjs +3 -3
  42. package/dist/federation/compound-fanout.test.d.mts +2 -0
  43. package/dist/federation/compound-fanout.test.mjs +228 -0
  44. package/dist/federation/handler-compound-proof.test.d.mts +2 -0
  45. package/dist/federation/handler-compound-proof.test.mjs +384 -0
  46. package/dist/federation/handler.test.mjs +385 -15
  47. package/dist/federation/hashlink-media.test.d.mts +2 -0
  48. package/dist/federation/hashlink-media.test.mjs +422 -0
  49. package/dist/federation/idempotency.test.mjs +6 -6
  50. package/dist/federation/inbox-report.test.d.mts +2 -0
  51. package/dist/federation/inbox-report.test.mjs +475 -0
  52. package/dist/federation/inbox.test.mjs +3 -3
  53. package/dist/federation/keycache.test.mjs +215 -14
  54. package/dist/federation/kv.test.mjs +3 -3
  55. package/dist/federation/metrics.test.mjs +5 -5
  56. package/dist/federation/middleware.test.mjs +967 -35
  57. package/dist/federation/mod.cjs +18 -261
  58. package/dist/federation/mod.d.cts +5 -5
  59. package/dist/federation/mod.d.ts +5 -5
  60. package/dist/federation/mod.js +279 -1
  61. package/dist/federation/mq.test.mjs +123 -47
  62. package/dist/federation/negotiation.test.mjs +4 -4
  63. package/dist/federation/outgoing-proof.test.d.mts +2 -0
  64. package/dist/federation/outgoing-proof.test.mjs +931 -0
  65. package/dist/federation/portable-actor.test.d.mts +2 -0
  66. package/dist/federation/portable-actor.test.mjs +496 -0
  67. package/dist/federation/portable-chain.test.d.mts +2 -0
  68. package/dist/federation/portable-chain.test.mjs +370 -0
  69. package/dist/federation/portable-collection.test.d.mts +2 -0
  70. package/dist/federation/portable-collection.test.mjs +832 -0
  71. package/dist/federation/portable-delivery.test.d.mts +2 -0
  72. package/dist/federation/portable-delivery.test.mjs +746 -0
  73. package/dist/federation/portable-gateway-keys.test.d.mts +2 -0
  74. package/dist/federation/portable-gateway-keys.test.mjs +686 -0
  75. package/dist/federation/portable-inbox.test.d.mts +2 -0
  76. package/dist/federation/portable-inbox.test.mjs +1535 -0
  77. package/dist/federation/portable-parse-uri.test.d.mts +2 -0
  78. package/dist/federation/portable-parse-uri.test.mjs +348 -0
  79. package/dist/federation/portable-route-activity.test.d.mts +2 -0
  80. package/dist/federation/portable-route-activity.test.mjs +259 -0
  81. package/dist/federation/portable.test.d.mts +2 -0
  82. package/dist/federation/portable.test.mjs +1072 -0
  83. package/dist/federation/retry.test.mjs +4 -3
  84. package/dist/federation/router.test.mjs +9 -159
  85. package/dist/federation/send.test.mjs +245 -27
  86. package/dist/federation/tasks/codec.test.mjs +4 -4
  87. package/dist/federation/tasks/enqueue.test.mjs +42 -4
  88. package/dist/federation/tasks/tasks.test.mjs +7 -6
  89. package/dist/federation/temporal.test.mjs +4 -4
  90. package/dist/federation/webfinger.test.mjs +275 -12
  91. package/dist/{middleware-FrSMAYEx.cjs → federation-CkZiAcWY.cjs} +8640 -3722
  92. package/dist/http-B5JT115n.cjs +10630 -0
  93. package/dist/http-DydWCB7R.js +6527 -0
  94. package/dist/{http-CPVMUgsW.mjs → http-siciWkmx.mjs} +397 -168
  95. package/dist/key-BspPiXqn.mjs +951 -0
  96. package/dist/key-C1nv7_jD.d.ts +1125 -0
  97. package/dist/key-DYxuyd-s.d.cts +1125 -0
  98. package/dist/key-owner-evidence-APB6NpSk.mjs +108 -0
  99. package/dist/keycache-Da8A8mZa.mjs +200 -0
  100. package/dist/{kv-D6hNiMTK.d.ts → kv-B2mzK5tl.d.cts} +3 -2
  101. package/dist/{kv-gJ8LYbxX.d.cts → kv-B2mzK5tl.d.ts} +3 -2
  102. package/dist/kv-DBRWVx3Q.mjs +104 -0
  103. package/dist/{kv-cache-KyGqJqSp.mjs → kv-cache-BF1hnW65.mjs} +1 -1
  104. package/dist/{kv-cache-5bnX3-Jq.js → kv-cache-CTQr1tbn.js} +54 -16
  105. package/dist/{kv-cache-DQ29C4XL.cjs → kv-cache-DCac1nEU.cjs} +55 -19
  106. package/dist/{ld-Cj9F_5AP.mjs → ld-CzaP-hJl.mjs} +44 -12
  107. package/dist/map-local-context-conflict-DOYEEJ3u.mjs +204 -0
  108. package/dist/map-local-create-note-B0SeXJms.mjs +214 -0
  109. package/dist/{metrics-DMk-nTxI.mjs → metrics-CYg9yxBL.mjs} +3 -2
  110. package/dist/metrics-DVKYY6K1.d.cts +36 -0
  111. package/dist/metrics-DoRtI0qU.d.ts +36 -0
  112. package/dist/{middleware-Y-kpsp6S.js → middleware-CsDDXKuL.js} +5493 -1103
  113. package/dist/{middleware-CvwTUgnP.mjs → middleware-D7_LO-Vs.mjs} +3157 -272
  114. package/dist/{middleware-CEctxBN6.mjs → middleware-DWjrfpcz.mjs} +1 -1
  115. package/dist/{mod-gOlPDuT8.d.cts → mod-BojP2Bw3.d.cts} +1 -1
  116. package/dist/mod-CavhAgLw.d.cts +320 -0
  117. package/dist/mod-CtpF2BU5.d.ts +320 -0
  118. package/dist/{mod-BtEaIEcD.d.cts → mod-DEZXwV6J.d.ts} +10 -4
  119. package/dist/{mod-UMmveiO0.d.ts → mod-Dw-nPxQh.d.cts} +10 -4
  120. package/dist/{mod-DLc2Ot6f.d.ts → mod-Xj5P4s4d.d.ts} +1 -1
  121. package/dist/mod.cjs +40 -39
  122. package/dist/mod.d.cts +10 -11
  123. package/dist/mod.d.ts +10 -11
  124. package/dist/mod.js +9 -9
  125. package/dist/{mq-llHKivST.mjs → mq-Dm1Wmtm-.mjs} +6 -0
  126. package/dist/nodeinfo/client.test.mjs +139 -4
  127. package/dist/nodeinfo/handler.test.mjs +5 -5
  128. package/dist/nodeinfo/mod.cjs +1 -1
  129. package/dist/nodeinfo/mod.d.cts +1 -1
  130. package/dist/nodeinfo/mod.d.ts +1 -1
  131. package/dist/nodeinfo/mod.js +1 -1
  132. package/dist/nodeinfo/types.test.mjs +4 -4
  133. package/dist/otel/exporter.test.mjs +3 -3
  134. package/dist/otel/mod.cjs +0 -1
  135. package/dist/otel/mod.d.cts +1 -1
  136. package/dist/otel/mod.d.ts +1 -1
  137. package/dist/{outgoing-jsonld-URuqsICz.mjs → outgoing-jsonld-4IJqPYos.mjs} +12 -10
  138. package/dist/{owner-DEvZuyOE.d.cts → owner-BF0L9cMt.d.cts} +11 -0
  139. package/dist/{owner-CnngXDNJ.d.ts → owner-BSzr5-I8.d.ts} +11 -0
  140. package/dist/owner-DYgfTFHy.mjs +267 -0
  141. package/dist/portable-collection-BpsVsRov.js +670 -0
  142. package/dist/portable-collection-C74P1vtC.mjs +418 -0
  143. package/dist/portable-collection-DZd2bm7M.cjs +686 -0
  144. package/dist/portable-key-BIMLrAP4.mjs +549 -0
  145. package/dist/portable-key-id-Ca30-hOa.mjs +248 -0
  146. package/dist/proof-Dxy6ByqI.mjs +1299 -0
  147. package/dist/{public-audience-Cr5MsnMq.mjs → public-audience--klBIOk1.mjs} +15 -10
  148. package/dist/router-u5O5KCQr.mjs +156 -0
  149. package/dist/runtime/mod.cjs +1 -1
  150. package/dist/runtime/mod.js +1 -1
  151. package/dist/secured-document-CxzZZ9nL.mjs +35 -0
  152. package/dist/send-C4dDpAxm.mjs +495 -0
  153. package/dist/sig/accept.test.mjs +1 -1
  154. package/dist/sig/compound-proof-discovery.test.d.mts +2 -0
  155. package/dist/sig/compound-proof-discovery.test.mjs +331 -0
  156. package/dist/sig/compound-proof-producer.test.d.mts +2 -0
  157. package/dist/sig/compound-proof-producer.test.mjs +107 -0
  158. package/dist/sig/compound-proof-verification.test.d.mts +2 -0
  159. package/dist/sig/compound-proof-verification.test.mjs +833 -0
  160. package/dist/sig/compound-proof.test.d.mts +2 -0
  161. package/dist/sig/compound-proof.test.mjs +411 -0
  162. package/dist/sig/http.test.mjs +702 -31
  163. package/dist/sig/key-owner-evidence.test.d.mts +2 -0
  164. package/dist/sig/key-owner-evidence.test.mjs +100 -0
  165. package/dist/sig/key.test.mjs +220 -8
  166. package/dist/sig/ld.test.mjs +65 -7
  167. package/dist/sig/mitra-receive-interop.test.d.mts +2 -0
  168. package/dist/sig/mitra-receive-interop.test.mjs +260 -0
  169. package/dist/sig/mitra-send-interop.test.d.mts +2 -0
  170. package/dist/sig/mitra-send-interop.test.mjs +461 -0
  171. package/dist/sig/mod.cjs +18 -16
  172. package/dist/sig/mod.d.cts +4 -4
  173. package/dist/sig/mod.d.ts +4 -4
  174. package/dist/sig/mod.js +3 -3
  175. package/dist/sig/owner.test.mjs +108 -9
  176. package/dist/sig/portable-collection.test.d.mts +2 -0
  177. package/dist/sig/portable-collection.test.mjs +697 -0
  178. package/dist/sig/portable-interop.test.d.mts +2 -0
  179. package/dist/sig/portable-interop.test.mjs +156 -0
  180. package/dist/sig/portable-key-id.test.d.mts +2 -0
  181. package/dist/sig/portable-key-id.test.mjs +67 -0
  182. package/dist/sig/portable-key.test.d.mts +2 -0
  183. package/dist/sig/portable-key.test.mjs +1439 -0
  184. package/dist/sig/proof.test.mjs +1753 -16
  185. package/dist/sig/tootik-request-interop.test.d.mts +2 -0
  186. package/dist/sig/tootik-request-interop.test.mjs +190 -0
  187. package/dist/sig/tootik-send-interop.test.d.mts +2 -0
  188. package/dist/sig/tootik-send-interop.test.mjs +331 -0
  189. package/dist/sig/verification.test.d.mts +2 -0
  190. package/dist/sig/verification.test.mjs +310 -0
  191. package/dist/std__assert-DvMDRPes.mjs +8 -0
  192. package/dist/{testing-CO7ftO8A.mjs → tasks-IG3pHfvZ.mjs} +2 -2
  193. package/dist/{temporal-fsXO5IvD.mjs → temporal-D0KJI4NF.mjs} +3 -3
  194. package/dist/testing/context.test.d.mts +2 -0
  195. package/dist/testing/context.test.mjs +19 -0
  196. package/dist/testing/kv.test.d.mts +2 -0
  197. package/dist/testing/kv.test.mjs +101 -0
  198. package/dist/testing/mod.d.mts +1617 -48
  199. package/dist/testing/mod.mjs +6 -3
  200. package/dist/testing-t8xDeJZ5.mjs +8 -0
  201. package/dist/{transformers-DGwl-hD1.cjs → transformers-BalCrSsr.cjs} +0 -1
  202. package/dist/{types-DC1pNgJA.js → types-_S2_MeLF.js} +144 -8
  203. package/dist/{types-CPym83zc.cjs → types-poIao40f.cjs} +160 -7
  204. package/dist/utils/docloader.test.mjs +530 -8
  205. package/dist/utils/kv-cache.test.mjs +2 -2
  206. package/dist/utils/mod.cjs +1 -1
  207. package/dist/utils/mod.d.cts +1 -1
  208. package/dist/utils/mod.d.ts +1 -1
  209. package/dist/utils/mod.js +1 -1
  210. package/dist/verification-C3954hQh.mjs +5 -0
  211. package/dist/verification-Dpfcw8ml.mjs +105 -0
  212. package/dist/vocab/cjs.test.mjs +1 -1
  213. package/package.json +8 -8
  214. package/dist/assert_rejects-EgstcQy5.mjs +0 -82
  215. package/dist/docloader-e1khNUKy.mjs +0 -49
  216. package/dist/http-CsmQ-BQ4.js +0 -2483
  217. package/dist/http-VyDTd4G3.d.cts +0 -553
  218. package/dist/http-hlIjmewS.cjs +0 -2694
  219. package/dist/http-lf8Hsd91.d.ts +0 -553
  220. package/dist/key-DfPsX8hv.mjs +0 -453
  221. package/dist/keycache-_DHqz5z_.mjs +0 -97
  222. package/dist/metrics-CoUJLQhZ.d.cts +0 -276
  223. package/dist/metrics-Dc4jR-IC.d.ts +0 -276
  224. package/dist/mod-B0hW12_O.d.cts +0 -307
  225. package/dist/mod-COIAjwRS.d.ts +0 -307
  226. package/dist/owner-Br9YYzn_.mjs +0 -120
  227. package/dist/proof-B4ngoaNQ.mjs +0 -316
  228. package/dist/proof-B6E0XUXJ.js +0 -1415
  229. package/dist/proof-NN4xCQGL.cjs +0 -1562
  230. package/dist/send-CxHKUNzv.mjs +0 -239
  231. package/dist/std__assert-B2NnY9bq.mjs +0 -79
  232. package/dist/temporal-polyfill-BCdTHexd.cjs +0 -3565
  233. /package/dist/{accept-8PiolDP7.mjs → accept-CPVqki78.mjs} +0 -0
  234. /package/dist/{activity-listener-BtTSxZWA.mjs → activity-listener-C-BSbKI7.mjs} +0 -0
  235. /package/dist/{client-CAM_bQXx.d.cts → client-D-XP_Ccb.d.cts} +0 -0
  236. /package/dist/{client-CSddvgWN.d.ts → client-D-XP_Ccb.d.ts} +0 -0
  237. /package/dist/{keys-Dbyd7bhl.mjs → keys-DIJNHW-Y.mjs} +0 -0
  238. /package/dist/{kv-CXBAok3k.mjs → kv-DCHkaJ9-.mjs} +0 -0
  239. /package/dist/{negotiation-RuwrPFqi.mjs → negotiation-CCocWT_N.mjs} +0 -0
  240. /package/dist/{retry-DgFqeS5k.mjs → retry-zX5xw5e0.mjs} +0 -0
  241. /package/dist/{chunk-D5IdezsZ.js → rolldown-runtime-BC-Eo5Mj.js} +0 -0
  242. /package/dist/{chunk-Czpeue4M.cjs → rolldown-runtime-Dmm3t92W.cjs} +0 -0
  243. /package/dist/{transformers-DXze6FUB.js → transformers-DAtXl_Kc.js} +0 -0
  244. /package/dist/{types-CrtdVuDP.mjs → types-DE_LV1JB.mjs} +0 -0
@@ -1,239 +0,0 @@
1
- import "temporal-polyfill";
2
- import "urlpattern-polyfill";
3
- globalThis.addEventListener = () => {};
4
- import { n as version, t as name } from "./deno-BHzKn9Ig.mjs";
5
- import { n as getDurationMs, r as getFederationMetrics } from "./metrics-DMk-nTxI.mjs";
6
- import { n as doubleKnock } from "./http-CPVMUgsW.mjs";
7
- import { getLogger } from "@logtape/logtape";
8
- import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
9
- import { FetchError } from "@fedify/vocab-runtime";
10
- //#region src/federation/send.ts
11
- /**
12
- * Extracts the inbox URLs from recipients.
13
- * @param parameters The parameters to extract the inboxes.
14
- * See also {@link ExtractInboxesParameters}.
15
- * @returns The inboxes as a map of inbox URL to actor URIs.
16
- */
17
- function extractInboxes({ recipients, preferSharedInbox, excludeBaseUris }) {
18
- const inboxes = {};
19
- for (const recipient of recipients) {
20
- let inbox;
21
- let sharedInbox = false;
22
- if (preferSharedInbox && recipient.endpoints?.sharedInbox != null) {
23
- inbox = recipient.endpoints.sharedInbox;
24
- sharedInbox = true;
25
- } else inbox = recipient.inboxId;
26
- if (inbox != null && recipient.id != null) {
27
- if (excludeBaseUris != null && excludeBaseUris.some((u) => u.origin === inbox?.origin)) continue;
28
- inboxes[inbox.href] ??= {
29
- actorIds: /* @__PURE__ */ new Set(),
30
- sharedInbox
31
- };
32
- inboxes[inbox.href].actorIds.add(recipient.id.href);
33
- }
34
- }
35
- return inboxes;
36
- }
37
- /**
38
- * Sends an {@link Activity} to an inbox.
39
- *
40
- * @param parameters The parameters for sending the activity.
41
- * See also {@link SendActivityParameters}.
42
- * @throws {Error} If the activity fails to send.
43
- */
44
- function sendActivity(options) {
45
- const tracerProvider = options.tracerProvider ?? trace.getTracerProvider();
46
- return tracerProvider.getTracer(name, version).startActiveSpan("activitypub.send_activity", {
47
- kind: SpanKind.CLIENT,
48
- attributes: { "activitypub.shared_inbox": options.sharedInbox ?? false }
49
- }, async (span) => {
50
- if (options.activityId != null) span.setAttribute("activitypub.activity.id", options.activityId);
51
- if (options.activityType != null) span.setAttribute("activitypub.activity.type", options.activityType);
52
- try {
53
- await sendActivityInternal({
54
- ...options,
55
- tracerProvider
56
- }, span);
57
- } catch (e) {
58
- span.setStatus({
59
- code: SpanStatusCode.ERROR,
60
- message: String(e)
61
- });
62
- throw e;
63
- } finally {
64
- span.end();
65
- }
66
- });
67
- }
68
- const MAX_ERROR_RESPONSE_BODY_BYTES = 1024;
69
- function getActivityActorId(activity) {
70
- if (!isRecord(activity)) return void 0;
71
- return getIdValue(activity.actor);
72
- }
73
- function getIdValue(value) {
74
- if (typeof value === "string" && value !== "") return value;
75
- if (value instanceof URL) return value.href;
76
- if (Array.isArray(value)) {
77
- for (const item of value) {
78
- const id = getIdValue(item);
79
- if (id != null) return id;
80
- }
81
- return;
82
- }
83
- if (isRecord(value)) return getIdValue(value.id);
84
- }
85
- function isRecord(value) {
86
- return typeof value === "object" && value != null;
87
- }
88
- async function readLimitedResponseBody(response, maxBytes) {
89
- if (response.body == null) return "";
90
- const reader = response.body.getReader();
91
- const decoder = new TextDecoder();
92
- const chunks = [];
93
- let totalBytes = 0;
94
- let truncated = false;
95
- try {
96
- while (true) {
97
- const { done, value } = await reader.read();
98
- if (done) break;
99
- if (totalBytes + value.length > maxBytes) {
100
- const remaining = maxBytes - totalBytes;
101
- if (remaining > 0) chunks.push(decoder.decode(value.slice(0, remaining), { stream: true }));
102
- truncated = true;
103
- break;
104
- }
105
- chunks.push(decoder.decode(value, { stream: true }));
106
- totalBytes += value.length;
107
- }
108
- } finally {
109
- reader.releaseLock();
110
- }
111
- let result = chunks.join("");
112
- if (truncated) result += "… (truncated)";
113
- return result;
114
- }
115
- async function sendActivityInternal({ activity, activityId, activityType, keys, inbox, headers, specDeterminer, meterProvider, tracerProvider }, span) {
116
- const logger = getLogger([
117
- "fedify",
118
- "federation",
119
- "outbox"
120
- ]);
121
- const federationMetrics = getFederationMetrics(meterProvider);
122
- const started = performance.now();
123
- let deliverySuccess = false;
124
- headers = new Headers(headers);
125
- headers.set("Content-Type", "application/activity+json");
126
- const request = new Request(inbox, {
127
- method: "POST",
128
- headers,
129
- body: JSON.stringify(activity)
130
- });
131
- let rsaKey = null;
132
- for (const key of keys) if (key.privateKey.algorithm.name === "RSASSA-PKCS1-v1_5") {
133
- rsaKey = key;
134
- break;
135
- }
136
- if (rsaKey == null) logger.warn("No supported key found to sign the request to {inbox}. The request will be sent without a signature. In order to sign the request, at least one RSASSA-PKCS1-v1_5 key must be provided.", {
137
- inbox: inbox.href,
138
- keys: keys.map((pair) => ({
139
- keyId: pair.keyId.href,
140
- privateKey: pair.privateKey
141
- }))
142
- });
143
- let response;
144
- try {
145
- response = rsaKey == null ? await fetch(request) : await doubleKnock(request, rsaKey, {
146
- tracerProvider,
147
- specDeterminer
148
- });
149
- } catch (error) {
150
- const transportError = error instanceof FetchError ? error : createFetchError(inbox.href, error);
151
- logger.error("Failed to send activity {activityId} to {inbox}:\n{error}", {
152
- activityId,
153
- inbox: inbox.href,
154
- error: transportError
155
- });
156
- federationMetrics.recordDelivery(inbox, getDurationMs(started), false, activityType);
157
- throw transportError;
158
- }
159
- try {
160
- if (!response.ok) {
161
- let error;
162
- try {
163
- error = await readLimitedResponseBody(response, MAX_ERROR_RESPONSE_BODY_BYTES);
164
- } catch (_) {
165
- error = "";
166
- }
167
- logger.error("Failed to send activity {activityId} to {inbox} ({status} {statusText}):\n{error}", {
168
- activityId,
169
- inbox: inbox.href,
170
- status: response.status,
171
- statusText: response.statusText,
172
- error
173
- });
174
- throw new SendActivityError(inbox, response.status, `Failed to send activity ${activityId} to ${inbox.href} (${response.status} ${response.statusText}):\n${error}`, error, response.headers);
175
- }
176
- deliverySuccess = true;
177
- const eventAttributes = {
178
- "activitypub.inbox.url": inbox.href,
179
- "activitypub.activity.id": activityId ?? ""
180
- };
181
- if (activityType != null) eventAttributes["activitypub.activity.type"] = activityType;
182
- const actorId = getActivityActorId(activity);
183
- if (actorId != null) eventAttributes["activitypub.actor.id"] = actorId;
184
- span.addEvent("activitypub.activity.sent", eventAttributes);
185
- } finally {
186
- federationMetrics.recordDelivery(inbox, getDurationMs(started), deliverySuccess, activityType);
187
- }
188
- }
189
- function createFetchError(url, cause) {
190
- const error = new FetchError(url, cause instanceof Error ? cause.message : String(cause));
191
- error.cause = cause;
192
- return error;
193
- }
194
- /**
195
- * An error that is thrown when an activity fails to send to a remote inbox.
196
- * It contains structured information about the failure, including the HTTP
197
- * status code, the inbox URL, and the response body.
198
- * @since 2.0.0
199
- */
200
- var SendActivityError = class extends Error {
201
- /**
202
- * The inbox URL that the activity was being sent to.
203
- */
204
- inbox;
205
- /**
206
- * The HTTP status code returned by the inbox.
207
- */
208
- statusCode;
209
- /**
210
- * The response body from the inbox, if any. Note that this may be
211
- * truncated to a maximum of 1 KiB to prevent excessive memory consumption
212
- * when remote servers return large error pages (e.g., Cloudflare error pages).
213
- * If truncated, the string will end with `"… (truncated)"`.
214
- */
215
- responseBody;
216
- /**
217
- * The response headers from the inbox.
218
- * @since 2.3.0
219
- */
220
- responseHeaders;
221
- /**
222
- * Creates a new {@link SendActivityError}.
223
- * @param inbox The inbox URL.
224
- * @param statusCode The HTTP status code.
225
- * @param message The error message.
226
- * @param responseBody The response body.
227
- * @param responseHeaders The response headers.
228
- */
229
- constructor(inbox, statusCode, message, responseBody, responseHeaders) {
230
- super(message);
231
- this.name = "SendActivityError";
232
- this.inbox = inbox;
233
- this.statusCode = statusCode;
234
- this.responseBody = responseBody;
235
- this.responseHeaders = new Headers(responseHeaders);
236
- }
237
- };
238
- //#endregion
239
- export { extractInboxes as n, sendActivity as r, SendActivityError as t };
@@ -1,79 +0,0 @@
1
- import "temporal-polyfill";
2
- import "urlpattern-polyfill";
3
- globalThis.addEventListener = () => {};
4
- import { l as AssertionError, s as format } from "./assert_equals-BV7oLMxm.mjs";
5
- import "./assert_rejects-EgstcQy5.mjs";
6
- import "./assert_throws-NiFfqbnH.mjs";
7
- import "./assert_strict_equals-Ec20AUwa.mjs";
8
- //#region ../../node_modules/.pnpm/@jsr+std__assert@0.226.0/node_modules/@jsr/std__assert/assert_exists.js
9
- /**
10
- * Make an assertion that actual is not null or undefined.
11
- * If not then throw.
12
- *
13
- * @example Usage
14
- * ```ts no-eval
15
- * import { assertExists } from "@std/assert/assert-exists";
16
- *
17
- * assertExists("something"); // Doesn't throw
18
- * assertExists(undefined); // Throws
19
- * ```
20
- *
21
- * @typeParam T The type of the actual value.
22
- * @param actual The actual value to check.
23
- * @param msg The optional message to include in the error if the assertion fails.
24
- */ function assertExists(actual, msg) {
25
- if (actual === void 0 || actual === null) {
26
- msg = `Expected actual: "${actual}" to not be null or undefined${msg ? `: ${msg}` : "."}`;
27
- throw new AssertionError(msg);
28
- }
29
- }
30
- //#endregion
31
- //#region ../../node_modules/.pnpm/@jsr+std__assert@0.226.0/node_modules/@jsr/std__assert/assert_greater.js
32
- /**
33
- * Make an assertion that `actual` is greater than `expected`.
34
- * If not then throw.
35
- *
36
- * @example Usage
37
- * ```ts no-eval
38
- * import { assertGreater } from "@std/assert/assert-greater";
39
- *
40
- * assertGreater(2, 1); // Doesn't throw
41
- * assertGreater(1, 1); // Throws
42
- * assertGreater(0, 1); // Throws
43
- * ```
44
- *
45
- * @typeParam T The type of the values to compare.
46
- * @param actual The actual value to compare.
47
- * @param expected The expected value to compare.
48
- * @param msg The optional message to display if the assertion fails.
49
- */ function assertGreater(actual, expected, msg) {
50
- if (actual > expected) return;
51
- const actualString = format(actual);
52
- const expectedString = format(expected);
53
- throw new AssertionError(msg ?? `Expect ${actualString} > ${expectedString}`);
54
- }
55
- //#endregion
56
- //#region ../../node_modules/.pnpm/@jsr+std__assert@0.226.0/node_modules/@jsr/std__assert/assert_string_includes.js
57
- /**
58
- * Make an assertion that actual includes expected. If not
59
- * then throw.
60
- *
61
- * @example Usage
62
- * ```ts no-eval
63
- * import { assertStringIncludes } from "@std/assert/assert-string-includes";
64
- *
65
- * assertStringIncludes("Hello", "ello"); // Doesn't throw
66
- * assertStringIncludes("Hello", "world"); // Throws
67
- * ```
68
- *
69
- * @param actual The actual string to check for inclusion.
70
- * @param expected The expected string to check for inclusion.
71
- * @param msg The optional message to display if the assertion fails.
72
- */ function assertStringIncludes(actual, expected, msg) {
73
- if (!actual.includes(expected)) {
74
- msg = `Expected actual: "${actual}" to contain: "${expected}"${msg ? `: ${msg}` : "."}`;
75
- throw new AssertionError(msg);
76
- }
77
- }
78
- //#endregion
79
- export { assertGreater as n, assertExists as r, assertStringIncludes as t };