@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,9 +1,10 @@
1
1
  import "temporal-polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { n as version, t as name } from "./deno-BHzKn9Ig.mjs";
5
- import { n as getDurationMs, r as getFederationMetrics, s as measureSignatureKeyFetch } from "./metrics-DMk-nTxI.mjs";
6
- import { n as fetchKey, o as validateCryptoKey } from "./key-DfPsX8hv.mjs";
4
+ import { a as verificationObservation, i as triedKey, n as observeCheck, t as observeAttempt } from "./verification-Dpfcw8ml.mjs";
5
+ import { n as version, t as name } from "./deno-oR5aJKpU.mjs";
6
+ import { n as getDurationMs, r as getFederationMetrics, s as measureSignatureKeyFetch } from "./metrics-CYg9yxBL.mjs";
7
+ import { c as validateCryptoKey, i as fetchKey, t as bypassKeyCacheReads } from "./key-BspPiXqn.mjs";
7
8
  import { getLogger } from "@logtape/logtape";
8
9
  import { Activity, CryptographicKey, Object as Object$1, getTypeId } from "@fedify/vocab";
9
10
  import { SpanStatusCode, trace } from "@opentelemetry/api";
@@ -25,7 +26,7 @@ const localContext = [
25
26
  ];
26
27
  const localContextUrls = new Set(localContext);
27
28
  const builtInContextLoader = getDocumentLoader();
