@fedify/fedify 2.1.3 → 2.1.5

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 (56) hide show
  1. package/dist/{builder-BKo51w-F.mjs → builder-U7X6o2EL.mjs} +3 -3
  2. package/dist/compat/mod.d.cts +1 -1
  3. package/dist/compat/mod.d.ts +1 -1
  4. package/dist/compat/transformers.test.mjs +1 -1
  5. package/dist/{context-BOiMZBu5.d.ts → context-C0fssarc.d.ts} +4 -1
  6. package/dist/{context-BhZVy7RB.d.cts → context-LmrZPwti.d.cts} +4 -1
  7. package/dist/{deno-D5r_9RvZ.mjs → deno-CiA1I28P.mjs} +1 -1
  8. package/dist/{docloader-B9CXCw8i.mjs → docloader-CJVLGKkH.mjs} +2 -2
  9. package/dist/federation/builder.test.mjs +1 -1
  10. package/dist/federation/handler.test.mjs +3 -3
  11. package/dist/federation/idempotency.test.mjs +2 -2
  12. package/dist/federation/inbox.test.mjs +1 -1
  13. package/dist/federation/middleware.test.mjs +89 -29
  14. package/dist/federation/mod.cjs +1 -1
  15. package/dist/federation/mod.d.cts +2 -2
  16. package/dist/federation/mod.d.ts +2 -2
  17. package/dist/federation/mod.js +1 -1
  18. package/dist/federation/send.test.mjs +3 -3
  19. package/dist/federation/webfinger.test.mjs +1 -1
  20. package/dist/{http-BngkmEhl.cjs → http-BnhNwZCE.cjs} +1 -1
  21. package/dist/{http-PS3wuU8D.js → http-DGSZjpV8.js} +1 -1
  22. package/dist/{http-B53alCGi.mjs → http-DhPGYu8c.mjs} +2 -2
  23. package/dist/{inbox-CHsLu5ai.mjs → inbox-CB5LTrsc.mjs} +1 -1
  24. package/dist/{key-D9Np_ZXl.mjs → key-BB7giDb0.mjs} +1 -1
  25. package/dist/{kv-cache-B2Qi5MGv.js → kv-cache-BXyQIJaz.js} +1 -1
  26. package/dist/{kv-cache-YCtINZK4.cjs → kv-cache-uC4u_xNv.cjs} +1 -1
  27. package/dist/{ld-BaxRFhDd.mjs → ld-H4y7rFBj.mjs} +2 -2
  28. package/dist/{middleware-dFn6ozt5.mjs → middleware-BuolCLMa.mjs} +49 -24
  29. package/dist/{middleware-Dn1kk96N.js → middleware-CZQtnknj.js} +42 -17
  30. package/dist/{middleware-C37OmOz_.mjs → middleware-D0LdG_ob.mjs} +1 -1
  31. package/dist/{middleware-CelV2xrI.cjs → middleware-DE76xnt9.cjs} +1 -1
  32. package/dist/{middleware-Bsv-7iX7.cjs → middleware-pa87O65Q.cjs} +43 -18
  33. package/dist/{mod-Bp_CzKd4.d.cts → mod-Cgpc49fA.d.cts} +1 -1
  34. package/dist/{mod-DKOAow7a.d.ts → mod-CnwZoDzx.d.ts} +1 -1
  35. package/dist/mod.cjs +4 -4
  36. package/dist/mod.d.cts +2 -2
  37. package/dist/mod.d.ts +2 -2
  38. package/dist/mod.js +4 -4
  39. package/dist/nodeinfo/handler.test.mjs +1 -1
  40. package/dist/{owner-dxM51u36.mjs → owner-BWPBsNVe.mjs} +2 -2
  41. package/dist/{proof-Dpgqx9RS.js → proof-B4c3-QEV.js} +1 -1
  42. package/dist/{proof-CH5U0k7G.mjs → proof-CYvplcHt.mjs} +2 -2
  43. package/dist/{proof-D39qiki3.cjs → proof-lKHWkcgD.cjs} +1 -1
  44. package/dist/{send-D1-4ZnQq.mjs → send-CiKoUUxl.mjs} +2 -2
  45. package/dist/sig/http.test.mjs +2 -2
  46. package/dist/sig/key.test.mjs +1 -1
  47. package/dist/sig/ld.test.mjs +2 -2
  48. package/dist/sig/mod.cjs +2 -2
  49. package/dist/sig/mod.js +2 -2
  50. package/dist/sig/owner.test.mjs +1 -1
  51. package/dist/sig/proof.test.mjs +1 -1
  52. package/dist/testing/mod.d.mts +4 -1
  53. package/dist/utils/docloader.test.mjs +2 -2
  54. package/dist/utils/mod.cjs +1 -1
  55. package/dist/utils/mod.js +1 -1
  56. package/package.json +6 -6
@@ -2,8 +2,8 @@ import "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
4
  import { n as RouterError, t as Router } from "./router-CrMLXoOr.mjs";
5
- import { n as version, t as name } from "./deno-D5r_9RvZ.mjs";
6
- import { t as InboxListenerSet } from "./inbox-CHsLu5ai.mjs";
5
+ import { n as version, t as name } from "./deno-CiA1I28P.mjs";
6
+ import { t as InboxListenerSet } from "./inbox-CB5LTrsc.mjs";
7
7
  import { getTypeId } from "@fedify/vocab";
8
8
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
9
9
  import { getLogger } from "@logtape/logtape";
@@ -43,7 +43,7 @@ var FederationBuilderImpl = class {
43
43
  this.collectionTypeIds = {};
44
44
  }
