@fedify/fedify 2.4.0-dev.2219 → 2.4.0-dev.2233

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 (73) hide show
  1. package/dist/{builder-C5rYBZ16.mjs → builder-BmoDmjWk.mjs} +2 -2
  2. package/dist/compat/transformers.test.mjs +1 -1
  3. package/dist/{compound-proof-D0xY7MBs.mjs → compound-proof-Pn8766TV.mjs} +2 -2
  4. package/dist/{deno-Dj1TFhf4.mjs → deno-62DcBMwc.mjs} +1 -1
  5. package/dist/{docloader-CzyJe90o.mjs → docloader-Be9TaKa_.mjs} +2 -2
  6. package/dist/federation/builder.test.mjs +1 -1
  7. package/dist/federation/compound-fanout.test.mjs +3 -3
  8. package/dist/federation/handler-compound-proof.test.mjs +3 -3
  9. package/dist/federation/handler.test.mjs +73 -6
  10. package/dist/federation/hashlink-media.test.mjs +2 -2
  11. package/dist/federation/idempotency.test.mjs +2 -2
  12. package/dist/federation/metrics.test.mjs +1 -1
  13. package/dist/federation/middleware.test.mjs +7 -7
  14. package/dist/federation/mod.cjs +1 -1
  15. package/dist/federation/mod.js +1 -1
  16. package/dist/federation/outgoing-proof.test.mjs +248 -6
  17. package/dist/federation/portable-actor.test.mjs +3 -3
  18. package/dist/federation/portable-chain.test.mjs +3 -3
  19. package/dist/federation/portable-collection.test.mjs +4 -4
  20. package/dist/federation/portable-delivery.test.mjs +2 -2
  21. package/dist/federation/portable-gateway-keys.test.mjs +4 -4
  22. package/dist/federation/portable-inbox.test.mjs +4 -4
  23. package/dist/federation/portable-parse-uri.test.mjs +1 -1
  24. package/dist/federation/portable-route-activity.test.mjs +2 -2
  25. package/dist/federation/portable.test.mjs +80 -3
  26. package/dist/federation/send.test.mjs +3 -3
  27. package/dist/federation/tasks/enqueue.test.mjs +1 -1
  28. package/dist/federation/tasks/tasks.test.mjs +2 -2
  29. package/dist/federation/temporal.test.mjs +1 -1
  30. package/dist/federation/webfinger.test.mjs +1 -1
  31. package/dist/{federation-DC1yfb-8.cjs → federation-BVkPF8vF.cjs} +246 -31
  32. package/dist/{http-Cuk0w0rp.cjs → http-BbDZCEnR.cjs} +1 -1
  33. package/dist/{http-Dx7yMmfw.js → http-D4JQwy-3.js} +1 -1
  34. package/dist/{http-D-DpP4sd.mjs → http-SIEv_YGW.mjs} +4 -4
  35. package/dist/{key-Djyt1BFx.mjs → key-CtAhsSFI.mjs} +2 -2
  36. package/dist/{kv-cache-CUZOCSKZ.js → kv-cache-DXFAaMh2.js} +1 -1
  37. package/dist/{kv-cache-BmLTVLXc.cjs → kv-cache-DxLtK3Np.cjs} +1 -1
  38. package/dist/{kv-cache-ecUXfCqW.mjs → kv-cache-Fn7dxiMu.mjs} +1 -1
  39. package/dist/{ld-CNVWdooi.mjs → ld-BuI0RakW.mjs} +3 -3
  40. package/dist/{metrics-BnYleVpg.mjs → metrics-jr7IbGjd.mjs} +1 -1
  41. package/dist/{middleware-Bh592bk8.mjs → middleware-BWhRFmO0.mjs} +1 -1
  42. package/dist/{middleware-C2_LcbL3.mjs → middleware-BhtaUtlt.mjs} +243 -28
  43. package/dist/{middleware-BdzcazaN.js → middleware-D0t1NBIE.js} +246 -31
  44. package/dist/mod.cjs +4 -4
  45. package/dist/mod.js +4 -4
  46. package/dist/nodeinfo/handler.test.mjs +1 -1
  47. package/dist/{owner-D_BDPwm2.mjs → owner-CoNYVTQp.mjs} +3 -3
  48. package/dist/{portable-collection-hcONGyUs.mjs → portable-collection-CxP30PWK.mjs} +2 -2
  49. package/dist/{portable-collection-DwJ8YJP2.cjs → portable-collection-FLEUNFj5.cjs} +1 -1
  50. package/dist/{portable-collection-C0c0rUN9.js → portable-collection-ZczKiIeK.js} +1 -1
  51. package/dist/{portable-key-B880yVlC.mjs → portable-key-90Ux6h7F.mjs} +1 -1
  52. package/dist/{proof-z6Prgi5I.mjs → proof-Bhsb_KYD.mjs} +4 -4
  53. package/dist/{send-Cw545L_2.mjs → send-CdRJj10a.mjs} +3 -3
  54. package/dist/sig/compound-proof-discovery.test.mjs +1 -1
  55. package/dist/sig/compound-proof-producer.test.mjs +1 -1
  56. package/dist/sig/compound-proof-verification.test.mjs +2 -2
  57. package/dist/sig/compound-proof.test.mjs +2 -2
  58. package/dist/sig/http.test.mjs +2 -2
  59. package/dist/sig/key.test.mjs +1 -1
  60. package/dist/sig/ld.test.mjs +2 -2
  61. package/dist/sig/mod.cjs +2 -2
  62. package/dist/sig/mod.js +2 -2
  63. package/dist/sig/owner.test.mjs +1 -1
  64. package/dist/sig/portable-collection.test.mjs +1 -1
  65. package/dist/sig/portable-key.test.mjs +6 -6
  66. package/dist/sig/proof.test.mjs +5 -3
  67. package/dist/{temporal-Cy-8WCod.mjs → temporal-vBRC6bwu.mjs} +1 -1
  68. package/dist/testing/kv.test.mjs +1 -1
  69. package/dist/utils/docloader.test.mjs +2 -2
  70. package/dist/utils/kv-cache.test.mjs +1 -1
  71. package/dist/utils/mod.cjs +1 -1
  72. package/dist/utils/mod.js +1 -1
  73. package/package.json +7 -7
@@ -2,7 +2,7 @@ import "temporal-polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
4
  import { i as getPortableDid, l as isPortableId, n as getCanonicalPortableId } from "./portable-key-id-Ca30-hOa.mjs";
