@fedify/fedify 2.5.0-dev.2446 → 2.5.0-dev.2492
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 +3 -0
- package/dist/{activity-listener-C-BSbKI7.mjs → activity-listener-CELFAodc.mjs} +8 -4
- package/dist/{builder-Da8b9O6v.mjs → builder-DphK9v7f.mjs} +5 -5
- package/dist/{client-D-XP_Ccb.d.ts → client-3InDZbba.d.cts} +0 -1
- package/dist/{client-D-XP_Ccb.d.cts → client-3InDZbba.d.ts} +0 -1
- package/dist/{client-CEnNz8O7.mjs → client-5SIFzW3q.mjs} +113 -64
- package/dist/compat/mod.d.cts +1 -1
- package/dist/compat/mod.d.ts +1 -1
- package/dist/compat/transformers.test.mjs +1 -1
- package/dist/{compound-proof-D1djO5fa.mjs → compound-proof-cYtvlTgF.mjs} +2 -2
- package/dist/{context-8Tu9kea0.mjs → context-COHd1Rsh.mjs} +2 -0
- package/dist/{context-BdB54V-A.d.ts → context-DQJE9YfH.d.ts} +332 -6
- package/dist/{context-CQ9H8vNW.d.cts → context-DSuL3YWx.d.cts} +332 -6
- package/dist/{deno-eNpfj4oR.mjs → deno-iOAA7iRN.mjs} +1 -1
- package/dist/docloader-DCZkiTeF.mjs +136 -0
- package/dist/{exporter-DThFfe7P.mjs → exporter-DVG68ozH.mjs} +36 -30
- package/dist/federation/builder.test.mjs +1 -1
- package/dist/federation/compound-fanout.test.mjs +6 -3
- package/dist/federation/handler-compound-proof.test.mjs +5 -5
- package/dist/federation/handler.test.mjs +22 -7
- package/dist/federation/hashlink-media.test.mjs +2 -2
- package/dist/federation/idempotency.test.mjs +2 -2
- package/dist/federation/inbox-actorless.test.d.mts +2 -0
- package/dist/federation/inbox-actorless.test.mjs +487 -0
- package/dist/federation/inbox-authentication.test.d.mts +2 -0
- package/dist/federation/inbox-authentication.test.mjs +116 -0
- package/dist/federation/inbox-report.test.mjs +5 -5
- package/dist/federation/inbox-view.test.d.mts +2 -0
- package/dist/federation/inbox-view.test.mjs +369 -0
- package/dist/federation/inbox.test.mjs +22 -12
- package/dist/federation/metrics.test.mjs +1 -1
- package/dist/federation/middleware.test.mjs +470 -35
- package/dist/federation/mod.cjs +2 -1
- package/dist/federation/mod.d.cts +4 -4
- package/dist/federation/mod.d.ts +4 -4
- package/dist/federation/mod.js +8 -2
- package/dist/federation/mq.test.mjs +36 -1
- package/dist/federation/outgoing-proof.test.mjs +9 -6
- package/dist/federation/portable-actor.test.mjs +3 -3
- package/dist/federation/portable-chain.test.mjs +3 -3
- package/dist/federation/portable-collection.test.mjs +4 -4
- package/dist/federation/portable-delivery.test.mjs +2 -2
- package/dist/federation/portable-gateway-keys.test.mjs +13 -7
- package/dist/federation/portable-inbox.test.mjs +4 -4
- package/dist/federation/portable-parse-uri.test.mjs +1 -1
- package/dist/federation/portable-route-activity.test.mjs +2 -2
- package/dist/federation/portable.test.mjs +3 -3
- package/dist/federation/send.test.mjs +502 -93
- package/dist/federation/tasks/enqueue.test.mjs +3 -3
- package/dist/federation/tasks/tasks.test.mjs +4 -4
- package/dist/federation/temporal.test.mjs +1 -1
- package/dist/federation/webfinger.test.mjs +2 -2
- package/dist/{federation-BVH7drJA.cjs → federation-D0AZw_aw.cjs} +1415 -236
- package/dist/{http-BUJ5SFh6.mjs → http-BoJCMnjY.mjs} +204 -106
- package/dist/{http-DlNxxW_5.js → http-ChXUU_3c.js} +319 -123
- package/dist/{http-BfW3wyQ4.cjs → http-kv1LZw-r.cjs} +339 -125
- package/dist/inbox-BjihTKLo.mjs +312 -0
- package/dist/inbox-authentication-DflPYlLL.mjs +171 -0
- package/dist/inbox-view-D-skypg-.mjs +385 -0
- package/dist/{key-nYGY4QB9.d.cts → key-DbLNT-vA.d.ts} +1 -2
- package/dist/{key-DhsBxxZN.d.ts → key-DlHT4R6k.d.cts} +1 -2
- package/dist/{kv-cache-D_m3A241.mjs → kv-cache-Cmsyke4d.mjs} +1 -1
- package/dist/{kv-cache-7015lbrx.js → kv-cache-DQcte7ES.js} +73 -28
- package/dist/{kv-cache-kkBB0vbI.cjs → kv-cache-Ddh5sMxH.cjs} +72 -27
- package/dist/ld-CWVpo_NM.d.cts +250 -0
- package/dist/{ld-CD2CsPxq.mjs → ld-CdvcOEXQ.mjs} +52 -9
- package/dist/ld-Inagww4R.d.ts +250 -0
- package/dist/{metrics-D3LHk6Z4.mjs → metrics-CpxvUrBz.mjs} +1 -1
- package/dist/{middleware-N9eM16XE.js → middleware-BHb5toqA.js} +1413 -247
- package/dist/{middleware-CCDXvXOG.mjs → middleware-BKs2DLUF.mjs} +1 -1
- package/dist/{middleware-CzoWvrdZ.mjs → middleware-CoBLrTKX.mjs} +533 -132
- package/dist/{mod-B0dGgQsg.d.cts → mod-6TQ4UQZb.d.cts} +1 -1
- package/dist/mod-B4kBw1-8.d.ts +154 -0
- package/dist/{mod-DkhfZC1u.d.ts → mod-B7j30IQf.d.ts} +2 -9
- package/dist/mod-C1nT74IG.d.cts +154 -0
- package/dist/{mod-D0bxB8jS.d.ts → mod-CIeBgsOC.d.ts} +1 -1
- package/dist/{mod-B5-wdzmJ.d.cts → mod-YvA4Rk8J.d.cts} +2 -9
- package/dist/mod.cjs +6 -5
- package/dist/mod.d.cts +9 -9
- package/dist/mod.d.ts +9 -9
- package/dist/mod.js +6 -6
- package/dist/{mq-Dm1Wmtm-.mjs → mq-eF96QxUT.mjs} +6 -0
- package/dist/nodeinfo/client.test.mjs +337 -19
- package/dist/nodeinfo/handler.test.mjs +2 -2
- 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/otel/exporter.test.mjs +257 -1
- package/dist/otel/mod.cjs +36 -30
- package/dist/otel/mod.d.cts +13 -0
- package/dist/otel/mod.d.ts +13 -0
- package/dist/otel/mod.js +36 -30
- package/dist/{owner-C5-FVX6t.mjs → owner-DTnVpUKA.mjs} +3 -3
- package/dist/{portable-collection-Cony3_LC.mjs → portable-collection-CJeYTL61.mjs} +2 -2
- package/dist/{portable-collection-C-Z1SKDy.cjs → portable-collection-DciwBIia.cjs} +1 -1
- package/dist/{portable-collection-CC2zNAje.js → portable-collection-TmtpzD4E.js} +1 -1
- package/dist/{portable-key-DNc_flH-.mjs → portable-key-DcYok4ki.mjs} +1 -1
- package/dist/{proof-Cryb1c70.mjs → proof-GH7Poos_.mjs} +98 -10
- package/dist/{send-AF25pWaJ.mjs → send-BgGJh6pv.mjs} +174 -76
- package/dist/sig/compound-proof-discovery.test.mjs +1 -1
- package/dist/sig/compound-proof-producer.test.mjs +1 -1
- package/dist/sig/compound-proof-verification.test.mjs +2 -2
- package/dist/sig/compound-proof.test.mjs +2 -2
- package/dist/sig/http.test.mjs +553 -2
- package/dist/sig/key.test.mjs +1 -1
- package/dist/sig/ld.test.mjs +1 -1
- package/dist/sig/mitra-receive-interop.test.mjs +4 -4
- package/dist/sig/mitra-send-interop.test.mjs +3 -3
- package/dist/sig/mod.cjs +2 -2
- package/dist/sig/mod.d.cts +3 -3
- package/dist/sig/mod.d.ts +3 -3
- package/dist/sig/mod.js +2 -2
- package/dist/sig/owner.test.mjs +1 -1
- package/dist/sig/portable-collection.test.mjs +1 -1
- package/dist/sig/portable-interop.test.mjs +3 -3
- package/dist/sig/portable-key.test.mjs +5 -5
- package/dist/sig/proof.test.mjs +45 -5
- package/dist/sig/tootik-request-interop.test.mjs +4 -4
- package/dist/sig/tootik-send-interop.test.mjs +3 -3
- package/dist/sig/verification.test.mjs +3 -3
- package/dist/{temporal-BsAeuUJj.mjs → temporal-gJINzcL4.mjs} +1 -1
- package/dist/testing/kv.test.mjs +1 -1
- package/dist/testing/mod.d.mts +288 -2
- package/dist/testing/mod.mjs +2 -2
- package/dist/{testing-t8xDeJZ5.mjs → testing-Dbr21vZk.mjs} +1 -1
- package/dist/{types-_S2_MeLF.js → types-DUjZb4i6.js} +112 -63
- package/dist/{types-poIao40f.cjs → types-hKCCjii0.cjs} +111 -62
- package/dist/utils/docloader.test.mjs +344 -36
- package/dist/utils/kv-cache.test.mjs +1 -1
- 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/package.json +7 -7
- package/dist/docloader-B-0nqOB1.mjs +0 -91
- package/dist/inbox-CHvMaIFX.mjs +0 -188
- package/dist/mod-BRpER-B0.d.ts +0 -320
- package/dist/mod-xAfaLS4T.d.cts +0 -320
- package/dist/owner-BF0L9cMt.d.cts +0 -78
- package/dist/owner-BSzr5-I8.d.ts +0 -78
package/dist/sig/mod.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Temporal } from "temporal-polyfill";
|
|
2
2
|
import { URLPattern } from "urlpattern-polyfill";
|
|
3
|
-
import {
|
|
4
|
-
import { n as doesActorOwnKey, r as getKeyOwner, t as verifyPortableObject } from "../portable-collection-
|
|
3
|
+
import { F as hasSignatureLike, H as verifySignature, J as generateCryptoKeyPair, K as fetchKey, M as detachSignature, St as validateAcceptSignature, T as verifyProof, V as verifyJsonLd, W as exportJwk, Y as importJwk, _ as signObject, a as signRequest, bt as fulfillAcceptSignature, c as verifyRequestDetailed, h as hasProofLike, j as createSignature, k as attachSignature, p as createProof, q as fetchKeyDetailed, s as verifyRequest, x as verifyPortableObjectProof, xt as parseAcceptSignature, y as verifyObject, yt as formatAcceptSignature, z as signJsonLd } from "../http-ChXUU_3c.js";
|
|
4
|
+
import { n as doesActorOwnKey, r as getKeyOwner, t as verifyPortableObject } from "../portable-collection-TmtpzD4E.js";
|
|
5
5
|
export { attachSignature, createProof, createSignature, detachSignature, doesActorOwnKey, exportJwk, fetchKey, fetchKeyDetailed, formatAcceptSignature, fulfillAcceptSignature, generateCryptoKeyPair, getKeyOwner, hasProofLike, hasSignatureLike, importJwk, parseAcceptSignature, signJsonLd, signObject, signRequest, validateAcceptSignature, verifyJsonLd, verifyObject, verifyPortableObject, verifyPortableObjectProof, verifyProof, verifyRequest, verifyRequestDetailed, verifySignature };
|
package/dist/sig/owner.test.mjs
CHANGED
|
@@ -6,7 +6,7 @@ import { t as assertFalse } from "../assert_false-CPdRnc3E.mjs";
|
|
|
6
6
|
import "../std__assert-DvMDRPes.mjs";
|
|
7
7
|
import { t as assert } from "../assert-D1Eafmd_.mjs";
|
|
8
8
|
import { o as rsaPublicKey1, s as rsaPublicKey2 } from "../keys-DIJNHW-Y.mjs";
|
|
9
|
-
import { n as getKeyOwner, t as doesActorOwnKey } from "../owner-
|
|
9
|
+
import { n as getKeyOwner, t as doesActorOwnKey } from "../owner-DTnVpUKA.mjs";
|
|
10
10
|
import { Create, CryptographicKey, lookupObject } from "@fedify/vocab";
|
|
11
11
|
import { createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
|
|
12
12
|
//#region src/sig/owner.test.ts
|
|
@@ -2,7 +2,7 @@ import "temporal-polyfill";
|
|
|
2
2
|
import "urlpattern-polyfill";
|
|
3
3
|
globalThis.addEventListener = () => {};
|
|
4
4
|
import { n as ed25519PrivateKey, r as ed25519PublicKey } from "../keys-DIJNHW-Y.mjs";
|
|
5
|
-
import { t as verifyPortableObject } from "../portable-collection-
|
|
5
|
+
import { t as verifyPortableObject } from "../portable-collection-CJeYTL61.mjs";
|
|
6
6
|
import { Collection, CollectionPage, Note, OrderedCollection, Person, traverseCollection } from "@fedify/vocab";
|
|
7
7
|
import { FetchError, encodeMultibase, exportDidKey, preloadedContexts } from "@fedify/vocab-runtime";
|
|
8
8
|
import { test } from "@fedify/fixture";
|
|
@@ -4,9 +4,9 @@ globalThis.addEventListener = () => {};
|
|
|
4
4
|
import { t as assertEquals } from "../assert_equals-Z6IcEbWU.mjs";
|
|
5
5
|
import "../std__assert-DvMDRPes.mjs";
|
|
6
6
|
import { t as assert } from "../assert-D1Eafmd_.mjs";
|
|
7
|
-
import {
|
|
8
|
-
import { n as getKeyOwner } from "../owner-
|
|
9
|
-
import { t as verifyPortableObject } from "../portable-collection-
|
|
7
|
+
import { d as verifyPortableObjectProof, h as verifyProof } from "../proof-GH7Poos_.mjs";
|
|
8
|
+
import { n as getKeyOwner } from "../owner-DTnVpUKA.mjs";
|
|
9
|
+
import { t as verifyPortableObject } from "../portable-collection-CJeYTL61.mjs";
|
|
10
10
|
import { Application, DataIntegrityProof, lookupObject } from "@fedify/vocab";
|
|
11
11
|
import { mockDocumentLoader, test } from "@fedify/fixture";
|
|
12
12
|
//#region test-vectors/fep-ef61/tootik-v0.25.4/actor.json
|
|
@@ -2,12 +2,12 @@ import { Temporal } from "temporal-polyfill";
|
|
|
2
2
|
import "urlpattern-polyfill";
|
|
3
3
|
globalThis.addEventListener = () => {};
|
|
4
4
|
import { t as MemoryKvStore } from "../kv-DCHkaJ9-.mjs";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { n as resolvePortableActorKey } from "../portable-key-
|
|
8
|
-
import {
|
|
5
|
+
import { C as fetchKey, _ as verifyJsonLd, m as signJsonLd, w as fetchKeyDetailed } from "../ld-CdvcOEXQ.mjs";
|
|
6
|
+
import { h as verifyProof, r as createProof } from "../proof-GH7Poos_.mjs";
|
|
7
|
+
import { n as resolvePortableActorKey } from "../portable-key-DcYok4ki.mjs";
|
|
8
|
+
import { m as verifyRequestDetailed, p as verifyRequest, u as signRequest } from "../http-BoJCMnjY.mjs";
|
|
9
9
|
import { a as rsaPrivateKey3, c as rsaPublicKey3, i as rsaPrivateKey2, n as ed25519PrivateKey, r as ed25519PublicKey, s as rsaPublicKey2 } from "../keys-DIJNHW-Y.mjs";
|
|
10
|
-
import { n as getKeyOwner, t as doesActorOwnKey } from "../owner-
|
|
10
|
+
import { n as getKeyOwner, t as doesActorOwnKey } from "../owner-DTnVpUKA.mjs";
|
|
11
11
|
import { t as KvKeyCache } from "../keycache-N2opu4-3.mjs";
|
|
12
12
|
import { Create, CryptographicKey, Multikey, Note, Person } from "@fedify/vocab";
|
|
13
13
|
import { FetchError, encodeMultibase, exportDidKey, exportSpki, parseIri, preloadedContexts } from "@fedify/vocab-runtime";
|
package/dist/sig/proof.test.mjs
CHANGED
|
@@ -11,12 +11,12 @@ import { t as assertRejects } from "../assert_rejects-CTptdYck.mjs";
|
|
|
11
11
|
import { t as assert } from "../assert-D1Eafmd_.mjs";
|
|
12
12
|
import { a as verificationObservation } from "../verification-Dpfcw8ml.mjs";
|
|
13
13
|
import { r as normalizeOutgoingActivityJsonLd } from "../outgoing-jsonld-4IJqPYos.mjs";
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
14
|
+
import { a as hasProofLike, c as verifyMapLocalProof, d as verifyPortableObjectProof, h as verifyProof, l as verifyObject, r as createProof, s as signObject, u as verifyObjectDetailed } from "../proof-GH7Poos_.mjs";
|
|
15
|
+
import { p as verifyRequest } from "../http-BoJCMnjY.mjs";
|
|
16
16
|
import { i as rsaPrivateKey2, n as ed25519PrivateKey, r as ed25519PublicKey, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-DIJNHW-Y.mjs";
|
|
17
|
-
import {
|
|
17
|
+
import { n as getAuthenticatedDocumentLoader } from "../docloader-DCZkiTeF.mjs";
|
|
18
18
|
import { Create, DataIntegrityProof, Document, Multikey, Note, PUBLIC_COLLECTION, Place, Translation } from "@fedify/vocab";
|
|
19
|
-
import { decodeMultibase, encodeMultibase, exportDidKey, exportMultibaseKey, formatIri, importMultibaseKey, parseIri } from "@fedify/vocab-runtime";
|
|
19
|
+
import { FetchError, decodeMultibase, encodeMultibase, exportDidKey, exportMultibaseKey, formatIri, importMultibaseKey, parseIri } from "@fedify/vocab-runtime";
|
|
20
20
|
import { createTestMeterProvider, mockDocumentLoader, test } from "@fedify/fixture";
|
|
21
21
|
import { decodeHex } from "byte-encodings/hex";
|
|
22
22
|
import jsonld from "@fedify/vocab-runtime/jsonld";
|
|
@@ -2530,7 +2530,7 @@ test("getAuthenticatedDocumentLoader() signs portable object requests to gateway
|
|
|
2530
2530
|
documentLoader: getAuthenticatedDocumentLoader({
|
|
2531
2531
|
keyId: new URL("https://example.com/key2"),
|
|
2532
2532
|
privateKey: rsaPrivateKey2
|
|
2533
|
-
}),
|
|
2533
|
+
}, { allowPrivateAddress: true }),
|
|
2534
2534
|
contextLoader: mockDocumentLoader,
|
|
2535
2535
|
gateways: ["https://example.com"],
|
|
2536
2536
|
verifyPortableObject: verifyPortableObjectProof
|
|
@@ -2594,5 +2594,45 @@ test("verifyObject() rejects a key whose controller redirects to another actor",
|
|
|
2594
2594
|
contextLoader: mockDocumentLoader
|
|
2595
2595
|
}), null);
|
|
2596
2596
|
});
|
|
2597
|
+
test("verifyObjectDetailed() tells who signed the proofs", async () => {
|
|
2598
|
+
const keyId = new URL("https://example.com/person2#key4");
|
|
2599
|
+
const actor = new URL("https://example.com/person2");
|
|
2600
|
+
const json = await (await signObject(new Create({
|
|
2601
|
+
id: new URL("https://example.com/activities/detailed"),
|
|
2602
|
+
actor,
|
|
2603
|
+
object: new Note({ content: "Hello" })
|
|
2604
|
+
}), ed25519PrivateKey, keyId, { contextLoader: mockDocumentLoader })).toJsonLd({ contextLoader: mockDocumentLoader });
|
|
2605
|
+
const options = {
|
|
2606
|
+
documentLoader: mockDocumentLoader,
|
|
2607
|
+
contextLoader: mockDocumentLoader
|
|
2608
|
+
};
|
|
2609
|
+
const result = await verifyObjectDetailed(Create, json, options);
|
|
2610
|
+
assertEquals(result.status, "verified");
|
|
2611
|
+
assertEquals(result.status === "verified" ? result.signers.map((s) => [
|
|
2612
|
+
s.kind,
|
|
2613
|
+
s.id.href,
|
|
2614
|
+
s.keyId.href
|
|
2615
|
+
]) : [], [[
|
|
2616
|
+
"actor",
|
|
2617
|
+
actor.href,
|
|
2618
|
+
keyId.href
|
|
2619
|
+
]]);
|
|
2620
|
+
const unsigned = await verifyObjectDetailed(Note, {
|
|
2621
|
+
"@context": "https://www.w3.org/ns/activitystreams",
|
|
2622
|
+
id: "https://example.com/notes/unsigned",
|
|
2623
|
+
type: "Note"
|
|
2624
|
+
}, options);
|
|
2625
|
+
assertEquals(unsigned.status, "verified");
|
|
2626
|
+
assertEquals(unsigned.status === "verified" ? unsigned.signers : null, []);
|
|
2627
|
+
assertEquals((await verifyObjectDetailed(Create, json, {
|
|
2628
|
+
...options,
|
|
2629
|
+
documentLoader: (url) => url.startsWith("https://example.com/person2") ? Promise.reject(new FetchError(url, "Unavailable", new Response(null, { status: 503 }))) : mockDocumentLoader(url)
|
|
2630
|
+
})).status, "unavailable");
|
|
2631
|
+
assertEquals((await verifyObjectDetailed(Create, json, {
|
|
2632
|
+
...options,
|
|
2633
|
+
documentLoader: (url) => url.startsWith("https://example.com/person2") ? Promise.reject(new FetchError(url, "Gone", new Response(null, { status: 410 }))) : mockDocumentLoader(url)
|
|
2634
|
+
})).status, "invalid");
|
|
2635
|
+
assertEquals(await verifyObject(Create, json, options) != null, true);
|
|
2636
|
+
});
|
|
2597
2637
|
//#endregion
|
|
2598
2638
|
export {};
|
|
@@ -5,10 +5,10 @@ import { t as MemoryKvStore } from "../kv-DCHkaJ9-.mjs";
|
|
|
5
5
|
import { t as assertEquals } from "../assert_equals-Z6IcEbWU.mjs";
|
|
6
6
|
import "../std__assert-DvMDRPes.mjs";
|
|
7
7
|
import { t as assert } from "../assert-D1Eafmd_.mjs";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { o as createFederation } from "../middleware-
|
|
11
|
-
import { t as doesActorOwnKey } from "../owner-
|
|
8
|
+
import { d as verifyPortableObjectProof } from "../proof-GH7Poos_.mjs";
|
|
9
|
+
import { m as verifyRequestDetailed } from "../http-BoJCMnjY.mjs";
|
|
10
|
+
import { o as createFederation } from "../middleware-CoBLrTKX.mjs";
|
|
11
|
+
import { t as doesActorOwnKey } from "../owner-DTnVpUKA.mjs";
|
|
12
12
|
import { Follow, Person } from "@fedify/vocab";
|
|
13
13
|
import { mockDocumentLoader, test } from "@fedify/fixture";
|
|
14
14
|
import { encodeHex } from "byte-encodings/hex";
|
|
@@ -4,9 +4,9 @@ globalThis.addEventListener = () => {};
|
|
|
4
4
|
import { t as assertEquals } from "../assert_equals-Z6IcEbWU.mjs";
|
|
5
5
|
import "../std__assert-DvMDRPes.mjs";
|
|
6
6
|
import { t as assert } from "../assert-D1Eafmd_.mjs";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { t as doesActorOwnKey } from "../owner-
|
|
7
|
+
import { d as verifyPortableObjectProof } from "../proof-GH7Poos_.mjs";
|
|
8
|
+
import { m as verifyRequestDetailed } from "../http-BoJCMnjY.mjs";
|
|
9
|
+
import { t as doesActorOwnKey } from "../owner-DTnVpUKA.mjs";
|
|
10
10
|
import { Create } from "@fedify/vocab";
|
|
11
11
|
import { decodeMultibase, importDidKey } from "@fedify/vocab-runtime";
|
|
12
12
|
import { mockDocumentLoader, test } from "@fedify/fixture";
|
|
@@ -2,9 +2,9 @@ import "temporal-polyfill";
|
|
|
2
2
|
import "urlpattern-polyfill";
|
|
3
3
|
globalThis.addEventListener = () => {};
|
|
4
4
|
import { a as verificationObservation } from "../verification-Dpfcw8ml.mjs";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import { _ as verifyJsonLd, m as signJsonLd } from "../ld-CdvcOEXQ.mjs";
|
|
6
|
+
import { l as verifyObject, s as signObject } from "../proof-GH7Poos_.mjs";
|
|
7
|
+
import { m as verifyRequestDetailed, u as signRequest } from "../http-BoJCMnjY.mjs";
|
|
8
8
|
import { i as rsaPrivateKey2, n as ed25519PrivateKey, o as rsaPublicKey1, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-DIJNHW-Y.mjs";
|
|
9
9
|
import { Activity, Create, CryptographicKey, Multikey } from "@fedify/vocab";
|
|
10
10
|
import { FetchError } from "@fedify/vocab-runtime";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Temporal } from "temporal-polyfill";
|
|
2
2
|
import "urlpattern-polyfill";
|
|
3
3
|
globalThis.addEventListener = () => {};
|
|
4
|
-
import { c as getNormalizationContextLoader } from "./ld-
|
|
4
|
+
import { c as getNormalizationContextLoader } from "./ld-CdvcOEXQ.mjs";
|
|
5
5
|
import jsonld from "@fedify/vocab-runtime/jsonld";
|
|
6
6
|
//#region src/federation/temporal.ts
|
|
7
7
|
function isPlainObject(value) {
|
package/dist/testing/kv.test.mjs
CHANGED
|
@@ -6,7 +6,7 @@ import { t as MemoryKvStore } from "../kv-DCHkaJ9-.mjs";
|
|
|
6
6
|
import { t as ManualClockKvStore } from "../kv-DBRWVx3Q.mjs";
|
|
7
7
|
import { n as baseOptions, o as stringSchema, t as MockQueue } from "../tasks-IG3pHfvZ.mjs";
|
|
8
8
|
import { t as assertEquals } from "../assert_equals-Z6IcEbWU.mjs";
|
|
9
|
-
import { o as createFederation } from "../middleware-
|
|
9
|
+
import { o as createFederation } from "../middleware-CoBLrTKX.mjs";
|
|
10
10
|
//#region src/testing/kv.test.ts
|
|
11
11
|
test("ManualClockKvStore keeps an entry at its exact expiration instant", async () => {
|
|
12
12
|
const kv = new ManualClockKvStore();
|
package/dist/testing/mod.d.mts
CHANGED
|
@@ -5,7 +5,7 @@ import { Router } from "@fedify/uri-template";
|
|
|
5
5
|
import { Activity, Actor, Collection, CryptographicKey, DataIntegrityProof, Hashtag, Link, LookupObjectOptions, Multikey, Note, Object as Object$1, Recipient, Tombstone, TraverseCollectionOptions } from "@fedify/vocab";
|
|
6
6
|
import { Link as Link$1, LookupWebFingerOptions, ResourceDescriptor } from "@fedify/webfinger";
|
|
7
7
|
import { MeterProvider, TracerProvider } from "@opentelemetry/api";
|
|
8
|
-
import { AuthenticatedDocumentLoaderFactory, DocumentLoader, DocumentLoaderFactory, GetUserAgentOptions, PortableObjectVerifier } from "@fedify/vocab-runtime";
|
|
8
|
+
import { AuthenticatedDocumentLoaderFactory, DocumentLoader, DocumentLoaderFactory, GetUserAgentOptions, PortableObjectVerifier, RemoteDocument } from "@fedify/vocab-runtime";
|
|
9
9
|
import { MeterProvider as MeterProvider$1, MetricReader } from "@opentelemetry/sdk-metrics";
|
|
10
10
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
11
11
|
|
|
@@ -416,6 +416,35 @@ interface GetKeyOwnerOptions {
|
|
|
416
416
|
tracerProvider?: TracerProvider;
|
|
417
417
|
}
|
|
418
418
|
//#endregion
|
|
419
|
+
//#region src/federation/activity-listener.d.ts
|
|
420
|
+
/**
|
|
421
|
+
* Options for an inbox listener.
|
|
422
|
+
* @since 2.5.0
|
|
423
|
+
*/
|
|
424
|
+
interface InboxListenerOptions {
|
|
425
|
+
/**
|
|
426
|
+
* Whether activities that declare no `actor` at all may reach the listener.
|
|
427
|
+
*
|
|
428
|
+
* Some protocols identify the requester without an `actor`; for example,
|
|
429
|
+
* Mastodon sends [FEP-7aa9] `FeatureRequest` activities without one. When
|
|
430
|
+
* this is `true`, such an activity is dispatched to the listener if Fedify
|
|
431
|
+
* authenticated at least one principal for it, i.e., the signer of its
|
|
432
|
+
* Object Integrity Proofs or Linked Data Signature, or otherwise the signer
|
|
433
|
+
* of the HTTP request, and its `id`, if any, has the same origin as that
|
|
434
|
+
* principal. The listener is then responsible for authorizing the request
|
|
435
|
+
* with {@link InboxContext.authentication}, e.g., with
|
|
436
|
+
* `featureInteraction.verifyRequest()` from
|
|
437
|
+
* `@fedify/interaction-controls`.
|
|
438
|
+
*
|
|
439
|
+
* An activity that declares an `actor` is never affected by this option;
|
|
440
|
+
* its actor must be authenticated as usual.
|
|
441
|
+
*
|
|
442
|
+
* [FEP-7aa9]: https://w3id.org/fep/7aa9
|
|
443
|
+
* @default `false`
|
|
444
|
+
*/
|
|
445
|
+
readonly allowActorless?: boolean;
|
|
446
|
+
}
|
|
447
|
+
//#endregion
|
|
419
448
|
//#region src/federation/inbox-report.d.ts
|
|
420
449
|
/**
|
|
421
450
|
* A JSON value retained from the incoming request.
|
|
@@ -458,6 +487,13 @@ type InboxAuthentication = {
|
|
|
458
487
|
readonly type: "activityOriginMismatch";
|
|
459
488
|
readonly activityId: URL;
|
|
460
489
|
readonly actorIds: readonly URL[];
|
|
490
|
+
} | {
|
|
491
|
+
/**
|
|
492
|
+
* The activity declares no actor, and no principal was authenticated
|
|
493
|
+
* for it, although its listener allows activities without an actor.
|
|
494
|
+
* @since 2.5.0
|
|
495
|
+
*/
|
|
496
|
+
readonly type: "noAuthenticatedPrincipal";
|
|
461
497
|
};
|
|
462
498
|
} | {
|
|
463
499
|
readonly status: "skipped";
|
|
@@ -1311,6 +1347,18 @@ interface MessageQueue {
|
|
|
1311
1347
|
* @since 2.4.0
|
|
1312
1348
|
*/
|
|
1313
1349
|
readonly atomicEnqueueMany?: boolean;
|
|
1350
|
+
/**
|
|
1351
|
+
* The largest message, in bytes, that the backend can hold. Fedify compares
|
|
1352
|
+
* it with a conservative estimate of a message's serialized size: the
|
|
1353
|
+
* length of its JSON serialization encoded in UTF-8, plus 8 bytes for each
|
|
1354
|
+
* JSON value in it, plus what encoding strings beyond Latin-1 as UTF-16
|
|
1355
|
+
* adds, which also bounds binary serialization formats. When an
|
|
1356
|
+
* incoming activity would make a larger inbox message, Fedify processes the
|
|
1357
|
+
* activity right away instead of enqueueing it, as if there were no inbox
|
|
1358
|
+
* queue. When omitted, messages are enqueued regardless of their size.
|
|
1359
|
+
* @since 2.5.0
|
|
1360
|
+
*/
|
|
1361
|
+
readonly maxMessageSize?: number;
|
|
1314
1362
|
/**
|
|
1315
1363
|
* Enqueues a message in the queue.
|
|
1316
1364
|
* @param message The message to enqueue.
|
|
@@ -1349,6 +1397,176 @@ interface MessageQueue {
|
|
|
1349
1397
|
getDepth?(): Promise<MessageQueueDepth>;
|
|
1350
1398
|
}
|
|
1351
1399
|
//#endregion
|
|
1400
|
+
//#region src/federation/inbox-authentication.d.ts
|
|
1401
|
+
/**
|
|
1402
|
+
* A party that Fedify authenticated for an incoming activity, independently
|
|
1403
|
+
* of the activity's declared `actor`.
|
|
1404
|
+
* @since 2.5.0
|
|
1405
|
+
*/
|
|
1406
|
+
interface InboxPrincipal {
|
|
1407
|
+
/**
|
|
1408
|
+
* What {@link InboxPrincipal.id} is:
|
|
1409
|
+
*
|
|
1410
|
+
* - `"actor"`: an actor whose ownership of the verifying key Fedify
|
|
1411
|
+
* confirmed with the actor's own document.
|
|
1412
|
+
* - `"portableAuthority"`: a DID whose verification method made a valid
|
|
1413
|
+
* Object Integrity Proof. It authenticates the [FEP-ef61] portable
|
|
1414
|
+
* actors of that DID, and nothing else.
|
|
1415
|
+
*
|
|
1416
|
+
* [FEP-ef61]: https://w3id.org/fep/ef61
|
|
1417
|
+
*/
|
|
1418
|
+
readonly kind: "actor" | "portableAuthority";
|
|
1419
|
+
/** The actor ID, or the DID if {@link kind} is `"portableAuthority"`. */
|
|
1420
|
+
readonly id: URL;
|
|
1421
|
+
/**
|
|
1422
|
+
* How the principal was authenticated:
|
|
1423
|
+
*
|
|
1424
|
+
* - `"httpSignatures"`: it signed the HTTP request.
|
|
1425
|
+
* - `"linkedDataSignatures"`: it made the Linked Data Signature of the
|
|
1426
|
+
* activity.
|
|
1427
|
+
* - `"objectIntegrityProofs"`: it made an Object Integrity Proof of the
|
|
1428
|
+
* activity.
|
|
1429
|
+
* - `"origin"`: the activity was fetched again from the actor's own web
|
|
1430
|
+
* origin, which happens only for `Context.routeActivity()`.
|
|
1431
|
+
*/
|
|
1432
|
+
readonly mechanism: "httpSignatures" | "linkedDataSignatures" | "objectIntegrityProofs" | "origin";
|
|
1433
|
+
/** The key or verification method that authenticated the principal. */
|
|
1434
|
+
readonly keyId: URL | null;
|
|
1435
|
+
}
|
|
1436
|
+
/**
|
|
1437
|
+
* Who Fedify authenticated for an incoming activity, and the interpretation of
|
|
1438
|
+
* the activity it authenticated. Inbox listeners receive it as
|
|
1439
|
+
* {@link InboxContext.authentication}.
|
|
1440
|
+
*
|
|
1441
|
+
* Authenticated principals are independent of the activity's declared
|
|
1442
|
+
* `actor`: an activity forwarded by a relay is signed by the relay in its
|
|
1443
|
+
* HTTP request, but its document may be signed by its author, and some
|
|
1444
|
+
* activities, such as [FEP-7aa9] `FeatureRequest`s sent by Mastodon, declare
|
|
1445
|
+
* no `actor` at all. A valid signature alone does not authorize anything;
|
|
1446
|
+
* use {@link isActorAuthenticated} to check whether a specific actor was
|
|
1447
|
+
* authenticated.
|
|
1448
|
+
*
|
|
1449
|
+
* [FEP-7aa9]: https://w3id.org/fep/7aa9
|
|
1450
|
+
* @since 2.5.0
|
|
1451
|
+
*/
|
|
1452
|
+
interface InboxAuthenticationEvidence {
|
|
1453
|
+
/**
|
|
1454
|
+
* Whether signatures were verified at all. It is `false` only when
|
|
1455
|
+
* signature verification is skipped, or when there is no evidence, e.g.,
|
|
1456
|
+
* for an activity queued by an older version of Fedify. In that case all
|
|
1457
|
+
* the principal lists are empty.
|
|
1458
|
+
*/
|
|
1459
|
+
readonly verified: boolean;
|
|
1460
|
+
/**
|
|
1461
|
+
* The principals that signed the HTTP request, i.e., the server that
|
|
1462
|
+
* delivered the activity, which may have forwarded it. It is empty when
|
|
1463
|
+
* the activity document was authenticated by its own signatures, so that
|
|
1464
|
+
* HTTP Signatures did not need to be verified.
|
|
1465
|
+
*/
|
|
1466
|
+
readonly requestSigners: readonly InboxPrincipal[];
|
|
1467
|
+
/**
|
|
1468
|
+
* The principals that made the verified Linked Data Signature or Object
|
|
1469
|
+
* Integrity Proofs of the activity document. All of them are listed when
|
|
1470
|
+
* there are several proofs.
|
|
1471
|
+
*/
|
|
1472
|
+
readonly documentSigners: readonly InboxPrincipal[];
|
|
1473
|
+
/**
|
|
1474
|
+
* The actors authenticated because `Context.routeActivity()` fetched the
|
|
1475
|
+
* activity again from their own web origin. It is always empty for
|
|
1476
|
+
* activities delivered to an inbox.
|
|
1477
|
+
*/
|
|
1478
|
+
readonly originAuthenticated: readonly InboxPrincipal[];
|
|
1479
|
+
/**
|
|
1480
|
+
* The activity as Fedify interpreted it while authenticating it, in
|
|
1481
|
+
* expanded JSON-LD. Typed vocabulary objects omit some values, such as
|
|
1482
|
+
* blank node references and values they cannot decode, so authorization
|
|
1483
|
+
* that has to count every value of a property, e.g., that a property has
|
|
1484
|
+
* exactly one value, should inspect this instead. It is deeply frozen.
|
|
1485
|
+
* It is empty when there is no evidence.
|
|
1486
|
+
*/
|
|
1487
|
+
readonly expandedActivity: readonly Record<string, unknown>[];
|
|
1488
|
+
/**
|
|
1489
|
+
* The base URL the activity was decoded with, e.g., the URL an activity
|
|
1490
|
+
* fetched by `Context.routeActivity()` was finally retrieved from, or
|
|
1491
|
+
* `null` if none was given. Relative IRIs left in
|
|
1492
|
+
* {@link expandedActivity} resolve against it, or against the activity's
|
|
1493
|
+
* own `@id` if it is `null`, as the decoder resolves them.
|
|
1494
|
+
*/
|
|
1495
|
+
readonly baseUrl: URL | null;
|
|
1496
|
+
}
|
|
1497
|
+
/**
|
|
1498
|
+
* A {@link InboxPrincipal} as stored in a queued message.
|
|
1499
|
+
* @internal
|
|
1500
|
+
*/
|
|
1501
|
+
interface SerializedInboxPrincipal {
|
|
1502
|
+
readonly kind: InboxPrincipal["kind"];
|
|
1503
|
+
readonly id: string;
|
|
1504
|
+
readonly mechanism: InboxPrincipal["mechanism"];
|
|
1505
|
+
readonly keyId: string | null;
|
|
1506
|
+
}
|
|
1507
|
+
/**
|
|
1508
|
+
* The principals of an {@link InboxAuthenticationEvidence} as stored in
|
|
1509
|
+
* a queued message. The expanded activity and the base URL are restored
|
|
1510
|
+
* from the queued verified view instead.
|
|
1511
|
+
* @internal
|
|
1512
|
+
*/
|
|
1513
|
+
interface SerializedInboxAuthentication {
|
|
1514
|
+
readonly verified: boolean;
|
|
1515
|
+
readonly requestSigners: readonly SerializedInboxPrincipal[];
|
|
1516
|
+
readonly documentSigners: readonly SerializedInboxPrincipal[];
|
|
1517
|
+
readonly originAuthenticated: readonly SerializedInboxPrincipal[];
|
|
1518
|
+
}
|
|
1519
|
+
//#endregion
|
|
1520
|
+
//#region src/sig/ld.d.ts
|
|
1521
|
+
/**
|
|
1522
|
+
* How a context loader marked by {@link markEffectiveContextLoader} already
|
|
1523
|
+
* resolves contexts.
|
|
1524
|
+
* @internal
|
|
1525
|
+
*/
|
|
1526
|
+
type EffectiveContextLoaderPolicy = "standard" | "normalization";
|
|
1527
|
+
//#endregion
|
|
1528
|
+
//#region src/federation/inbox-view.d.ts
|
|
1529
|
+
/**
|
|
1530
|
+
* A {@link ContextSnapshotEntry} as stored in a queued message. A response
|
|
1531
|
+
* that equals the one Fedify bundles for the URL is stored as a reference to
|
|
1532
|
+
* the bundled context, along with its hash for diagnostics.
|
|
1533
|
+
* @internal
|
|
1534
|
+
*/
|
|
1535
|
+
type SerializedContextSnapshotEntry = {
|
|
1536
|
+
readonly policy: EffectiveContextLoaderPolicy;
|
|
1537
|
+
readonly url: string; /** The SHA-256 of the canonical JSON of the whole response. */
|
|
1538
|
+
readonly sha256: string;
|
|
1539
|
+
} & ({
|
|
1540
|
+
readonly bundled: true;
|
|
1541
|
+
} | {
|
|
1542
|
+
readonly response: RemoteDocument;
|
|
1543
|
+
});
|
|
1544
|
+
/**
|
|
1545
|
+
* The interpretation of an incoming activity that Fedify authenticated, as
|
|
1546
|
+
* stored in a queued message. The document itself is not copied; it is
|
|
1547
|
+
* a field of the message.
|
|
1548
|
+
* @internal
|
|
1549
|
+
*/
|
|
1550
|
+
interface SerializedVerifiedActivityView {
|
|
1551
|
+
/** The format version. */
|
|
1552
|
+
readonly version: 1;
|
|
1553
|
+
/** The context loader policy the activity was parsed with. */
|
|
1554
|
+
readonly policy: EffectiveContextLoaderPolicy;
|
|
1555
|
+
/**
|
|
1556
|
+
* Which document the activity was parsed from, with its Linked Data
|
|
1557
|
+
* Signature detached: the `activity` of the message, i.e., the payload as
|
|
1558
|
+
* received, or its `normalizedActivity`, i.e., the payload compacted for
|
|
1559
|
+
* Linked Data Signatures.
|
|
1560
|
+
*/
|
|
1561
|
+
readonly source: "activity" | "normalizedActivity";
|
|
1562
|
+
/** The `baseUrl` option the activity was parsed with. */
|
|
1563
|
+
readonly baseUrl: string | null;
|
|
1564
|
+
/** The context responses the interpretation used. */
|
|
1565
|
+
readonly contexts: readonly SerializedContextSnapshotEntry[];
|
|
1566
|
+
/** The digest of the expanded activity. */
|
|
1567
|
+
readonly expandedDigest: string;
|
|
1568
|
+
}
|
|
1569
|
+
//#endregion
|
|
1352
1570
|
//#region src/federation/retry.d.ts
|
|
1353
1571
|
/**
|
|
1354
1572
|
* The context passed to a {@link RetryPolicy} callback.
|
|
@@ -1683,6 +1901,21 @@ interface InboxMessage {
|
|
|
1683
1901
|
* @internal
|
|
1684
1902
|
*/
|
|
1685
1903
|
readonly ldSignatureVerified?: boolean;
|
|
1904
|
+
/**
|
|
1905
|
+
* The interpretation of the activity that Fedify authenticated, i.e., which
|
|
1906
|
+
* document it was parsed from and every JSON-LD context response the parse
|
|
1907
|
+
* used, so that the worker and its retries dispatch the very same
|
|
1908
|
+
* interpretation without loading contexts again. Absent in messages queued
|
|
1909
|
+
* by older Fedify versions.
|
|
1910
|
+
* @internal
|
|
1911
|
+
*/
|
|
1912
|
+
readonly verifiedView?: SerializedVerifiedActivityView;
|
|
1913
|
+
/**
|
|
1914
|
+
* Who Fedify authenticated for the activity. Absent in messages queued by
|
|
1915
|
+
* older Fedify versions.
|
|
1916
|
+
* @internal
|
|
1917
|
+
*/
|
|
1918
|
+
readonly authentication?: SerializedInboxAuthentication;
|
|
1686
1919
|
readonly started: string;
|
|
1687
1920
|
readonly attempt: number;
|
|
1688
1921
|
readonly identifier: string | null;
|
|
@@ -3034,11 +3267,27 @@ interface InboxListenerSetters<TContextData> {
|
|
|
3034
3267
|
/**
|
|
3035
3268
|
* Registers a listener for a specific incoming activity type.
|
|
3036
3269
|
*
|
|
3270
|
+
* @example
|
|
3271
|
+
* ``` typescript
|
|
3272
|
+
* federation
|
|
3273
|
+
* .setInboxListeners("/users/{identifier}/inbox", "/inbox")
|
|
3274
|
+
* // Mastodon sends FeatureRequest activities without an actor:
|
|
3275
|
+
* .on(FeatureRequest, async (ctx, request) => {
|
|
3276
|
+
* const verification = await featureInteraction.verifyRequest(ctx, {
|
|
3277
|
+
* request,
|
|
3278
|
+
* authentication: ctx.authentication,
|
|
3279
|
+
* });
|
|
3280
|
+
* // ...
|
|
3281
|
+
* }, { allowActorless: true });
|
|
3282
|
+
* ```
|
|
3283
|
+
*
|
|
3037
3284
|
* @param type A subclass of {@link Activity} to listen to.
|
|
3038
3285
|
* @param listener A callback to handle an incoming activity.
|
|
3286
|
+
* @param options Options for the listener. See
|
|
3287
|
+
* {@link InboxListenerOptions}. (Since 2.5.0.)
|
|
3039
3288
|
* @returns The setters object so that settings can be chained.
|
|
3040
3289
|
*/
|
|
3041
|
-
on<TActivity extends Activity>(type: new (...args: any[]) => TActivity, listener: InboxListener<TContextData, TActivity
|
|
3290
|
+
on<TActivity extends Activity>(type: new (...args: any[]) => TActivity, listener: InboxListener<TContextData, TActivity>, options?: InboxListenerOptions): InboxListenerSetters<TContextData>;
|
|
3042
3291
|
/**
|
|
3043
3292
|
* Registers an error handler for inbox listeners. Any exceptions thrown
|
|
3044
3293
|
* from the listeners are caught and passed to this handler.
|
|
@@ -4446,6 +4695,11 @@ interface RequestContext<TContextData> extends Context<TContextData> {
|
|
|
4446
4695
|
* Gets the public key of the sender, if any exists and it is verified.
|
|
4447
4696
|
* Otherwise, `null` is returned.
|
|
4448
4697
|
*
|
|
4698
|
+
* Successful results are reused for this request regardless of the options.
|
|
4699
|
+
* Pending checks and `null` results are reused for the same effective
|
|
4700
|
+
* document and context loaders, including failed lookups. Rejected checks
|
|
4701
|
+
* can be retried. Shared work uses the first caller's tracer provider.
|
|
4702
|
+
*
|
|
4449
4703
|
* This can be used for implementing [authorized fetch] (also known as
|
|
4450
4704
|
* secure mode) in ActivityPub.
|
|
4451
4705
|
*
|
|
@@ -4459,6 +4713,11 @@ interface RequestContext<TContextData> extends Context<TContextData> {
|
|
|
4459
4713
|
* Gets the public key of the sender, if any exists and it is verified.
|
|
4460
4714
|
* Otherwise, `null` is returned.
|
|
4461
4715
|
*
|
|
4716
|
+
* Successful results are reused for this request regardless of the options.
|
|
4717
|
+
* Pending checks and `null` results are reused for the same effective
|
|
4718
|
+
* document and context loaders, including failed lookups. Rejected checks
|
|
4719
|
+
* can be retried. Shared work uses the first caller's tracer provider.
|
|
4720
|
+
*
|
|
4462
4721
|
* This can be used for implementing [authorized fetch] (also known as
|
|
4463
4722
|
* secure mode) in ActivityPub.
|
|
4464
4723
|
*
|
|
@@ -4478,6 +4737,14 @@ interface RequestContext<TContextData> extends Context<TContextData> {
|
|
|
4478
4737
|
* Gets the owner of the signed key, if any exists and it is verified.
|
|
4479
4738
|
* Otherwise, `null` is returned.
|
|
4480
4739
|
*
|
|
4740
|
+
* Verified keys and owners are reused for this request regardless of the
|
|
4741
|
+
* options. Pending checks are shared for the same effective document and
|
|
4742
|
+
* context loaders. A `null` result from an owner lookup after key
|
|
4743
|
+
* verification is retained for those loaders. A `null` result caused by
|
|
4744
|
+
* an unverified key is not retained, allowing an owner lookup after another
|
|
4745
|
+
* loader verifies the key. Rejected checks can be retried. Shared work
|
|
4746
|
+
* uses the first caller's tracer provider.
|
|
4747
|
+
*
|
|
4481
4748
|
* This can be used for implementing [authorized fetch] (also known as
|
|
4482
4749
|
* secure mode) in ActivityPub.
|
|
4483
4750
|
*
|
|
@@ -4492,6 +4759,14 @@ interface RequestContext<TContextData> extends Context<TContextData> {
|
|
|
4492
4759
|
* Gets the owner of the signed key, if any exists and it is verified.
|
|
4493
4760
|
* Otherwise, `null` is returned.
|
|
4494
4761
|
*
|
|
4762
|
+
* Verified keys and owners are reused for this request regardless of the
|
|
4763
|
+
* options. Pending checks are shared for the same effective document and
|
|
4764
|
+
* context loaders. A `null` result from an owner lookup after key
|
|
4765
|
+
* verification is retained for those loaders. A `null` result caused by
|
|
4766
|
+
* an unverified key is not retained, allowing an owner lookup after another
|
|
4767
|
+
* loader verifies the key. Rejected checks can be retried. Shared work
|
|
4768
|
+
* uses the first caller's tracer provider.
|
|
4769
|
+
*
|
|
4495
4770
|
* This can be used for implementing [authorized fetch] (also known as
|
|
4496
4771
|
* secure mode) in ActivityPub.
|
|
4497
4772
|
*
|
|
@@ -4566,6 +4841,17 @@ interface InboxContext<TContextData> extends Context<TContextData> {
|
|
|
4566
4841
|
* @since 1.2.0
|
|
4567
4842
|
*/
|
|
4568
4843
|
readonly recipient: string | null;
|
|
4844
|
+
/**
|
|
4845
|
+
* Who Fedify authenticated for the incoming activity, independently of its
|
|
4846
|
+
* declared `actor`, and the interpretation of the activity that was
|
|
4847
|
+
* authenticated. It is preserved through the inbox queue and its retries.
|
|
4848
|
+
*
|
|
4849
|
+
* Use it with {@link isActorAuthenticated} to authorize requests that do
|
|
4850
|
+
* not declare an `actor`, which reach a listener only if it is registered
|
|
4851
|
+
* with the `allowActorless` option.
|
|
4852
|
+
* @since 2.5.0
|
|
4853
|
+
*/
|
|
4854
|
+
readonly authentication: InboxAuthenticationEvidence;
|
|
4569
4855
|
/**
|
|
4570
4856
|
* Creates a new context with the same properties as this one,
|
|
4571
4857
|
* but with the given data.
|
package/dist/testing/mod.mjs
CHANGED
|
@@ -2,8 +2,8 @@ import "temporal-polyfill";
|
|
|
2
2
|
import "urlpattern-polyfill";
|
|
3
3
|
globalThis.addEventListener = () => {};
|
|
4
4
|
import { r as testDefinitions } from "../dist-DJQM4u7i.mjs";
|
|
5
|
-
import { n as createOutboxContext, r as createRequestContext, t as createInboxContext } from "../context-
|
|
5
|
+
import { n as createOutboxContext, r as createRequestContext, t as createInboxContext } from "../context-COHd1Rsh.mjs";
|
|
6
6
|
import { t as ManualClockKvStore } from "../kv-DBRWVx3Q.mjs";
|
|
7
7
|
import { a as numberSchema, i as makeSchema, n as baseOptions, o as stringSchema, r as envelopeSchema, t as MockQueue } from "../tasks-IG3pHfvZ.mjs";
|
|
8
|
-
import "../testing-
|
|
8
|
+
import "../testing-Dbr21vZk.mjs";
|
|
9
9
|
export { ManualClockKvStore, MockQueue, baseOptions, createInboxContext, createOutboxContext, createRequestContext, envelopeSchema, makeSchema, numberSchema, stringSchema, testDefinitions };
|
|
@@ -2,7 +2,7 @@ import "temporal-polyfill";
|
|
|
2
2
|
import "urlpattern-polyfill";
|
|
3
3
|
globalThis.addEventListener = () => {};
|
|
4
4
|
import "./dist-DJQM4u7i.mjs";
|
|
5
|
-
import "./context-
|
|
5
|
+
import "./context-COHd1Rsh.mjs";
|
|
6
6
|
import "./kv-DBRWVx3Q.mjs";
|
|
7
7
|
import "./tasks-IG3pHfvZ.mjs";
|
|
8
8
|
export {};
|