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

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 (103) hide show
  1. package/dist/audience-CHQ-FlLD.mjs +95 -0
  2. package/dist/{builder-BGSNMnVH.mjs → builder-C5rYBZ16.mjs} +10 -2
  3. package/dist/compat/mod.d.cts +1 -1
  4. package/dist/compat/mod.d.ts +1 -1
  5. package/dist/compat/public-audience.test.mjs +1 -1
  6. package/dist/compat/transformers.test.mjs +1 -1
  7. package/dist/{compound-proof-Zpg7Fbk9.mjs → compound-proof-D0xY7MBs.mjs} +2 -2
  8. package/dist/{context-B2rlkkyJ.mjs → context-8Tu9kea0.mjs} +2 -0
  9. package/dist/{context-CDcAgm4l.d.cts → context-B6X-t8gI.d.cts} +81 -2
  10. package/dist/{context-9T--NSo4.d.ts → context-CtI307_A.d.ts} +81 -2
  11. package/dist/{deno-CxoV48e0.mjs → deno-Dj1TFhf4.mjs} +1 -1
  12. package/dist/{docloader-U141HKIl.mjs → docloader-CzyJe90o.mjs} +3 -3
  13. package/dist/federation/audience.test.d.mts +2 -0
  14. package/dist/federation/audience.test.mjs +130 -0
  15. package/dist/federation/builder.test.mjs +37 -1
  16. package/dist/federation/compound-fanout.test.mjs +4 -4
  17. package/dist/federation/handler-compound-proof.test.mjs +5 -5
  18. package/dist/federation/handler.test.mjs +7 -7
  19. package/dist/federation/hashlink-media.test.mjs +3 -3
  20. package/dist/federation/idempotency.test.mjs +2 -2
  21. package/dist/federation/metrics.test.mjs +2 -2
  22. package/dist/federation/middleware.test.mjs +125 -9
  23. package/dist/federation/mod.cjs +1 -1
  24. package/dist/federation/mod.d.cts +4 -4
  25. package/dist/federation/mod.d.ts +4 -4
  26. package/dist/federation/mod.js +1 -1
  27. package/dist/federation/outgoing-proof.test.mjs +6 -6
  28. package/dist/federation/portable-actor.test.mjs +4 -4
  29. package/dist/federation/portable-chain.test.mjs +4 -4
  30. package/dist/federation/portable-collection.test.mjs +8 -6
  31. package/dist/federation/portable-delivery.test.d.mts +2 -0
  32. package/dist/federation/portable-delivery.test.mjs +746 -0
  33. package/dist/federation/portable-gateway-keys.test.mjs +6 -6
  34. package/dist/federation/portable-inbox.test.mjs +5 -5
  35. package/dist/federation/portable-parse-uri.test.mjs +2 -2
  36. package/dist/federation/portable-route-activity.test.mjs +3 -3
  37. package/dist/federation/portable.test.mjs +234 -19
  38. package/dist/federation/send.test.mjs +4 -4
  39. package/dist/federation/tasks/enqueue.test.mjs +2 -2
  40. package/dist/federation/tasks/tasks.test.mjs +3 -3
  41. package/dist/federation/temporal.test.mjs +1 -1
  42. package/dist/federation/webfinger.test.mjs +3 -3
  43. package/dist/{federation-Ij8VLHpy.cjs → federation-DC1yfb-8.cjs} +696 -41
  44. package/dist/{http-D8XakCKn.cjs → http-Cuk0w0rp.cjs} +1 -1
  45. package/dist/{http-BQq1Uldg.mjs → http-D-DpP4sd.mjs} +5 -5
  46. package/dist/{http-CshNXXui.js → http-Dx7yMmfw.js} +1 -1
  47. package/dist/{key-DYgoirTo.mjs → key-Djyt1BFx.mjs} +2 -2
  48. package/dist/{kv-BhNbN8Ed.d.cts → kv-B2mzK5tl.d.cts} +3 -2
  49. package/dist/{kv-BhNbN8Ed.d.ts → kv-B2mzK5tl.d.ts} +3 -2
  50. package/dist/{kv-cache-f_GNq0e7.cjs → kv-cache-BmLTVLXc.cjs} +1 -1
  51. package/dist/{kv-cache-Bpnt_Cck.js → kv-cache-CUZOCSKZ.js} +1 -1
  52. package/dist/{kv-cache-D0Mn-VQW.mjs → kv-cache-ecUXfCqW.mjs} +1 -1
  53. package/dist/{ld-eIekvNtm.mjs → ld-CNVWdooi.mjs} +3 -3
  54. package/dist/{metrics-BVpdjsaR.mjs → metrics-BnYleVpg.mjs} +1 -1
  55. package/dist/{middleware-CS3H_4tQ.js → middleware-BdzcazaN.js} +698 -43
  56. package/dist/{middleware-rpYJG85a.mjs → middleware-Bh592bk8.mjs} +1 -1
  57. package/dist/{middleware-BbTJ6C1-.mjs → middleware-C2_LcbL3.mjs} +431 -50
  58. package/dist/{mod-C5Mwx5ty.d.ts → mod-B8MI1mpi.d.ts} +1 -1
  59. package/dist/{mod-B3OBLj5g.d.ts → mod-BhTaDR5H.d.ts} +1 -1
  60. package/dist/{mod-D58KCqUg.d.cts → mod-C7_2j7VT.d.cts} +1 -1
  61. package/dist/{mod-Dp3Ij7sw.d.cts → mod-DFL6IxYQ.d.cts} +1 -1
  62. package/dist/mod.cjs +4 -4
  63. package/dist/mod.d.cts +6 -6
  64. package/dist/mod.d.ts +6 -6
  65. package/dist/mod.js +4 -4
  66. package/dist/nodeinfo/client.test.mjs +1 -1
  67. package/dist/nodeinfo/handler.test.mjs +2 -2
  68. package/dist/otel/mod.d.cts +1 -1
  69. package/dist/otel/mod.d.ts +1 -1
  70. package/dist/{owner-DpxyMeo9.mjs → owner-D_BDPwm2.mjs} +3 -3
  71. package/dist/{portable-collection-BvJ5om91.js → portable-collection-C0c0rUN9.js} +1 -1
  72. package/dist/{portable-collection-DyJwtPz1.cjs → portable-collection-DwJ8YJP2.cjs} +1 -1
  73. package/dist/{portable-collection-DOL3l2C9.mjs → portable-collection-hcONGyUs.mjs} +2 -2
  74. package/dist/{portable-key-B8kTV4n8.mjs → portable-key-B880yVlC.mjs} +1 -1
  75. package/dist/{proof-B9DEHHiO.mjs → proof-z6Prgi5I.mjs} +4 -4
  76. package/dist/{send-CZckda2X.mjs → send-Cw545L_2.mjs} +191 -10
  77. package/dist/sig/compound-proof-discovery.test.mjs +1 -1
  78. package/dist/sig/compound-proof-producer.test.mjs +1 -1
  79. package/dist/sig/compound-proof-verification.test.mjs +3 -3
  80. package/dist/sig/compound-proof.test.mjs +3 -3
  81. package/dist/sig/http.test.mjs +3 -3
  82. package/dist/sig/key-owner-evidence.test.mjs +2 -2
  83. package/dist/sig/key.test.mjs +2 -2
  84. package/dist/sig/ld.test.mjs +2 -2
  85. package/dist/sig/mod.cjs +2 -2
  86. package/dist/sig/mod.js +2 -2
  87. package/dist/sig/owner.test.mjs +1 -1
  88. package/dist/sig/portable-collection.test.mjs +2 -2
  89. package/dist/sig/portable-key-id.test.mjs +2 -2
  90. package/dist/sig/portable-key.test.mjs +7 -7
  91. package/dist/sig/proof.test.mjs +4 -4
  92. package/dist/{temporal-Cc1ymEup.mjs → temporal-Cy-8WCod.mjs} +1 -1
  93. package/dist/testing/kv.test.mjs +1 -1
  94. package/dist/testing/mod.d.mts +82 -2
  95. package/dist/testing/mod.mjs +2 -2
  96. package/dist/{testing-C1itIjqW.mjs → testing-t8xDeJZ5.mjs} +1 -1
  97. package/dist/utils/docloader.test.mjs +6 -6
  98. package/dist/utils/kv-cache.test.mjs +2 -2
  99. package/dist/utils/mod.cjs +1 -1
  100. package/dist/utils/mod.d.cts +1 -1
  101. package/dist/utils/mod.d.ts +1 -1
  102. package/dist/utils/mod.js +1 -1
  103. package/package.json +7 -7