45
45
  async build(options) {
46
- const { FederationImpl } = await import("./middleware-C37OmOz_.mjs");
46
+ const { FederationImpl } = await import("./middleware-D0LdG_ob.mjs");
47
47
  const f = new FederationImpl(options);
48
48
  const trailingSlashInsensitiveValue = f.router.trailingSlashInsensitive;
49
49
  f.router = this.router.clone();
@@ -1,4 +1,4 @@
1
- import { Ct as ActivityTransformer, n as Context } from "../context-BhZVy7RB.cjs";
1
+ import { Ct as ActivityTransformer, n as Context } from "../context-LmrZPwti.cjs";
2
2
  import { Activity } from "@fedify/vocab";
3
3
 
4
4
  //#region src/compat/transformers.d.ts
@@ -1,6 +1,6 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
- import { Ct as ActivityTransformer, n as Context } from "../context-BOiMZBu5.js";
3
+ import { Ct as ActivityTransformer, n as Context } from "../context-C0fssarc.js";
4
4
  import { Activity } from "@fedify/vocab";
5
5
 
6
6
  //#region src/compat/transformers.d.ts
@@ -5,7 +5,7 @@ import { t as assertEquals } from "../assert_equals-Ew3jOFa3.mjs";
5
5
  import { t as assertInstanceOf } from "../assert_instance_of-C4Ri6VuN.mjs";
6
6
  import { t as assert } from "../assert-ddO5KLpe.mjs";
7
7
  import { t as MemoryKvStore } from "../kv-tL2TOE9X.mjs";
8
- import { _ as autoIdAssigner, g as actorDehydrator, n as FederationImpl } from "../middleware-dFn6ozt5.mjs";
8
+ import { _ as autoIdAssigner, g as actorDehydrator, n as FederationImpl } from "../middleware-BuolCLMa.mjs";
9
9
  import { test } from "@fedify/fixture";
10
10
  import { Follow, Person } from "@fedify/vocab";
11
11
  //#region src/compat/transformers.test.ts
@@ -2573,7 +2573,10 @@ interface GetSignedKeyOptions {
2573
2573
  */
2574
2574
  interface ActorKeyPair extends CryptoKeyPair {
2575
2575
  /**
2576
- * The URI of the public key, which is used for verifying HTTP Signatures.
2576
+ * The URI of the public key for {@link CryptographicKey}, which is used for
2577
+ * verifying HTTP Signatures and Linked Data Signatures. Note that this is
2578
+ * the ID of the {@link cryptographicKey}, not of the {@link multikey};
2579
+ * the {@link Multikey} instance has a distinct ID of its own.
2577
2580
  */
2578
2581
  readonly keyId: URL;
2579
2582
  /**
@@ -2571,7 +2571,10 @@ interface GetSignedKeyOptions {
2571
2571
  */
2572
2572
  interface ActorKeyPair extends CryptoKeyPair {
2573
2573
  /**
2574
- * The URI of the public key, which is used for verifying HTTP Signatures.
2574
+ * The URI of the public key for {@link CryptographicKey}, which is used for
2575
+ * verifying HTTP Signatures and Linked Data Signatures. Note that this is
2576
+ * the ID of the {@link cryptographicKey}, not of the {@link multikey};
2577
+ * the {@link Multikey} instance has a distinct ID of its own.
2575
2578
  */
2576
2579
  readonly keyId: URL;
2577
2580
  /**
@@ -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.1.3";
6
+ var version = "2.1.5";
7
7
  //#endregion
8
8
  export { version as n, name as t };
@@ -1,8 +1,8 @@
1
1
  import "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { o as validateCryptoKey } from "./key-D9Np_ZXl.mjs";
5
- import { n as doubleKnock } from "./http-B53alCGi.mjs";
4
+ import { o as validateCryptoKey } from "./key-BB7giDb0.mjs";
5
+ import { n as doubleKnock } from "./http-DhPGYu8c.mjs";
6
6
  import { curry } from "es-toolkit";
7
7
  import { UrlError, createActivityPubRequest, getRemoteDocument, logRequest, validatePublicUrl } from "@fedify/vocab-runtime";
8
8
  import { getLogger } from "@logtape/logtape";
@@ -5,7 +5,7 @@ import { t as assertEquals } from "../assert_equals-Ew3jOFa3.mjs";
5
5
  import { a as assertExists } from "../std__assert-Duiq_YC9.mjs";
6
6
  import { t as assertThrows } from "../assert_throws-4NwKEy2q.mjs";
7
7
  import { t as MemoryKvStore } from "../kv-tL2TOE9X.mjs";
8
- import { n as createFederationBuilder } from "../builder-BKo51w-F.mjs";
8
+ import { n as createFederationBuilder } from "../builder-U7X6o2EL.mjs";
9
9
  import { test } from "@fedify/fixture";
10
10
  import { Activity, Note, Person } from "@fedify/vocab";
11
11
  //#region src/federation/builder.test.ts
@@ -6,11 +6,11 @@ import { t as assertEquals } from "../assert_equals-Ew3jOFa3.mjs";
6
6
  import "../std__assert-Duiq_YC9.mjs";
7
7
  import { t as assert } from "../assert-ddO5KLpe.mjs";
8
8
  import { r as parseAcceptSignature } from "../accept-Dd__NiUL.mjs";
9
- import { s as signRequest } from "../http-B53alCGi.mjs";
9
+ import { s as signRequest } from "../http-DhPGYu8c.mjs";
10
10
  import { a as rsaPrivateKey3, c as rsaPublicKey3, s as rsaPublicKey2 } from "../keys-BAK-tUlf.mjs";
11
11
  import { t as MemoryKvStore } from "../kv-tL2TOE9X.mjs";
12
- import { a as createFederation, c as handleCollection, d as handleObject, f as respondWithObject, l as handleCustomCollection, p as respondWithObjectIfAcceptable, s as handleActor, u as handleInbox } from "../middleware-dFn6ozt5.mjs";
13
- import { t as InboxListenerSet } from "../inbox-CHsLu5ai.mjs";
12
+ import { a as createFederation, c as handleCollection, d as handleObject, f as respondWithObject, l as handleCustomCollection, p as respondWithObjectIfAcceptable, s as handleActor, u as handleInbox } from "../middleware-BuolCLMa.mjs";
13
+ import { t as InboxListenerSet } from "../inbox-CB5LTrsc.mjs";
14
14
  import { createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
15
15
  import { Create, Note, Person } from "@fedify/vocab";
16
16
  import { FetchError } from "@fedify/vocab-runtime";
@@ -4,9 +4,9 @@ globalThis.addEventListener = () => {};
4
4
  import { t as assertEquals } from "../assert_equals-Ew3jOFa3.mjs";
5
5
  import "../std__assert-Duiq_YC9.mjs";
6
6
  import { n as ed25519PrivateKey, r as ed25519PublicKey, t as ed25519Multikey } from "../keys-BAK-tUlf.mjs";
7
- import { n as signObject } from "../proof-CH5U0k7G.mjs";
7
+ import { n as signObject } from "../proof-CYvplcHt.mjs";
8
8
  import { t as MemoryKvStore } from "../kv-tL2TOE9X.mjs";
9
- import { a as createFederation } from "../middleware-dFn6ozt5.mjs";
9
+ import { a as createFederation } from "../middleware-BuolCLMa.mjs";
10
10
  import { mockDocumentLoader, test } from "@fedify/fixture";
11
11
  import { Create, Follow, Person } from "@fedify/vocab";
12
12
  //#region src/federation/idempotency.test.ts
@@ -3,7 +3,7 @@ import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
4
  import { t as assertEquals } from "../assert_equals-Ew3jOFa3.mjs";
5
5
  import { t as assertThrows } from "../assert_throws-4NwKEy2q.mjs";
6
- import { t as InboxListenerSet } from "../inbox-CHsLu5ai.mjs";
6
+ import { t as InboxListenerSet } from "../inbox-CB5LTrsc.mjs";
7
7
  import { test } from "@fedify/fixture";
8
8
  import { Activity, Create, Invite, Offer, Update } from "@fedify/vocab";
9
9
  //#region src/federation/inbox.test.ts
@@ -10,14 +10,14 @@ import { t as assertInstanceOf } from "../assert_instance_of-C4Ri6VuN.mjs";
10
10
  import { t as assertThrows } from "../assert_throws-4NwKEy2q.mjs";
11
11
  import { t as assertNotEquals } from "../assert_not_equals--wG9hV7u.mjs";
12
12
  import { t as assert } from "../assert-ddO5KLpe.mjs";
13
- import { l as verifyRequest, s as signRequest } from "../http-B53alCGi.mjs";
13
+ import { l as verifyRequest, s as signRequest } from "../http-DhPGYu8c.mjs";
14
14
  import { a as rsaPrivateKey3, c as rsaPublicKey3, i as rsaPrivateKey2, n as ed25519PrivateKey, r as ed25519PublicKey, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-BAK-tUlf.mjs";
15
- import { t as getAuthenticatedDocumentLoader } from "../docloader-B9CXCw8i.mjs";
16
- import { a as signJsonLd, o as verifyJsonLd, r as detachSignature } from "../ld-BaxRFhDd.mjs";
17
- import { t as doesActorOwnKey } from "../owner-dxM51u36.mjs";
18
- import { n as signObject, r as verifyObject } from "../proof-CH5U0k7G.mjs";
15
+ import { t as getAuthenticatedDocumentLoader } from "../docloader-CJVLGKkH.mjs";
16
+ import { a as signJsonLd, o as verifyJsonLd, r as detachSignature } from "../ld-H4y7rFBj.mjs";
17
+ import { t as doesActorOwnKey } from "../owner-BWPBsNVe.mjs";
18
+ import { n as signObject, r as verifyObject } from "../proof-CYvplcHt.mjs";
19
19
  import { t as MemoryKvStore } from "../kv-tL2TOE9X.mjs";
20
- import { a as createFederation, i as KvSpecDeterminer, n as FederationImpl, r as InboxContextImpl, t as ContextImpl } from "../middleware-dFn6ozt5.mjs";
20
+ import { a as createFederation, i as KvSpecDeterminer, n as FederationImpl, r as InboxContextImpl, t as ContextImpl } from "../middleware-BuolCLMa.mjs";
21
21
  import { mockDocumentLoader, test } from "@fedify/fixture";
22
22
  import * as vocab from "@fedify/vocab";
23
23
  import { getTypeId, lookupObject } from "@fedify/vocab";
@@ -285,7 +285,7 @@ test({
285
285
  owner: new URL("https://example.com/users/handle")
286
286
  }),
287
287
  multikey: new vocab.Multikey({
288
- id: new URL("https://example.com/users/handle#main-key"),
288
+ id: new URL("https://example.com/users/handle#multikey-1"),
289
289
  controller: new URL("https://example.com/users/handle"),
290
290
  publicKey: rsaPublicKey2.publicKey
291
291
  })
@@ -298,7 +298,7 @@ test({
298
298
  owner: new URL("https://example.com/users/handle")
299
299
  }),
300
300
  multikey: new vocab.Multikey({
301
- id: new URL("https://example.com/users/handle#key-2"),
301
+ id: new URL("https://example.com/users/handle#multikey-2"),
302
302
  controller: new URL("https://example.com/users/handle"),
303
303
  publicKey: ed25519PublicKey.publicKey
304
304
  })
@@ -1729,8 +1729,10 @@ test("ContextImpl.sendActivity()", async (t) => {
1729
1729
  keyCache: {
1730
1730
  async get(keyId) {
1731
1731
  const keys = await federation.createContext(new URL("https://example.com/"), void 0).getActorKeyPairs("1");
1732
- for (const key of keys) if (key.keyId.href === keyId.href) if (key.publicKey.algorithm.name === "Ed25519") return key.multikey;
1733
- else return key.cryptographicKey;
1732
+ for (const key of keys) {
1733
+ if (key.keyId.href === keyId.href) return key.cryptographicKey;
1734
+ if (key.multikey.id?.href === keyId.href) return key.multikey;
1735
+ }
1734
1736
  },
1735
1737
  async set(_keyId, _key) {}
1736
1738
  }
@@ -1896,25 +1898,29 @@ test("ContextImpl.sendActivity()", async (t) => {
1896
1898
  id: new URL("https://example.com/recipient"),
1897
1899
  inboxId: new URL("https://example.com/inbox")
1898
1900
  }, activity, { fanout: "force" });
1899
- assertEquals(queue.messages, [{
1900
- id: queue.messages[0].id,
1901
- type: "fanout",
1902
- activity: await activity.toJsonLd({
1903
- format: "compact",
1904
- contextLoader: documentLoader
1905
- }),
1906
- activityId: "https://example.com/activity/1",
1907
- activityType: "https://www.w3.org/ns/activitystreams#Create",
1908
- baseUrl: "https://example.com",
1909
- collectionSync: void 0,
1910
- inboxes: { "https://example.com/inbox": {
1911
- actorIds: ["https://example.com/recipient"],
1912
- sharedInbox: false
1913
- } },
1914
- keys: queue.messages[0].type === "fanout" ? queue.messages[0].keys : [],
1915
- orderingKey: void 0,
1916
- traceContext: {}
1917
- }]);
1901
+ assertEquals(queue.messages.length, 1);
1902
+ assert(queue.messages[0].type === "fanout");
1903
+ const fanoutMsg = queue.messages[0];
1904
+ assertEquals(fanoutMsg.activityId, "https://example.com/activity/1");
1905
+ assertEquals(fanoutMsg.activityType, "https://www.w3.org/ns/activitystreams#Create");
1906
+ assertEquals(fanoutMsg.baseUrl, "https://example.com");
1907
+ assertEquals(fanoutMsg.collectionSync, void 0);
1908
+ assertEquals(fanoutMsg.orderingKey, void 0);
1909
+ assertEquals(fanoutMsg.inboxes, { "https://example.com/inbox": {
1910
+ actorIds: ["https://example.com/recipient"],
1911
+ sharedInbox: false
1912
+ } });
1913
+ const signedActivity = await vocab.Create.fromJsonLd(fanoutMsg.activity, {
1914
+ contextLoader: documentLoader,
1915
+ documentLoader
1916
+ });
1917
+ assertEquals(signedActivity.id?.href, "https://example.com/activity/1");
1918
+ let proofCount = 0;
1919
+ for await (const proof of signedActivity.getProofs({ contextLoader: documentLoader })) {
1920
+ assertEquals(proof.verificationMethodId?.href, "https://example.com/john#multikey-2");
1921
+ proofCount++;
1922
+ }
1923
+ assertEquals(proofCount, 1);
1918
1924
  });
1919
1925
  queue.clear();
1920
1926
  await t.step("fanout: \"skip\"", async () => {
@@ -1973,6 +1979,60 @@ test("ContextImpl.sendActivity()", async (t) => {
1973
1979
  type: "fanout"
1974
1980
  }]);
1975
1981
  });
1982
+ await t.step("fanout: fanoutQueue.enqueue() is awaited before sendActivity() returns", async () => {
1983
+ const asyncEnqueued = [];
1984
+ const fed = new FederationImpl({
1985
+ kv,
1986
+ contextLoaderFactory: () => mockDocumentLoader,
1987
+ queue: {
1988
+ enqueue(message) {
1989
+ return new Promise((resolve) => {
1990
+ setTimeout(() => {
1991
+ asyncEnqueued.push(message);
1992
+ resolve();
1993
+ }, 0);
1994
+ });
1995
+ },
1996
+ async listen() {}
1997
+ },
1998
+ manuallyStartQueue: true
1999
+ });
2000
+ fed.setActorDispatcher("/{identifier}", async (ctx, identifier) => {
2001
+ if (identifier !== "john") return null;
2002
+ const keys = await ctx.getActorKeyPairs(identifier);
2003
+ return new vocab.Person({
2004
+ id: ctx.getActorUri(identifier),
2005
+ preferredUsername: "john",
2006
+ publicKey: keys[0].cryptographicKey,
2007
+ assertionMethods: keys.map((k) => k.multikey)
2008
+ });
2009
+ }).setKeyPairsDispatcher((_ctx, identifier) => {
2010
+ if (identifier !== "john") return [];
2011
+ return [{
2012
+ privateKey: rsaPrivateKey2,
2013
+ publicKey: rsaPublicKey2.publicKey
2014
+ }, {
2015
+ privateKey: ed25519PrivateKey,
2016
+ publicKey: ed25519PublicKey.publicKey
2017
+ }];
2018
+ });
2019
+ const ctx3 = new ContextImpl({
2020
+ data: void 0,
2021
+ federation: fed,
2022
+ url: new URL("https://example.com/"),
2023
+ documentLoader: mockDocumentLoader,
2024
+ contextLoader: mockDocumentLoader
2025
+ });
2026
+ const activity = new vocab.Create({
2027
+ id: new URL("https://example.com/activity/1"),
2028
+ actor: new URL("https://example.com/person")
2029
+ });
2030
+ await ctx3.sendActivity({ username: "john" }, {
2031
+ id: new URL("https://example.com/recipient"),
2032
+ inboxId: new URL("https://example.com/inbox")
2033
+ }, activity, { fanout: "force" });
2034
+ assertEquals(asyncEnqueued.length, 1, "fanoutQueue.enqueue() must be awaited before sendActivity() returns");
2035
+ });
1976
2036
  collectionSyncHeader = null;
1977
2037
  await t.step("followers collection without syncCollection", async () => {
1978
2038
  const ctx = new ContextImpl({
@@ -2,7 +2,7 @@ const { Temporal } = require("@js-temporal/polyfill");
2
2
  const { URLPattern } = require("urlpattern-polyfill");
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
4
  require("../chunk-DDcVe30Y.cjs");
5
- const require_middleware = require("../middleware-Bsv-7iX7.cjs");
5
+ const require_middleware = require("../middleware-pa87O65Q.cjs");
6
6
  let es_toolkit = require("es-toolkit");
7
7
  //#region src/federation/kv.ts
8
8
  /**
@@ -1,4 +1,4 @@
1
- import { $ as ActorKeyPairsDispatcher, A as createFederation, B as RouterRouteResult, C as InboxChallengePolicy, D as FederationKvPrefixes, E as Rfc6570Expression, F as Message, G as InProcessMessageQueueOptions, H as respondWithObject, I as createFederationBuilder, J as MessageQueueListenOptions, K as MessageQueue, L as Router, M as RetryContext, N as RetryPolicy, O as FederationOrigin, P as createExponentialBackoffPolicy, Q as ActorHandleMapper, R as RouterError, S as IdempotencyStrategy, St as digest, T as ObjectCallbackSetters, U as respondWithObjectIfAcceptable, V as RespondWithObjectOptions, W as InProcessMessageQueue, X as ActorAliasMapper, Y as ParallelMessageQueue, Z as ActorDispatcher, _ as FederationBuilder, _t as WebFingerLinksDispatcher, a as InboxContext, at as CustomCollectionCursor, b as FederationStartQueueOptions, bt as PageItems, c as RouteActivityOptions, ct as InboxListener, d as ActorCallbackSetters, dt as ObjectDispatcher, et as AuthorizePredicate, f as CollectionCallbackSetters, ft as OutboxErrorHandler, g as Federation, gt as UnverifiedActivityReason, h as Federatable, ht as UnverifiedActivityHandler, i as GetSignedKeyOptions, it as CustomCollectionCounter, j as CreateExponentialBackoffPolicyOptions, k as FederationQueueOptions, l as SendActivityOptions, lt as NodeInfoDispatcher, m as CustomCollectionCallbackSetters, mt as SharedInboxKeyDispatcher, n as Context, nt as CollectionCursor, o as ParseUriResult, ot as CustomCollectionDispatcher, p as ConstructorWithTypeId, pt as OutboxPermanentFailureHandler, q as MessageQueueEnqueueOptions, r as ForwardActivityOptions, rt as CollectionDispatcher, s as RequestContext, st as InboxErrorHandler, t as ActorKeyPair, tt as CollectionCounter, u as SendActivityOptionsForCollection, ut as ObjectAuthorizePredicate, v as FederationFetchOptions, vt as SendActivityError, w as InboxListenerSetters, x as IdempotencyKeyCallback, xt as buildCollectionSynchronizationHeader, y as FederationOptions, yt as SenderKeyPair, z as RouterOptions } from "../context-BhZVy7RB.cjs";
1
+ import { $ as ActorKeyPairsDispatcher, A as createFederation, B as RouterRouteResult, C as InboxChallengePolicy, D as FederationKvPrefixes, E as Rfc6570Expression, F as Message, G as InProcessMessageQueueOptions, H as respondWithObject, I as createFederationBuilder, J as MessageQueueListenOptions, K as MessageQueue, L as Router, M as RetryContext, N as RetryPolicy, O as FederationOrigin, P as createExponentialBackoffPolicy, Q as ActorHandleMapper, R as RouterError, S as IdempotencyStrategy, St as digest, T as ObjectCallbackSetters, U as respondWithObjectIfAcceptable, V as RespondWithObjectOptions, W as InProcessMessageQueue, X as ActorAliasMapper, Y as ParallelMessageQueue, Z as ActorDispatcher, _ as FederationBuilder, _t as WebFingerLinksDispatcher, a as InboxContext, at as CustomCollectionCursor, b as FederationStartQueueOptions, bt as PageItems, c as RouteActivityOptions, ct as InboxListener, d as ActorCallbackSetters, dt as ObjectDispatcher, et as AuthorizePredicate, f as CollectionCallbackSetters, ft as OutboxErrorHandler, g as Federation, gt as UnverifiedActivityReason, h as Federatable, ht as UnverifiedActivityHandler, i as GetSignedKeyOptions, it as CustomCollectionCounter, j as CreateExponentialBackoffPolicyOptions, k as FederationQueueOptions, l as SendActivityOptions, lt as NodeInfoDispatcher, m as CustomCollectionCallbackSetters, mt as SharedInboxKeyDispatcher, n as Context, nt as CollectionCursor, o as ParseUriResult, ot as CustomCollectionDispatcher, p as ConstructorWithTypeId, pt as OutboxPermanentFailureHandler, q as MessageQueueEnqueueOptions, r as ForwardActivityOptions, rt as CollectionDispatcher, s as RequestContext, st as InboxErrorHandler, t as ActorKeyPair, tt as CollectionCounter, u as SendActivityOptionsForCollection, ut as ObjectAuthorizePredicate, v as FederationFetchOptions, vt as SendActivityError, w as InboxListenerSetters, x as IdempotencyKeyCallback, xt as buildCollectionSynchronizationHeader, y as FederationOptions, yt as SenderKeyPair, z as RouterOptions } from "../context-LmrZPwti.cjs";
2
2
  import { a as MemoryKvStore, i as KvStoreSetOptions, n as KvStore, r as KvStoreListEntry, t as KvKey } from "../kv-CbLNp3zQ.cjs";
3
- import { n as handleWebFinger, t as WebFingerHandlerParameters } from "../mod-Bp_CzKd4.cjs";
3
+ import { n as handleWebFinger, t as WebFingerHandlerParameters } from "../mod-Cgpc49fA.cjs";
4
4
  export { ActorAliasMapper, ActorCallbackSetters, ActorDispatcher, ActorHandleMapper, ActorKeyPair, ActorKeyPairsDispatcher, AuthorizePredicate, CollectionCallbackSetters, CollectionCounter, CollectionCursor, CollectionDispatcher, ConstructorWithTypeId, Context, CreateExponentialBackoffPolicyOptions, CustomCollectionCallbackSetters, CustomCollectionCounter, CustomCollectionCursor, CustomCollectionDispatcher, Federatable, Federation, FederationBuilder, FederationFetchOptions, FederationKvPrefixes, FederationOptions, FederationOrigin, FederationQueueOptions, FederationStartQueueOptions, ForwardActivityOptions, GetSignedKeyOptions, IdempotencyKeyCallback, IdempotencyStrategy, InProcessMessageQueue, InProcessMessageQueueOptions, InboxChallengePolicy, InboxContext, InboxErrorHandler, InboxListener, InboxListenerSetters, KvKey, KvStore, KvStoreListEntry, KvStoreSetOptions, MemoryKvStore, Message, MessageQueue, MessageQueueEnqueueOptions, MessageQueueListenOptions, NodeInfoDispatcher, ObjectAuthorizePredicate, ObjectCallbackSetters, ObjectDispatcher, OutboxErrorHandler, OutboxPermanentFailureHandler, PageItems, ParallelMessageQueue, ParseUriResult, RequestContext, RespondWithObjectOptions, RetryContext, RetryPolicy, Rfc6570Expression, RouteActivityOptions, Router, RouterError, RouterOptions, RouterRouteResult, SendActivityError, SendActivityOptions, SendActivityOptionsForCollection, SenderKeyPair, SharedInboxKeyDispatcher, UnverifiedActivityHandler, UnverifiedActivityReason, WebFingerHandlerParameters, WebFingerLinksDispatcher, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, handleWebFinger, respondWithObject, respondWithObjectIfAcceptable };
@@ -1,6 +1,6 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
- import { $ as ActorKeyPairsDispatcher, A as createFederation, B as RouterRouteResult, C as InboxChallengePolicy, D as FederationKvPrefixes, E as Rfc6570Expression, F as Message, G as InProcessMessageQueueOptions, H as respondWithObject, I as createFederationBuilder, J as MessageQueueListenOptions, K as MessageQueue, L as Router, M as RetryContext, N as RetryPolicy, O as FederationOrigin, P as createExponentialBackoffPolicy, Q as ActorHandleMapper, R as RouterError, S as IdempotencyStrategy, St as digest, T as ObjectCallbackSetters, U as respondWithObjectIfAcceptable, V as RespondWithObjectOptions, W as InProcessMessageQueue, X as ActorAliasMapper, Y as ParallelMessageQueue, Z as ActorDispatcher, _ as FederationBuilder, _t as WebFingerLinksDispatcher, a as InboxContext, at as CustomCollectionCursor, b as FederationStartQueueOptions, bt as PageItems, c as RouteActivityOptions, ct as InboxListener, d as ActorCallbackSetters, dt as ObjectDispatcher, et as AuthorizePredicate, f as CollectionCallbackSetters, ft as OutboxErrorHandler, g as Federation, gt as UnverifiedActivityReason, h as Federatable, ht as UnverifiedActivityHandler, i as GetSignedKeyOptions, it as CustomCollectionCounter, j as CreateExponentialBackoffPolicyOptions, k as FederationQueueOptions, l as SendActivityOptions, lt as NodeInfoDispatcher, m as CustomCollectionCallbackSetters, mt as SharedInboxKeyDispatcher, n as Context, nt as CollectionCursor, o as ParseUriResult, ot as CustomCollectionDispatcher, p as ConstructorWithTypeId, pt as OutboxPermanentFailureHandler, q as MessageQueueEnqueueOptions, r as ForwardActivityOptions, rt as CollectionDispatcher, s as RequestContext, st as InboxErrorHandler, t as ActorKeyPair, tt as CollectionCounter, u as SendActivityOptionsForCollection, ut as ObjectAuthorizePredicate, v as FederationFetchOptions, vt as SendActivityError, w as InboxListenerSetters, x as IdempotencyKeyCallback, xt as buildCollectionSynchronizationHeader, y as FederationOptions, yt as SenderKeyPair, z as RouterOptions } from "../context-BOiMZBu5.js";
3
+ import { $ as ActorKeyPairsDispatcher, A as createFederation, B as RouterRouteResult, C as InboxChallengePolicy, D as FederationKvPrefixes, E as Rfc6570Expression, F as Message, G as InProcessMessageQueueOptions, H as respondWithObject, I as createFederationBuilder, J as MessageQueueListenOptions, K as MessageQueue, L as Router, M as RetryContext, N as RetryPolicy, O as FederationOrigin, P as createExponentialBackoffPolicy, Q as ActorHandleMapper, R as RouterError, S as IdempotencyStrategy, St as digest, T as ObjectCallbackSetters, U as respondWithObjectIfAcceptable, V as RespondWithObjectOptions, W as InProcessMessageQueue, X as ActorAliasMapper, Y as ParallelMessageQueue, Z as ActorDispatcher, _ as FederationBuilder, _t as WebFingerLinksDispatcher, a as InboxContext, at as CustomCollectionCursor, b as FederationStartQueueOptions, bt as PageItems, c as RouteActivityOptions, ct as InboxListener, d as ActorCallbackSetters, dt as ObjectDispatcher, et as AuthorizePredicate, f as CollectionCallbackSetters, ft as OutboxErrorHandler, g as Federation, gt as UnverifiedActivityReason, h as Federatable, ht as UnverifiedActivityHandler, i as GetSignedKeyOptions, it as CustomCollectionCounter, j as CreateExponentialBackoffPolicyOptions, k as FederationQueueOptions, l as SendActivityOptions, lt as NodeInfoDispatcher, m as CustomCollectionCallbackSetters, mt as SharedInboxKeyDispatcher, n as Context, nt as CollectionCursor, o as ParseUriResult, ot as CustomCollectionDispatcher, p as ConstructorWithTypeId, pt as OutboxPermanentFailureHandler, q as MessageQueueEnqueueOptions, r as ForwardActivityOptions, rt as CollectionDispatcher, s as RequestContext, st as InboxErrorHandler, t as ActorKeyPair, tt as CollectionCounter, u as SendActivityOptionsForCollection, ut as ObjectAuthorizePredicate, v as FederationFetchOptions, vt as SendActivityError, w as InboxListenerSetters, x as IdempotencyKeyCallback, xt as buildCollectionSynchronizationHeader, y as FederationOptions, yt as SenderKeyPair, z as RouterOptions } from "../context-C0fssarc.js";
4
4
  import { a as MemoryKvStore, i as KvStoreSetOptions, n as KvStore, r as KvStoreListEntry, t as KvKey } from "../kv-GFYnFoOl.js";
5
- import { n as handleWebFinger, t as WebFingerHandlerParameters } from "../mod-DKOAow7a.js";
5
+ import { n as handleWebFinger, t as WebFingerHandlerParameters } from "../mod-CnwZoDzx.js";
6
6
  export { ActorAliasMapper, ActorCallbackSetters, ActorDispatcher, ActorHandleMapper, ActorKeyPair, ActorKeyPairsDispatcher, AuthorizePredicate, CollectionCallbackSetters, CollectionCounter, CollectionCursor, CollectionDispatcher, ConstructorWithTypeId, Context, CreateExponentialBackoffPolicyOptions, CustomCollectionCallbackSetters, CustomCollectionCounter, CustomCollectionCursor, CustomCollectionDispatcher, Federatable, Federation, FederationBuilder, FederationFetchOptions, FederationKvPrefixes, FederationOptions, FederationOrigin, FederationQueueOptions, FederationStartQueueOptions, ForwardActivityOptions, GetSignedKeyOptions, IdempotencyKeyCallback, IdempotencyStrategy, InProcessMessageQueue, InProcessMessageQueueOptions, InboxChallengePolicy, InboxContext, InboxErrorHandler, InboxListener, InboxListenerSetters, KvKey, KvStore, KvStoreListEntry, KvStoreSetOptions, MemoryKvStore, Message, MessageQueue, MessageQueueEnqueueOptions, MessageQueueListenOptions, NodeInfoDispatcher, ObjectAuthorizePredicate, ObjectCallbackSetters, ObjectDispatcher, OutboxErrorHandler, OutboxPermanentFailureHandler, PageItems, ParallelMessageQueue, ParseUriResult, RequestContext, RespondWithObjectOptions, RetryContext, RetryPolicy, Rfc6570Expression, RouteActivityOptions, Router, RouterError, RouterOptions, RouterRouteResult, SendActivityError, SendActivityOptions, SendActivityOptionsForCollection, SenderKeyPair, SharedInboxKeyDispatcher, UnverifiedActivityHandler, UnverifiedActivityReason, WebFingerHandlerParameters, WebFingerLinksDispatcher, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, handleWebFinger, respondWithObject, respondWithObjectIfAcceptable };
@@ -1,6 +1,6 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
- import { a as createExponentialBackoffPolicy, c as buildCollectionSynchronizationHeader, d as Router, f as RouterError, i as SendActivityError, l as digest, o as respondWithObject, r as handleWebFinger, s as respondWithObjectIfAcceptable, t as createFederation, u as createFederationBuilder } from "../middleware-Dn1kk96N.js";
3
+ import { a as createExponentialBackoffPolicy, c as buildCollectionSynchronizationHeader, d as Router, f as RouterError, i as SendActivityError, l as digest, o as respondWithObject, r as handleWebFinger, s as respondWithObjectIfAcceptable, t as createFederation, u as createFederationBuilder } from "../middleware-CZQtnknj.js";
4
4
  import { isEqual } from "es-toolkit";
5
5
  //#region src/federation/kv.ts
6
6
  /**
@@ -8,10 +8,10 @@ import { n as assertFalse, t as assertRejects } from "../assert_rejects-B-qJtC9Z
8
8
  import { t as assertInstanceOf } from "../assert_instance_of-C4Ri6VuN.mjs";
9
9
  import { t as assertNotEquals } from "../assert_not_equals--wG9hV7u.mjs";
10
10
  import { t as assert } from "../assert-ddO5KLpe.mjs";
11
- import { l as verifyRequest } from "../http-B53alCGi.mjs";
11
+ import { l as verifyRequest } from "../http-DhPGYu8c.mjs";
12
12
  import { i as rsaPrivateKey2, n as ed25519PrivateKey, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-BAK-tUlf.mjs";
13
- import { t as doesActorOwnKey } from "../owner-dxM51u36.mjs";
14
- import { n as extractInboxes, r as sendActivity, t as SendActivityError } from "../send-D1-4ZnQq.mjs";
13
+ import { t as doesActorOwnKey } from "../owner-BWPBsNVe.mjs";
14
+ import { n as extractInboxes, r as sendActivity, t as SendActivityError } from "../send-CiKoUUxl.mjs";
15
15
  import { createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
16
16
  import { Activity, Application, Endpoints, Group, Person, Service } from "@fedify/vocab";
17
17
  //#region src/federation/send.test.ts
@@ -5,7 +5,7 @@ import { n as createRequestContext } from "../context-Juj6bdHC.mjs";
5
5
  import { t as assertEquals } from "../assert_equals-Ew3jOFa3.mjs";
6
6
  import "../std__assert-Duiq_YC9.mjs";
7
7
  import { t as MemoryKvStore } from "../kv-tL2TOE9X.mjs";
8
- import { a as createFederation, o as handleWebFinger } from "../middleware-dFn6ozt5.mjs";
8
+ import { a as createFederation, o as handleWebFinger } from "../middleware-BuolCLMa.mjs";
9
9
  import { test } from "@fedify/fixture";
10
10
  import { Image, Link, Person } from "@fedify/vocab";
11
11
  //#region src/federation/webfinger.test.ts
@@ -11,7 +11,7 @@ let _opentelemetry_semantic_conventions = require("@opentelemetry/semantic-conve
11
11
  let byte_encodings_base64 = require("byte-encodings/base64");
12
12
  //#region deno.json
13
13
  var name = "@fedify/fedify";
14
- var version = "2.1.3";
14
+ var version = "2.1.5";
15
15
  //#endregion
16
16
  //#region src/sig/accept.ts
17
17
  /**
@@ -10,7 +10,7 @@ import { ATTR_HTTP_REQUEST_HEADER, ATTR_HTTP_REQUEST_METHOD, ATTR_URL_FULL } fro
10
10
  import { decodeBase64, encodeBase64 } from "byte-encodings/base64";
11
11
  //#region deno.json
12
12
  var name = "@fedify/fedify";
13
- var version = "2.1.3";
13
+ var version = "2.1.5";
14
14
  //#endregion
15
15
  //#region src/sig/accept.ts
16
16
  /**
@@ -1,9 +1,9 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { n as version, t as name } from "./deno-D5r_9RvZ.mjs";
4
+ import { n as version, t as name } from "./deno-CiA1I28P.mjs";
5
5
  import { i as validateAcceptSignature, n as fulfillAcceptSignature, r as parseAcceptSignature } from "./accept-Dd__NiUL.mjs";
6
- import { o as validateCryptoKey, r as fetchKeyDetailed } from "./key-D9Np_ZXl.mjs";
6
+ import { o as validateCryptoKey, r as fetchKeyDetailed } from "./key-BB7giDb0.mjs";
7
7
  import { CryptographicKey } from "@fedify/vocab";
8
8
  import { SpanStatusCode, trace } from "@opentelemetry/api";
9
9
  import { FetchError } from "@fedify/vocab-runtime";
@@ -1,7 +1,7 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { n as version, t as name } from "./deno-D5r_9RvZ.mjs";
4
+ import { n as version, t as name } from "./deno-CiA1I28P.mjs";
5
5
  import { Activity, getTypeId } from "@fedify/vocab";
6
6
  import { SpanKind, SpanStatusCode, context, propagation, trace } from "@opentelemetry/api";
7
7
  import { getLogger } from "@logtape/logtape";
@@ -1,7 +1,7 @@
1
1
  import "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { n as version, t as name } from "./deno-D5r_9RvZ.mjs";
4
+ import { n as version, t as name } from "./deno-CiA1I28P.mjs";
5
5
  import { CryptographicKey, Object as Object$1, isActor } from "@fedify/vocab";
6
6
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
7
7
  import { FetchError, getDocumentLoader } from "@fedify/vocab-runtime";
@@ -1,6 +1,6 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
- import { d as validateCryptoKey, t as doubleKnock } from "./http-PS3wuU8D.js";
3
+ import { d as validateCryptoKey, t as doubleKnock } from "./http-DGSZjpV8.js";
4
4
  import { getLogger } from "@logtape/logtape";
5
5
  import { curry } from "es-toolkit";
6
6
  import { UrlError, createActivityPubRequest, getRemoteDocument, logRequest, preloadedContexts, validatePublicUrl } from "@fedify/vocab-runtime";
@@ -1,7 +1,7 @@
1
1
  const { Temporal } = require("@js-temporal/polyfill");
2
2
  const { URLPattern } = require("urlpattern-polyfill");
3
3
  require("./chunk-DDcVe30Y.cjs");
4
- const require_http = require("./http-BngkmEhl.cjs");
4
+ const require_http = require("./http-BnhNwZCE.cjs");
5
5
  let _logtape_logtape = require("@logtape/logtape");
6
6
  let es_toolkit = require("es-toolkit");
7
7
  let _fedify_vocab_runtime = require("@fedify/vocab-runtime");
@@ -1,8 +1,8 @@
1
1
  import "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { n as version, t as name } from "./deno-D5r_9RvZ.mjs";
5
- import { n as fetchKey, o as validateCryptoKey } from "./key-D9Np_ZXl.mjs";
4
+ import { n as version, t as name } from "./deno-CiA1I28P.mjs";
5
+ import { n as fetchKey, o as validateCryptoKey } from "./key-BB7giDb0.mjs";
6
6
  import { Activity, CryptographicKey, Object as Object$1, getTypeId } from "@fedify/vocab";
7
7
  import { SpanStatusCode, trace } from "@opentelemetry/api";
8
8
  import { getDocumentLoader } from "@fedify/vocab-runtime";