@fedify/fedify 2.0.36-dev.2598 → 2.0.36-dev.2637

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 (57) hide show
  1. package/dist/{builder-B5hI5Xsn.mjs → builder-BC3eRIbe.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-lxjaUTAI.d.ts → context-C00pWP8x.d.ts} +6 -0
  6. package/dist/{context-CnoWxuoB.d.cts → context-ao-qb3eP.d.cts} +6 -0
  7. package/dist/{deno--OYa_lxj.mjs → deno-Dv6PIwH_.mjs} +1 -1
  8. package/dist/{docloader-BXR2f83H.mjs → docloader-BgHM-JLc.mjs} +2 -2
  9. package/dist/federation/builder.test.mjs +1 -1
  10. package/dist/federation/handler.test.mjs +6 -6
  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 +321 -6
  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/temporal.test.mjs +1 -1
  20. package/dist/federation/webfinger.test.mjs +1 -1
  21. package/dist/{http-C3d2DXwF.mjs → http-BWoAqky4.mjs} +2 -2
  22. package/dist/{http-CfyVeGgF.js → http-CrEB4I8A.js} +1 -1
  23. package/dist/{http-CO_IVq7x.cjs → http-D69BMfAn.cjs} +1 -1
  24. package/dist/{inbox-huUE3IP8.mjs → inbox-0Dbv0QVc.mjs} +1 -1
  25. package/dist/{key-D5e9c_yV.mjs → key-ChKDZfvS.mjs} +1 -1
  26. package/dist/{kv-cache-BMlo_kyv.cjs → kv-cache-B0JZ30EF.cjs} +1 -1
  27. package/dist/{kv-cache-Zw0soD-7.js → kv-cache-CDvE8__9.js} +1 -1
  28. package/dist/{ld-9qfz9rP_.mjs → ld-DbSNiv8Q.mjs} +2 -2
  29. package/dist/{middleware-CT1Lbohd.mjs → middleware-BA9cM-vz.mjs} +1 -1
  30. package/dist/{middleware-BhYpLGA_.mjs → middleware-C849kmHB.mjs} +52 -17
  31. package/dist/{middleware-BKs_a9P1.js → middleware-CEufJR5k.js} +44 -9
  32. package/dist/{middleware-CXoG7ZAW.cjs → middleware-C_fDk_dx.cjs} +45 -10
  33. package/dist/{middleware-Ad6kTSBf.cjs → middleware-DCtCNota.cjs} +1 -1
  34. package/dist/{mod-w1oyHseQ.d.cts → mod-6uJWdCc0.d.cts} +1 -1
  35. package/dist/{mod-I-34OMN3.d.ts → mod-DtRh015i.d.ts} +1 -1
  36. package/dist/mod.cjs +4 -4
  37. package/dist/mod.d.cts +2 -2
  38. package/dist/mod.d.ts +2 -2
  39. package/dist/mod.js +4 -4
  40. package/dist/nodeinfo/handler.test.mjs +1 -1
  41. package/dist/{owner-R4ffU9Ht.mjs → owner-BJeJfxnT.mjs} +2 -2
  42. package/dist/{proof-CiBs9Q4l.mjs → proof-CaMBdk_x.mjs} +2 -2
  43. package/dist/{proof-BrreJTRF.cjs → proof-DNgQwz9E.cjs} +1 -1
  44. package/dist/{proof-CE8nwTF6.js → proof-DwooE8kV.js} +1 -1
  45. package/dist/{send-DpvZgVSA.mjs → send-CYrAOC1K.mjs} +2 -2
  46. package/dist/sig/http.test.mjs +2 -2
  47. package/dist/sig/key.test.mjs +2 -2
  48. package/dist/sig/ld.test.mjs +2 -2
  49. package/dist/sig/mod.cjs +2 -2
  50. package/dist/sig/mod.js +2 -2
  51. package/dist/sig/owner.test.mjs +1 -1
  52. package/dist/sig/proof.test.mjs +2 -2
  53. package/dist/{temporal-Dd-J410Z.mjs → temporal-BJoGKOXy.mjs} +1 -1
  54. package/dist/utils/docloader.test.mjs +2 -2
  55. package/dist/utils/mod.cjs +1 -1
  56. package/dist/utils/mod.js +1 -1
  57. package/package.json +5 -5
@@ -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--OYa_lxj.mjs";
6
- import { t as InboxListenerSet } from "./inbox-huUE3IP8.mjs";
5
+ import { n as version, t as name } from "./deno-Dv6PIwH_.mjs";
6
+ import { t as InboxListenerSet } from "./inbox-0Dbv0QVc.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-CT1Lbohd.mjs");
46
+ const { FederationImpl } = await import("./middleware-BA9cM-vz.mjs");
47
47
  const f = new FederationImpl(options);
48
48
  const trailingSlashInsensitiveValue = f.router.trailingSlashInsensitive;
49
49
  f.router = this.router.clone();
@@ -1,5 +1,5 @@
1
1
  /// <reference lib="esnext.temporal" />
2
- import { bt as ActivityTransformer, n as Context } from "../context-CnoWxuoB.cjs";
2
+ import { bt as ActivityTransformer, n as Context } from "../context-ao-qb3eP.cjs";
3
3
  import { Activity } from "@fedify/vocab";
4
4
 
5
5
  //#region src/compat/transformers.d.ts
@@ -1,5 +1,5 @@
1
1
  /// <reference lib="esnext.temporal" />