@@ -6,7 +6,8 @@ import { t as assertEquals } from "../assert_equals-Z6IcEbWU.mjs";
6
6
  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
- import { r as createFederationBuilder } from "../builder-BGSNMnVH.mjs";
9
+ import { t as assertStrictEquals } from "../assert_strict_equals-CYvBmkpC.mjs";
10
+ import { r as createFederationBuilder } from "../builder-C5rYBZ16.mjs";
10
11
  import { DisallowedOperatorError, DisallowedVarSpecModifierError, DuplicateRouteVariableError, RouteTemplateOptionsNotMatchedError, RouterError } from "@fedify/uri-template";
11
12
  import { Activity, Note, Person } from "@fedify/vocab";
12
13
  import { test } from "@fedify/fixture";
@@ -355,6 +356,41 @@ test("FederationBuilder", async (t) => {
355
356
  assertEquals(impl.collectionTypeIds["test"], Note);
356
357
  assertEquals((await impl.fetch(new Request("https://example.com/c/x", { headers: { accept: "application/activity+json" } }), { contextData: void 0 })).status, 200);
357
358
  });
359
+ await t.step("preserves symbol-named collections through build()", async () => {
360
+ const builder = createFederationBuilder();
361
+ const collection = Symbol("saved");
362
+ const ordered = Symbol("saved");
363
+ builder.setCollectionDispatcher(collection, Note, "/users/{identifier}/saved", () => ({ items: [] }));
364
+ builder.setOrderedCollectionDispatcher(ordered, Note, "/users/{identifier}/ordered-saved", () => ({ items: [] }));
365
+ for (let build = 0; build < 2; build++) {
366
+ const federation = await builder.build({ kv: new MemoryKvStore() });
367
+ const ctx = federation.createContext(new URL("https://example.com/"));
368
+ for (const [name, path, type] of [[
369
+ collection,
370
+ "/users/alice/saved",
371
+ "collection"
372
+ ], [
373
+ ordered,
374
+ "/users/alice/ordered-saved",
375
+ "orderedCollection"
376
+ ]]) {
377
+ const uri = ctx.getCollectionUri(name, { identifier: "alice" });
378
+ assertEquals(uri.pathname, path);
379
+ const parsed = ctx.parseUri(uri);
380
+ assertEquals(parsed?.type, type);
381
+ if (parsed?.type !== "collection" && parsed?.type !== "orderedCollection") throw new Error("Expected a custom collection URI");
382
+ assertStrictEquals(parsed.name, name);
383
+ assertStrictEquals(parsed.class, Note);
384
+ assertEquals(parsed.values, { identifier: "alice" });
385
+ for (const cursor of [null, "next"]) {
386
+ const pageUri = new URL(uri);
387
+ if (cursor != null) pageUri.searchParams.set("cursor", cursor);
388
+ assertEquals((await federation.fetch(new Request(pageUri, { headers: { accept: "application/activity+json" } }), { contextData: void 0 })).status, 200);
389
+ }
390
+ }
391
+ assertThrows(() => federation.setCollectionDispatcher(collection, Note, "/users/{identifier}/duplicate", () => ({ items: [] })));
392
+ }
393
+ });
358
394
  });
359
395
  //#endregion
360
396
  export {};
@@ -6,14 +6,14 @@ 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-DYgoirTo.mjs";
9
+ import { n as exportJwk } from "../key-Djyt1BFx.mjs";
10
10
  import { r as normalizeOutgoingActivityJsonLd } from "../outgoing-jsonld-4IJqPYos.mjs";
11
- import { a as signObject, d as verifyProof } from "../proof-B9DEHHiO.mjs";
11
+ import { a as signObject, d as verifyProof } from "../proof-z6Prgi5I.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-BbTJ6C1-.mjs";
13
+ import { n as FederationImpl } from "../middleware-C2_LcbL3.mjs";
14
14
  import { Create, DataIntegrityProof, Note } from "@fedify/vocab";
15
- import { mockDocumentLoader, test } from "@fedify/fixture";
16
15
  import { exportDidKey, parseIri } from "@fedify/vocab-runtime";
16
+ import { mockDocumentLoader, test } from "@fedify/fixture";
17
17
  import serialize from "json-canon";
18
18
  //#region src/federation/compound-fanout.test.ts
