@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.
- package/README.md +50 -39
- package/dist/{assert-CJ1KXcvv.mjs → assert-D1Eafmd_.mjs} +1 -1
- package/dist/{assert_equals-BV7oLMxm.mjs → assert_equals-Z6IcEbWU.mjs} +2 -28
- package/dist/assert_exists-cffSpJ7X.mjs +28 -0
- package/dist/assert_false-CPdRnc3E.mjs +23 -0
- package/dist/assert_greater_or_equal-BlafOF4-.mjs +31 -0
- package/dist/{assert_instance_of-Q9KTBnrf.mjs → assert_instance_of-mrXWWNY-.mjs} +1 -1
- package/dist/{assert_not_equals-EPJPoxuf.mjs → assert_not_equals-CpPK2t89.mjs} +2 -1
- package/dist/assert_rejects-CTptdYck.mjs +39 -0
- package/dist/{assert_strict_equals-Ec20AUwa.mjs → assert_strict_equals-CYvBmkpC.mjs} +2 -1
- package/dist/{assert_throws-NiFfqbnH.mjs → assert_throws-BYITOvPO.mjs} +2 -1
- package/dist/assertion_error-B-cx0fFA.mjs +31 -0
- package/dist/audience-CHQ-FlLD.mjs +95 -0
- package/dist/{builder-DonuxRl_.mjs → builder-C1o3n_ih.mjs} +169 -14
- package/dist/{circuit-breaker-CBGyz5F7.mjs → circuit-breaker-XJ53md4S.mjs} +224 -17
- package/dist/circuit-breaker-test-utils-DW6YC_Pe.mjs +14 -0
- package/dist/{client-CjF5IYQS.mjs → client-CEnNz8O7.mjs} +144 -8
- package/dist/{codec-BBga-FWI.mjs → codec-C6rTrpIp.mjs} +26 -3
- package/dist/{collection-BIhlldqK.mjs → collection-CnnP1UAv.mjs} +1 -1
- package/dist/compat/mod.cjs +1 -1
- package/dist/compat/mod.d.cts +1 -1
- package/dist/compat/mod.d.ts +1 -1
- package/dist/compat/mod.js +1 -1
- package/dist/compat/outgoing-jsonld.test.mjs +71 -3
- package/dist/compat/public-audience.test.mjs +14 -5
- package/dist/compat/secured-document.test.d.mts +2 -0
- package/dist/compat/secured-document.test.mjs +58 -0
- package/dist/compat/transformers.test.mjs +5 -5
- package/dist/compound-proof-DoFNbS9M.mjs +989 -0
- package/dist/{context-Zii1f5xS.d.ts → context-7NyiqIcg.d.ts} +1600 -25
- package/dist/{context-BJXxPElm.mjs → context-8Tu9kea0.mjs} +21 -63
- package/dist/{context-lxX6I7as.d.cts → context-tsYPJ2Ew.d.cts} +1600 -25
- package/dist/{deno-BHzKn9Ig.mjs → deno-D7MEaAg-.mjs} +1 -1
- package/dist/dist-DJQM4u7i.mjs +189 -0
- package/dist/docloader-uYfrT5sv.mjs +87 -0
- package/dist/{esm-yYQfPhIY.mjs → esm-BHXXx4Wx.mjs} +13 -6
- package/dist/federation/audience.test.d.mts +2 -0
- package/dist/federation/audience.test.mjs +130 -0
- package/dist/federation/builder.test.mjs +54 -5
- package/dist/federation/circuit-breaker.test.mjs +838 -7
- package/dist/federation/collection.test.mjs +3 -3
- package/dist/federation/compound-fanout.test.d.mts +2 -0
- package/dist/federation/compound-fanout.test.mjs +228 -0
- package/dist/federation/handler-compound-proof.test.d.mts +2 -0
- package/dist/federation/handler-compound-proof.test.mjs +384 -0
- package/dist/federation/handler.test.mjs +385 -15
- package/dist/federation/hashlink-media.test.d.mts +2 -0
- package/dist/federation/hashlink-media.test.mjs +422 -0
- package/dist/federation/idempotency.test.mjs +6 -6
- package/dist/federation/inbox-report.test.d.mts +2 -0
- package/dist/federation/inbox-report.test.mjs +475 -0
- package/dist/federation/inbox.test.mjs +3 -3
- package/dist/federation/keycache.test.mjs +246 -14
- package/dist/federation/kv.test.mjs +3 -3
- package/dist/federation/metrics.test.mjs +5 -5
- package/dist/federation/middleware.test.mjs +967 -35
- package/dist/federation/mod.cjs +18 -261
- package/dist/federation/mod.d.cts +5 -5
- package/dist/federation/mod.d.ts +5 -5
- package/dist/federation/mod.js +279 -1
- package/dist/federation/mq.test.mjs +123 -47
- package/dist/federation/negotiation.test.mjs +4 -4
- package/dist/federation/outgoing-proof.test.d.mts +2 -0
- package/dist/federation/outgoing-proof.test.mjs +931 -0
- package/dist/federation/portable-actor.test.d.mts +2 -0
- package/dist/federation/portable-actor.test.mjs +496 -0
- package/dist/federation/portable-chain.test.d.mts +2 -0
- package/dist/federation/portable-chain.test.mjs +370 -0
- package/dist/federation/portable-collection.test.d.mts +2 -0
- package/dist/federation/portable-collection.test.mjs +832 -0
- package/dist/federation/portable-delivery.test.d.mts +2 -0
- package/dist/federation/portable-delivery.test.mjs +746 -0
- package/dist/federation/portable-gateway-keys.test.d.mts +2 -0
- package/dist/federation/portable-gateway-keys.test.mjs +686 -0
- package/dist/federation/portable-inbox.test.d.mts +2 -0
- package/dist/federation/portable-inbox.test.mjs +1535 -0
- package/dist/federation/portable-parse-uri.test.d.mts +2 -0
- package/dist/federation/portable-parse-uri.test.mjs +348 -0
- package/dist/federation/portable-route-activity.test.d.mts +2 -0
- package/dist/federation/portable-route-activity.test.mjs +259 -0
- package/dist/federation/portable.test.d.mts +2 -0
- package/dist/federation/portable.test.mjs +1072 -0
- package/dist/federation/retry.test.mjs +4 -3
- package/dist/federation/router.test.mjs +9 -159
- package/dist/federation/send.test.mjs +245 -27
- package/dist/federation/tasks/codec.test.mjs +4 -4
- package/dist/federation/tasks/enqueue.test.mjs +42 -4
- package/dist/federation/tasks/tasks.test.mjs +7 -6
- package/dist/federation/temporal.test.mjs +4 -4
- package/dist/federation/webfinger.test.mjs +275 -12
- package/dist/{middleware-FrSMAYEx.cjs → federation-4rvjH8Md.cjs} +8663 -3725
- package/dist/http-B_wV17Ij.js +6527 -0
- package/dist/{http-CPVMUgsW.mjs → http-CNzz4a_O.mjs} +397 -168
- package/dist/http-riIBL3-C.cjs +10630 -0
- package/dist/key-C1nv7_jD.d.ts +1125 -0
- package/dist/key-DYxuyd-s.d.cts +1125 -0
- package/dist/key-hMoNKe7p.mjs +951 -0
- package/dist/key-owner-evidence-APB6NpSk.mjs +108 -0
- package/dist/keycache-D-MNltOk.mjs +221 -0
- package/dist/{kv-D6hNiMTK.d.ts → kv-B2mzK5tl.d.cts} +3 -2
- package/dist/{kv-gJ8LYbxX.d.cts → kv-B2mzK5tl.d.ts} +3 -2
- package/dist/kv-DBRWVx3Q.mjs +104 -0
- package/dist/{kv-cache-DQ29C4XL.cjs → kv-cache-BjK2Y9Wu.cjs} +55 -19
- package/dist/{kv-cache-KyGqJqSp.mjs → kv-cache-CetcQsQa.mjs} +1 -1
- package/dist/{kv-cache-5bnX3-Jq.js → kv-cache-DVJLXeI0.js} +54 -16
- package/dist/{ld-Cj9F_5AP.mjs → ld-CW_8GOEC.mjs} +44 -12
- package/dist/map-local-context-conflict-DOYEEJ3u.mjs +204 -0
- package/dist/map-local-create-note-B0SeXJms.mjs +214 -0
- package/dist/{metrics-DMk-nTxI.mjs → metrics-CBugc7uM.mjs} +3 -2
- package/dist/metrics-DVKYY6K1.d.cts +36 -0
- package/dist/metrics-DoRtI0qU.d.ts +36 -0
- package/dist/{middleware-CvwTUgnP.mjs → middleware-CEQBUZaH.mjs} +3157 -272
- package/dist/{middleware-Y-kpsp6S.js → middleware-CjdyJcGd.js} +5530 -1120
- package/dist/{middleware-CEctxBN6.mjs → middleware-D0PeYTxA.mjs} +1 -1
- package/dist/{mod-gOlPDuT8.d.cts → mod-BojP2Bw3.d.cts} +1 -1
- package/dist/mod-CavhAgLw.d.cts +320 -0
- package/dist/mod-CtpF2BU5.d.ts +320 -0
- package/dist/{mod-BtEaIEcD.d.cts → mod-DEZXwV6J.d.ts} +10 -4
- package/dist/{mod-UMmveiO0.d.ts → mod-Dw-nPxQh.d.cts} +10 -4
- package/dist/{mod-DLc2Ot6f.d.ts → mod-Xj5P4s4d.d.ts} +1 -1
- package/dist/mod.cjs +40 -39
- package/dist/mod.d.cts +10 -11
- package/dist/mod.d.ts +10 -11
- package/dist/mod.js +9 -9
- package/dist/{mq-llHKivST.mjs → mq-Dm1Wmtm-.mjs} +6 -0
- package/dist/nodeinfo/client.test.mjs +139 -4
- package/dist/nodeinfo/handler.test.mjs +5 -5
- package/dist/nodeinfo/mod.cjs +1 -1
- package/dist/nodeinfo/mod.d.cts +1 -1
- package/dist/nodeinfo/mod.d.ts +1 -1
- package/dist/nodeinfo/mod.js +1 -1
- package/dist/nodeinfo/types.test.mjs +4 -4
- package/dist/otel/exporter.test.mjs +3 -3
- package/dist/otel/mod.cjs +0 -1
- package/dist/otel/mod.d.cts +1 -1
- package/dist/otel/mod.d.ts +1 -1
- package/dist/{outgoing-jsonld-URuqsICz.mjs → outgoing-jsonld-4IJqPYos.mjs} +12 -10
- package/dist/owner--VRABJfK.mjs +267 -0
- package/dist/{owner-DEvZuyOE.d.cts → owner-BF0L9cMt.d.cts} +11 -0
- package/dist/{owner-CnngXDNJ.d.ts → owner-BSzr5-I8.d.ts} +11 -0
- package/dist/portable-collection-BVQYFfEq.mjs +418 -0
- package/dist/portable-collection-CiKz-t9W.cjs +686 -0
- package/dist/portable-collection-CnSD193J.js +670 -0
- package/dist/portable-key-BjUXSULt.mjs +549 -0
- package/dist/portable-key-id-Ca30-hOa.mjs +248 -0
- package/dist/proof-kTlg91Kb.mjs +1299 -0
- package/dist/{public-audience-Cr5MsnMq.mjs → public-audience--klBIOk1.mjs} +15 -10
- package/dist/router-u5O5KCQr.mjs +156 -0
- package/dist/runtime/mod.cjs +1 -1
- package/dist/runtime/mod.js +1 -1
- package/dist/secured-document-CxzZZ9nL.mjs +35 -0
- package/dist/send-DohrDmGq.mjs +495 -0
- package/dist/sig/accept.test.mjs +1 -1
- package/dist/sig/compound-proof-discovery.test.d.mts +2 -0
- package/dist/sig/compound-proof-discovery.test.mjs +331 -0
- package/dist/sig/compound-proof-producer.test.d.mts +2 -0
- package/dist/sig/compound-proof-producer.test.mjs +107 -0
- package/dist/sig/compound-proof-verification.test.d.mts +2 -0
- package/dist/sig/compound-proof-verification.test.mjs +833 -0
- package/dist/sig/compound-proof.test.d.mts +2 -0
- package/dist/sig/compound-proof.test.mjs +411 -0
- package/dist/sig/http.test.mjs +759 -31
- package/dist/sig/key-owner-evidence.test.d.mts +2 -0
- package/dist/sig/key-owner-evidence.test.mjs +100 -0
- package/dist/sig/key.test.mjs +220 -8
- package/dist/sig/ld.test.mjs +65 -7
- package/dist/sig/mitra-receive-interop.test.d.mts +2 -0
- package/dist/sig/mitra-receive-interop.test.mjs +260 -0
- package/dist/sig/mitra-send-interop.test.d.mts +2 -0
- package/dist/sig/mitra-send-interop.test.mjs +461 -0
- package/dist/sig/mod.cjs +18 -16
- package/dist/sig/mod.d.cts +4 -4
- package/dist/sig/mod.d.ts +4 -4
- package/dist/sig/mod.js +3 -3
- package/dist/sig/owner.test.mjs +108 -9
- package/dist/sig/portable-collection.test.d.mts +2 -0
- package/dist/sig/portable-collection.test.mjs +697 -0
- package/dist/sig/portable-interop.test.d.mts +2 -0
- package/dist/sig/portable-interop.test.mjs +156 -0
- package/dist/sig/portable-key-id.test.d.mts +2 -0
- package/dist/sig/portable-key-id.test.mjs +67 -0
- package/dist/sig/portable-key.test.d.mts +2 -0
- package/dist/sig/portable-key.test.mjs +1439 -0
- package/dist/sig/proof.test.mjs +1753 -16
- package/dist/sig/tootik-request-interop.test.d.mts +2 -0
- package/dist/sig/tootik-request-interop.test.mjs +190 -0
- package/dist/sig/tootik-send-interop.test.d.mts +2 -0
- package/dist/sig/tootik-send-interop.test.mjs +331 -0
- package/dist/sig/verification.test.d.mts +2 -0
- package/dist/sig/verification.test.mjs +310 -0
- package/dist/std__assert-DvMDRPes.mjs +8 -0
- package/dist/{testing-CO7ftO8A.mjs → tasks-IG3pHfvZ.mjs} +2 -2
- package/dist/{temporal-fsXO5IvD.mjs → temporal-VKyzJSNt.mjs} +3 -3
- package/dist/testing/context.test.d.mts +2 -0
- package/dist/testing/context.test.mjs +19 -0
- package/dist/testing/kv.test.d.mts +2 -0
- package/dist/testing/kv.test.mjs +101 -0
- package/dist/testing/mod.d.mts +1617 -48
- package/dist/testing/mod.mjs +6 -3
- package/dist/testing-t8xDeJZ5.mjs +8 -0
- package/dist/{transformers-DGwl-hD1.cjs → transformers-BalCrSsr.cjs} +0 -1
- package/dist/{types-DC1pNgJA.js → types-_S2_MeLF.js} +144 -8
- package/dist/{types-CPym83zc.cjs → types-poIao40f.cjs} +160 -7
- package/dist/utils/docloader.test.mjs +530 -8
- package/dist/utils/kv-cache.test.mjs +2 -2
- package/dist/utils/mod.cjs +1 -1
- package/dist/utils/mod.d.cts +1 -1
- package/dist/utils/mod.d.ts +1 -1
- package/dist/utils/mod.js +1 -1
- package/dist/verification-C3954hQh.mjs +5 -0
- package/dist/verification-Dpfcw8ml.mjs +105 -0
- package/dist/vocab/cjs.test.mjs +1 -1
- package/package.json +8 -8
- package/dist/assert_rejects-EgstcQy5.mjs +0 -82
- package/dist/docloader-e1khNUKy.mjs +0 -49
- package/dist/http-CsmQ-BQ4.js +0 -2483
- package/dist/http-VyDTd4G3.d.cts +0 -553
- package/dist/http-hlIjmewS.cjs +0 -2694
- package/dist/http-lf8Hsd91.d.ts +0 -553
- package/dist/key-DfPsX8hv.mjs +0 -453
- package/dist/keycache-_DHqz5z_.mjs +0 -97
- package/dist/metrics-CoUJLQhZ.d.cts +0 -276
- package/dist/metrics-Dc4jR-IC.d.ts +0 -276
- package/dist/mod-B0hW12_O.d.cts +0 -307
- package/dist/mod-COIAjwRS.d.ts +0 -307
- package/dist/owner-Br9YYzn_.mjs +0 -120
- package/dist/proof-B4ngoaNQ.mjs +0 -316
- package/dist/proof-B6E0XUXJ.js +0 -1415
- package/dist/proof-NN4xCQGL.cjs +0 -1562
- package/dist/send-CxHKUNzv.mjs +0 -239
- package/dist/std__assert-B2NnY9bq.mjs +0 -79
- package/dist/temporal-polyfill-BCdTHexd.cjs +0 -3565
- /package/dist/{accept-8PiolDP7.mjs → accept-CPVqki78.mjs} +0 -0
- /package/dist/{activity-listener-BtTSxZWA.mjs → activity-listener-C-BSbKI7.mjs} +0 -0
- /package/dist/{client-CAM_bQXx.d.cts → client-D-XP_Ccb.d.cts} +0 -0
- /package/dist/{client-CSddvgWN.d.ts → client-D-XP_Ccb.d.ts} +0 -0
- /package/dist/{keys-Dbyd7bhl.mjs → keys-DIJNHW-Y.mjs} +0 -0
- /package/dist/{kv-CXBAok3k.mjs → kv-DCHkaJ9-.mjs} +0 -0
- /package/dist/{negotiation-RuwrPFqi.mjs → negotiation-CCocWT_N.mjs} +0 -0
- /package/dist/{retry-DgFqeS5k.mjs → retry-zX5xw5e0.mjs} +0 -0
- /package/dist/{chunk-D5IdezsZ.js → rolldown-runtime-BC-Eo5Mj.js} +0 -0
- /package/dist/{chunk-Czpeue4M.cjs → rolldown-runtime-Dmm3t92W.cjs} +0 -0
- /package/dist/{transformers-DXze6FUB.js → transformers-DAtXl_Kc.js} +0 -0
- /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 {
|
|
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
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
5
|
-
import { n as
|
|
6
|
-
import { n as
|
|
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)
|
|
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, {
|
|
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 };
|