28
- const disallowedJsonLdKeywords = new Set([
29
+ const disallowedJsonLdKeywords = /* @__PURE__ */ new Set([
29
30
  "@graph",
30
31
  "@included",
31
32
  "@reverse"
@@ -206,7 +207,7 @@ function normalizeContextReference(reference, baseUrl) {
206
207
  /** @internal */
207
208
  function isInvalidUrlTypeError(error) {
208
209
  const code = error.code;
209
- return error instanceof TypeError && (code === "ERR_INVALID_URL" || /^Invalid URL(?::|$)/.test(error.message) || / cannot be parsed as a URL\.?$/.test(error.message));
210
+ return error instanceof TypeError && (code === "ERR_INVALID_URL" || error.message === "Invalid URL string." || /^Invalid URL(?::|$)/.test(error.message) || / cannot be parsed as a URL\.?$/.test(error.message));
210
211
  }
211
212
  async function applyGraphAliasContext(state, context, documentLoader, remoteContextCache, baseUrl = null, processingContexts = /* @__PURE__ */ new Set()) {
212
213
  if (context === null) return createGraphAliasContextState();
@@ -450,6 +451,13 @@ function detachSignature(jsonLd) {
450
451
  */
451
452
  async function verifySignature(jsonLd, options = {}) {
452
453
  if (!hasSignature(jsonLd)) return null;
454
+ if (options[verificationObservation]?.attempt != null && options[verificationObservation]?.check == null) {
455
+ const declared = getLdSignatureObject(jsonLd)?.creator;
456
+ return await observeCheck(options, { mechanism: "linkedData" }, typeof declared === "string" ? declared : null, (observation) => verifySignature(jsonLd, {
457
+ ...options,
458
+ [verificationObservation]: observation
459
+ }));
460
+ }
453
461
  const sig = jsonLd.signature;
454
462
  let signature;
455
463
  try {
@@ -495,6 +503,7 @@ async function verifySignature(jsonLd, options = {}) {
495
503
  const encoder = new TextEncoder();
496
504
  const message = sigOptsHash + docHash;
497
505
  const messageBytes = encoder.encode(message);
506
+ triedKey(options, key);
498
507
  if (await crypto.subtle.verify("RSASSA-PKCS1-v1_5", key.publicKey, signature.slice(), messageBytes)) return key;
499
508
  if (cached) {
500
509
  logger.debug("Failed to verify with the cached key {keyId}; signature {signatureValue} is invalid. Retrying with the freshly fetched key...", {
@@ -503,12 +512,10 @@ async function verifySignature(jsonLd, options = {}) {
503
512
  });
504
513
  const { key } = await measureSignatureKeyFetch(options.meterProvider, "linked_data", () => fetchKey(new URL(sig.creator), CryptographicKey, {
505
514
  ...options,
506
- keyCache: {
507
- get: () => Promise.resolve(void 0),
508
- set: async (keyId, key) => await options.keyCache?.set(keyId, key)
509
- }
515
+ keyCache: bypassKeyCacheReads(options.keyCache)
510
516
  }));
511
517
  if (key == null) return null;
518
+ triedKey(options, key);
512
519
  return await crypto.subtle.verify("RSASSA-PKCS1-v1_5", key.publicKey, signature.slice(), messageBytes) ? key : null;
513
520
  }
514
521
  logger.debug("Failed to verify with the fetched key {keyId}; signature {signatureValue} is invalid. Check if the key is correct or if the signed message is correct. The message to sign is:\n{message}", {
@@ -525,7 +532,7 @@ async function verifySignature(jsonLd, options = {}) {
525
532
  * only from external documents and are dropped from the metric attribute to
526
533
  * avoid attacker-controlled cardinality.
527
534
  */
528
- const LD_KNOWN_SIGNATURE_TYPES = new Set(["RsaSignature2017"]);
535
+ const LD_KNOWN_SIGNATURE_TYPES = /* @__PURE__ */ new Set(["RsaSignature2017"]);
529
536
  /**
530
537
  * Reports only whether a `signature` key is present on the document, with
531
538
  * no shape check on its value. This is intentionally looser than
@@ -562,6 +569,14 @@ async function verifyCompactJsonLd(jsonLd, options = {}) {
562
569
  return await verifyJsonLdInternal(jsonLd, options, false);
563
570
  }
564
571
  async function verifyJsonLdInternal(jsonLd, options, compact) {
572
+ if (options[verificationObservation]?.attempt == null) return await observeAttempt({
573
+ ...options,
574
+ [verificationObservation]: options[verificationObservation] ?? { attempts: [] }
575
+ }, "linkedData", (observation) => verifyJsonLdInternal(jsonLd, {
576
+ ...options,
577
+ [verificationObservation]: observation
578
+ }, compact), (value) => value);
579
+ const observation = options[verificationObservation];
565
580
  return await (options.tracerProvider ?? trace.getTracerProvider()).getTracer(name, version).startActiveSpan("ld_signatures.verify", async (span) => {
566
581
  const start = performance.now();
567
582
  let verified = false;
@@ -574,6 +589,8 @@ async function verifyJsonLdInternal(jsonLd, options, compact) {
574
589
  } : options;
575
590
  const compacted = compact ? hasSignature(jsonLd) ? await compactJsonLd(jsonLd, options.contextLoader) : jsonLd : jsonLd;
576
591
  const object = await Object$1.fromJsonLd(compacted, verificationOptions);
592
+ observation?.parsedObject?.(object);
593
+ if (observation?.subject != null) observation.subject.id = object.id == null ? null : new URL(object.id.href);
577
594
  if (object.id != null) span.setAttribute("activitypub.object.id", object.id.href);
578
595
  span.setAttribute("activitypub.object.type", getTypeId(object).href);
579
596
  const sig = getLdSignatureObject(jsonLd);
@@ -588,13 +605,21 @@ async function verifyJsonLdInternal(jsonLd, options, compact) {
588
605
  const attributions = new Set(object.attributionIds.map((uri) => uri.href));
589
606
  if (object instanceof Activity) for (const uri of object.actorIds) attributions.add(uri.href);
590
607
  const key = await verifySignature(compacted, verificationOptions);
591
- if (key == null) return false;
608
+ if (key == null) {
609
+ if (observation?.attempt != null && !hasLdSignatureProperty(jsonLd)) observation.attempt.reason = { type: "noSignature" };
610
+ return false;
611
+ }
592
612
  if (key.ownerId == null) {
613
+ if (observation?.attempt != null) observation.attempt.reason = { type: "missingOwner" };
593
614
  logger.debug("Key {keyId} has no owner.", { keyId: key.id?.href });
594
615
  return false;
595
616
  }
596
617
  attributions.delete(key.ownerId.href);
597
618
  if (attributions.size > 0) {
619
+ if (observation?.attempt != null) observation.attempt.reason = {
620
+ type: "uncoveredAttribution",
621
+ attributionIds: [...attributions].map((id) => new URL(id))
622
+ };
598
623
  logger.debug("Some attributions are not authenticated by the Linked Data Signatures: {attributions}.", { attributions: [...attributions] });
599
624
  return false;
600
625
  }
@@ -608,8 +633,15 @@ async function verifyJsonLdInternal(jsonLd, options, compact) {
608
633
  });
609
634
  throw error;
610
635
  } finally {
636
+ if (observation?.attempt?.reason != null) {
637
+ span.setAttribute("activitypub.verification.failure_reason", observation.attempt.reason.type);
638
+ span.setStatus({ code: SpanStatusCode.ERROR });
639
+ }
611
640
  const classified = threw ? "error" : verified ? "verified" : hasLdSignatureProperty(jsonLd) ? "rejected" : "missing";
612
- getFederationMetrics(options.meterProvider).recordSignatureVerificationDuration(getDurationMs(start), "linked_data", classified, { ldType: signatureType });
641
+ getFederationMetrics(options.meterProvider).recordSignatureVerificationDuration(getDurationMs(start), "linked_data", classified, {
642
+ ldType: signatureType,
643
+ verificationFailureReason: verified || threw ? void 0 : observation?.attempt?.reason?.type ?? (hasLdSignatureProperty(jsonLd) ? "signatureVerificationFailed" : "noSignature")
644
+ });
613
645
  span.end();
614
646
  }
615
647
  });
@@ -0,0 +1,204 @@
1
+ import "temporal-polyfill";
2
+ import "urlpattern-polyfill";
3
+ globalThis.addEventListener = () => {};
4
+ //#region test-vectors/fep-8b32/map-local-context-conflict.json
5
+ var map_local_context_conflict_default = {
6
+ id: "fedify-fep-8b32-map-local-context-conflict-v1",
7
+ profile: "Fedify map-local compound proof profile",
8
+ cryptosuite: "eddsa-jcs-2022",
9
+ notes: [
10
+ "The parent sets a default language that the child's local context does not reset.",
11
+ "The inner proof authenticates the extracted standalone child JSON map.",
12
+ "The outer proof authenticates the complete compound JSON snapshot.",
13
+ "Both proofs can be valid even though standalone and in-parent JSON-LD expansions differ."
14
+ ],
15
+ keys: {
16
+ "outer": {
17
+ "controller": "did:key:z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2",
18
+ "verificationMethod": "did:key:z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2#z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2",
19
+ "publicKeyMultibase": "z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2",
20
+ "publicKeyJwk": {
21
+ "kty": "OKP",
22
+ "crv": "Ed25519",
23
+ "x": "sA2Nk45_dz1RVlqtNqYj9TRPf10ZYPnPPo4SYg6igQ8",
24
+ "key_ops": ["verify"],
25
+ "ext": true
26
+ },
27
+ "testPrivateKeyJwk": {
28
+ "kty": "OKP",
29
+ "crv": "Ed25519",
30
+ "d": "yW756hDF5BTEcXI6_53nLDX6W3D66X6IMuysfS4rjtY",
31
+ "x": "sA2Nk45_dz1RVlqtNqYj9TRPf10ZYPnPPo4SYg6igQ8",
32
+ "key_ops": ["sign"],
33
+ "ext": true
34
+ }
35
+ },
36
+ "inner": {
37
+ "controller": "did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3",
38
+ "verificationMethod": "did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3#z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3",
39
+ "publicKeyMultibase": "z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3",
40
+ "publicKeyJwk": {
41
+ "kty": "OKP",
42
+ "crv": "Ed25519",
43
+ "x": "LR8epAGDe-cVq5p2Tx49CCfphpk1rNhkNoY9i-XEUfg",
44
+ "key_ops": ["verify"],
45
+ "ext": true
46
+ },
47
+ "testPrivateKeyJwk": {
48
+ "kty": "OKP",
49
+ "crv": "Ed25519",
50
+ "d": "LledL195fP9TQGQrkE2l2Y2k48UvqCzYI9M1zXyh7zQ",
51
+ "x": "LR8epAGDe-cVq5p2Tx49CCfphpk1rNhkNoY9i-XEUfg",
52
+ "key_ops": ["sign"],
53
+ "ext": true
54
+ }
55
+ }
56
+ },
57
+ documents: {
58
+ "finalSecuredCompound": {
59
+ "@context": [
60
+ "https://www.w3.org/ns/activitystreams",
61
+ "https://w3id.org/security/data-integrity/v1",
62
+ { "@language": "en" }
63
+ ],
64
+ "id": "ap+ef61://did:key:z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2/activities/context-conflict",
65
+ "type": "Create",
66
+ "actor": "ap+ef61://did:key:z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2/actor",
67
+ "object": {
68
+ "@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/data-integrity/v1"],
69
+ "id": "ap+ef61://did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3/objects/context-conflict",
70
+ "type": "Note",
71
+ "attributedTo": "ap+ef61://did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3/actor",
72
+ "content": "A portable note with inherited language",
73
+ "proof": {
74
+ "@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/data-integrity/v1"],
75
+ "type": "DataIntegrityProof",
76
+ "cryptosuite": "eddsa-jcs-2022",
77
+ "verificationMethod": "did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3#z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3",
78
+ "proofPurpose": "assertionMethod",
79
+ "created": "2023-02-24T23:36:38Z",
80
+ "proofValue": "z3arp9jZdt6kcLacoXxx5kb6QVM8GZFXD13nEisfna52uwMprZz2yJCXsbyMBvvBKZopCCNRq3o22UqYgudLum5eM"
81
+ }
82
+ },
83
+ "proof": {
84
+ "@context": [
85
+ "https://www.w3.org/ns/activitystreams",
86
+ "https://w3id.org/security/data-integrity/v1",
87
+ { "@language": "en" }
88
+ ],
89
+ "type": "DataIntegrityProof",
90
+ "cryptosuite": "eddsa-jcs-2022",
91
+ "verificationMethod": "did:key:z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2#z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2",
92
+ "proofPurpose": "assertionMethod",
93
+ "created": "2023-02-24T23:36:38Z",
94
+ "proofValue": "z33BeAxXEtbCKnt9mKodwoJFSDKqK2Q2zMrWN36TtpFhDn9K9FFX7rvyfY2jkFh8gcUo3iQvUutzqBKXZdsyKZAEz"
95
+ }
96
+ },
97
+ "securedInner": {
98
+ "@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/data-integrity/v1"],
99
+ "id": "ap+ef61://did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3/objects/context-conflict",
100
+ "type": "Note",
101
+ "attributedTo": "ap+ef61://did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3/actor",
102
+ "content": "A portable note with inherited language",
103
+ "proof": {
104
+ "@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/data-integrity/v1"],
105
+ "type": "DataIntegrityProof",
106
+ "cryptosuite": "eddsa-jcs-2022",
107
+ "verificationMethod": "did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3#z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3",
108
+ "proofPurpose": "assertionMethod",
109
+ "created": "2023-02-24T23:36:38Z",
110
+ "proofValue": "z3arp9jZdt6kcLacoXxx5kb6QVM8GZFXD13nEisfna52uwMprZz2yJCXsbyMBvvBKZopCCNRq3o22UqYgudLum5eM"
111
+ }
112
+ },
113
+ "outerUnsecuredDocument": {
114
+ "@context": [
115
+ "https://www.w3.org/ns/activitystreams",
116
+ "https://w3id.org/security/data-integrity/v1",
117
+ { "@language": "en" }
118
+ ],
119
+ "id": "ap+ef61://did:key:z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2/activities/context-conflict",
120
+ "type": "Create",
121
+ "actor": "ap+ef61://did:key:z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2/actor",
122
+ "object": {
123
+ "@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/data-integrity/v1"],
124
+ "id": "ap+ef61://did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3/objects/context-conflict",
125
+ "type": "Note",
126
+ "attributedTo": "ap+ef61://did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3/actor",
127
+ "content": "A portable note with inherited language",
128
+ "proof": {
129
+ "@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/data-integrity/v1"],
130
+ "type": "DataIntegrityProof",
131
+ "cryptosuite": "eddsa-jcs-2022",
132
+ "verificationMethod": "did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3#z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3",
133
+ "proofPurpose": "assertionMethod",
134
+ "created": "2023-02-24T23:36:38Z",
135
+ "proofValue": "z3arp9jZdt6kcLacoXxx5kb6QVM8GZFXD13nEisfna52uwMprZz2yJCXsbyMBvvBKZopCCNRq3o22UqYgudLum5eM"
136
+ }
137
+ }
138
+ },
139
+ "innerUnsecuredDocument": {
140
+ "@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/data-integrity/v1"],
141
+ "id": "ap+ef61://did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3/objects/context-conflict",
142
+ "type": "Note",
143
+ "attributedTo": "ap+ef61://did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3/actor",
144
+ "content": "A portable note with inherited language"
145
+ },
146
+ "outerProofConfiguration": {
147
+ "@context": [
148
+ "https://www.w3.org/ns/activitystreams",
149
+ "https://w3id.org/security/data-integrity/v1",
150
+ { "@language": "en" }
151
+ ],
152
+ "type": "DataIntegrityProof",
153
+ "cryptosuite": "eddsa-jcs-2022",
154
+ "verificationMethod": "did:key:z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2#z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2",
155
+ "proofPurpose": "assertionMethod",
156
+ "created": "2023-02-24T23:36:38Z"
157
+ },
158
+ "innerProofConfiguration": {
159
+ "@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/data-integrity/v1"],
160
+ "type": "DataIntegrityProof",
161
+ "cryptosuite": "eddsa-jcs-2022",
162
+ "verificationMethod": "did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3#z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3",
163
+ "proofPurpose": "assertionMethod",
164
+ "created": "2023-02-24T23:36:38Z"
165
+ }
166
+ },
167
+ canonicalization: {
168
+ "outer": {
169
+ "documentJcs": "{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/data-integrity/v1\",{\"@language\":\"en\"}],\"actor\":\"ap+ef61://did:key:z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2/actor\",\"id\":\"ap+ef61://did:key:z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2/activities/context-conflict\",\"object\":{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/data-integrity/v1\"],\"attributedTo\":\"ap+ef61://did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3/actor\",\"content\":\"A portable note with inherited language\",\"id\":\"ap+ef61://did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3/objects/context-conflict\",\"proof\":{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/data-integrity/v1\"],\"created\":\"2023-02-24T23:36:38Z\",\"cryptosuite\":\"eddsa-jcs-2022\",\"proofPurpose\":\"assertionMethod\",\"proofValue\":\"z3arp9jZdt6kcLacoXxx5kb6QVM8GZFXD13nEisfna52uwMprZz2yJCXsbyMBvvBKZopCCNRq3o22UqYgudLum5eM\",\"type\":\"DataIntegrityProof\",\"verificationMethod\":\"did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3#z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3\"},\"type\":\"Note\"},\"type\":\"Create\"}",
170
+ "proofConfigurationJcs": "{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/data-integrity/v1\",{\"@language\":\"en\"}],\"created\":\"2023-02-24T23:36:38Z\",\"cryptosuite\":\"eddsa-jcs-2022\",\"proofPurpose\":\"assertionMethod\",\"type\":\"DataIntegrityProof\",\"verificationMethod\":\"did:key:z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2#z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2\"}"
171
+ },
172
+ "inner": {
173
+ "documentJcs": "{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/data-integrity/v1\"],\"attributedTo\":\"ap+ef61://did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3/actor\",\"content\":\"A portable note with inherited language\",\"id\":\"ap+ef61://did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3/objects/context-conflict\",\"type\":\"Note\"}",
174
+ "proofConfigurationJcs": "{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/data-integrity/v1\"],\"created\":\"2023-02-24T23:36:38Z\",\"cryptosuite\":\"eddsa-jcs-2022\",\"proofPurpose\":\"assertionMethod\",\"type\":\"DataIntegrityProof\",\"verificationMethod\":\"did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3#z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3\"}"
175
+ }
176
+ },
177
+ hashes: {
178
+ "outer": {
179
+ "documentSha256": "7b0a0d3668e43492c8c54cb98d0227a1bf0aefd11da7adb48af6e31f6d5322df",
180
+ "proofConfigurationSha256": "94b98e0a2519065217496bad2936e6e892bfe12ccb176282ec274ce8eb98a6a3",
181
+ "combinedSigningInput": "94b98e0a2519065217496bad2936e6e892bfe12ccb176282ec274ce8eb98a6a37b0a0d3668e43492c8c54cb98d0227a1bf0aefd11da7adb48af6e31f6d5322df"
182
+ },
183
+ "inner": {
184
+ "documentSha256": "3772e3a906c7b49d195345b05d73c3156bb3d61a5d1c641d64f4f03d661f7eeb",
185
+ "proofConfigurationSha256": "1ebdc71cb480bd324b030f85c02dc6f8db879716faf0f7ee0f05df4c395d71b4",
186
+ "combinedSigningInput": "1ebdc71cb480bd324b030f85c02dc6f8db879716faf0f7ee0f05df4c395d71b43772e3a906c7b49d195345b05d73c3156bb3d61a5d1c641d64f4f03d661f7eeb"
187
+ }
188
+ },
189
+ proofValues: {
190
+ "outer": "z33BeAxXEtbCKnt9mKodwoJFSDKqK2Q2zMrWN36TtpFhDn9K9FFX7rvyfY2jkFh8gcUo3iQvUutzqBKXZdsyKZAEz",
191
+ "inner": "z3arp9jZdt6kcLacoXxx5kb6QVM8GZFXD13nEisfna52uwMprZz2yJCXsbyMBvvBKZopCCNRq3o22UqYgudLum5eM"
192
+ },
193
+ expectedVerification: { "original": {
194
+ "inner": true,
195
+ "outer": true
196
+ } },
197
+ expectedInterpretation: {
198
+ "standaloneAndInParentExpansionsEqual": false,
199
+ "standaloneContentLanguage": null,
200
+ "inParentContentLanguage": "en"
201
+ }
202
+ };
203
+ //#endregion
204
+ export { map_local_context_conflict_default as t };
@@ -0,0 +1,214 @@
1
+ import "temporal-polyfill";
2
+ import "urlpattern-polyfill";
3
+ globalThis.addEventListener = () => {};
4
+ //#region test-vectors/fep-8b32/map-local-create-note.json
5
+ var map_local_create_note_default = {
6
+ id: "fedify-fep-8b32-map-local-create-note-v1",
7
+ profile: "Fedify map-local compound proof profile",
8
+ cryptosuite: "eddsa-jcs-2022",
9
+ notes: [
10
+ "Each map has one direct literal proof property.",
11
+ "Each map has an explicit local context.",
12
+ "The outer unsecured document retains the complete secured inner map.",
13
+ "Combined inputs concatenate proof-configuration SHA-256 first and document SHA-256 second."
14
+ ],
15
+ keys: {
16
+ "outer": {
17
+ "controller": "did:key:z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2",
18
+ "verificationMethod": "did:key:z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2#z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2",
19
+ "publicKeyMultibase": "z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2",
20
+ "publicKeyJwk": {
21
+ "kty": "OKP",
22
+ "crv": "Ed25519",
23
+ "x": "sA2Nk45_dz1RVlqtNqYj9TRPf10ZYPnPPo4SYg6igQ8",
24
+ "key_ops": ["verify"],
25
+ "ext": true
26
+ },
27
+ "testPrivateKeyJwk": {
28
+ "kty": "OKP",
29
+ "crv": "Ed25519",
30
+ "d": "yW756hDF5BTEcXI6_53nLDX6W3D66X6IMuysfS4rjtY",
31
+ "x": "sA2Nk45_dz1RVlqtNqYj9TRPf10ZYPnPPo4SYg6igQ8",
32
+ "key_ops": ["sign"],
33
+ "ext": true
34
+ }
35
+ },
36
+ "inner": {
37
+ "controller": "did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3",
38
+ "verificationMethod": "did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3#z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3",
39
+ "publicKeyMultibase": "z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3",
40
+ "publicKeyJwk": {
41
+ "kty": "OKP",
42
+ "crv": "Ed25519",
43
+ "x": "LR8epAGDe-cVq5p2Tx49CCfphpk1rNhkNoY9i-XEUfg",
44
+ "key_ops": ["verify"],
45
+ "ext": true
46
+ },
47
+ "testPrivateKeyJwk": {
48
+ "kty": "OKP",
49
+ "crv": "Ed25519",
50
+ "d": "LledL195fP9TQGQrkE2l2Y2k48UvqCzYI9M1zXyh7zQ",
51
+ "x": "LR8epAGDe-cVq5p2Tx49CCfphpk1rNhkNoY9i-XEUfg",
52
+ "key_ops": ["sign"],
53
+ "ext": true
54
+ }
55
+ }
56
+ },
57
+ documents: {
58
+ "finalSecuredCompound": {
59
+ "@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/data-integrity/v1"],
60
+ "id": "ap+ef61://did:key:z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2/activities/1",
61
+ "type": "Create",
62
+ "actor": "ap+ef61://did:key:z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2/actor",
63
+ "object": {
64
+ "@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/data-integrity/v1"],
65
+ "id": "ap+ef61://did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3/objects/1",
66
+ "type": "Note",
67
+ "attributedTo": "ap+ef61://did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3/actor",
68
+ "content": "A portable note",
69
+ "proof": {
70
+ "@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/data-integrity/v1"],
71
+ "type": "DataIntegrityProof",
72
+ "cryptosuite": "eddsa-jcs-2022",
73
+ "verificationMethod": "did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3#z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3",
74
+ "proofPurpose": "assertionMethod",
75
+ "created": "2023-02-24T23:36:38Z",
76
+ "proofValue": "z2GCde7JjRjsTipz43CEeCjiDF7NCGbAcvqAkwuywq2u1mQTXs7U9WeT3jXmi6ib6uqpdiT53CxFrkSPLsHiQxhk7"
77
+ }
78
+ },
79
+ "proof": {
80
+ "@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/data-integrity/v1"],
81
+ "type": "DataIntegrityProof",
82
+ "cryptosuite": "eddsa-jcs-2022",
83
+ "verificationMethod": "did:key:z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2#z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2",
84
+ "proofPurpose": "assertionMethod",
85
+ "created": "2023-02-24T23:36:38Z",
86
+ "proofValue": "z5KEH1yoB2DsDs39emBhGJM2GqgM9waar91Mj34gqaa238KgyyEvyTrVvBTWKxHxR5Xin6X8tPYr4Ucb6WDzBkMMz"
87
+ }
88
+ },
89
+ "securedInner": {
90
+ "@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/data-integrity/v1"],
91
+ "id": "ap+ef61://did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3/objects/1",
92
+ "type": "Note",
93
+ "attributedTo": "ap+ef61://did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3/actor",
94
+ "content": "A portable note",
95
+ "proof": {
96
+ "@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/data-integrity/v1"],
97
+ "type": "DataIntegrityProof",
98
+ "cryptosuite": "eddsa-jcs-2022",
99
+ "verificationMethod": "did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3#z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3",
100
+ "proofPurpose": "assertionMethod",
101
+ "created": "2023-02-24T23:36:38Z",
102
+ "proofValue": "z2GCde7JjRjsTipz43CEeCjiDF7NCGbAcvqAkwuywq2u1mQTXs7U9WeT3jXmi6ib6uqpdiT53CxFrkSPLsHiQxhk7"
103
+ }
104
+ },
105
+ "outerUnsecuredDocument": {
106
+ "@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/data-integrity/v1"],
107
+ "id": "ap+ef61://did:key:z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2/activities/1",
108
+ "type": "Create",
109
+ "actor": "ap+ef61://did:key:z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2/actor",
110
+ "object": {
111
+ "@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/data-integrity/v1"],
112
+ "id": "ap+ef61://did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3/objects/1",
113
+ "type": "Note",
114
+ "attributedTo": "ap+ef61://did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3/actor",
115
+ "content": "A portable note",
116
+ "proof": {
117
+ "@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/data-integrity/v1"],
118
+ "type": "DataIntegrityProof",
119
+ "cryptosuite": "eddsa-jcs-2022",
120
+ "verificationMethod": "did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3#z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3",
121
+ "proofPurpose": "assertionMethod",
122
+ "created": "2023-02-24T23:36:38Z",
123
+ "proofValue": "z2GCde7JjRjsTipz43CEeCjiDF7NCGbAcvqAkwuywq2u1mQTXs7U9WeT3jXmi6ib6uqpdiT53CxFrkSPLsHiQxhk7"
124
+ }
125
+ }
126
+ },
127
+ "innerUnsecuredDocument": {
128
+ "@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/data-integrity/v1"],
129
+ "id": "ap+ef61://did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3/objects/1",
130
+ "type": "Note",
131
+ "attributedTo": "ap+ef61://did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3/actor",
132
+ "content": "A portable note"
133
+ },
134
+ "outerProofConfiguration": {
135
+ "@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/data-integrity/v1"],
136
+ "type": "DataIntegrityProof",
137
+ "cryptosuite": "eddsa-jcs-2022",
138
+ "verificationMethod": "did:key:z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2#z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2",
139
+ "proofPurpose": "assertionMethod",
140
+ "created": "2023-02-24T23:36:38Z"
141
+ },
142
+ "innerProofConfiguration": {
143
+ "@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/data-integrity/v1"],
144
+ "type": "DataIntegrityProof",
145
+ "cryptosuite": "eddsa-jcs-2022",
146
+ "verificationMethod": "did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3#z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3",
147
+ "proofPurpose": "assertionMethod",
148
+ "created": "2023-02-24T23:36:38Z"
149
+ },
150
+ "replacementInnerProof": {
151
+ "@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/data-integrity/v1"],
152
+ "type": "DataIntegrityProof",
153
+ "cryptosuite": "eddsa-jcs-2022",
154
+ "verificationMethod": "did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3#z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3",
155
+ "proofPurpose": "assertionMethod",
156
+ "created": "2023-02-25T23:36:38Z",
157
+ "proofValue": "z2fmC2UAoxpesDmSJ6LWoRReCRhPGCKTHgBCsq1491B2Hx2SN8MszWgfcgJkF1poPnyhFAEGrpeqGWchiw261np9z"
158
+ }
159
+ },
160
+ canonicalization: {
161
+ "outer": {
162
+ "documentJcs": "{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/data-integrity/v1\"],\"actor\":\"ap+ef61://did:key:z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2/actor\",\"id\":\"ap+ef61://did:key:z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2/activities/1\",\"object\":{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/data-integrity/v1\"],\"attributedTo\":\"ap+ef61://did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3/actor\",\"content\":\"A portable note\",\"id\":\"ap+ef61://did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3/objects/1\",\"proof\":{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/data-integrity/v1\"],\"created\":\"2023-02-24T23:36:38Z\",\"cryptosuite\":\"eddsa-jcs-2022\",\"proofPurpose\":\"assertionMethod\",\"proofValue\":\"z2GCde7JjRjsTipz43CEeCjiDF7NCGbAcvqAkwuywq2u1mQTXs7U9WeT3jXmi6ib6uqpdiT53CxFrkSPLsHiQxhk7\",\"type\":\"DataIntegrityProof\",\"verificationMethod\":\"did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3#z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3\"},\"type\":\"Note\"},\"type\":\"Create\"}",
163
+ "proofConfigurationJcs": "{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/data-integrity/v1\"],\"created\":\"2023-02-24T23:36:38Z\",\"cryptosuite\":\"eddsa-jcs-2022\",\"proofPurpose\":\"assertionMethod\",\"type\":\"DataIntegrityProof\",\"verificationMethod\":\"did:key:z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2#z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2\"}"
164
+ },
165
+ "inner": {
166
+ "documentJcs": "{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/data-integrity/v1\"],\"attributedTo\":\"ap+ef61://did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3/actor\",\"content\":\"A portable note\",\"id\":\"ap+ef61://did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3/objects/1\",\"type\":\"Note\"}",
167
+ "proofConfigurationJcs": "{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/data-integrity/v1\"],\"created\":\"2023-02-24T23:36:38Z\",\"cryptosuite\":\"eddsa-jcs-2022\",\"proofPurpose\":\"assertionMethod\",\"type\":\"DataIntegrityProof\",\"verificationMethod\":\"did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3#z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3\"}"
168
+ },
169
+ "replacementInner": {
170
+ "documentJcs": "{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/data-integrity/v1\"],\"attributedTo\":\"ap+ef61://did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3/actor\",\"content\":\"A portable note\",\"id\":\"ap+ef61://did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3/objects/1\",\"type\":\"Note\"}",
171
+ "proofConfigurationJcs": "{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/data-integrity/v1\"],\"created\":\"2023-02-25T23:36:38Z\",\"cryptosuite\":\"eddsa-jcs-2022\",\"proofPurpose\":\"assertionMethod\",\"type\":\"DataIntegrityProof\",\"verificationMethod\":\"did:key:z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3#z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3\"}"
172
+ }
173
+ },
174
+ hashes: {
175
+ "outer": {
176
+ "documentSha256": "f49f8c592c02d0ee85b7f7182fd593ddf6e7f432d8388843e4d086238f45bafc",
177
+ "proofConfigurationSha256": "c9842a6bca0a0594e99f1525344ce4f0c8c6096f5a832525a05205aacd8791e0",
178
+ "combinedSigningInput": "c9842a6bca0a0594e99f1525344ce4f0c8c6096f5a832525a05205aacd8791e0f49f8c592c02d0ee85b7f7182fd593ddf6e7f432d8388843e4d086238f45bafc"
179
+ },
180
+ "inner": {
181
+ "documentSha256": "9c9ffa1efcc871d219b8622e98253168ac65867ee76d6e4183ee0ca0226c2fd3",
182
+ "proofConfigurationSha256": "1ebdc71cb480bd324b030f85c02dc6f8db879716faf0f7ee0f05df4c395d71b4",
183
+ "combinedSigningInput": "1ebdc71cb480bd324b030f85c02dc6f8db879716faf0f7ee0f05df4c395d71b49c9ffa1efcc871d219b8622e98253168ac65867ee76d6e4183ee0ca0226c2fd3"
184
+ },
185
+ "replacementInner": {
186
+ "documentSha256": "9c9ffa1efcc871d219b8622e98253168ac65867ee76d6e4183ee0ca0226c2fd3",
187
+ "proofConfigurationSha256": "00da7da35af5e922313de14cf0f8f63c9a27152205b1eb5ef049a7f6023589ad",
188
+ "combinedSigningInput": "00da7da35af5e922313de14cf0f8f63c9a27152205b1eb5ef049a7f6023589ad9c9ffa1efcc871d219b8622e98253168ac65867ee76d6e4183ee0ca0226c2fd3"
189
+ }
190
+ },
191
+ proofValues: {
192
+ "outer": "z5KEH1yoB2DsDs39emBhGJM2GqgM9waar91Mj34gqaa238KgyyEvyTrVvBTWKxHxR5Xin6X8tPYr4Ucb6WDzBkMMz",
193
+ "inner": "z2GCde7JjRjsTipz43CEeCjiDF7NCGbAcvqAkwuywq2u1mQTXs7U9WeT3jXmi6ib6uqpdiT53CxFrkSPLsHiQxhk7",
194
+ "replacementInner": "z2fmC2UAoxpesDmSJ6LWoRReCRhPGCKTHgBCsq1491B2Hx2SN8MszWgfcgJkF1poPnyhFAEGrpeqGWchiw261np9z"
195
+ },
196
+ expectedVerification: {
197
+ "original": {
198
+ "inner": true,
199
+ "outer": true
200
+ },
201
+ "tamperedInnerContent": {
202
+ "inner": false,
203
+ "outer": false
204
+ },
205
+ "replacedInnerProof": {
206
+ "inner": true,
207
+ "outer": false
208
+ },
209
+ "standaloneInner": true,
210
+ "standaloneOuter": true
211
+ }
212
+ };
213
+ //#endregion
214
+ export { map_local_create_note_default as t };
@@ -1,7 +1,7 @@
1
1
  import "temporal-polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { n as version, t as name } from "./deno-BHzKn9Ig.mjs";
4
+ import { n as version, t as name } from "./deno-oR5aJKpU.mjs";
5
5
  import { metrics } from "@opentelemetry/api";
6
6
  import { FetchError } from "@fedify/vocab-runtime";
7
7
  //#region src/federation/metrics.ts
@@ -302,6 +302,7 @@ var FederationMetrics = class {
302
302
  };
303
303
  if (extra.algorithm != null) attributes["http_signatures.algorithm"] = extra.algorithm;
304
304
  if (extra.failureReason != null) attributes["http_signatures.failure_reason"] = extra.failureReason;
305
+ if (extra.verificationFailureReason != null) attributes["activitypub.verification.failure_reason"] = extra.verificationFailureReason;
305
306
  if (extra.ldType != null) attributes["ld_signatures.type"] = extra.ldType;
306
307
  if (extra.cryptosuite != null) attributes["object_integrity_proofs.cryptosuite"] = extra.cryptosuite;
307
308
  this.signatureVerificationDuration.record(durationMs, attributes);
@@ -770,7 +771,7 @@ function isAbortError(error) {
770
771
  const name = error.name;
771
772
  return typeof name === "string" && name === "AbortError";
772
773
  }
773
- const KNOWN_HTTP_METHODS = new Set([
774
+ const KNOWN_HTTP_METHODS = /* @__PURE__ */ new Set([
774
775
  "CONNECT",
775
776
  "DELETE",
776
777
  "GET",
@@ -0,0 +1,36 @@
1
+ /// <reference lib="esnext.temporal" />
2
+ import { DocumentLoader } from "@fedify/vocab-runtime";
3
+ import { MeterProvider } from "@opentelemetry/api";
4
+
5
+ //#region src/federation/metrics.d.ts
6
+ /**
7
+ * The kind of remote ActivityPub lookup, recorded as
8
+ * `activitypub.lookup.kind` on the public-key lookup and remote document
9
+ * fetch metric families.
10
+ *
11
+ * - `public_key`: a public key lookup performed by `fetchKey` /
12
+ * `fetchKeyDetailed` (always recorded on `activitypub.key.lookup*`).
13
+ * - `actor`: a document fetch whose resolved value is an Actor. The
14
+ * bucket exists in the taxonomy for future actor-aware call sites;
15
+ * today, actor documents fetched through Fedify's generic document
16
+ * loader are still classified as `object` because the kind is decided
17
+ * at the loader boundary, before the response is parsed.
18
+ * - `object`: a generic ActivityPub object fetch through Fedify's
19
+ * document loader. This is the default classification for
20
+ * `documentLoader` invocations that do not match a more specific
21
+ * bucket.
22
+ * - `context`: a JSON-LD `@context` document fetch through Fedify's
23
+ * context loader.
24
+ * - `other`: a fetch that does not fit any of the above classifications.
25
+ * @since 2.3.0
26
+ */
27
+ type LookupKind = "public_key" | "actor" | "object" | "context" | "other";
28
+ /**
29
+ * The {@link LookupKind} values that can appear on remote document fetch
30
+ * metrics. `public_key` lookups are reported on the
31
+ * `activitypub.key.lookup` metric family instead, so it is excluded here.
32
+ * @since 2.3.0
33
+ */
34
+ type DocumentFetchKind = Exclude<LookupKind, "public_key">;
35
+ //#endregion
36
+ export { DocumentFetchKind as t };