19
19
  const options = {
@@ -1,19 +1,19 @@
1
1
  import "temporal-polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { r as createRequestContext, t as createInboxContext } from "../context-B2rlkkyJ.mjs";
4
+ import { r as createRequestContext, t as createInboxContext } from "../context-8Tu9kea0.mjs";
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-eIekvNtm.mjs";
9
- import { l as signRequest } from "../http-BQq1Uldg.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";
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-BbTJ6C1-.mjs";
11
+ import { f as handleInbox, o as createFederation } from "../middleware-C2_LcbL3.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";
15
- import { mockDocumentLoader, test } from "@fedify/fixture";
16
15
  import { encodeMultibase, exportDidKey, parseIri } from "@fedify/vocab-runtime";
16
+ import { mockDocumentLoader, test } from "@fedify/fixture";
17
17
  import serialize from "json-canon";
18
18
  //#region src/federation/handler-compound-proof.test.ts
19
19
  async function sha256(value) {
@@ -1,7 +1,7 @@
1
1
  import { Temporal } from "temporal-polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { n as createOutboxContext, r as createRequestContext, t as createInboxContext } from "../context-B2rlkkyJ.mjs";
4
+ import { n as createOutboxContext, r as createRequestContext, t as createInboxContext } from "../context-8Tu9kea0.mjs";
5
5
  import { t as MemoryKvStore } from "../kv-DCHkaJ9-.mjs";
6
6
  import { t as assertEquals } from "../assert_equals-Z6IcEbWU.mjs";
7
7
  import { t as assertGreaterOrEqual } from "../assert_greater_or_equal-BlafOF4-.mjs";
@@ -10,16 +10,16 @@ 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-DYgoirTo.mjs";
14
- import { a as compactJsonLd, p as signJsonLd } from "../ld-eIekvNtm.mjs";
15
- import { a as signObject } from "../proof-B9DEHHiO.mjs";
16
- import { l as signRequest } from "../http-BQq1Uldg.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";
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-BbTJ6C1-.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";
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 { createTestMeterProvider, createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
22
21
  import { FetchError } from "@fedify/vocab-runtime";
22
+ import { createTestMeterProvider, createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
23
23
  //#region src/federation/handler.test.ts
24
24
  const QUOTE_CONTEXT_TERMS = {
25
25
  QuoteAuthorization: "https://w3id.org/fep/044f#QuoteAuthorization",
@@ -10,12 +10,12 @@ 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-BbTJ6C1-.mjs";
14
- import { r as createFederationBuilder } from "../builder-BGSNMnVH.mjs";
13
+ import { o as createFederation, x as parseHashlinkGatewayRequest } from "../middleware-C2_LcbL3.mjs";
14
+ import { r as createFederationBuilder } from "../builder-C5rYBZ16.mjs";
15
15
  import { n as RouterError } from "../router-u5O5KCQr.mjs";
16
16
  import { Note } from "@fedify/vocab";
17
- import { createTestMeterProvider, mockDocumentLoader, test } from "@fedify/fixture";
18
17
  import { computeDigestMultibase, encodeMultibase, exportDidKey } from "@fedify/vocab-runtime";
18
+ import { createTestMeterProvider, mockDocumentLoader, test } from "@fedify/fixture";
19
19
  //#region src/federation/hashlink-media.test.ts
20
20
  const textDecoder = new TextDecoder();
21
21
  const FEP_DIGEST = "zQmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n";
@@ -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-B9DEHHiO.mjs";
7
+ import { a as signObject } from "../proof-z6Prgi5I.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-BbTJ6C1-.mjs";
9
+ import { o as createFederation } from "../middleware-C2_LcbL3.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,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 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-BVpdjsaR.mjs";
8
- import { createTestMeterProvider, test } from "@fedify/fixture";
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";
9
8
  import { FetchError } from "@fedify/vocab-runtime";
9
+ import { createTestMeterProvider, test } from "@fedify/fixture";
10
10
  import { DataPointType, MeterProvider, MetricReader } from "@opentelemetry/sdk-metrics";
11
11
  //#region src/federation/metrics.test.ts
12
12
  var TestMetricReader = class extends MetricReader {
@@ -5,7 +5,7 @@ import { t as esm_default } from "../esm-BHXXx4Wx.mjs";
5
5
  import { t as MemoryKvStore } from "../kv-DCHkaJ9-.mjs";
6
6
  import { t as ManualClockKvStore } from "../kv-DBRWVx3Q.mjs";
7
7
  import { a as numberSchema, r as envelopeSchema, t as MockQueue } from "../tasks-IG3pHfvZ.mjs";
8
- import "../testing-C1itIjqW.mjs";
8
+ import "../testing-t8xDeJZ5.mjs";
9
9
  import { t as assertEquals } from "../assert_equals-Z6IcEbWU.mjs";
10
10
  import { t as assertExists } from "../assert_exists-cffSpJ7X.mjs";
11
11
  import { t as assertFalse } from "../assert_false-CPdRnc3E.mjs";
@@ -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-BVpdjsaR.mjs";
20
- import { a as compactJsonLd, h as verifyJsonLd, p as signJsonLd, s as detachSignature } from "../ld-eIekvNtm.mjs";
21
- import { a as signObject, s as verifyObject } from "../proof-B9DEHHiO.mjs";
22
- import { f as verifyRequest, l as signRequest } from "../http-BQq1Uldg.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";
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-U141HKIl.mjs";
25
- import { S as handleBenchmarkTrigger, i as KvSpecDeterminer, n as FederationImpl, o as createFederation, r as InboxContextImpl, t as ContextImpl } from "../middleware-BbTJ6C1-.mjs";
26
- import { t as doesActorOwnKey } from "../owner-DpxyMeo9.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";
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";
@@ -32,8 +32,8 @@ import { RouterError } from "@fedify/uri-template";
32
32
  import * as vocab from "@fedify/vocab";
33
33
  import { Create, Note, Offer, Person, getTypeId, lookupObject } from "@fedify/vocab";
34
34
  import { SpanStatusCode, metrics } from "@opentelemetry/api";
35
- import { createTestMeterProvider, createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
36
35
  import { FetchError, UrlError, getDocumentLoader } from "@fedify/vocab-runtime";
36
+ import { createTestMeterProvider, createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
37
37
  import dns from "node:dns/promises";
38
38
  import { deepStrictEqual, ok, rejects, strictEqual, throws } from "node:assert/strict";
39
39
  import serialize from "json-canon";
@@ -7396,6 +7396,81 @@ test({
7396
7396
  assertEquals(rejected[1].attributes["activitypub.activity.type"], "https://www.w3.org/ns/activitystreams#Offer");
7397
7397
  }
7398
7398
  });
7399
+ for (const queued of [false, true]) test(`ContextImpl.routeActivity() routes the fetched document (queued: ${queued})`, async () => {
7400
+ const id = new URL("https://example.com/verified-create");
7401
+ const genuine = new Create({
7402
+ id,
7403
+ actor: new URL("https://example.com/person"),
7404
+ object: new vocab.Note({ content: "Genuine content" }),
7405
+ to: new URL("https://example.com/recipient")
7406
+ });
7407
+ const genuineJson = await genuine.toJsonLd({ contextLoader: mockDocumentLoader });
7408
+ const forged = new Create({
7409
+ id,
7410
+ actor: new URL("https://victim.example/actor"),
7411
+ object: new vocab.Note({ content: "Forged content" }),
7412
+ to: new URL("https://attacker.example/recipient")
7413
+ });
7414
+ const messages = [];
7415
+ const queue = {
7416
+ enqueue(message) {
7417
+ messages.push(message);
7418
+ return Promise.resolve();
7419
+ },
7420
+ async listen() {}
7421
+ };
7422
+ const federation = createFederation({
7423
+ kv: new MemoryKvStore(),
7424
+ documentLoaderFactory: () => async (url, options) => url === id.href ? {
7425
+ document: genuineJson,
7426
+ documentUrl: id.href,
7427
+ contextUrl: null
7428
+ } : await mockDocumentLoader(url, options),
7429
+ contextLoaderFactory: () => mockDocumentLoader,
7430
+ queue: {
7431
+ inbox: queued ? queue : void 0,
7432
+ outbox: queue
7433
+ },
7434
+ manuallyStartQueue: true
7435
+ });
7436
+ const received = [];
7437
+ const contextDocuments = [];
7438
+ federation.setInboxListeners("/users/{identifier}/inbox", "/inbox").on(Create, async (ctx, activity) => {
7439
+ received.push(await activity.toJsonLd({ contextLoader: mockDocumentLoader }));
7440
+ assertInstanceOf(ctx, InboxContextImpl);
7441
+ contextDocuments.push(ctx.activity);
7442
+ await ctx.forwardActivity({
7443
+ privateKey: ed25519PrivateKey,
7444
+ keyId: ed25519Multikey.id
7445
+ }, {
7446
+ id: new URL("https://example.com/recipient"),
7447
+ inboxId: new URL("https://example.com/inbox")
7448
+ });
7449
+ });
7450
+ const ctx = federation.createContext(new URL("https://local.example/"));
7451
+ async function processInbox() {
7452
+ const inboxMessages = messages.filter((message) => message.type === "inbox");
7453
+ for (const message of inboxMessages) await federation.processQueuedTask(void 0, message);
7454
+ }
7455
+ assert(await ctx.routeActivity(null, forged));
7456
+ if (queued) {
7457
+ assertEquals(received, []);
7458
+ assertEquals(messages.length, 1);
7459
+ assert(messages[0].type === "inbox");
7460
+ assertEquals(messages[0].activity, genuineJson);
7461
+ await processInbox();
7462
+ }
7463
+ assertEquals(received, [genuineJson]);
7464
+ assertEquals(contextDocuments, [genuineJson]);
7465
+ const forwarded = messages.filter((message) => message.type === "outbox");
7466
+ assertEquals(forwarded.length, 1);
7467
+ assertEquals(forwarded[0].activity, genuineJson);
7468
+ assert(await ctx.routeActivity(null, genuine));
7469
+ if (queued) await processInbox();
7470
+ assertEquals(received, [genuineJson]);
7471
+ assertEquals(contextDocuments, [genuineJson]);
7472
+ assertEquals(messages.filter((message) => message.type === "outbox").length, 1);
7473
+ });
7399
7474
  test("ContextImpl.routeActivity() marks queued signed activities as non-LDS", async () => {
7400
7475
  let queuedMessage = null;
7401
7476
  const federation = new FederationImpl({
@@ -7455,6 +7530,47 @@ test("ContextImpl.getCollectionUri()", () => {
7455
7530
  assertThrows(() => ctx.getCollectionUri(Symbol(notReg), values));
7456
7531
  assertThrows(() => ctx.getCollectionUri(Symbol.for(notReg), values));
7457
7532
  });
7533
+ test("symbol-named custom collections are served and parsed", async () => {
7534
+ const federation = createFederation({ kv: new MemoryKvStore() });
7535
+ const names = [Symbol("bookmarks"), Symbol("bookmarks")];
7536
+ const paths = ["bookmarks", "ordered-bookmarks"];
7537
+ const calls = [];
7538
+ federation.setCollectionDispatcher(names[0], vocab.Object, "/users/{identifier}/bookmarks", (_ctx, _values, cursor) => {
7539
+ calls.push([0, cursor]);
7540
+ return { items: [] };
7541
+ });
7542
+ federation.setOrderedCollectionDispatcher(names[1], vocab.Object, "/users/{identifier}/ordered-bookmarks", (_ctx, _values, cursor) => {
7543
+ calls.push([1, cursor]);
7544
+ return { items: [] };
7545
+ });
7546
+ const ctx = federation.createContext(new URL("https://example.com/"));
7547
+ for (const [index, name] of names.entries()) {
7548
+ const uri = ctx.getCollectionUri(name, { identifier: "alice" });
7549
+ assertEquals(uri.pathname, `/users/alice/${paths[index]}`);
7550
+ const parsed = ctx.parseUri(uri);
7551
+ assertEquals(parsed?.type, index === 0 ? "collection" : "orderedCollection");
7552
+ if (parsed?.type !== "collection" && parsed?.type !== "orderedCollection") throw new Error("Expected a custom collection URI");
7553
+ assertStrictEquals(parsed.name, name);
7554
+ assertStrictEquals(parsed.class, vocab.Object);
7555
+ assertEquals(parsed.typeId, vocab.Object.typeId);
7556
+ assertEquals(parsed.values, { identifier: "alice" });
7557
+ for (const cursor of [null, "next"]) {
7558
+ const pageUri = new URL(uri);
7559
+ if (cursor != null) pageUri.searchParams.set("cursor", cursor);
7560
+ const response = await federation.fetch(new Request(pageUri, { headers: { accept: "application/activity+json" } }), { contextData: void 0 });
7561
+ assertEquals(response.status, 200);
7562
+ const body = await response.json();
7563
+ assert(body !== null && typeof body === "object" && "type" in body);
7564
+ assertEquals(body.type, `${index === 0 ? "Collection" : "OrderedCollection"}${cursor == null ? "" : "Page"}`);
7565
+ }
7566
+ }
7567
+ assertEquals(calls, [
7568
+ [0, null],
7569
+ [0, "next"],
7570
+ [1, null],
7571
+ [1, "next"]
7572
+ ]);
7573
+ });
7458
7574
  test("InboxContextImpl.forwardActivity()", async (t) => {
7459
7575
  esm_default.spyGlobal();
7460
7576
  let verified = null;
@@ -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-Ij8VLHpy.cjs");
3
+ const require_federation = require("../federation-DC1yfb-8.cjs");
4
4
  exports.CircuitBreaker = require_federation.CircuitBreaker;
5
5
  exports.InProcessMessageQueue = require_federation.InProcessMessageQueue;
6
6
  exports.MemoryKvStore = require_federation.MemoryKvStore;
@@ -1,5 +1,5 @@
1
1
  /// <reference lib="esnext.temporal" />
2
- import { $ as respondWithObjectIfAcceptable, A as InboxListenerSetters, At as HashlinkMediaDispatcher, B as Message, Bt as OutboxListenerErrorHandler, C as FederationBuilder, Ct as AuthorizePredicate, D as IdempotencyKeyCallback, Dt as CustomCollectionCounter, E as FederationStartQueueOptions, Et as CollectionDispatcher, F as Rfc6570Expression, Ft as NodeInfoDispatcher, G as TaskHandler, Gt as UnverifiedActivityHandler, H as TaskDefinition, Ht as PortableActorIdMapper, I as FederationKvPrefixes, It as ObjectAuthorizePredicate, J as RetryContext, Jt as SendActivityError, K as TaskRegistry, Kt as UnverifiedActivityReason, L as FederationOrigin, Lt as ObjectDispatcher, M as ObjectCallbackSetters, Mt as InboxErrorHandler, N as OutboxListenerSetters, Nt as InboxListener, O as IdempotencyStrategy, Ot as CustomCollectionCursor, P as PortableInboxForwardingOptions, Pt as MediaUploaderCallback, Q as respondWithObject, Qt as digest, R as FederationQueueOptions, Rt as OutboxErrorHandler, S as FederationBenchmarkOptions, St as ActorKeyPairsDispatcher, T as FederationOptions, Tt as CollectionCursor, U as TaskDefinitionOptions, Ut as PortableCollectionOwnerMapper, V as createFederationBuilder, Vt as OutboxPermanentFailureHandler, W as TaskEnqueueOptions, Wt as SharedInboxKeyDispatcher, X as createExponentialBackoffPolicy, Xt as PageItems, Y as RetryPolicy, Yt as SenderKeyPair, Z as RespondWithObjectOptions, Zt as buildCollectionSynchronizationHeader, _ as CollectionCallbackSetters, _t as normalizeCircuitBreakerOptions, a as GetObjectOptions, at as MessageQueueListenOptions, b as Federatable, bt as ActorDispatcher, c as OutboxContext, ct as CircuitBreakerActivityDrop, d as PortableRequest, dt as CircuitBreakerFailurePolicy, et as InProcessMessageQueue, f as RequestContext, ft as CircuitBreakerKvState, g as ActorCallbackSetters, gt as NormalizedCircuitBreakerOptions, h as SendActivityOptionsForCollection, ht as CircuitBreakerStateChange, i as GetActorOptions, it as MessageQueueEnqueueOptions, j as MediaUploaderSetters, jt as HashlinkMediaRequest, k as InboxChallengePolicy, kt as CustomCollectionDispatcher, l as ParseUriOptions, lt as CircuitBreakerBeforeSendDecision, m as SendActivityOptions, mt as CircuitBreakerState, n as Context, nt as MessageQueue, o as GetSignedKeyOptions, ot as ParallelMessageQueue, p as RouteActivityOptions, pt as CircuitBreakerOptions, q as CreateExponentialBackoffPolicyOptions, qt as WebFingerLinksDispatcher, r as ForwardActivityOptions, rt as MessageQueueDepth, s as InboxContext, st as CircuitBreaker, t as ActorKeyPair, tt as InProcessMessageQueueOptions, u as ParseUriResult, ut as CircuitBreakerCreateOptions, v as ConstructorWithTypeId, vt as parseCircuitBreakerKvState, w as FederationFetchOptions, wt as CollectionCounter, x as Federation, xt as ActorHandleMapper, y as CustomCollectionCallbackSetters, yt as ActorAliasMapper, z as createFederation, zt as OutboxListener } from "../context-CDcAgm4l.cjs";
3
- import { a as MemoryKvStore, i as KvStoreSetOptions, n as KvStore, r as KvStoreListEntry, t as KvKey } from "../kv-BhNbN8Ed.cjs";
4
- import { a as RouterOptions, i as RouterError, n as handleWebFinger, o as RouterRouteResult, r as Router, t as WebFingerHandlerParameters } from "../mod-D58KCqUg.cjs";
5
- export { ActorAliasMapper, ActorCallbackSetters, ActorDispatcher, ActorHandleMapper, ActorKeyPair, ActorKeyPairsDispatcher, AuthorizePredicate, CircuitBreaker, CircuitBreakerActivityDrop, CircuitBreakerBeforeSendDecision, CircuitBreakerCreateOptions, CircuitBreakerFailurePolicy, CircuitBreakerKvState, CircuitBreakerOptions, CircuitBreakerState, CircuitBreakerStateChange, CollectionCallbackSetters, CollectionCounter, CollectionCursor, CollectionDispatcher, ConstructorWithTypeId, Context, CreateExponentialBackoffPolicyOptions, CustomCollectionCallbackSetters, CustomCollectionCounter, CustomCollectionCursor, CustomCollectionDispatcher, Federatable, Federation, FederationBenchmarkOptions, FederationBuilder, FederationFetchOptions, FederationKvPrefixes, FederationOptions, FederationOrigin, FederationQueueOptions, FederationStartQueueOptions, ForwardActivityOptions, GetActorOptions, GetObjectOptions, GetSignedKeyOptions, HashlinkMediaDispatcher, HashlinkMediaRequest, IdempotencyKeyCallback, IdempotencyStrategy, InProcessMessageQueue, InProcessMessageQueueOptions, InboxChallengePolicy, InboxContext, InboxErrorHandler, InboxListener, InboxListenerSetters, KvKey, KvStore, KvStoreListEntry, KvStoreSetOptions, MediaUploaderCallback, MediaUploaderSetters, MemoryKvStore, Message, MessageQueue, MessageQueueDepth, MessageQueueEnqueueOptions, MessageQueueListenOptions, NodeInfoDispatcher, NormalizedCircuitBreakerOptions, ObjectAuthorizePredicate, ObjectCallbackSetters, ObjectDispatcher, OutboxContext, OutboxErrorHandler, OutboxListener, OutboxListenerErrorHandler, OutboxListenerSetters, OutboxPermanentFailureHandler, PageItems, ParallelMessageQueue, ParseUriOptions, ParseUriResult, PortableActorIdMapper, PortableCollectionOwnerMapper, PortableInboxForwardingOptions, PortableRequest, RequestContext, RespondWithObjectOptions, RetryContext, RetryPolicy, Rfc6570Expression, RouteActivityOptions, Router, RouterError, RouterOptions, RouterRouteResult, SendActivityError, SendActivityOptions, SendActivityOptionsForCollection, SenderKeyPair, SharedInboxKeyDispatcher, TaskDefinition, TaskDefinitionOptions, TaskEnqueueOptions, TaskHandler, TaskRegistry, UnverifiedActivityHandler, UnverifiedActivityReason, WebFingerHandlerParameters, WebFingerLinksDispatcher, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, handleWebFinger, normalizeCircuitBreakerOptions, parseCircuitBreakerKvState, respondWithObject, respondWithObjectIfAcceptable };
2
+ import { $ as respondWithObject, $t as digest, A as InboxChallengePolicy, At as CustomCollectionDispatcher, B as createFederation, Bt as OutboxListener, C as FederationBenchmarkOptions, Ct as ActorKeyPairsDispatcher, D as FederationStartQueueOptions, Dt as CollectionDispatcher, E as FederationOptions, Et as CollectionCursor, F as PortableInboxForwardingOptions, Ft as MediaUploaderCallback, G as TaskEnqueueOptions, Gt as SharedInboxKeyDispatcher, H as createFederationBuilder, Ht as OutboxPermanentFailureHandler, I as Rfc6570Expression, It as NodeInfoDispatcher, J as CreateExponentialBackoffPolicyOptions, Jt as WebFingerLinksDispatcher, K as TaskHandler, Kt as UnverifiedActivityHandler, L as FederationKvPrefixes, Lt as ObjectAuthorizePredicate, M as MediaUploaderSetters, Mt as HashlinkMediaRequest, N as ObjectCallbackSetters, Nt as InboxErrorHandler, O as IdempotencyKeyCallback, Ot as CustomCollectionCounter, P as OutboxListenerSetters, Pt as InboxListener, Q as RespondWithObjectOptions, Qt as buildCollectionSynchronizationHeader, R as FederationOrigin, Rt as ObjectDispatcher, S as Federation, St as ActorHandleMapper, T as FederationFetchOptions, Tt as CollectionCounter, U as TaskDefinition, Ut as PortableActorIdMapper, V as Message, Vt as OutboxListenerErrorHandler, W as TaskDefinitionOptions, Wt as PortableCollectionOwnerMapper, X as RetryPolicy, Xt as SenderKeyPair, Y as RetryContext, Yt as SendActivityError, Z as createExponentialBackoffPolicy, Zt as PageItems, _ as ActorCallbackSetters, _t as NormalizedCircuitBreakerOptions, a as GetObjectOptions, at as MessageQueueEnqueueOptions, b as CustomCollectionCallbackSetters, bt as ActorAliasMapper, c as IsSignedByAudienceOptions, ct as CircuitBreaker, d as ParseUriResult, dt as CircuitBreakerCreateOptions, et as respondWithObjectIfAcceptable, f as PortableRequest, ft as CircuitBreakerFailurePolicy, g as SendActivityOptionsForCollection, gt as CircuitBreakerStateChange, h as SendActivityOptions, ht as CircuitBreakerState, i as GetActorOptions, it as MessageQueueDepth, j as InboxListenerSetters, jt as HashlinkMediaDispatcher, k as IdempotencyStrategy, kt as CustomCollectionCursor, l as OutboxContext, lt as CircuitBreakerActivityDrop, m as RouteActivityOptions, mt as CircuitBreakerOptions, n as Context, nt as InProcessMessageQueueOptions, o as GetSignedKeyOptions, ot as MessageQueueListenOptions, p as RequestContext, pt as CircuitBreakerKvState, q as TaskRegistry, qt as UnverifiedActivityReason, r as ForwardActivityOptions, rt as MessageQueue, s as InboxContext, st as ParallelMessageQueue, t as ActorKeyPair, tt as InProcessMessageQueue, u as ParseUriOptions, ut as CircuitBreakerBeforeSendDecision, v as CollectionCallbackSetters, vt as normalizeCircuitBreakerOptions, w as FederationBuilder, wt as AuthorizePredicate, x as Federatable, xt as ActorDispatcher, y as ConstructorWithTypeId, yt as parseCircuitBreakerKvState, z as FederationQueueOptions, zt as OutboxErrorHandler } from "../context-B6X-t8gI.cjs";
3
+ import { a as MemoryKvStore, i as KvStoreSetOptions, n as KvStore, r as KvStoreListEntry, t as KvKey } from "../kv-B2mzK5tl.cjs";
4
+ import { a as RouterOptions, i as RouterError, n as handleWebFinger, o as RouterRouteResult, r as Router, t as WebFingerHandlerParameters } from "../mod-C7_2j7VT.cjs";
5
+ export { ActorAliasMapper, ActorCallbackSetters, ActorDispatcher, ActorHandleMapper, ActorKeyPair, ActorKeyPairsDispatcher, AuthorizePredicate, CircuitBreaker, CircuitBreakerActivityDrop, CircuitBreakerBeforeSendDecision, CircuitBreakerCreateOptions, CircuitBreakerFailurePolicy, CircuitBreakerKvState, CircuitBreakerOptions, CircuitBreakerState, CircuitBreakerStateChange, CollectionCallbackSetters, CollectionCounter, CollectionCursor, CollectionDispatcher, ConstructorWithTypeId, Context, CreateExponentialBackoffPolicyOptions, CustomCollectionCallbackSetters, CustomCollectionCounter, CustomCollectionCursor, CustomCollectionDispatcher, Federatable, Federation, FederationBenchmarkOptions, FederationBuilder, FederationFetchOptions, FederationKvPrefixes, FederationOptions, FederationOrigin, FederationQueueOptions, FederationStartQueueOptions, ForwardActivityOptions, GetActorOptions, GetObjectOptions, GetSignedKeyOptions, HashlinkMediaDispatcher, HashlinkMediaRequest, IdempotencyKeyCallback, IdempotencyStrategy, InProcessMessageQueue, InProcessMessageQueueOptions, InboxChallengePolicy, InboxContext, InboxErrorHandler, InboxListener, InboxListenerSetters, IsSignedByAudienceOptions, KvKey, KvStore, KvStoreListEntry, KvStoreSetOptions, MediaUploaderCallback, MediaUploaderSetters, MemoryKvStore, Message, MessageQueue, MessageQueueDepth, MessageQueueEnqueueOptions, MessageQueueListenOptions, NodeInfoDispatcher, NormalizedCircuitBreakerOptions, ObjectAuthorizePredicate, ObjectCallbackSetters, ObjectDispatcher, OutboxContext, OutboxErrorHandler, OutboxListener, OutboxListenerErrorHandler, OutboxListenerSetters, OutboxPermanentFailureHandler, PageItems, ParallelMessageQueue, ParseUriOptions, ParseUriResult, PortableActorIdMapper, PortableCollectionOwnerMapper, PortableInboxForwardingOptions, PortableRequest, RequestContext, RespondWithObjectOptions, RetryContext, RetryPolicy, Rfc6570Expression, RouteActivityOptions, Router, RouterError, RouterOptions, RouterRouteResult, SendActivityError, SendActivityOptions, SendActivityOptionsForCollection, SenderKeyPair, SharedInboxKeyDispatcher, TaskDefinition, TaskDefinitionOptions, TaskEnqueueOptions, TaskHandler, TaskRegistry, UnverifiedActivityHandler, UnverifiedActivityReason, WebFingerHandlerParameters, WebFingerLinksDispatcher, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, handleWebFinger, normalizeCircuitBreakerOptions, parseCircuitBreakerKvState, respondWithObject, respondWithObjectIfAcceptable };
@@ -1,5 +1,5 @@
1
1
  /// <reference lib="esnext.temporal" />
2
- import { $ as respondWithObjectIfAcceptable, A as InboxListenerSetters, At as HashlinkMediaDispatcher, B as Message, Bt as OutboxListenerErrorHandler, C as FederationBuilder, Ct as AuthorizePredicate, D as IdempotencyKeyCallback, Dt as CustomCollectionCounter, E as FederationStartQueueOptions, Et as CollectionDispatcher, F as Rfc6570Expression, Ft as NodeInfoDispatcher, G as TaskHandler, Gt as UnverifiedActivityHandler, H as TaskDefinition, Ht as PortableActorIdMapper, I as FederationKvPrefixes, It as ObjectAuthorizePredicate, J as RetryContext, Jt as SendActivityError, K as TaskRegistry, Kt as UnverifiedActivityReason, L as FederationOrigin, Lt as ObjectDispatcher, M as ObjectCallbackSetters, Mt as InboxErrorHandler, N as OutboxListenerSetters, Nt as InboxListener, O as IdempotencyStrategy, Ot as CustomCollectionCursor, P as PortableInboxForwardingOptions, Pt as MediaUploaderCallback, Q as respondWithObject, Qt as digest, R as FederationQueueOptions, Rt as OutboxErrorHandler, S as FederationBenchmarkOptions, St as ActorKeyPairsDispatcher, T as FederationOptions, Tt as CollectionCursor, U as TaskDefinitionOptions, Ut as PortableCollectionOwnerMapper, V as createFederationBuilder, Vt as OutboxPermanentFailureHandler, W as TaskEnqueueOptions, Wt as SharedInboxKeyDispatcher, X as createExponentialBackoffPolicy, Xt as PageItems, Y as RetryPolicy, Yt as SenderKeyPair, Z as RespondWithObjectOptions, Zt as buildCollectionSynchronizationHeader, _ as CollectionCallbackSetters, _t as normalizeCircuitBreakerOptions, a as GetObjectOptions, at as MessageQueueListenOptions, b as Federatable, bt as ActorDispatcher, c as OutboxContext, ct as CircuitBreakerActivityDrop, d as PortableRequest, dt as CircuitBreakerFailurePolicy, et as InProcessMessageQueue, f as RequestContext, ft as CircuitBreakerKvState, g as ActorCallbackSetters, gt as NormalizedCircuitBreakerOptions, h as SendActivityOptionsForCollection, ht as CircuitBreakerStateChange, i as GetActorOptions, it as MessageQueueEnqueueOptions, j as MediaUploaderSetters, jt as HashlinkMediaRequest, k as InboxChallengePolicy, kt as CustomCollectionDispatcher, l as ParseUriOptions, lt as CircuitBreakerBeforeSendDecision, m as SendActivityOptions, mt as CircuitBreakerState, n as Context, nt as MessageQueue, o as GetSignedKeyOptions, ot as ParallelMessageQueue, p as RouteActivityOptions, pt as CircuitBreakerOptions, q as CreateExponentialBackoffPolicyOptions, qt as WebFingerLinksDispatcher, r as ForwardActivityOptions, rt as MessageQueueDepth, s as InboxContext, st as CircuitBreaker, t as ActorKeyPair, tt as InProcessMessageQueueOptions, u as ParseUriResult, ut as CircuitBreakerCreateOptions, v as ConstructorWithTypeId, vt as parseCircuitBreakerKvState, w as FederationFetchOptions, wt as CollectionCounter, x as Federation, xt as ActorHandleMapper, y as CustomCollectionCallbackSetters, yt as ActorAliasMapper, z as createFederation, zt as OutboxListener } from "../context-9T--NSo4.js";
3
- import { a as MemoryKvStore, i as KvStoreSetOptions, n as KvStore, r as KvStoreListEntry, t as KvKey } from "../kv-BhNbN8Ed.js";
4
- import { a as RouterOptions, i as RouterError, n as handleWebFinger, o as RouterRouteResult, r as Router, t as WebFingerHandlerParameters } from "../mod-B3OBLj5g.js";
5
- export { ActorAliasMapper, ActorCallbackSetters, ActorDispatcher, ActorHandleMapper, ActorKeyPair, ActorKeyPairsDispatcher, AuthorizePredicate, CircuitBreaker, CircuitBreakerActivityDrop, CircuitBreakerBeforeSendDecision, CircuitBreakerCreateOptions, CircuitBreakerFailurePolicy, CircuitBreakerKvState, CircuitBreakerOptions, CircuitBreakerState, CircuitBreakerStateChange, CollectionCallbackSetters, CollectionCounter, CollectionCursor, CollectionDispatcher, ConstructorWithTypeId, Context, CreateExponentialBackoffPolicyOptions, CustomCollectionCallbackSetters, CustomCollectionCounter, CustomCollectionCursor, CustomCollectionDispatcher, Federatable, Federation, FederationBenchmarkOptions, FederationBuilder, FederationFetchOptions, FederationKvPrefixes, FederationOptions, FederationOrigin, FederationQueueOptions, FederationStartQueueOptions, ForwardActivityOptions, GetActorOptions, GetObjectOptions, GetSignedKeyOptions, HashlinkMediaDispatcher, HashlinkMediaRequest, IdempotencyKeyCallback, IdempotencyStrategy, InProcessMessageQueue, InProcessMessageQueueOptions, InboxChallengePolicy, InboxContext, InboxErrorHandler, InboxListener, InboxListenerSetters, KvKey, KvStore, KvStoreListEntry, KvStoreSetOptions, MediaUploaderCallback, MediaUploaderSetters, MemoryKvStore, Message, MessageQueue, MessageQueueDepth, MessageQueueEnqueueOptions, MessageQueueListenOptions, NodeInfoDispatcher, NormalizedCircuitBreakerOptions, ObjectAuthorizePredicate, ObjectCallbackSetters, ObjectDispatcher, OutboxContext, OutboxErrorHandler, OutboxListener, OutboxListenerErrorHandler, OutboxListenerSetters, OutboxPermanentFailureHandler, PageItems, ParallelMessageQueue, ParseUriOptions, ParseUriResult, PortableActorIdMapper, PortableCollectionOwnerMapper, PortableInboxForwardingOptions, PortableRequest, RequestContext, RespondWithObjectOptions, RetryContext, RetryPolicy, Rfc6570Expression, RouteActivityOptions, Router, RouterError, RouterOptions, RouterRouteResult, SendActivityError, SendActivityOptions, SendActivityOptionsForCollection, SenderKeyPair, SharedInboxKeyDispatcher, TaskDefinition, TaskDefinitionOptions, TaskEnqueueOptions, TaskHandler, TaskRegistry, UnverifiedActivityHandler, UnverifiedActivityReason, WebFingerHandlerParameters, WebFingerLinksDispatcher, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, handleWebFinger, normalizeCircuitBreakerOptions, parseCircuitBreakerKvState, respondWithObject, respondWithObjectIfAcceptable };
2
+ import { $ as respondWithObject, $t as digest, A as InboxChallengePolicy, At as CustomCollectionDispatcher, B as createFederation, Bt as OutboxListener, C as FederationBenchmarkOptions, Ct as ActorKeyPairsDispatcher, D as FederationStartQueueOptions, Dt as CollectionDispatcher, E as FederationOptions, Et as CollectionCursor, F as PortableInboxForwardingOptions, Ft as MediaUploaderCallback, G as TaskEnqueueOptions, Gt as SharedInboxKeyDispatcher, H as createFederationBuilder, Ht as OutboxPermanentFailureHandler, I as Rfc6570Expression, It as NodeInfoDispatcher, J as CreateExponentialBackoffPolicyOptions, Jt as WebFingerLinksDispatcher, K as TaskHandler, Kt as UnverifiedActivityHandler, L as FederationKvPrefixes, Lt as ObjectAuthorizePredicate, M as MediaUploaderSetters, Mt as HashlinkMediaRequest, N as ObjectCallbackSetters, Nt as InboxErrorHandler, O as IdempotencyKeyCallback, Ot as CustomCollectionCounter, P as OutboxListenerSetters, Pt as InboxListener, Q as RespondWithObjectOptions, Qt as buildCollectionSynchronizationHeader, R as FederationOrigin, Rt as ObjectDispatcher, S as Federation, St as ActorHandleMapper, T as FederationFetchOptions, Tt as CollectionCounter, U as TaskDefinition, Ut as PortableActorIdMapper, V as Message, Vt as OutboxListenerErrorHandler, W as TaskDefinitionOptions, Wt as PortableCollectionOwnerMapper, X as RetryPolicy, Xt as SenderKeyPair, Y as RetryContext, Yt as SendActivityError, Z as createExponentialBackoffPolicy, Zt as PageItems, _ as ActorCallbackSetters, _t as NormalizedCircuitBreakerOptions, a as GetObjectOptions, at as MessageQueueEnqueueOptions, b as CustomCollectionCallbackSetters, bt as ActorAliasMapper, c as IsSignedByAudienceOptions, ct as CircuitBreaker, d as ParseUriResult, dt as CircuitBreakerCreateOptions, et as respondWithObjectIfAcceptable, f as PortableRequest, ft as CircuitBreakerFailurePolicy, g as SendActivityOptionsForCollection, gt as CircuitBreakerStateChange, h as SendActivityOptions, ht as CircuitBreakerState, i as GetActorOptions, it as MessageQueueDepth, j as InboxListenerSetters, jt as HashlinkMediaDispatcher, k as IdempotencyStrategy, kt as CustomCollectionCursor, l as OutboxContext, lt as CircuitBreakerActivityDrop, m as RouteActivityOptions, mt as CircuitBreakerOptions, n as Context, nt as InProcessMessageQueueOptions, o as GetSignedKeyOptions, ot as MessageQueueListenOptions, p as RequestContext, pt as CircuitBreakerKvState, q as TaskRegistry, qt as UnverifiedActivityReason, r as ForwardActivityOptions, rt as MessageQueue, s as InboxContext, st as ParallelMessageQueue, t as ActorKeyPair, tt as InProcessMessageQueue, u as ParseUriOptions, ut as CircuitBreakerBeforeSendDecision, v as CollectionCallbackSetters, vt as normalizeCircuitBreakerOptions, w as FederationBuilder, wt as AuthorizePredicate, x as Federatable, xt as ActorDispatcher, y as ConstructorWithTypeId, yt as parseCircuitBreakerKvState, z as FederationQueueOptions, zt as OutboxErrorHandler } from "../context-CtI307_A.js";
3
+ import { a as MemoryKvStore, i as KvStoreSetOptions, n as KvStore, r as KvStoreListEntry, t as KvKey } from "../kv-B2mzK5tl.js";
4
+ import { a as RouterOptions, i as RouterError, n as handleWebFinger, o as RouterRouteResult, r as Router, t as WebFingerHandlerParameters } from "../mod-BhTaDR5H.js";
5
+ export { ActorAliasMapper, ActorCallbackSetters, ActorDispatcher, ActorHandleMapper, ActorKeyPair, ActorKeyPairsDispatcher, AuthorizePredicate, CircuitBreaker, CircuitBreakerActivityDrop, CircuitBreakerBeforeSendDecision, CircuitBreakerCreateOptions, CircuitBreakerFailurePolicy, CircuitBreakerKvState, CircuitBreakerOptions, CircuitBreakerState, CircuitBreakerStateChange, CollectionCallbackSetters, CollectionCounter, CollectionCursor, CollectionDispatcher, ConstructorWithTypeId, Context, CreateExponentialBackoffPolicyOptions, CustomCollectionCallbackSetters, CustomCollectionCounter, CustomCollectionCursor, CustomCollectionDispatcher, Federatable, Federation, FederationBenchmarkOptions, FederationBuilder, FederationFetchOptions, FederationKvPrefixes, FederationOptions, FederationOrigin, FederationQueueOptions, FederationStartQueueOptions, ForwardActivityOptions, GetActorOptions, GetObjectOptions, GetSignedKeyOptions, HashlinkMediaDispatcher, HashlinkMediaRequest, IdempotencyKeyCallback, IdempotencyStrategy, InProcessMessageQueue, InProcessMessageQueueOptions, InboxChallengePolicy, InboxContext, InboxErrorHandler, InboxListener, InboxListenerSetters, IsSignedByAudienceOptions, KvKey, KvStore, KvStoreListEntry, KvStoreSetOptions, MediaUploaderCallback, MediaUploaderSetters, MemoryKvStore, Message, MessageQueue, MessageQueueDepth, MessageQueueEnqueueOptions, MessageQueueListenOptions, NodeInfoDispatcher, NormalizedCircuitBreakerOptions, ObjectAuthorizePredicate, ObjectCallbackSetters, ObjectDispatcher, OutboxContext, OutboxErrorHandler, OutboxListener, OutboxListenerErrorHandler, OutboxListenerSetters, OutboxPermanentFailureHandler, PageItems, ParallelMessageQueue, ParseUriOptions, ParseUriResult, PortableActorIdMapper, PortableCollectionOwnerMapper, PortableInboxForwardingOptions, PortableRequest, RequestContext, RespondWithObjectOptions, RetryContext, RetryPolicy, Rfc6570Expression, RouteActivityOptions, Router, RouterError, RouterOptions, RouterRouteResult, SendActivityError, SendActivityOptions, SendActivityOptionsForCollection, SenderKeyPair, SharedInboxKeyDispatcher, TaskDefinition, TaskDefinitionOptions, TaskEnqueueOptions, TaskHandler, TaskRegistry, UnverifiedActivityHandler, UnverifiedActivityReason, WebFingerHandlerParameters, WebFingerLinksDispatcher, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, handleWebFinger, normalizeCircuitBreakerOptions, parseCircuitBreakerKvState, respondWithObject, respondWithObjectIfAcceptable };
@@ -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-CS3H_4tQ.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-BdzcazaN.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,16 +7,16 @@ 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-DYgoirTo.mjs";
11
- import { s as detachSignature } from "../ld-eIekvNtm.mjs";
12
- import { a as signObject } from "../proof-B9DEHHiO.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";
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-BbTJ6C1-.mjs";
15
- import { a as verifyCompoundPortableObjectProofs } from "../compound-proof-Zpg7Fbk9.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";
16
16
  import { configure, reset } from "@logtape/logtape";
17
17
  import { Create, Note, Person } from "@fedify/vocab";
18
- import { mockDocumentLoader, test } from "@fedify/fixture";
19
18
  import { exportDidKey, parseIri } from "@fedify/vocab-runtime";
19
+ import { mockDocumentLoader, test } from "@fedify/fixture";
20
20
  //#region src/federation/outgoing-proof.test.ts
21
21
  const options = {
22
22
  contextLoader: mockDocumentLoader,
@@ -8,15 +8,15 @@ 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-B9DEHHiO.mjs";
12
- import { f as verifyRequest, l as signRequest } from "../http-BQq1Uldg.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";
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-BbTJ6C1-.mjs";
14
+ import { b as PORTABLE_OBJECT_CONTENT_TYPE, o as createFederation } from "../middleware-C2_LcbL3.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";
18
- import { createTestMeterProvider, mockDocumentLoader, test } from "@fedify/fixture";
19
18
  import { exportDidKey, formatIri, fromCompatibleEf61Id, toCompatibleEf61Id } from "@fedify/vocab-runtime";
19
+ import { createTestMeterProvider, mockDocumentLoader, test } from "@fedify/fixture";
20
20
  //#region src/federation/portable-actor.test.ts
21
21
  const did = await exportDidKey(ed25519PublicKey.publicKey);
22
22
  const keyId = new URL(`${did}#${did.slice(8)}`);
@@ -7,13 +7,13 @@ 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-DYgoirTo.mjs";
11
- import { c as verifyPortableObjectProof, s as verifyObject } from "../proof-B9DEHHiO.mjs";
10
+ import { n as exportJwk } from "../key-Djyt1BFx.mjs";
11
+ import { c as verifyPortableObjectProof, s as verifyObject } from "../proof-z6Prgi5I.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-BbTJ6C1-.mjs";
13
+ import { n as FederationImpl } from "../middleware-C2_LcbL3.mjs";
14
14
  import { Create, DataIntegrityProof, Note, OrderedCollection, Person, traverseCollection } from "@fedify/vocab";
15
- import { mockDocumentLoader, test } from "@fedify/fixture";
16
15
  import { FetchError, encodeMultibase, exportDidKey } from "@fedify/vocab-runtime";
16
+ import { mockDocumentLoader, test } from "@fedify/fixture";
17
17
  import serialize from "json-canon";
18
18
  //#region src/federation/portable-chain.test.ts
19
19
  const did = await exportDidKey(ed25519PublicKey.publicKey);
@@ -7,16 +7,16 @@ 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-B9DEHHiO.mjs";
10
+ import { a as signObject } from "../proof-z6Prgi5I.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-BbTJ6C1-.mjs";
13
- import { t as verifyPortableObject } from "../portable-collection-DOL3l2C9.mjs";
14
- import { s as verifyServedPortableObjects } from "../compound-proof-Zpg7Fbk9.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";
15
15
  import { n as RouterError } from "../router-u5O5KCQr.mjs";
16
16
  import { configure, reset } from "@logtape/logtape";
17
- import { Create, Note, Object as Object$1, OrderedCollection, Person, Tombstone, lookupObject, traverseCollection } from "@fedify/vocab";
18
- import { mockDocumentLoader, test } from "@fedify/fixture";
17
+ import { Create, Note, Object as Object$1, OrderedCollection, PUBLIC_COLLECTION, Person, Tombstone, lookupObject, traverseCollection } from "@fedify/vocab";
19
18
  import { FetchError, exportDidKey, formatIri, parseIri, toCompatibleEf61Id } from "@fedify/vocab-runtime";
19
+ import { mockDocumentLoader, test } from "@fedify/fixture";
20
20
  //#region src/federation/portable-collection.test.ts
21
21
  const did = await exportDidKey(ed25519PublicKey.publicKey);
22
22
  const keyId = new URL(`${did}#${did.slice(8)}`);
@@ -84,6 +84,7 @@ function createTestFederation(options = {}) {
84
84
  if (note == null) {
85
85
  note = await sign(new Note({
86
86
  id: ctx.getPortableObjectUri(Note, { id }, authority),
87
+ to: PUBLIC_COLLECTION,
87
88
  content: `Note ${id}`
88
89
  }), authority === did ? ed25519PrivateKey : otherKeyPair.privateKey, authority === did ? keyId : otherKeyId);
89
90
  noteCache.set(key, note);
@@ -135,6 +136,7 @@ function createTestFederation(options = {}) {
135
136
  create = await sign(new Create({
136
137
  id: ctx.getPortableObjectUri(Create, { id }, authority),
137
138
  actor: ctx.getPortableActorUri("alice", authority),
139
+ to: PUBLIC_COLLECTION,
138
140
  object: await getNote(ctx, id, authority)
139
141
  }), authority === did ? ed25519PrivateKey : otherKeyPair.privateKey, authority === did ? keyId : otherKeyId);
140
142
  createCache.set(key, create);
@@ -0,0 +1,2 @@
1
+ import { Temporal } from "temporal-polyfill";
2
+ import { URLPattern } from "urlpattern-polyfill";