@fedify/fedify 2.4.0-pr.936.41 → 2.4.1

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-C1o3n_ih.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-DoFNbS9M.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-D7MEaAg-.mjs} +1 -1
  34. package/dist/dist-DJQM4u7i.mjs +189 -0
  35. package/dist/docloader-uYfrT5sv.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 +246 -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-4rvjH8Md.cjs} +8663 -3725
  92. package/dist/http-B_wV17Ij.js +6527 -0
  93. package/dist/{http-CPVMUgsW.mjs → http-CNzz4a_O.mjs} +397 -168
  94. package/dist/http-riIBL3-C.cjs +10630 -0
  95. package/dist/key-C1nv7_jD.d.ts +1125 -0
  96. package/dist/key-DYxuyd-s.d.cts +1125 -0
  97. package/dist/key-hMoNKe7p.mjs +951 -0
  98. package/dist/key-owner-evidence-APB6NpSk.mjs +108 -0
  99. package/dist/keycache-D-MNltOk.mjs +221 -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-DQ29C4XL.cjs → kv-cache-BjK2Y9Wu.cjs} +55 -19
  104. package/dist/{kv-cache-KyGqJqSp.mjs → kv-cache-CetcQsQa.mjs} +1 -1
  105. package/dist/{kv-cache-5bnX3-Jq.js → kv-cache-DVJLXeI0.js} +54 -16
  106. package/dist/{ld-Cj9F_5AP.mjs → ld-CW_8GOEC.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-CBugc7uM.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-CvwTUgnP.mjs → middleware-CEQBUZaH.mjs} +3157 -272
  113. package/dist/{middleware-Y-kpsp6S.js → middleware-CjdyJcGd.js} +5530 -1120
  114. package/dist/{middleware-CEctxBN6.mjs → middleware-D0PeYTxA.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--VRABJfK.mjs +267 -0
  139. package/dist/{owner-DEvZuyOE.d.cts → owner-BF0L9cMt.d.cts} +11 -0
  140. package/dist/{owner-CnngXDNJ.d.ts → owner-BSzr5-I8.d.ts} +11 -0
  141. package/dist/portable-collection-BVQYFfEq.mjs +418 -0
  142. package/dist/portable-collection-CiKz-t9W.cjs +686 -0
  143. package/dist/portable-collection-CnSD193J.js +670 -0
  144. package/dist/portable-key-BjUXSULt.mjs +549 -0
  145. package/dist/portable-key-id-Ca30-hOa.mjs +248 -0
  146. package/dist/proof-kTlg91Kb.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-DohrDmGq.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 +759 -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-VKyzJSNt.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,47 +1,85 @@
1
1
  import { Temporal } from "temporal-polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
- import { C as recordDocumentCache, d as validateCryptoKey, t as doubleKnock } from "./http-CsmQ-BQ4.js";
3
+ import { G as validateCryptoKey, ot as recordDocumentCache, t as doubleKnock } from "./http-B_wV17Ij.js";
4
4
  import { getLogger } from "@logtape/logtape";
5
+ import { FetchError, UrlError, createActivityPubRequest, getRemoteDocument, logRequest, preloadedContexts, resolveDocumentLoaderTimeout, validatePublicUrl, withDocumentLoaderTimeout } from "@fedify/vocab-runtime";
5
6
  import { curry } from "es-toolkit";
6
- import { UrlError, createActivityPubRequest, getRemoteDocument, logRequest, preloadedContexts, validatePublicUrl } from "@fedify/vocab-runtime";
7
7
  //#region src/utils/docloader.ts
8
8
  const logger$1 = getLogger([
9
9
  "fedify",
10
10
  "utils",
11
11
  "docloader"
12
12
  ]);
13
+ const DEFAULT_MAX_REDIRECTION = 20;
13
14
  /**
14
15
  * Gets an authenticated {@link DocumentLoader} for the given identity.
15
16
  * Note that an authenticated document loader intentionally does not cache
16
17
  * the fetched documents.
18
+ * At most 20 HTTP redirects and alternate document links are followed in total
19
+ * per call. Revisiting a URL within that chain throws a {@link FetchError}.
20
+ * Each call, including its double-knocking retries, times out after
21
+ * 10 seconds by default; see {@link DocumentLoaderFactoryOptions.timeout}.
17
22
  * @param identity The identity to get the document loader for.
18
23
  * The actor's key pair.
19
24
  * @param options The options for the document loader.
20
25
  * @returns The authenticated document loader.
21
26
  * @throws {TypeError} If the key is invalid or unsupported.
27
+ * @throws {RangeError} If the `timeout` option is invalid.
22
28
  * @since 0.4.0
23
29
  */
24
- function getAuthenticatedDocumentLoader(identity, { allowPrivateAddress, maxRedirection, userAgent, specDeterminer, tracerProvider } = {}) {
30
+ function getAuthenticatedDocumentLoader(identity, { allowPrivateAddress, maxRedirection, userAgent, specDeterminer, timeout, tracerProvider } = {}) {
25
31
  validateCryptoKey(identity.privateKey);
26
- async function load(url, options) {
27
- if (!allowPrivateAddress) try {
28
- await validatePublicUrl(url);
29
- } catch (error) {
30
- if (error instanceof UrlError) logger$1.error("Disallowed private URL: {url}", {
31
- url,
32
- error
33
- });
34
- throw error;
32
+ const resolvedTimeout = resolveDocumentLoaderTimeout(timeout);
33
+ async function load(url, options, redirected = 0, visited = /* @__PURE__ */ new Set()) {
34
+ options?.signal?.throwIfAborted();
35
+ let currentUrl = new URL(url).href;
36
+ await validateUrl(currentUrl, options);
37
+ visited.add(currentUrl);
38
+ const originalRequest = createActivityPubRequest(currentUrl, { userAgent });
39
+ function follow(nextUrl) {
40
+ options?.signal?.throwIfAborted();
41
+ if (redirected >= DEFAULT_MAX_REDIRECTION) throw new FetchError(currentUrl, `Too many redirections (${redirected + 1})`);
42
+ if (visited.has(nextUrl)) throw new FetchError(currentUrl, `Redirect loop detected: ${nextUrl}`);
43
+ redirected++;
35
44
  }
36
- return getRemoteDocument(url, await doubleKnock(createActivityPubRequest(url, { userAgent }), identity, {
45
+ const response = await doubleKnock(originalRequest, identity, {
37
46
  maxRedirection,
38
47
  specDeterminer,
39
48
  log: curry(logRequest)(logger$1),
40
49
  tracerProvider,
41
- signal: options?.signal
42
- }), load);
50
+ signal: options?.signal,
51
+ validateRedirect: async (nextUrl) => {
52
+ follow(nextUrl);
53
+ await validateUrl(nextUrl, options);
54
+ visited.add(nextUrl);
55
+ currentUrl = nextUrl;
56
+ }
57
+ });
58
+ options?.signal?.throwIfAborted();
59
+ return getRemoteDocument(currentUrl, response, (alternateUrl) => {
60
+ follow(alternateUrl);
61
+ return load(alternateUrl, options, redirected, visited);
62
+ }, options);
63
+ }
64
+ async function validateUrl(url, options) {
65
+ if (!allowPrivateAddress) {
66
+ try {
67
+ await validatePublicUrl(url);
68
+ } catch (error) {
69
+ if (error instanceof UrlError) if (error.reason === "dns") logger$1.debug("DNS lookup failed for {url}", {
70
+ url,
71
+ error
72
+ });
73
+ else logger$1[options?.suppressError ? "warn" : "error"]("Disallowed private URL: {url}", {
74
+ url,
75
+ error
76
+ });
77
+ throw error;
78
+ }
79
+ options?.signal?.throwIfAborted();
80
+ }
43
81
  }
44
- return load;
82
+ return withDocumentLoaderTimeout((url, options) => load(url, options), resolvedTimeout);
45
83
  }
46
84
  //#endregion
47
85
  //#region src/utils/kv-cache.ts
@@ -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-D7MEaAg-.mjs";
6
+ import { n as getDurationMs, r as getFederationMetrics, s as measureSignatureKeyFetch } from "./metrics-CBugc7uM.mjs";
7
+ import { c as validateCryptoKey, i as fetchKey, t as bypassKeyCacheReads } from "./key-hMoNKe7p.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 };