2
- import { bt as ActivityTransformer, n as Context } from "../context-lxjaUTAI.js";
2
+ import { bt as ActivityTransformer, n as Context } from "../context-C00pWP8x.js";
3
3
  import { Activity } from "@fedify/vocab";
4
4
 
5
5
  //#region src/compat/transformers.d.ts
@@ -4,7 +4,7 @@ globalThis.addEventListener = () => {};
4
4
  import { t as assertEquals } from "../assert_equals-Ew3jOFa3.mjs";
5
5
  import { n as assertInstanceOf, t as assert } from "../assert-BhQd8QHP.mjs";
6
6
  import { t as MemoryKvStore } from "../kv-mI4Ix2EU.mjs";
7
- import { _ as autoIdAssigner, g as actorDehydrator, n as FederationImpl } from "../middleware-BhYpLGA_.mjs";
7
+ import { _ as autoIdAssigner, g as actorDehydrator, n as FederationImpl } from "../middleware-C849kmHB.mjs";
8
8
  import { test } from "@fedify/fixture";
9
9
  import { Follow, Person } from "@fedify/vocab";
10
10
  //#region src/compat/transformers.test.ts
@@ -1362,6 +1362,12 @@ interface FederationOptions<TContextData> {
1362
1362
  *
1363
1363
  * By default, the queue starts automatically.
1364
1364
  *
1365
+ * Automatic startup is best-effort: if a queue cannot start listening,
1366
+ * a warning is logged once per federation instance and the failed worker is
1367
+ * not retried, while an explicit {@link Federation.startQueue} call rejects.
1368
+ * Runtimes that consume the queue elsewhere, such as Cloudflare Workers with
1369
+ * {@link Federation.processQueuedTask}, should set this to `true`.
1370
+ *
1365
1371
  * @since 0.12.0
1366
1372
  */
1367
1373
  manuallyStartQueue?: boolean;
@@ -1362,6 +1362,12 @@ interface FederationOptions<TContextData> {
1362
1362
  *
1363
1363
  * By default, the queue starts automatically.
1364
1364
  *
1365
+ * Automatic startup is best-effort: if a queue cannot start listening,
1366
+ * a warning is logged once per federation instance and the failed worker is
1367
+ * not retried, while an explicit {@link Federation.startQueue} call rejects.
1368
+ * Runtimes that consume the queue elsewhere, such as Cloudflare Workers with
1369
+ * {@link Federation.processQueuedTask}, should set this to `true`.
1370
+ *
1365
1371
  * @since 0.12.0
1366
1372
  */
1367
1373
  manuallyStartQueue?: boolean;
@@ -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.0.36-dev.2598+90504ae2";
6
+ var version = "2.0.36-dev.2637+cc2cd6fb";
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-D5e9c_yV.mjs";
5
- import { r as doubleKnockScoped } from "./http-C3d2DXwF.mjs";
4
+ import { o as validateCryptoKey } from "./key-ChKDZfvS.mjs";
5
+ import { r as doubleKnockScoped } from "./http-BWoAqky4.mjs";
6
6
  import { curry } from "es-toolkit";
7
7
  import { FetchError, UrlError, createActivityPubRequest, getRemoteDocument, logRequest } from "@fedify/vocab-runtime";
8
8
  import { openDirectFetch, openPublicFetch } from "@fedify/vocab-runtime/internal";
@@ -5,7 +5,7 @@ import { t as assertEquals } from "../assert_equals-Ew3jOFa3.mjs";
5
5
  import { i as assertExists, n as assertStrictEquals } from "../std__assert-DflMZha5.mjs";
6
6
  import { t as assertThrows } from "../assert_throws-D4DNWrux.mjs";
7
7
  import { t as MemoryKvStore } from "../kv-mI4Ix2EU.mjs";
8
- import { n as createFederationBuilder } from "../builder-B5hI5Xsn.mjs";
8
+ import { n as createFederationBuilder } from "../builder-BC3eRIbe.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,14 +6,14 @@ import { t as assertEquals } from "../assert_equals-Ew3jOFa3.mjs";
6
6
  import "../std__assert-DflMZha5.mjs";
7
7
  import { t as assert } from "../assert-BhQd8QHP.mjs";
8
8
  import { t as assertRejects } from "../assert_rejects-WyYSTDDX.mjs";
9
- import { i as generateCryptoKeyPair } from "../key-D5e9c_yV.mjs";
10
- import { c as signRequest } from "../http-C3d2DXwF.mjs";
9
+ import { i as generateCryptoKeyPair } from "../key-ChKDZfvS.mjs";
10
+ import { c as signRequest } from "../http-BWoAqky4.mjs";
11
11
  import { a as rsaPrivateKey3, c as rsaPublicKey3, n as ed25519PrivateKey, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-CCxRJhWa.mjs";
12
- import { a as compactJsonLd, f as signJsonLd } from "../ld-9qfz9rP_.mjs";
13
- import { n as signObject } from "../proof-CiBs9Q4l.mjs";
12
+ import { a as compactJsonLd, f as signJsonLd } from "../ld-DbSNiv8Q.mjs";
13
+ import { n as signObject } from "../proof-CaMBdk_x.mjs";
14
14
  import { t as MemoryKvStore } from "../kv-mI4Ix2EU.mjs";
15
- 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-BhYpLGA_.mjs";
16
- import { t as InboxListenerSet } from "../inbox-huUE3IP8.mjs";
15
+ 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-C849kmHB.mjs";
16
+ import { t as InboxListenerSet } from "../inbox-0Dbv0QVc.mjs";
17
17
  import { createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
18
18
  import { Create, CryptographicKey, Multikey, Note, Person } from "@fedify/vocab";
19
19
  //#region src/federation/handler.test.ts
@@ -4,9 +4,9 @@ globalThis.addEventListener = () => {};
4
4
  import { t as assertEquals } from "../assert_equals-Ew3jOFa3.mjs";
5
5
  import "../std__assert-DflMZha5.mjs";
6
6
  import { n as ed25519PrivateKey, r as ed25519PublicKey, t as ed25519Multikey } from "../keys-CCxRJhWa.mjs";
7
- import { n as signObject } from "../proof-CiBs9Q4l.mjs";
7
+ import { n as signObject } from "../proof-CaMBdk_x.mjs";
8
8
  import { t as MemoryKvStore } from "../kv-mI4Ix2EU.mjs";
9
- import { a as createFederation } from "../middleware-BhYpLGA_.mjs";
9
+ import { a as createFederation } from "../middleware-C849kmHB.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 { r as assertFalse, t as assertThrows } from "../assert_throws-D4DNWrux.mjs";
6
- import { n as actorsHaveSameOrigin, t as InboxListenerSet } from "../inbox-huUE3IP8.mjs";
6
+ import { n as actorsHaveSameOrigin, t as InboxListenerSet } from "../inbox-0Dbv0QVc.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
@@ -9,18 +9,19 @@ import { r as assertFalse, t as assertThrows } from "../assert_throws-D4DNWrux.m
9
9
  import { n as assertInstanceOf, t as assert } from "../assert-BhQd8QHP.mjs";
10
10
  import { t as assertNotEquals } from "../assert_not_equals-BkxW5QJI.mjs";
11
11
  import { t as assertRejects } from "../assert_rejects-WyYSTDDX.mjs";
12
- import { c as signRequest, u as verifyRequest } from "../http-C3d2DXwF.mjs";
12
+ import { c as signRequest, u as verifyRequest } from "../http-BWoAqky4.mjs";
13
13
  import { a as rsaPrivateKey3, c as rsaPublicKey3, i as rsaPrivateKey2, n as ed25519PrivateKey, r as ed25519PublicKey, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-CCxRJhWa.mjs";
14
- import { n as getAuthenticatedDocumentLoader } from "../docloader-BXR2f83H.mjs";
15
- import { a as compactJsonLd, f as signJsonLd, i as attachSignature, m as verifyJsonLd, s as detachSignature } from "../ld-9qfz9rP_.mjs";
16
- import { t as doesActorOwnKey } from "../owner-R4ffU9Ht.mjs";
17
- import { n as signObject, r as verifyObject } from "../proof-CiBs9Q4l.mjs";
14
+ import { n as getAuthenticatedDocumentLoader } from "../docloader-BgHM-JLc.mjs";
15
+ import { a as compactJsonLd, f as signJsonLd, i as attachSignature, m as verifyJsonLd, s as detachSignature } from "../ld-DbSNiv8Q.mjs";
16
+ import { t as doesActorOwnKey } from "../owner-BJeJfxnT.mjs";
17
+ import { n as signObject, r as verifyObject } from "../proof-CaMBdk_x.mjs";
18
18
  import { t as MemoryKvStore } from "../kv-mI4Ix2EU.mjs";
19
- import { a as createFederation, i as KvSpecDeterminer, n as FederationImpl, r as InboxContextImpl, t as ContextImpl } from "../middleware-BhYpLGA_.mjs";
19
+ import { a as createFederation, i as KvSpecDeterminer, n as FederationImpl, r as InboxContextImpl, t as ContextImpl } from "../middleware-C849kmHB.mjs";
20
20
  import { createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
21
21
  import * as vocab from "@fedify/vocab";
22
22
  import { Create, Offer, Person, getTypeId, lookupObject } from "@fedify/vocab";
23
23
  import { FetchError, UrlError, getDocumentLoader } from "@fedify/vocab-runtime";
24
+ import { configure, reset } from "@logtape/logtape";
24
25
  import dns from "node:dns/promises";
25
26
  //#region ../fixture/src/fixtures/example.com/create.json
26
27
  var id$2 = "https://example.com/create";
@@ -1575,6 +1576,320 @@ test("FederationImpl.sendActivity()", async (t) => {
1575
1576
  });
1576
1577
  esm_default.hardReset();
1577
1578
  });
1579
+ const QUEUE_STARTUP_WARNING = "Failed to start queue workers automatically: {error}";
1580
+ /**
1581
+ * Captures unhandled promise rejections for the duration of a test step.
1582
+ *
1583
+ * Deno dispatches `unhandledrejection` on `globalThis`, while Node.js and Bun
1584
+ * dispatch `unhandledRejection` on `process`. Bun's test runner currently
1585
+ * fires neither, so there the native runner's own unhandled-rejection failure
1586
+ * remains the signal; the assertion is harmless otherwise.
1587
+ */
1588
+ function captureUnhandledRejections() {
1589
+ const reasons = [];
1590
+ const isDeno = "Deno" in globalThis;
1591
+ const onRejectionEvent = (event) => {
1592
+ event.preventDefault();
1593
+ reasons.push(event.reason);
1594
+ };
1595
+ const onProcessRejection = (reason) => {
1596
+ reasons.push(reason);
1597
+ };
1598
+ const globalTarget = globalThis;
1599
+ const proc = globalThis.process;
1600
+ if (isDeno) globalTarget.addEventListener?.("unhandledrejection", onRejectionEvent);
1601
+ else proc?.on?.("unhandledRejection", onProcessRejection);
1602
+ async function settle() {
1603
+ await new Promise((resolve) => setTimeout(resolve, 0));
1604
+ await new Promise((resolve) => setTimeout(resolve, 0));
1605
+ }
1606
+ return {
1607
+ reasons,
1608
+ settle,
1609
+ stop() {
1610
+ if (isDeno) globalTarget.removeEventListener?.("unhandledrejection", onRejectionEvent);
1611
+ else proc?.off?.("unhandledRejection", onProcessRejection);
1612
+ }
1613
+ };
1614
+ }
1615
+ async function configureQueueStartupWarningCapture(records) {
1616
+ await configure({
1617
+ sinks: { buffer(record) {
1618
+ records.push(record);
1619
+ } },
1620
+ loggers: [{
1621
+ category: "fedify",
1622
+ sinks: ["buffer"],
1623
+ lowestLevel: "warning"
1624
+ }, {
1625
+ category: ["logtape", "meta"],
1626
+ sinks: []
1627
+ }],
1628
+ reset: true
1629
+ });
1630
+ }
1631
+ function queueStartupWarnings(records, error) {
1632
+ return records.filter((record) => record.level === "warning" && record.category.length === 3 && record.category[0] === "fedify" && record.category[1] === "federation" && record.category[2] === "queue" && record.rawMessage === QUEUE_STARTUP_WARNING && record.properties.error === error);
1633
+ }
1634
+ test("Federation.fetch() reports automatic queue startup failures", async (t) => {
1635
+ const listenError = /* @__PURE__ */ new TypeError("simulated listen() failure");
1636
+ const queue = {
1637
+ enqueue() {
1638
+ return Promise.resolve();
1639
+ },
1640
+ listen() {
1641
+ throw listenError;
1642
+ }
1643
+ };
1644
+ const capture = captureUnhandledRejections();
1645
+ const records = [];
1646
+ await configureQueueStartupWarningCapture(records);
1647
+ try {
1648
+ const federation = createFederation({
1649
+ kv: new MemoryKvStore(),
1650
+ queue,
1651
+ skipSignatureVerification: true,
1652
+ documentLoaderFactory: () => mockDocumentLoader,
1653
+ contextLoaderFactory: () => mockDocumentLoader
1654
+ });
1655
+ federation.setActorDispatcher("/actors/{identifier}", () => new Person({ id: new URL("https://example.com/actor") }));
1656
+ federation.setInboxListeners("/actors/{identifier}/inbox", "/inbox").on(Create, () => {});
1657
+ const post = (id) => federation.fetch(new Request("https://example.com/inbox", {
1658
+ method: "POST",
1659
+ headers: { "Content-Type": "application/activity+json" },
1660
+ body: JSON.stringify({
1661
+ "@context": "https://www.w3.org/ns/activitystreams",
1662
+ id,
1663
+ type: "Create",
1664
+ actor: "https://example.com/actor"
1665
+ })
1666
+ }), { contextData: void 0 });
1667
+ await t.step("synchronous failure", async () => {
1668
+ assertEquals((await post("https://example.com/activities/queued-1")).status, 202);
1669
+ await capture.settle();
1670
+ assertEquals(queueStartupWarnings(records, listenError).length, 1);
1671
+ assertEquals(capture.reasons, []);
1672
+ assertEquals((await post("https://example.com/activities/queued-2")).status, 202);
1673
+ await capture.settle();
1674
+ assertEquals(queueStartupWarnings(records, listenError).length, 1, "the warning must be logged only once per federation instance");
1675
+ assertEquals(capture.reasons, []);
1676
+ });
1677
+ await t.step("asynchronous failure", async () => {
1678
+ const asyncError = /* @__PURE__ */ new TypeError("simulated async listen() failure");
1679
+ let rejectListen;
1680
+ const asyncFederation = createFederation({
1681
+ kv: new MemoryKvStore(),
1682
+ queue: {
1683
+ enqueue() {
1684
+ return Promise.resolve();
1685
+ },
1686
+ listen() {
1687
+ return new Promise((_resolve, reject) => {
1688
+ rejectListen = reject;
1689
+ });
1690
+ }
1691
+ },
1692
+ skipSignatureVerification: true,
1693
+ documentLoaderFactory: () => mockDocumentLoader,
1694
+ contextLoaderFactory: () => mockDocumentLoader
1695
+ });
1696
+ asyncFederation.setActorDispatcher("/actors/{identifier}", () => new Person({ id: new URL("https://example.com/actor") }));
1697
+ asyncFederation.setInboxListeners("/actors/{identifier}/inbox", "/inbox").on(Create, () => {});
1698
+ assertEquals((await asyncFederation.fetch(new Request("https://example.com/inbox", {
1699
+ method: "POST",
1700
+ headers: { "Content-Type": "application/activity+json" },
1701
+ body: JSON.stringify({
1702
+ "@context": "https://www.w3.org/ns/activitystreams",
1703
+ id: "https://example.com/activities/queued-async",
1704
+ type: "Create",
1705
+ actor: "https://example.com/actor"
1706
+ })
1707
+ }), { contextData: void 0 })).status, 202);
1708
+ await capture.settle();
1709
+ assertEquals(queueStartupWarnings(records, asyncError).length, 0);
1710
+ assert(rejectListen != null);
1711
+ rejectListen(asyncError);
1712
+ await capture.settle();
1713
+ assertEquals(queueStartupWarnings(records, asyncError).length, 1, "a listener that rejects after startup must still be reported");
1714
+ assertEquals(capture.reasons, []);
1715
+ });
1716
+ } finally {
1717
+ await capture.settle();
1718
+ capture.stop();
1719
+ await reset();
1720
+ }
1721
+ });
1722
+ test("Federation.startQueue() rejects when a queue cannot listen", async () => {
1723
+ const listenError = /* @__PURE__ */ new TypeError("simulated listen() failure");
1724
+ const federation = createFederation({
1725
+ kv: new MemoryKvStore(),
1726
+ queue: {
1727
+ enqueue() {
1728
+ return Promise.resolve();
1729
+ },
1730
+ listen() {
1731
+ throw listenError;
1732
+ }
1733
+ },
1734
+ manuallyStartQueue: true
1735
+ });
1736
+ assertStrictEquals(await assertRejects(() => federation.startQueue(void 0)), listenError);
1737
+ });
1738
+ test("Federation.startQueue() keeps other queue workers running", async () => {
1739
+ const outboxError = /* @__PURE__ */ new TypeError("simulated outbox listen() failure");
1740
+ const lateInboxError = /* @__PURE__ */ new TypeError("simulated late inbox failure");
1741
+ let rejectInbox;
1742
+ let fanoutStarted = false;
1743
+ const inbox = {
1744
+ enqueue() {
1745
+ return Promise.resolve();
1746
+ },
1747
+ listen() {
1748
+ return new Promise((_resolve, reject) => {
1749
+ rejectInbox = reject;
1750
+ });
1751
+ }
1752
+ };
1753
+ const outbox = {
1754
+ enqueue() {
1755
+ return Promise.resolve();
1756
+ },
1757
+ listen() {
1758
+ throw outboxError;
1759
+ }
1760
+ };
1761
+ const fanout = {
1762
+ enqueue() {
1763
+ return Promise.resolve();
1764
+ },
1765
+ listen() {
1766
+ fanoutStarted = true;
1767
+ return new Promise(() => {});
1768
+ }
1769
+ };
1770
+ const capture = captureUnhandledRejections();
1771
+ try {
1772
+ const federation = createFederation({
1773
+ kv: new MemoryKvStore(),
1774
+ queue: {
1775
+ inbox,
1776
+ outbox,
1777
+ fanout
1778
+ },
1779
+ manuallyStartQueue: true
1780
+ });
1781
+ assertStrictEquals(await assertRejects(() => federation.startQueue(void 0)), outboxError);
1782
+ assert(fanoutStarted, "a synchronous throw from one queue must not prevent later queues from starting");
1783
+ assert(rejectInbox != null);
1784
+ rejectInbox(lateInboxError);
1785
+ await capture.settle();
1786
+ assertEquals(capture.reasons, [], "an earlier listener rejection must remain handled after startup fails");
1787
+ } finally {
1788
+ await capture.settle();
1789
+ capture.stop();
1790
+ }
1791
+ });
1792
+ test("ContextImpl.sendActivity() reports automatic queue startup failures", async (t) => {
1793
+ const sender = [{
1794
+ privateKey: ed25519PrivateKey,
1795
+ keyId: ed25519Multikey.id
1796
+ }];
1797
+ const recipient = {
1798
+ id: new URL("https://example.com/recipient"),
1799
+ inboxId: new URL("https://example.com/inbox")
1800
+ };
1801
+ const createActivity = () => new Create({
1802
+ id: new URL("https://example.com/activities/queue-startup-send"),
1803
+ actor: new URL("https://example.com/actor")
1804
+ });
1805
+ await t.step("outbox", async () => {
1806
+ const listenError = /* @__PURE__ */ new TypeError("simulated outbox listen() failure");
1807
+ const messages = [];
1808
+ const queue = {
1809
+ enqueue(message) {
1810
+ messages.push(message);
1811
+ return Promise.resolve();
1812
+ },
1813
+ listen() {
1814
+ throw listenError;
1815
+ }
1816
+ };
1817
+ const capture = captureUnhandledRejections();
1818
+ const records = [];
1819
+ await configureQueueStartupWarningCapture(records);
1820
+ try {
1821
+ await new ContextImpl({
1822
+ data: void 0,
1823
+ federation: new FederationImpl({
1824
+ kv: new MemoryKvStore(),
1825
+ queue: { outbox: queue },
1826
+ documentLoaderFactory: () => mockDocumentLoader,
1827
+ contextLoaderFactory: () => mockDocumentLoader
1828
+ }),
1829
+ url: new URL("https://example.com/"),
1830
+ documentLoader: mockDocumentLoader,
1831
+ contextLoader: mockDocumentLoader
1832
+ }).sendActivity(sender, recipient, createActivity());
1833
+ assertEquals(messages.map((message) => message.type), ["outbox"]);
1834
+ await capture.settle();
1835
+ assertEquals(queueStartupWarnings(records, listenError).length, 1);
1836
+ assertEquals(capture.reasons, []);
1837
+ } finally {
1838
+ await capture.settle();
1839
+ capture.stop();
1840
+ await reset();
1841
+ }
1842
+ });
1843
+ await t.step("fanout", async () => {
1844
+ const listenError = /* @__PURE__ */ new TypeError("simulated fanout listen() failure");
1845
+ const messages = [];
1846
+ const outbox = {
1847
+ enqueue() {
1848
+ return Promise.resolve();
1849
+ },
1850
+ listen() {
1851
+ return Promise.resolve();
1852
+ }
1853
+ };
1854
+ const fanout = {
1855
+ enqueue(message) {
1856
+ messages.push(message);
1857
+ return Promise.resolve();
1858
+ },
1859
+ listen() {
1860
+ throw listenError;
1861
+ }
1862
+ };
1863
+ const capture = captureUnhandledRejections();
1864
+ const records = [];
1865
+ await configureQueueStartupWarningCapture(records);
1866
+ try {
1867
+ await new ContextImpl({
1868
+ data: void 0,
1869
+ federation: new FederationImpl({
1870
+ kv: new MemoryKvStore(),
1871
+ queue: {
1872
+ outbox,
1873
+ fanout
1874
+ },
1875
+ documentLoaderFactory: () => mockDocumentLoader,
1876
+ contextLoaderFactory: () => mockDocumentLoader
1877
+ }),
1878
+ url: new URL("https://example.com/"),
1879
+ documentLoader: mockDocumentLoader,
1880
+ contextLoader: mockDocumentLoader
1881
+ }).sendActivity(sender, recipient, createActivity(), { fanout: "force" });
1882
+ assertEquals(messages.map((message) => message.type), ["fanout"]);
1883
+ await capture.settle();
1884
+ assertEquals(queueStartupWarnings(records, listenError).length, 1);
1885
+ assertEquals(capture.reasons, []);
1886
+ } finally {
1887
+ await capture.settle();
1888
+ capture.stop();
1889
+ await reset();
1890
+ }
1891
+ });
1892
+ });
1578
1893
  test("FederationImpl.processQueuedTask()", async (t) => {
1579
1894
  await t.step("with MessageQueue having nativeRetrial", async () => {
1580
1895
  const kv = new MemoryKvStore();
@@ -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-CXoG7ZAW.cjs");
5
+ const require_middleware = require("../middleware-C_fDk_dx.cjs");
6
6
  let es_toolkit = require("es-toolkit");
7
7
  //#region src/federation/kv.ts
8
8
  /**
@@ -1,5 +1,5 @@
1
1
  /// <reference lib="esnext.temporal" />
2
- import { $ as AuthorizePredicate, A as CreateExponentialBackoffPolicyOptions, B as RespondWithObjectOptions, C as InboxListenerSetters, D as FederationOrigin, E as FederationKvPrefixes, F as createFederationBuilder, G as MessageQueue, H as respondWithObjectIfAcceptable, I as Router, J as ParallelMessageQueue, K as MessageQueueEnqueueOptions, L as RouterError, M as RetryPolicy, N as createExponentialBackoffPolicy, O as FederationQueueOptions, P as Message, Q as ActorKeyPairsDispatcher, R as RouterOptions, S as IdempotencyStrategy, T as Rfc6570Expression, U as InProcessMessageQueue, V as respondWithObject, W as InProcessMessageQueueOptions, X as ActorDispatcher, Y as ActorAliasMapper, Z as ActorHandleMapper, _ as FederationBuilder, _t as PageItems, a as InboxContext, at as CustomCollectionDispatcher, b as FederationStartQueueOptions, c as RouteActivityOptions, ct as NodeInfoDispatcher, d as ActorCallbackSetters, dt as OutboxErrorHandler, et as CollectionCounter, f as CollectionCallbackSetters, ft as OutboxPermanentFailureHandler, g as Federation, gt as SenderKeyPair, h as Federatable, ht as SendActivityError, i as GetSignedKeyOptions, it as CustomCollectionCursor, j as RetryContext, k as createFederation, l as SendActivityOptions, lt as ObjectAuthorizePredicate, m as CustomCollectionCallbackSetters, mt as WebFingerLinksDispatcher, n as Context, nt as CollectionDispatcher, o as ParseUriResult, ot as InboxErrorHandler, p as ConstructorWithTypeId, pt as SharedInboxKeyDispatcher, q as MessageQueueListenOptions, r as ForwardActivityOptions, rt as CustomCollectionCounter, s as RequestContext, st as InboxListener, t as ActorKeyPair, tt as CollectionCursor, u as SendActivityOptionsForCollection, ut as ObjectDispatcher, v as FederationFetchOptions, vt as buildCollectionSynchronizationHeader, w as ObjectCallbackSetters, x as IdempotencyKeyCallback, y as FederationOptions, yt as digest, z as RouterRouteResult } from "../context-CnoWxuoB.cjs";
2
+ import { $ as AuthorizePredicate, A as CreateExponentialBackoffPolicyOptions, B as RespondWithObjectOptions, C as InboxListenerSetters, D as FederationOrigin, E as FederationKvPrefixes, F as createFederationBuilder, G as MessageQueue, H as respondWithObjectIfAcceptable, I as Router, J as ParallelMessageQueue, K as MessageQueueEnqueueOptions, L as RouterError, M as RetryPolicy, N as createExponentialBackoffPolicy, O as FederationQueueOptions, P as Message, Q as ActorKeyPairsDispatcher, R as RouterOptions, S as IdempotencyStrategy, T as Rfc6570Expression, U as InProcessMessageQueue, V as respondWithObject, W as InProcessMessageQueueOptions, X as ActorDispatcher, Y as ActorAliasMapper, Z as ActorHandleMapper, _ as FederationBuilder, _t as PageItems, a as InboxContext, at as CustomCollectionDispatcher, b as FederationStartQueueOptions, c as RouteActivityOptions, ct as NodeInfoDispatcher, d as ActorCallbackSetters, dt as OutboxErrorHandler, et as CollectionCounter, f as CollectionCallbackSetters, ft as OutboxPermanentFailureHandler, g as Federation, gt as SenderKeyPair, h as Federatable, ht as SendActivityError, i as GetSignedKeyOptions, it as CustomCollectionCursor, j as RetryContext, k as createFederation, l as SendActivityOptions, lt as ObjectAuthorizePredicate, m as CustomCollectionCallbackSetters, mt as WebFingerLinksDispatcher, n as Context, nt as CollectionDispatcher, o as ParseUriResult, ot as InboxErrorHandler, p as ConstructorWithTypeId, pt as SharedInboxKeyDispatcher, q as MessageQueueListenOptions, r as ForwardActivityOptions, rt as CustomCollectionCounter, s as RequestContext, st as InboxListener, t as ActorKeyPair, tt as CollectionCursor, u as SendActivityOptionsForCollection, ut as ObjectDispatcher, v as FederationFetchOptions, vt as buildCollectionSynchronizationHeader, w as ObjectCallbackSetters, x as IdempotencyKeyCallback, y as FederationOptions, yt as digest, z as RouterRouteResult } from "../context-ao-qb3eP.cjs";
3
3
  import { a as MemoryKvStore, i as KvStoreSetOptions, n as KvStore, r as KvStoreListEntry, t as KvKey } from "../kv-CZKl1IUS.cjs";
4
- import { n as handleWebFinger, t as WebFingerHandlerParameters } from "../mod-w1oyHseQ.cjs";
4
+ import { n as handleWebFinger, t as WebFingerHandlerParameters } from "../mod-6uJWdCc0.cjs";
5
5
  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, 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, WebFingerHandlerParameters, WebFingerLinksDispatcher, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, handleWebFinger, respondWithObject, respondWithObjectIfAcceptable };
@@ -1,5 +1,5 @@
1
1
  /// <reference lib="esnext.temporal" />
2
- import { $ as AuthorizePredicate, A as CreateExponentialBackoffPolicyOptions, B as RespondWithObjectOptions, C as InboxListenerSetters, D as FederationOrigin, E as FederationKvPrefixes, F as createFederationBuilder, G as MessageQueue, H as respondWithObjectIfAcceptable, I as Router, J as ParallelMessageQueue, K as MessageQueueEnqueueOptions, L as RouterError, M as RetryPolicy, N as createExponentialBackoffPolicy, O as FederationQueueOptions, P as Message, Q as ActorKeyPairsDispatcher, R as RouterOptions, S as IdempotencyStrategy, T as Rfc6570Expression, U as InProcessMessageQueue, V as respondWithObject, W as InProcessMessageQueueOptions, X as ActorDispatcher, Y as ActorAliasMapper, Z as ActorHandleMapper, _ as FederationBuilder, _t as PageItems, a as InboxContext, at as CustomCollectionDispatcher, b as FederationStartQueueOptions, c as RouteActivityOptions, ct as NodeInfoDispatcher, d as ActorCallbackSetters, dt as OutboxErrorHandler, et as CollectionCounter, f as CollectionCallbackSetters, ft as OutboxPermanentFailureHandler, g as Federation, gt as SenderKeyPair, h as Federatable, ht as SendActivityError, i as GetSignedKeyOptions, it as CustomCollectionCursor, j as RetryContext, k as createFederation, l as SendActivityOptions, lt as ObjectAuthorizePredicate, m as CustomCollectionCallbackSetters, mt as WebFingerLinksDispatcher, n as Context, nt as CollectionDispatcher, o as ParseUriResult, ot as InboxErrorHandler, p as ConstructorWithTypeId, pt as SharedInboxKeyDispatcher, q as MessageQueueListenOptions, r as ForwardActivityOptions, rt as CustomCollectionCounter, s as RequestContext, st as InboxListener, t as ActorKeyPair, tt as CollectionCursor, u as SendActivityOptionsForCollection, ut as ObjectDispatcher, v as FederationFetchOptions, vt as buildCollectionSynchronizationHeader, w as ObjectCallbackSetters, x as IdempotencyKeyCallback, y as FederationOptions, yt as digest, z as RouterRouteResult } from "../context-lxjaUTAI.js";
2
+ import { $ as AuthorizePredicate, A as CreateExponentialBackoffPolicyOptions, B as RespondWithObjectOptions, C as InboxListenerSetters, D as FederationOrigin, E as FederationKvPrefixes, F as createFederationBuilder, G as MessageQueue, H as respondWithObjectIfAcceptable, I as Router, J as ParallelMessageQueue, K as MessageQueueEnqueueOptions, L as RouterError, M as RetryPolicy, N as createExponentialBackoffPolicy, O as FederationQueueOptions, P as Message, Q as ActorKeyPairsDispatcher, R as RouterOptions, S as IdempotencyStrategy, T as Rfc6570Expression, U as InProcessMessageQueue, V as respondWithObject, W as InProcessMessageQueueOptions, X as ActorDispatcher, Y as ActorAliasMapper, Z as ActorHandleMapper, _ as FederationBuilder, _t as PageItems, a as InboxContext, at as CustomCollectionDispatcher, b as FederationStartQueueOptions, c as RouteActivityOptions, ct as NodeInfoDispatcher, d as ActorCallbackSetters, dt as OutboxErrorHandler, et as CollectionCounter, f as CollectionCallbackSetters, ft as OutboxPermanentFailureHandler, g as Federation, gt as SenderKeyPair, h as Federatable, ht as SendActivityError, i as GetSignedKeyOptions, it as CustomCollectionCursor, j as RetryContext, k as createFederation, l as SendActivityOptions, lt as ObjectAuthorizePredicate, m as CustomCollectionCallbackSetters, mt as WebFingerLinksDispatcher, n as Context, nt as CollectionDispatcher, o as ParseUriResult, ot as InboxErrorHandler, p as ConstructorWithTypeId, pt as SharedInboxKeyDispatcher, q as MessageQueueListenOptions, r as ForwardActivityOptions, rt as CustomCollectionCounter, s as RequestContext, st as InboxListener, t as ActorKeyPair, tt as CollectionCursor, u as SendActivityOptionsForCollection, ut as ObjectDispatcher, v as FederationFetchOptions, vt as buildCollectionSynchronizationHeader, w as ObjectCallbackSetters, x as IdempotencyKeyCallback, y as FederationOptions, yt as digest, z as RouterRouteResult } from "../context-C00pWP8x.js";
3
3
  import { a as MemoryKvStore, i as KvStoreSetOptions, n as KvStore, r as KvStoreListEntry, t as KvKey } from "../kv-CxaI4eGo.js";
4
- import { n as handleWebFinger, t as WebFingerHandlerParameters } from "../mod-I-34OMN3.js";
4
+ import { n as handleWebFinger, t as WebFingerHandlerParameters } from "../mod-DtRh015i.js";
5
5
  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, 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, 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 { 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-BKs_a9P1.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-CEufJR5k.js";
4
4
  import { isEqual } from "es-toolkit";
5
5
  //#region src/federation/kv.ts
6
6
  /**
@@ -8,10 +8,10 @@ import { r as assertFalse } from "../assert_throws-D4DNWrux.mjs";
8
8
  import { n as assertInstanceOf, t as assert } from "../assert-BhQd8QHP.mjs";
9
9
  import { t as assertNotEquals } from "../assert_not_equals-BkxW5QJI.mjs";
10
10
  import { t as assertRejects } from "../assert_rejects-WyYSTDDX.mjs";
11
- import { u as verifyRequest } from "../http-C3d2DXwF.mjs";
11
+ import { u as verifyRequest } from "../http-BWoAqky4.mjs";
12
12
  import { i as rsaPrivateKey2, n as ed25519PrivateKey, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-CCxRJhWa.mjs";
13
- import { t as doesActorOwnKey } from "../owner-R4ffU9Ht.mjs";
14
- import { i as sendActivity, n as extractInboxes, r as fetchWithValidatedRedirects, t as SendActivityError } from "../send-DpvZgVSA.mjs";
13
+ import { t as doesActorOwnKey } from "../owner-BJeJfxnT.mjs";
14
+ import { i as sendActivity, n as extractInboxes, r as fetchWithValidatedRedirects, t as SendActivityError } from "../send-CYrAOC1K.mjs";
15
15
  import { createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
16
16
  import { Activity, Application, Endpoints, Group, Person, Service } from "@fedify/vocab";
17
17
  import { FetchError, UrlError } from "@fedify/vocab-runtime";
@@ -4,7 +4,7 @@ globalThis.addEventListener = () => {};
4
4
  import "../std__assert-DflMZha5.mjs";
5
5
  import { r as assertFalse } from "../assert_throws-D4DNWrux.mjs";
6
6
  import { t as assert } from "../assert-BhQd8QHP.mjs";
7
- import { t as hasMalformedKnownTemporalLiteral } from "../temporal-Dd-J410Z.mjs";
7
+ import { t as hasMalformedKnownTemporalLiteral } from "../temporal-BJoGKOXy.mjs";
8
8
  import { test } from "@fedify/fixture";
9
9
  //#region src/federation/temporal.test.ts
10
10
  test("hasMalformedKnownTemporalLiteral() detects expanded proof timestamps", async () => {
@@ -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-DflMZha5.mjs";
7
7
  import { t as MemoryKvStore } from "../kv-mI4Ix2EU.mjs";
8
- import { a as createFederation, o as handleWebFinger } from "../middleware-BhYpLGA_.mjs";
8
+ import { a as createFederation, o as handleWebFinger } from "../middleware-C849kmHB.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
@@ -1,8 +1,8 @@
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--OYa_lxj.mjs";
5
- import { o as validateCryptoKey, r as fetchKey } from "./key-D5e9c_yV.mjs";
4
+ import { n as version, t as name } from "./deno-Dv6PIwH_.mjs";
5
+ import { o as validateCryptoKey, r as fetchKey } from "./key-ChKDZfvS.mjs";
6
6
  import { CryptographicKey } from "@fedify/vocab";
7
7
  import { SpanStatusCode, trace } from "@opentelemetry/api";
8
8
  import { FetchError } from "@fedify/vocab-runtime";
@@ -10,7 +10,7 @@ import { decodeBase64, encodeBase64 } from "byte-encodings/base64";
10
10
  import { Item, decodeDict, encodeItem } from "structured-field-values";
11
11
  //#region deno.json
12
12
  var name = "@fedify/fedify";
13
- var version = "2.0.36-dev.2598+90504ae2";
13
+ var version = "2.0.36-dev.2637+cc2cd6fb";
14
14
  //#endregion
15
15
  //#region src/sig/key.ts
16
16
  /** Classifies decoding failures without hiding unexpected loader errors. */
@@ -11,7 +11,7 @@ let byte_encodings_base64 = require("byte-encodings/base64");
11
11
  let structured_field_values = require("structured-field-values");
12
12
  //#region deno.json
13
13
  var name = "@fedify/fedify";
14
- var version = "2.0.36-dev.2598+90504ae2";
14
+ var version = "2.0.36-dev.2637+cc2cd6fb";
15
15
  //#endregion
16
16
  //#region src/sig/key.ts
17
17
  /** Classifies decoding failures without hiding unexpected loader errors. */
@@ -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--OYa_lxj.mjs";
4
+ import { n as version, t as name } from "./deno-Dv6PIwH_.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";