@fedify/fedify 2.5.0-dev.2446 → 2.5.0-dev.2492

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