5
- import { n as version, t as name } from "./deno-Dj1TFhf4.mjs";
5
+ import { n as version, t as name } from "./deno-62DcBMwc.mjs";
6
6
  import { t as ActivityListenerSet } from "./activity-listener-C-BSbKI7.mjs";
7
7
  import { getLogger } from "@logtape/logtape";
8
8
  import { Router, RouterError, assertPath } from "@fedify/uri-template";
@@ -90,7 +90,7 @@ var FederationBuilderImpl = class {
90
90
  * specified.
91
91
  */
92
92
  async build(options) {
93
- const { FederationImpl } = await import("./middleware-Bh592bk8.mjs");
93
+ const { FederationImpl } = await import("./middleware-BWhRFmO0.mjs");
94
94
  const f = new FederationImpl(options);
95
95
  const trailingSlashInsensitiveValue = f.router.trailingSlashInsensitive;
96
96
  f.router = this.router.clone();
@@ -5,7 +5,7 @@ import { t as MemoryKvStore } from "../kv-DCHkaJ9-.mjs";
5
5
  import { t as assertEquals } from "../assert_equals-Z6IcEbWU.mjs";
6
6
  import { t as assertInstanceOf } from "../assert_instance_of-mrXWWNY-.mjs";
7
7
  import { t as assert } from "../assert-D1Eafmd_.mjs";
8
- import { E as autoIdAssigner, T as actorDehydrator, n as FederationImpl } from "../middleware-C2_LcbL3.mjs";
8
+ import { O as actorDehydrator, k as autoIdAssigner, n as FederationImpl } from "../middleware-BhtaUtlt.mjs";
9
9
  import { Follow, Person } from "@fedify/vocab";
10
10
  import { test } from "@fedify/fixture";
11
11
  //#region src/compat/transformers.test.ts
@@ -3,8 +3,8 @@ import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
4
  import { a as getRawCanonicalPortableId, l as isPortableId, n as getCanonicalPortableId } from "./portable-key-id-Ca30-hOa.mjs";
5
5
  import { n as preloadedOnlyDocumentLoader } from "./public-audience--klBIOk1.mjs";
6
- import { c as getNormalizationContextLoader } from "./ld-CNVWdooi.mjs";
7
- import { l as verifyPortableObjectProofPolicy, n as classifyFep2277CoreType, o as verifyMapLocalProof } from "./proof-z6Prgi5I.mjs";
6
+ import { c as getNormalizationContextLoader } from "./ld-BuI0RakW.mjs";
7
+ import { l as verifyPortableObjectProofPolicy, n as classifyFep2277CoreType, o as verifyMapLocalProof } from "./proof-Bhsb_KYD.mjs";
8
8
  import { parseIri, preloadedContexts } from "@fedify/vocab-runtime";
9
9
  import jsonld from "@fedify/vocab-runtime/jsonld";
10
10
  //#region src/sig/compound-proof.ts
@@ -3,6 +3,6 @@ import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
4
  //#region deno.json
5
5
  var name = "@fedify/fedify";
6
- var version = "2.4.0-dev.2219+eb70f060";
6
+ var version = "2.4.0-dev.2233+abb4a6b2";
7
7
  //#endregion
8
8
  export { version as n, name as t };
@@ -1,8 +1,8 @@
1
1
  import "temporal-polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { c as validateCryptoKey } from "./key-Djyt1BFx.mjs";
5
- import { n as doubleKnock } from "./http-D-DpP4sd.mjs";
4
+ import { c as validateCryptoKey } from "./key-CtAhsSFI.mjs";
5
+ import { n as doubleKnock } from "./http-SIEv_YGW.mjs";
6
6
  import { getLogger } from "@logtape/logtape";
7
7
  import { FetchError, UrlError, createActivityPubRequest, getRemoteDocument, logRequest, resolveDocumentLoaderTimeout, validatePublicUrl, withDocumentLoaderTimeout } from "@fedify/vocab-runtime";
8
8
  import { curry } from "es-toolkit";
@@ -7,7 +7,7 @@ import { t as assertExists } from "../assert_exists-cffSpJ7X.mjs";
7
7
  import { t as assertThrows } from "../assert_throws-BYITOvPO.mjs";
8
8
  import "../std__assert-DvMDRPes.mjs";
9
9
  import { t as assertStrictEquals } from "../assert_strict_equals-CYvBmkpC.mjs";
10
- import { r as createFederationBuilder } from "../builder-C5rYBZ16.mjs";
10
+ import { r as createFederationBuilder } from "../builder-BmoDmjWk.mjs";
11
11
  import { DisallowedOperatorError, DisallowedVarSpecModifierError, DuplicateRouteVariableError, RouteTemplateOptionsNotMatchedError, RouterError } from "@fedify/uri-template";
12
12
  import { Activity, Note, Person } from "@fedify/vocab";
13
13
  import { test } from "@fedify/fixture";
@@ -6,11 +6,11 @@ import { t as MemoryKvStore } from "../kv-DCHkaJ9-.mjs";
6
6
  import { t as assertEquals } from "../assert_equals-Z6IcEbWU.mjs";
7
7
  import "../std__assert-DvMDRPes.mjs";
8
8
  import { t as assert } from "../assert-D1Eafmd_.mjs";
9
- import { n as exportJwk } from "../key-Djyt1BFx.mjs";
9
+ import { n as exportJwk } from "../key-CtAhsSFI.mjs";
10
10
  import { r as normalizeOutgoingActivityJsonLd } from "../outgoing-jsonld-4IJqPYos.mjs";
11
- import { a as signObject, d as verifyProof } from "../proof-z6Prgi5I.mjs";
11
+ import { a as signObject, d as verifyProof } from "../proof-Bhsb_KYD.mjs";
12
12
  import { i as rsaPrivateKey2, n as ed25519PrivateKey, r as ed25519PublicKey, s as rsaPublicKey2 } from "../keys-DIJNHW-Y.mjs";
13
- import { n as FederationImpl } from "../middleware-C2_LcbL3.mjs";
13
+ import { n as FederationImpl } from "../middleware-BhtaUtlt.mjs";
14
14
  import { Create, DataIntegrityProof, Note } from "@fedify/vocab";
15
15
  import { exportDidKey, parseIri } from "@fedify/vocab-runtime";
16
16
  import { mockDocumentLoader, test } from "@fedify/fixture";
@@ -5,10 +5,10 @@ import { r as createRequestContext, t as createInboxContext } from "../context-8
5
5
  import { t as MemoryKvStore } from "../kv-DCHkaJ9-.mjs";
6
6
  import { t as assertEquals } from "../assert_equals-Z6IcEbWU.mjs";
7
7
  import "../std__assert-DvMDRPes.mjs";
8
- import { a as compactJsonLd, m as verifyCompactJsonLd, p as signJsonLd } from "../ld-CNVWdooi.mjs";
9
- import { l as signRequest } from "../http-D-DpP4sd.mjs";
8
+ import { a as compactJsonLd, m as verifyCompactJsonLd, p as signJsonLd } from "../ld-BuI0RakW.mjs";
9
+ import { l as signRequest } from "../http-SIEv_YGW.mjs";
10
10
  import { a as rsaPrivateKey3, c as rsaPublicKey3, n as ed25519PrivateKey, r as ed25519PublicKey, s as rsaPublicKey2 } from "../keys-DIJNHW-Y.mjs";
11
- import { f as handleInbox, o as createFederation } from "../middleware-C2_LcbL3.mjs";
11
+ import { f as handleInbox, o as createFederation } from "../middleware-BhtaUtlt.mjs";
12
12
  import { t as ActivityListenerSet } from "../activity-listener-C-BSbKI7.mjs";
13
13
  import { t as map_local_create_note_default } from "../map-local-create-note-B0SeXJms.mjs";
14
14
  import { Create, CryptographicKey, Multikey, Person, Update } from "@fedify/vocab";
@@ -10,15 +10,15 @@ import "../std__assert-DvMDRPes.mjs";
10
10
  import { t as assertRejects } from "../assert_rejects-CTptdYck.mjs";
11
11
  import { t as assert } from "../assert-D1Eafmd_.mjs";
12
12
  import { r as parseAcceptSignature } from "../accept-CPVqki78.mjs";
13
- import { o as generateCryptoKeyPair } from "../key-Djyt1BFx.mjs";
14
- import { a as compactJsonLd, p as signJsonLd } from "../ld-CNVWdooi.mjs";
15
- import { a as signObject } from "../proof-z6Prgi5I.mjs";
16
- import { l as signRequest } from "../http-D-DpP4sd.mjs";
13
+ import { o as generateCryptoKeyPair } from "../key-CtAhsSFI.mjs";
14
+ import { a as compactJsonLd, p as signJsonLd } from "../ld-BuI0RakW.mjs";
15
+ import { a as signObject } from "../proof-Bhsb_KYD.mjs";
16
+ import { l as signRequest } from "../http-SIEv_YGW.mjs";
17
17
  import { a as rsaPrivateKey3, c as rsaPublicKey3, s as rsaPublicKey2 } from "../keys-DIJNHW-Y.mjs";
18
- import { d as handleCustomCollection, f as handleInbox, g as respondWithObjectIfAcceptable, h as respondWithObject, l as handleActor, m as handleOutbox, o as createFederation, p as handleObject, u as handleCollection } from "../middleware-C2_LcbL3.mjs";
18
+ import { d as handleCustomCollection, f as handleInbox, g as respondWithObjectIfAcceptable, h as respondWithObject, l as handleActor, m as handleOutbox, o as createFederation, p as handleObject, u as handleCollection } from "../middleware-BhtaUtlt.mjs";
19
19
  import { t as ActivityListenerSet } from "../activity-listener-C-BSbKI7.mjs";
20
20
  import { Activity, Create, CryptographicKey, Multikey, Note, Person, Tombstone } from "@fedify/vocab";
21
- import { FetchError } from "@fedify/vocab-runtime";
21
+ import { FetchError, parseIri } from "@fedify/vocab-runtime";
22
22
  import { createTestMeterProvider, createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
23
23
  //#region src/federation/handler.test.ts
24
24
  const QUOTE_CONTEXT_TERMS = {
@@ -2864,6 +2864,73 @@ test("handleOutbox()", async () => {
2864
2864
  assertEquals(response.status, 500);
2865
2865
  assertEquals(onErrorCalled, true);
2866
2866
  });
2867
+ test("handleOutbox() matches portable actors by their canonical IDs", async () => {
2868
+ const federation = createFederation({ kv: new MemoryKvStore() });
2869
+ const actorId = "ap+ef61://did:key:z6MkAlice/users/someone";
2870
+ const actorDispatcher = (_ctx, identifier) => {
2871
+ if (identifier !== "someone") return null;
2872
+ return new Person({
2873
+ id: parseIri(actorId),
2874
+ name: "Someone"
2875
+ });
2876
+ };
2877
+ const post = async (actor) => {
2878
+ const request = new Request("https://example.com/users/someone/outbox", {
2879
+ method: "POST",
2880
+ body: JSON.stringify({
2881
+ "@context": "https://www.w3.org/ns/activitystreams",
2882
+ type: "Create",
2883
+ id: "https://example.com/activities/1",
2884
+ actor,
2885
+ object: {
2886
+ type: "Note",
2887
+ content: "Hello, world!"
2888
+ }
2889
+ })
2890
+ });
2891
+ const context = createRequestContext({
2892
+ federation,
2893
+ request,
2894
+ url: new URL(request.url),
2895
+ data: void 0
2896
+ });
2897
+ const seen = [];
2898
+ const listeners = new ActivityListenerSet();
2899
+ listeners.add(Activity, (_ctx, activity) => {
2900
+ seen.push(activity.id.href);
2901
+ });
2902
+ return [(await handleOutbox(request, {
2903
+ identifier: "someone",
2904
+ context,
2905
+ outboxContextFactory(identifier) {
2906
+ return createOutboxContext({
2907
+ ...context,
2908
+ clone: void 0,
2909
+ identifier
2910
+ });
2911
+ },
2912
+ actorDispatcher,
2913
+ outboxListeners: listeners,
2914
+ onNotFound: () => new Response("Not found", { status: 404 }),
2915
+ onUnauthorized: () => new Response("Unauthorized", { status: 401 })
2916
+ })).status, seen.length];
2917
+ };
2918
+ for (const actor of [
2919
+ actorId,
2920
+ "ap://did:key:z6MkAlice/users/someone",
2921
+ "ap+ef61://did%3Akey%3Az6MkAlice/users/someone",
2922
+ "ap://did:key:z6MkAlice/users/someone?@gateway=https%3A%2F%2Fserver1.example&@gateway=https%3A%2F%2Fserver2.example",
2923
+ "https://server2.example/.well-known/apgateway/did:key:z6MkAlice/users/someone"
2924
+ ]) assertEquals(await post(actor), [202, 1], actor);
2925
+ for (const actor of [
2926
+ "ap://did:key:z6MkBob/users/someone",
2927
+ "ap://did:key:z6MkAlice/users/other?@gateway=https%3A%2F%2Fserver1.example",
2928
+ "ap://did:key:z6MkAlice/users/someone#main-key",
2929
+ "https://server1.example/.well-known/apgateway/did:key:z6MkAlice/users/someone?@gateway=https%3A%2F%2Fserver1.example",
2930
+ "https://example.com/users/someone",
2931
+ [actorId, "ap://did:key:z6MkAlice/users/other"]
2932
+ ]) assertEquals(await post(actor), [400, 0], String(actor));
2933
+ });
2867
2934
  test("handleInbox() preserves the raw signed payload for inboxContextFactory", async () => {
2868
2935
  const federation = createFederation({ kv: new MemoryKvStore() });
2869
2936
  const remoteContextUrl = "https://remote.example/contexts/ext";
@@ -10,8 +10,8 @@ import "../std__assert-DvMDRPes.mjs";
10
10
  import { t as assertStrictEquals } from "../assert_strict_equals-CYvBmkpC.mjs";
11
11
  import { t as assert } from "../assert-D1Eafmd_.mjs";
12
12
  import { r as ed25519PublicKey } from "../keys-DIJNHW-Y.mjs";
13
- import { o as createFederation, x as parseHashlinkGatewayRequest } from "../middleware-C2_LcbL3.mjs";
14
- import { r as createFederationBuilder } from "../builder-C5rYBZ16.mjs";
13
+ import { o as createFederation, x as parseHashlinkGatewayRequest } from "../middleware-BhtaUtlt.mjs";
14
+ import { r as createFederationBuilder } from "../builder-BmoDmjWk.mjs";
15
15
  import { n as RouterError } from "../router-u5O5KCQr.mjs";
16
16
  import { Note } from "@fedify/vocab";
17
17
  import { computeDigestMultibase, encodeMultibase, exportDidKey } from "@fedify/vocab-runtime";
@@ -4,9 +4,9 @@ globalThis.addEventListener = () => {};
4
4
  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
- import { a as signObject } from "../proof-z6Prgi5I.mjs";
7
+ import { a as signObject } from "../proof-Bhsb_KYD.mjs";
8
8
  import { n as ed25519PrivateKey, r as ed25519PublicKey, t as ed25519Multikey } from "../keys-DIJNHW-Y.mjs";
9
- import { o as createFederation } from "../middleware-C2_LcbL3.mjs";
9
+ import { o as createFederation } from "../middleware-BhtaUtlt.mjs";
10
10
  import { Create, Follow, Person } from "@fedify/vocab";
11
11
  import { mockDocumentLoader, test } from "@fedify/fixture";
12
12
  //#region src/federation/idempotency.test.ts
@@ -4,7 +4,7 @@ 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 assertRejects } from "../assert_rejects-CTptdYck.mjs";
7
- import { _ as recordKeyLookup, a as instrumentDocumentLoader, b as recordWebFingerHandle, c as recordCircuitBreakerStateChange, d as recordCollectionRequest, f as recordCollectionTotalItems, g as recordInboxActivity, h as recordFanoutRecipients, i as getRemoteHost, l as recordCollectionDispatchDuration, m as recordDocumentFetch, p as recordDocumentCache, r as getFederationMetrics, t as classifyFetchError, u as recordCollectionPageItems, v as recordOutboxActivity, x as registerQueueDepthGauge, y as recordOutboxEnqueue } from "../metrics-BnYleVpg.mjs";
7
+ import { _ as recordKeyLookup, a as instrumentDocumentLoader, b as recordWebFingerHandle, c as recordCircuitBreakerStateChange, d as recordCollectionRequest, f as recordCollectionTotalItems, g as recordInboxActivity, h as recordFanoutRecipients, i as getRemoteHost, l as recordCollectionDispatchDuration, m as recordDocumentFetch, p as recordDocumentCache, r as getFederationMetrics, t as classifyFetchError, u as recordCollectionPageItems, v as recordOutboxActivity, x as registerQueueDepthGauge, y as recordOutboxEnqueue } from "../metrics-jr7IbGjd.mjs";
8
8
  import { FetchError } from "@fedify/vocab-runtime";
9
9
  import { createTestMeterProvider, test } from "@fedify/fixture";
10
10
  import { DataPointType, MeterProvider, MetricReader } from "@opentelemetry/sdk-metrics";
@@ -16,14 +16,14 @@ import "../std__assert-DvMDRPes.mjs";
16
16
  import { t as assertRejects } from "../assert_rejects-CTptdYck.mjs";
17
17
  import { t as assertStrictEquals } from "../assert_strict_equals-CYvBmkpC.mjs";
18
18
  import { t as assert } from "../assert-D1Eafmd_.mjs";
19
- import { g as recordInboxActivity } from "../metrics-BnYleVpg.mjs";
20
- import { a as compactJsonLd, h as verifyJsonLd, p as signJsonLd, s as detachSignature } from "../ld-CNVWdooi.mjs";
21
- import { a as signObject, s as verifyObject } from "../proof-z6Prgi5I.mjs";
22
- import { f as verifyRequest, l as signRequest } from "../http-D-DpP4sd.mjs";
19
+ import { g as recordInboxActivity } from "../metrics-jr7IbGjd.mjs";
20
+ import { a as compactJsonLd, h as verifyJsonLd, p as signJsonLd, s as detachSignature } from "../ld-BuI0RakW.mjs";
21
+ import { a as signObject, s as verifyObject } from "../proof-Bhsb_KYD.mjs";
22
+ import { f as verifyRequest, l as signRequest } from "../http-SIEv_YGW.mjs";
23
23
  import { a as rsaPrivateKey3, c as rsaPublicKey3, i as rsaPrivateKey2, n as ed25519PrivateKey, r as ed25519PublicKey, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-DIJNHW-Y.mjs";
24
- import { t as getAuthenticatedDocumentLoader } from "../docloader-CzyJe90o.mjs";
25
- import { S as handleBenchmarkTrigger, i as KvSpecDeterminer, n as FederationImpl, o as createFederation, r as InboxContextImpl, t as ContextImpl } from "../middleware-C2_LcbL3.mjs";
26
- import { t as doesActorOwnKey } from "../owner-D_BDPwm2.mjs";
24
+ import { t as getAuthenticatedDocumentLoader } from "../docloader-Be9TaKa_.mjs";
25
+ import { T as handleBenchmarkTrigger, i as KvSpecDeterminer, n as FederationImpl, o as createFederation, r as InboxContextImpl, t as ContextImpl } from "../middleware-BhtaUtlt.mjs";
26
+ import { t as doesActorOwnKey } from "../owner-CoNYVTQp.mjs";
27
27
  import { t as CircuitBreaker } from "../circuit-breaker-XJ53md4S.mjs";
28
28
  import { t as TaskCodec } from "../codec-C6rTrpIp.mjs";
29
29
  import { t as markCircuitBreakerLegacySweepDone } from "../circuit-breaker-test-utils-DW6YC_Pe.mjs";
@@ -1,6 +1,6 @@
1
1
  const { URLPattern } = require("urlpattern-polyfill");
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const require_federation = require("../federation-DC1yfb-8.cjs");
3
+ const require_federation = require("../federation-BVkPF8vF.cjs");
4
4
  exports.CircuitBreaker = require_federation.CircuitBreaker;
5
5
  exports.InProcessMessageQueue = require_federation.InProcessMessageQueue;
6
6
  exports.MemoryKvStore = require_federation.MemoryKvStore;
@@ -1,6 +1,6 @@
1
1
  import { Temporal } from "temporal-polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
- import { a as respondWithObjectIfAcceptable, c as digest, d as parseCircuitBreakerKvState, f as createFederationBuilder, i as respondWithObject, l as CircuitBreaker, n as handleWebFinger, o as SendActivityError, r as createExponentialBackoffPolicy, s as buildCollectionSynchronizationHeader, t as createFederation, u as normalizeCircuitBreakerOptions } from "../middleware-BdzcazaN.js";
3
+ import { a as respondWithObjectIfAcceptable, c as digest, d as parseCircuitBreakerKvState, f as createFederationBuilder, i as respondWithObject, l as CircuitBreaker, n as handleWebFinger, o as SendActivityError, r as createExponentialBackoffPolicy, s as buildCollectionSynchronizationHeader, t as createFederation, u as normalizeCircuitBreakerOptions } from "../middleware-D0t1NBIE.js";
4
4
  import { getLogger } from "@logtape/logtape";
5
5
  import { Router as Router$1, RouterError as RouterError$1, assertPath, isPath } from "@fedify/uri-template";
6
6
  import { isEqual } from "es-toolkit";
@@ -7,14 +7,14 @@ import { t as assertEquals } from "../assert_equals-Z6IcEbWU.mjs";
7
7
  import "../std__assert-DvMDRPes.mjs";
8
8
  import { t as assertRejects } from "../assert_rejects-CTptdYck.mjs";
9
9
  import { t as assert } from "../assert-D1Eafmd_.mjs";
10
- import { n as exportJwk } from "../key-Djyt1BFx.mjs";
11
- import { s as detachSignature } from "../ld-CNVWdooi.mjs";
12
- import { a as signObject } from "../proof-z6Prgi5I.mjs";
10
+ import { n as exportJwk } from "../key-CtAhsSFI.mjs";
11
+ import { s as detachSignature } from "../ld-BuI0RakW.mjs";
12
+ import { a as signObject } from "../proof-Bhsb_KYD.mjs";
13
13
  import { i as rsaPrivateKey2, n as ed25519PrivateKey, r as ed25519PublicKey, s as rsaPublicKey2 } from "../keys-DIJNHW-Y.mjs";
14
- import { c as assertPortableActorActivity, n as FederationImpl, o as createFederation } from "../middleware-C2_LcbL3.mjs";
15
- import { a as verifyCompoundPortableObjectProofs } from "../compound-proof-D0xY7MBs.mjs";
14
+ import { C as getEmbeddedFirstGateway, S as getCompactRootId, c as assertPortableActorActivity, n as FederationImpl, o as createFederation, w as warnCompatibleIdsInJson } from "../middleware-BhtaUtlt.mjs";
15
+ import { a as verifyCompoundPortableObjectProofs } from "../compound-proof-Pn8766TV.mjs";
16
16
  import { configure, reset } from "@logtape/logtape";
17
- import { Create, Note, Person } from "@fedify/vocab";
17
+ import { Announce, Create, Note, Person } from "@fedify/vocab";
18
18
  import { exportDidKey, parseIri } from "@fedify/vocab-runtime";
19
19
  import { mockDocumentLoader, test } from "@fedify/fixture";
20
20
  //#region src/federation/outgoing-proof.test.ts
@@ -620,6 +620,248 @@ async function captureLogs(run) {
620
620
  }
621
621
  return records.filter((record) => record.category[0] === "fedify");
622
622
  }
623
+ test("sendActivity warns for compatible IDs off the actor's first gateway", async () => {
624
+ const owner = await didKey();
625
+ const ownerId = parseIri(`ap://${owner.did}/users/alice`);
626
+ const federation = createTestFederation();
627
+ let actorCalls = 0;
628
+ federation.setActorDispatcher("/users/{identifier}", (_ctx, identifier) => {
629
+ actorCalls++;
630
+ return identifier === "alice" ? new Person({
631
+ id: ownerId,
632
+ gateways: [new URL("https://primary.example"), new URL("https://secondary.example")]
633
+ }) : null;
634
+ });
635
+ const ctx = federation.createContext(new Request("https://example.com/"), void 0);
636
+ const child = await signObject(new Note({
637
+ id: compatibleId(owner.did, "/notes/1", "https://secondary.example"),
638
+ attribution: ownerId,
639
+ content: "Hello"
640
+ }), owner.privateKey, owner.keyId, {
641
+ ...options,
642
+ context: childContext,
643
+ created
644
+ });
645
+ const activity = new Create({
646
+ id: compatibleId(owner.did, "/activities/1", "https://secondary.example"),
647
+ actor: ownerId,
648
+ object: child
649
+ });
650
+ const records = await captureLogs(async () => {
651
+ const { bodies } = await capture(() => ctx.sendActivity([rsaKey, sender(owner)], recipient, activity));
652
+ assertEquals(bodies.length, 1);
653
+ assertEquals(bodies[0].id, activity.id?.href);
654
+ });
655
+ assertEquals(records.filter((r) => r.properties.kind === "activity").length, 1);
656
+ assertEquals(records.filter((r) => r.properties.kind === "object").length, 1);
657
+ assertEquals(actorCalls, 1);
658
+ });
659
+ test("sendActivity skips first-gateway and portable IDs", async () => {
660
+ const owner = await didKey();
661
+ const ownerId = parseIri(`ap://${owner.did}/users/alice`);
662
+ const federation = createTestFederation();
663
+ federation.setActorDispatcher("/users/{identifier}", (_ctx, identifier) => identifier === "alice" ? new Person({
664
+ id: ownerId,
665
+ gateways: [new URL("https://primary.example")]
666
+ }) : null);
667
+ const ctx = federation.createContext(new Request("https://example.com/"), void 0);
668
+ for (const id of [compatibleId(owner.did, "/activities/first", "https://primary.example"), parseIri(`ap://${owner.did}/activities/portable`)]) assertEquals((await captureLogs(() => capture(() => ctx.sendActivity([rsaKey, sender(owner)], recipient, new Create({
669
+ id,
670
+ actor: ownerId
671
+ }))))).filter((r) => r.properties.kind != null), []);
672
+ const plain = federation.createContext(new URL("https://example.com/"));
673
+ assertEquals((await captureLogs(() => capture(() => plain.sendActivity([rsaKey, sender(owner)], recipient, new Create({
674
+ id: compatibleId(owner.did, "/activities/unknown-gateway", "https://secondary.example"),
675
+ actor: ownerId
676
+ }))))).filter((r) => r.properties.kind != null), []);
677
+ });
678
+ test("fanout warns once before enqueueing a compatible activity", async () => {
679
+ const owner = await didKey();
680
+ const ownerId = parseIri(`ap://${owner.did}/users/alice`);
681
+ const { queue, queued } = createQueue();
682
+ const federation = createTestFederation(queue);
683
+ federation.setActorDispatcher("/users/{identifier}", () => new Person({
684
+ id: ownerId,
685
+ gateways: [new URL("https://primary.example")]
686
+ }));
687
+ const ctx = federation.createContext(new Request("https://example.com/"), void 0);
688
+ assertEquals((await captureLogs(() => capture(async () => {
689
+ await ctx.sendActivity([rsaKey, sender(owner)], recipient, new Create({
690
+ id: compatibleId(owner.did, "/activities/fanout", "https://secondary.example"),
691
+ actor: ownerId
692
+ }), { fanout: "force" });
693
+ assertEquals(queued.length, 1);
694
+ for (let i = 0; i < queued.length; i++) await federation.processQueuedTask(void 0, queued[i]);
695
+ }))).filter((r) => r.properties.kind === "activity").length, 1);
696
+ });
697
+ test("an embedded actor supplies gateways to a plain send context", async () => {
698
+ const owner = await didKey();
699
+ const ownerId = parseIri(`ap://${owner.did}/users/alice`);
700
+ const ctx = new FederationImpl({
701
+ kv: new MemoryKvStore(),
702
+ contextLoaderFactory: () => mockDocumentLoader,
703
+ documentLoaderFactory: () => mockDocumentLoader,
704
+ activityTransformers: []
705
+ }).createContext(new URL("https://example.com/"));
706
+ const activity = await signObject(new Create({
707
+ id: compatibleId(owner.did, "/activities/embedded-actor", "https://secondary.example"),
708
+ actor: new Person({
709
+ id: ownerId,
710
+ gateways: [new URL("https://primary.example")]
711
+ })
712
+ }), owner.privateKey, owner.keyId, {
713
+ ...options,
714
+ created
715
+ });
716
+ assertEquals(getEmbeddedFirstGateway(await activity.toJsonLd({
717
+ format: "compact",
718
+ contextLoader: mockDocumentLoader
719
+ }), ownerId, owner.did)?.origin, "https://primary.example");
720
+ assertEquals((await captureLogs(() => capture(() => ctx.sendActivity([rsaKey, sender(owner)], recipient, activity)))).filter((r) => r.properties.kind === "activity").length, 1);
721
+ });
722
+ test("sendActivity checks a locally owned embedded object independently", async () => {
723
+ const alice = await didKey();
724
+ const bob = await didKey();
725
+ const aliceId = parseIri(`ap://${alice.did}/users/alice`);
726
+ const bobId = parseIri(`ap://${bob.did}/users/bob`);
727
+ const federation = createTestFederation();
728
+ federation.setActorDispatcher("/users/{identifier}", (_ctx, identifier) => identifier === "alice" ? new Person({
729
+ id: aliceId,
730
+ gateways: [new URL("https://primary.example")]
731
+ }) : identifier === "bob" ? new Person({
732
+ id: bobId,
733
+ gateways: [new URL("https://bob.example")]
734
+ }) : null);
735
+ const child = await signObject(new Note({
736
+ id: compatibleId(bob.did, "/notes/1", "https://secondary.example"),
737
+ attribution: bobId,
738
+ content: "Bob's note"
739
+ }), bob.privateKey, bob.keyId, {
740
+ ...options,
741
+ context: childContext,
742
+ created
743
+ });
744
+ const ctx = federation.createContext(new Request("https://example.com/"), void 0);
745
+ assertEquals((await captureLogs(() => capture(() => ctx.sendActivity([rsaKey, sender(alice)], recipient, new Announce({
746
+ id: parseIri(`ap://${alice.did}/activities/announce`),
747
+ actor: aliceId,
748
+ object: child
749
+ }))))).filter((r) => r.properties.kind === "object").map((r) => r.properties.id), [child.id?.href]);
750
+ });
751
+ test("sendActivity in an actor dispatcher does not re-enter it", async () => {
752
+ const owner = await didKey();
753
+ const ownerId = parseIri(`ap://${owner.did}/users/alice`);
754
+ const federation = createTestFederation();
755
+ let calls = 0;
756
+ federation.setActorDispatcher("/users/{identifier}", async (ctx) => {
757
+ calls++;
758
+ await ctx.sendActivity([rsaKey, sender(owner)], recipient, new Create({
759
+ id: compatibleId(owner.did, "/activities/from-dispatcher", "https://secondary.example"),
760
+ actor: ownerId
761
+ }));
762
+ return new Person({
763
+ id: ownerId,
764
+ gateways: [new URL("https://primary.example")]
765
+ });
766
+ });
767
+ await capture(async () => {
768
+ assertEquals((await federation.fetch(new Request("https://example.com/users/alice", { headers: { Accept: "application/activity+json" } }), { contextData: void 0 })).status, 200);
769
+ });
770
+ assertEquals(calls, 1);
771
+ });
772
+ test("sendActivity still delivers when the diagnostic actor lookup fails", async () => {
773
+ const owner = await didKey();
774
+ const ownerId = parseIri(`ap://${owner.did}/users/alice`);
775
+ const federation = createTestFederation();
776
+ federation.setActorDispatcher("/users/{identifier}", () => {
777
+ throw new Error("Actor storage unavailable");
778
+ });
779
+ const ctx = federation.createContext(new Request("https://example.com/"), void 0);
780
+ const id = compatibleId(owner.did, "/activities/lookup-fails", "https://secondary.example");
781
+ assertEquals((await captureLogs(async () => {
782
+ const { bodies } = await capture(() => ctx.sendActivity([rsaKey, sender(owner)], recipient, new Create({
783
+ id,
784
+ actor: ownerId
785
+ })));
786
+ assertEquals(bodies.length, 1);
787
+ assertEquals(bodies[0].id, id.href);
788
+ })).filter((r) => r.properties.kind != null), []);
789
+ });
790
+ test("warning checks later local actors when the first is missing", async () => {
791
+ const owner = await didKey();
792
+ const missing = parseIri(`ap://${owner.did}/users/missing`);
793
+ const alice = parseIri(`ap://${owner.did}/users/alice`);
794
+ const federation = createTestFederation();
795
+ federation.setActorDispatcher("/users/{identifier}", (_ctx, identifier) => identifier === "alice" ? new Person({
796
+ id: alice,
797
+ gateways: [new URL("https://primary.example")]
798
+ }) : null);
799
+ const ctx = federation.createContext(new Request("https://example.com/"), void 0);
800
+ assertEquals((await captureLogs(() => warnCompatibleIdsInJson({
801
+ id: compatibleId(owner.did, "/activities/multi", "https://secondary.example").href,
802
+ type: "Create",
803
+ actor: [missing.href, alice.href]
804
+ }, ctx))).filter((r) => r.properties.kind === "activity").length, 1);
805
+ });
806
+ test("warning ignores an embedded gateway key", async () => {
807
+ const owner = await didKey();
808
+ const actorId = parseIri(`ap://${owner.did}/users/alice`);
809
+ const records = await captureLogs(() => warnCompatibleIdsInJson({
810
+ id: compatibleId(owner.did, "/activities/1", "https://secondary.example").href,
811
+ type: "Create",
812
+ actor: {
813
+ id: actorId.href,
814
+ type: "Person",
815
+ gateways: ["https://primary.example"],
816
+ publicKey: [{
817
+ id: compatibleId(owner.did, "/users/alice/keys/1", "https://secondary.example").href,
818
+ type: ["CryptographicKey"]
819
+ }, {
820
+ id: compatibleId(owner.did, "/users/alice/keys/2", "https://secondary.example").href,
821
+ type: "sec:Key"
822
+ }]
823
+ }
824
+ }));
825
+ assertEquals(records.filter((r) => r.properties.kind === "activity").length, 1);
826
+ assertEquals(records.filter((r) => r.properties.kind === "object"), []);
827
+ });
828
+ test("warning resolves a signed child's local ownership alias", async () => {
829
+ const alice = await didKey();
830
+ const bob = await didKey();
831
+ const aliceId = parseIri(`ap://${alice.did}/users/alice`);
832
+ const bobId = parseIri(`ap://${bob.did}/users/bob`);
833
+ const federation = createTestFederation();
834
+ federation.setActorDispatcher("/users/{identifier}", (_ctx, identifier) => identifier === "bob" ? new Person({
835
+ id: bobId,
836
+ gateways: [new URL("https://primary.example")]
837
+ }) : null);
838
+ const ctx = federation.createContext(new Request("https://example.com/"), void 0);
839
+ assertEquals((await captureLogs(() => warnCompatibleIdsInJson({
840
+ id: parseIri(`ap://${alice.did}/activities/announce`).href,
841
+ type: "Announce",
842
+ actor: aliceId.href,
843
+ object: {
844
+ "@context": ["https://www.w3.org/ns/activitystreams", {
845
+ by: {
846
+ "@id": "as:attributedTo",
847
+ "@type": "@id"
848
+ },
849
+ identifier: "@id"
850
+ }],
851
+ identifier: compatibleId(bob.did, "/notes/1", "https://secondary.example").href,
852
+ type: "Note",
853
+ by: bobId.href
854
+ }
855
+ }, ctx))).filter((r) => r.properties.kind === "object").length, 1);
856
+ });
857
+ test("warning reads an inline alias of the serialized root ID", async () => {
858
+ const id = compatibleId((await didKey()).did, "/notes/1", "https://secondary.example");
859
+ assertEquals(getCompactRootId({
860
+ "@context": ["https://www.w3.org/ns/activitystreams", { identifier: "@id" }],
861
+ identifier: id.href,
862
+ type: "Note"
863
+ })?.href, id.href);
864
+ });
623
865
  test("an activity on another gateway than its compatible-ID actor is warned about", async () => {
624
866
  const owner = await didKey();
625
867
  const warnings = (activity) => captureLogs(() => assertPortableActorActivity(activity)).then((records) => records.map((r) => r.properties.activityId));
@@ -8,10 +8,10 @@ import { t as assertInstanceOf } from "../assert_instance_of-mrXWWNY-.mjs";
8
8
  import { t as assertThrows } from "../assert_throws-BYITOvPO.mjs";
9
9
  import "../std__assert-DvMDRPes.mjs";
10
10
  import { t as assert } from "../assert-D1Eafmd_.mjs";
11
- import { a as signObject, c as verifyPortableObjectProof } from "../proof-z6Prgi5I.mjs";
12
- import { f as verifyRequest, l as signRequest } from "../http-D-DpP4sd.mjs";
11
+ import { a as signObject, c as verifyPortableObjectProof } from "../proof-Bhsb_KYD.mjs";
12
+ import { f as verifyRequest, l as signRequest } from "../http-SIEv_YGW.mjs";
13
13
  import { a as rsaPrivateKey3, c as rsaPublicKey3, i as rsaPrivateKey2, n as ed25519PrivateKey, r as ed25519PublicKey, s as rsaPublicKey2 } from "../keys-DIJNHW-Y.mjs";
14
- import { b as PORTABLE_OBJECT_CONTENT_TYPE, o as createFederation } from "../middleware-C2_LcbL3.mjs";
14
+ import { b as PORTABLE_OBJECT_CONTENT_TYPE, o as createFederation } from "../middleware-BhtaUtlt.mjs";
15
15
  import { n as RouterError } from "../router-u5O5KCQr.mjs";
16
16
  import { configure, reset } from "@logtape/logtape";
17
17
  import { Note, Person, Tombstone, lookupObject } from "@fedify/vocab";
@@ -7,10 +7,10 @@ import { t as assertEquals } from "../assert_equals-Z6IcEbWU.mjs";
7
7
  import { t as assertInstanceOf } from "../assert_instance_of-mrXWWNY-.mjs";
8
8
  import "../std__assert-DvMDRPes.mjs";
9
9
  import { t as assert } from "../assert-D1Eafmd_.mjs";
10
- import { n as exportJwk } from "../key-Djyt1BFx.mjs";
11
- import { c as verifyPortableObjectProof, s as verifyObject } from "../proof-z6Prgi5I.mjs";
10
+ import { n as exportJwk } from "../key-CtAhsSFI.mjs";
11
+ import { c as verifyPortableObjectProof, s as verifyObject } from "../proof-Bhsb_KYD.mjs";
12
12
  import { i as rsaPrivateKey2, n as ed25519PrivateKey, r as ed25519PublicKey, s as rsaPublicKey2 } from "../keys-DIJNHW-Y.mjs";
13
- import { n as FederationImpl } from "../middleware-C2_LcbL3.mjs";
13
+ import { n as FederationImpl } from "../middleware-BhtaUtlt.mjs";
14
14
  import { Create, DataIntegrityProof, Note, OrderedCollection, Person, traverseCollection } from "@fedify/vocab";
15
15
  import { FetchError, encodeMultibase, exportDidKey } from "@fedify/vocab-runtime";
16
16
  import { mockDocumentLoader, test } from "@fedify/fixture";
@@ -7,11 +7,11 @@ import { t as assertFalse } from "../assert_false-CPdRnc3E.mjs";
7
7
  import { t as assertThrows } from "../assert_throws-BYITOvPO.mjs";
8
8
  import "../std__assert-DvMDRPes.mjs";
9
9
  import { t as assert } from "../assert-D1Eafmd_.mjs";
10
- import { a as signObject } from "../proof-z6Prgi5I.mjs";
10
+ import { a as signObject } from "../proof-Bhsb_KYD.mjs";
11
11
  import { n as ed25519PrivateKey, r as ed25519PublicKey } from "../keys-DIJNHW-Y.mjs";
12
- import { b as PORTABLE_OBJECT_CONTENT_TYPE, o as createFederation } from "../middleware-C2_LcbL3.mjs";
13
- import { t as verifyPortableObject } from "../portable-collection-hcONGyUs.mjs";
14
- import { s as verifyServedPortableObjects } from "../compound-proof-D0xY7MBs.mjs";
12
+ import { b as PORTABLE_OBJECT_CONTENT_TYPE, o as createFederation } from "../middleware-BhtaUtlt.mjs";
13
+ import { t as verifyPortableObject } from "../portable-collection-CxP30PWK.mjs";
14
+ import { s as verifyServedPortableObjects } from "../compound-proof-Pn8766TV.mjs";
15
15
  import { n as RouterError } from "../router-u5O5KCQr.mjs";
16
16
  import { configure, reset } from "@logtape/logtape";
17
17
  import { Create, Note, Object as Object$1, OrderedCollection, PUBLIC_COLLECTION, Person, Tombstone, lookupObject, traverseCollection } from "@fedify/vocab";
@@ -4,8 +4,8 @@ globalThis.addEventListener = () => {};
4
4
  import { t as esm_default } from "../esm-BHXXx4Wx.mjs";
5
5
  import { t as MemoryKvStore } from "../kv-DCHkaJ9-.mjs";
6
6
  import { i as rsaPrivateKey2, s as rsaPublicKey2 } from "../keys-DIJNHW-Y.mjs";
7
- import { n as FederationImpl, r as InboxContextImpl } from "../middleware-C2_LcbL3.mjs";
8
- import { n as extractInboxes, t as SendActivityError } from "../send-Cw545L_2.mjs";
7
+ import { n as FederationImpl, r as InboxContextImpl } from "../middleware-BhtaUtlt.mjs";
8
+ import { n as extractInboxes, t as SendActivityError } from "../send-CdRJj10a.mjs";
9
9
  import { Create, Endpoints, Note, Person } from "@fedify/vocab";
10
10
  import { parseIri } from "@fedify/vocab-runtime";
11
11
  import { mockDocumentLoader, test } from "@fedify/fixture";
@@ -8,11 +8,11 @@ import { t as assertEquals } from "../assert_equals-Z6IcEbWU.mjs";
8
8
  import "../std__assert-DvMDRPes.mjs";
9
9
  import { t as assertRejects } from "../assert_rejects-CTptdYck.mjs";
10
10
  import { r as getVerifiedKeyOwnerEvidence } from "../key-owner-evidence-APB6NpSk.mjs";
11
- import { p as signJsonLd } from "../ld-CNVWdooi.mjs";
12
- import { f as verifyRequest, l as signRequest, p as verifyRequestDetailed } from "../http-D-DpP4sd.mjs";
11
+ import { p as signJsonLd } from "../ld-BuI0RakW.mjs";
12
+ import { f as verifyRequest, l as signRequest, p as verifyRequestDetailed } from "../http-SIEv_YGW.mjs";
13
13
  import { a as rsaPrivateKey3, i as rsaPrivateKey2, n as ed25519PrivateKey, r as ed25519PublicKey, s as rsaPublicKey2 } from "../keys-DIJNHW-Y.mjs";
14
- import { f as handleInbox, n as FederationImpl, o as createFederation } from "../middleware-C2_LcbL3.mjs";
15
- import { n as getKeyOwner, t as doesActorOwnKey } from "../owner-D_BDPwm2.mjs";
14
+ import { f as handleInbox, n as FederationImpl, o as createFederation } from "../middleware-BhtaUtlt.mjs";
15
+ import { n as getKeyOwner, t as doesActorOwnKey } from "../owner-CoNYVTQp.mjs";
16
16
  import { t as ActivityListenerSet } from "../activity-listener-C-BSbKI7.mjs";
17
17
  import { t as KvKeyCache } from "../keycache-Da8A8mZa.mjs";
18
18
  import { Create, CryptographicKey, Person } from "@fedify/vocab";