@fedify/fedify 2.0.0-pr.434.1662 → 2.0.0-pr.435.1667

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 (123) hide show
  1. package/dist/{actor-Dd2E4F9C.cjs → actor-C3gJhZJj.cjs} +187 -187
  2. package/dist/{actor-Dsla85Uq.js → actor-CnVfp1Hp.js} +187 -187
  3. package/dist/{actor-By5NMImS.js → actor-Cpal85xW.js} +1 -1
  4. package/dist/{assert_rejects-DiIiJbZn.js → assert_rejects-7UF4R_Qs.js} +1 -1
  5. package/dist/{assert_throws-BOO88avQ.js → assert_throws-53_pKeP3.js} +1 -1
  6. package/dist/{authdocloader-B28UEZlz.cjs → authdocloader-DPCGwidE.cjs} +3 -3
  7. package/dist/{authdocloader-CpmdBiRe.js → authdocloader-DWnwkjvZ.js} +3 -3
  8. package/dist/{authdocloader-lhbaj4KA.js → authdocloader-Df2BFefL.js} +3 -3
  9. package/dist/{builder-B6AupxqD.js → builder-CMxichO9.js} +4 -4
  10. package/dist/{client-KUXReLjS.js → client-BqyuOGiQ.js} +1 -1
  11. package/dist/compat/mod.d.cts +2 -2
  12. package/dist/compat/mod.d.ts +2 -2
  13. package/dist/compat/transformers.test.js +17 -18
  14. package/dist/{context-CQsAT7xk.d.ts → context-CDSZdQHD.d.ts} +1 -0
  15. package/dist/{context-tVOQ76fi.d.cts → context-Dq8aCtMH.d.cts} +1 -0
  16. package/dist/{docloader-NJZ5ADV3.cjs → docloader-B1O1Z5OK.cjs} +2 -2
  17. package/dist/{docloader-ZGKS1Zy-.js → docloader-xJVzq9O0.js} +2 -2
  18. package/dist/{esm-CIFbziGC.js → esm-BBznxjVc.js} +1 -1
  19. package/dist/federation/builder.test.js +10 -10
  20. package/dist/federation/collection.test.js +8 -8
  21. package/dist/federation/handler.test.js +145 -26
  22. package/dist/federation/inbox.test.js +6 -6
  23. package/dist/federation/keycache.test.js +4 -4
  24. package/dist/federation/kv.test.js +8 -8
  25. package/dist/federation/middleware.test.js +38 -255
  26. package/dist/federation/mod.cjs +10 -10
  27. package/dist/federation/mod.d.cts +1 -1
  28. package/dist/federation/mod.d.ts +1 -1
  29. package/dist/federation/mod.js +10 -10
  30. package/dist/federation/mq.test.js +10 -10
  31. package/dist/federation/retry.test.js +5 -5
  32. package/dist/federation/router.test.js +8 -8
  33. package/dist/federation/send.test.js +15 -15
  34. package/dist/{http-BqSkbrGv.js → http-CovAm6we.js} +3 -3
  35. package/dist/{http-DH8DQz2-.cjs → http-Hw9HJp9i.cjs} +3 -3
  36. package/dist/{http-CCydyMoV.js → http-y7khnX5Q.js} +2 -2
  37. package/dist/{inbox-DH8TXk1f.js → inbox-DpcYOzs8.js} +1 -1
  38. package/dist/{key-cn3BcQaB.js → key-BRmlopJL.js} +2 -2
  39. package/dist/key-CV3FT32G.cjs +10 -0
  40. package/dist/{key-CYrKbGH0.cjs → key-CzF9SAEI.cjs} +2 -2
  41. package/dist/{key-B057bXm0.js → key-DORX19Bl.js} +2 -2
  42. package/dist/{key-3cqchRKs.js → key-jf6dIIF-.js} +3 -3
  43. package/dist/{key-HjvDY-QJ.js → key-lapZwBwG.js} +4 -4
  44. package/dist/{keycache-CB_VjDe0.js → keycache-AH1uj1j-.js} +1 -1
  45. package/dist/{keys-Dz9o2VwW.js → keys-B3fzLXBG.js} +1 -1
  46. package/dist/{ld-CxJe2x7_.js → ld-D3cq9xO1.js} +2 -2
  47. package/dist/{lookup-BZzUCUat.cjs → lookup-7u217Q3H.cjs} +1 -1
  48. package/dist/{lookup-q8DeFAjR.js → lookup-BrhURkmj.js} +1 -1
  49. package/dist/{lookup-Cc-KXO2K.js → lookup-CfU0DgLr.js} +1 -1
  50. package/dist/{middleware-DxS7Csvz.js → middleware-BDN7YoYJ.js} +130 -35
  51. package/dist/middleware-CV-OPMlZ.js +17 -0
  52. package/dist/middleware-DGqnaAbp.cjs +17 -0
  53. package/dist/{middleware-BvEwDOJ5.js → middleware-DXWUGrBQ.js} +63 -32
  54. package/dist/{middleware-DGvzxKjo.cjs → middleware-Gsxukxs5.cjs} +63 -32
  55. package/dist/middleware-cCdfTTMv.js +25 -0
  56. package/dist/{mod-DBQAI4v9.d.cts → mod-BhMnAkFX.d.cts} +1 -1
  57. package/dist/{mod-B26zRlH1.d.ts → mod-RI3-KvUI.d.ts} +1 -1
  58. package/dist/mod.cjs +10 -10
  59. package/dist/mod.d.cts +2 -2
  60. package/dist/mod.d.ts +2 -2
  61. package/dist/mod.js +10 -10
  62. package/dist/nodeinfo/client.test.js +10 -10
  63. package/dist/nodeinfo/handler.test.js +22 -23
  64. package/dist/nodeinfo/mod.cjs +2 -2
  65. package/dist/nodeinfo/mod.js +2 -2
  66. package/dist/nodeinfo/types.test.js +8 -8
  67. package/dist/{owner-jwXilm3L.js → owner-NFlQJyvM.js} +2 -2
  68. package/dist/{proof-BE1A6Ct1.js → proof-Be1oOYEh.js} +3 -3
  69. package/dist/{proof-BzKiLsN7.cjs → proof-Gip91fK7.cjs} +3 -3
  70. package/dist/{proof-CHi36V0T.js → proof-ar9xgPWi.js} +2 -2
  71. package/dist/runtime/authdocloader.test.js +14 -14
  72. package/dist/runtime/docloader.test.js +9 -9
  73. package/dist/runtime/key.test.js +10 -10
  74. package/dist/runtime/langstr.test.js +8 -8
  75. package/dist/runtime/link.test.js +3 -3
  76. package/dist/runtime/mod.cjs +6 -6
  77. package/dist/runtime/mod.js +6 -6
  78. package/dist/runtime/multibase/multibase.test.js +8 -8
  79. package/dist/runtime/url.test.js +5 -5
  80. package/dist/{send-CwVrwo7j.js → send-DkwkMFjJ.js} +2 -2
  81. package/dist/sig/http.test.js +13 -13
  82. package/dist/sig/key.test.js +11 -11
  83. package/dist/sig/ld.test.js +10 -10
  84. package/dist/sig/mod.cjs +6 -6
  85. package/dist/sig/mod.js +6 -6
  86. package/dist/sig/owner.test.js +12 -12
  87. package/dist/sig/proof.test.js +12 -12
  88. package/dist/testing/docloader.test.js +8 -8
  89. package/dist/testing/mod.js +3 -3
  90. package/dist/{testing-Cqwzq9nj.js → testing-BMBhkcz9.js} +2 -2
  91. package/dist/{type-BSR-vRXo.js → type-FCer_9yh.js} +187 -187
  92. package/dist/{types-XMA_ABYQ.js → types-CNWeAz8v.js} +1 -1
  93. package/dist/{types-zwVAf9LF.cjs → types-CZ_qo9KW.cjs} +1 -1
  94. package/dist/vocab/actor.test.js +10 -10
  95. package/dist/vocab/lookup.test.js +9 -9
  96. package/dist/vocab/mod.cjs +4 -4
  97. package/dist/vocab/mod.js +4 -4
  98. package/dist/vocab/type.test.js +3 -3
  99. package/dist/vocab/vocab.test.js +9 -9
  100. package/dist/{vocab-Bj8iyEkG.cjs → vocab-9MjZjuZb.cjs} +3 -3
  101. package/dist/{vocab-BlOQWNvd.js → vocab-gpwUU9fc.js} +3 -3
  102. package/dist/webfinger/handler.test.js +22 -23
  103. package/dist/webfinger/lookup.test.js +9 -9
  104. package/dist/webfinger/mod.cjs +2 -2
  105. package/dist/webfinger/mod.js +2 -2
  106. package/dist/x/cfworkers.test.js +8 -8
  107. package/dist/x/hono.d.cts +1 -1
  108. package/dist/x/hono.d.ts +1 -1
  109. package/dist/x/sveltekit.d.cts +1 -1
  110. package/dist/x/sveltekit.d.ts +1 -1
  111. package/package.json +1 -1
  112. package/dist/federation/negotiation.test.d.ts +0 -3
  113. package/dist/federation/negotiation.test.js +0 -28
  114. package/dist/key-Bom4W546.cjs +0 -10
  115. package/dist/middleware-B7yi4Uls.cjs +0 -17
  116. package/dist/middleware-DCdrZPxz.js +0 -17
  117. package/dist/middleware-DTjhpVrj.js +0 -26
  118. package/dist/negotiation-5NPJL6zp.js +0 -71
  119. /package/dist/{assert_is_error-BPGph1Jx.js → assert_is_error-B035L3om.js} +0 -0
  120. /package/dist/{assert_not_equals-f3m3epl3.js → assert_not_equals-C80BG-_5.js} +0 -0
  121. /package/dist/{denokv-Bv33Xxea.js → denokv-jZ0Z2h0M.js} +0 -0
  122. /package/dist/{retry-D4GJ670a.js → retry-CfF8Gn4d.js} +0 -0
  123. /package/dist/{std__assert-X-_kMxKM.js → std__assert-DWivtrGR.js} +0 -0
@@ -3,9 +3,9 @@
3
3
  const { URLPattern } = require("urlpattern-polyfill");
4
4
 
5
5
  const require_chunk = require('./chunk-DqRYRqnO.cjs');
6
- const require_docloader = require('./docloader-NJZ5ADV3.cjs');
7
- const require_actor = require('./actor-Dd2E4F9C.cjs');
8
- const require_key = require('./key-CYrKbGH0.cjs');
6
+ const require_docloader = require('./docloader-B1O1Z5OK.cjs');
7
+ const require_actor = require('./actor-C3gJhZJj.cjs');
8
+ const require_key = require('./key-CzF9SAEI.cjs');
9
9
  const __logtape_logtape = require_chunk.__toESM(require("@logtape/logtape"));
10
10
  const __opentelemetry_api = require_chunk.__toESM(require("@opentelemetry/api"));
11
11
  const byte_encodings_base64 = require_chunk.__toESM(require("byte-encodings/base64"));
@@ -3,8 +3,8 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { CryptographicKey, deno_default } from "./type-BSR-vRXo.js";
7
- import { fetchKey, validateCryptoKey } from "./key-B057bXm0.js";
6
+ import { CryptographicKey, deno_default } from "./type-FCer_9yh.js";
7
+ import { fetchKey, validateCryptoKey } from "./key-DORX19Bl.js";
8
8
  import { getLogger } from "@logtape/logtape";
9
9
  import { SpanStatusCode, trace } from "@opentelemetry/api";
10
10
  import { ATTR_HTTP_REQUEST_HEADER, ATTR_HTTP_REQUEST_METHOD, ATTR_URL_FULL } from "@opentelemetry/semantic-conventions";
@@ -3,7 +3,7 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { Activity, deno_default, getTypeId } from "./type-BSR-vRXo.js";
6
+ import { Activity, deno_default, getTypeId } from "./type-FCer_9yh.js";
7
7
  import { getLogger } from "@logtape/logtape";
8
8
  import { SpanKind, SpanStatusCode, context, propagation, trace } from "@opentelemetry/api";
9
9
 
@@ -2,8 +2,8 @@
2
2
  import { Temporal } from "@js-temporal/polyfill";
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
 
5
- import { deno_default, getDocumentLoader } from "./docloader-ZGKS1Zy-.js";
6
- import { CryptographicKey, Object as Object$1, isActor } from "./actor-Dsla85Uq.js";
5
+ import { deno_default, getDocumentLoader } from "./docloader-xJVzq9O0.js";
6
+ import { CryptographicKey, Object as Object$1, isActor } from "./actor-CnVfp1Hp.js";
7
7
  import { getLogger } from "@logtape/logtape";
8
8
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
9
9
 
@@ -0,0 +1,10 @@
1
+
2
+ const { Temporal } = require("@js-temporal/polyfill");
3
+ const { URLPattern } = require("urlpattern-polyfill");
4
+
5
+ require('./docloader-B1O1Z5OK.cjs');
6
+ require('./actor-C3gJhZJj.cjs');
7
+ require('./lookup-7u217Q3H.cjs');
8
+ const require_key = require('./key-CzF9SAEI.cjs');
9
+
10
+ exports.validateCryptoKey = require_key.validateCryptoKey;
@@ -3,8 +3,8 @@
3
3
  const { URLPattern } = require("urlpattern-polyfill");
4
4
 
5
5
  const require_chunk = require('./chunk-DqRYRqnO.cjs');
6
- const require_docloader = require('./docloader-NJZ5ADV3.cjs');
7
- const require_actor = require('./actor-Dd2E4F9C.cjs');
6
+ const require_docloader = require('./docloader-B1O1Z5OK.cjs');
7
+ const require_actor = require('./actor-C3gJhZJj.cjs');
8
8
  const __logtape_logtape = require_chunk.__toESM(require("@logtape/logtape"));
9
9
  const __opentelemetry_api = require_chunk.__toESM(require("@opentelemetry/api"));
10
10
 
@@ -3,8 +3,8 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { CryptographicKey, Object as Object$1, deno_default, getDocumentLoader } from "./type-BSR-vRXo.js";
7
- import { isActor } from "./actor-By5NMImS.js";
6
+ import { CryptographicKey, Object as Object$1, deno_default, getDocumentLoader } from "./type-FCer_9yh.js";
7
+ import { isActor } from "./actor-Cpal85xW.js";
8
8
  import { getLogger } from "@logtape/logtape";
9
9
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
10
10
 
@@ -3,8 +3,8 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import "./type-BSR-vRXo.js";
7
- import "./actor-By5NMImS.js";
8
- import { exportJwk, fetchKey, generateCryptoKeyPair, importJwk, validateCryptoKey } from "./key-B057bXm0.js";
6
+ import "./type-FCer_9yh.js";
7
+ import "./actor-Cpal85xW.js";
8
+ import { exportJwk, fetchKey, generateCryptoKeyPair, importJwk, validateCryptoKey } from "./key-DORX19Bl.js";
9
9
 
10
10
  export { validateCryptoKey };
@@ -2,9 +2,9 @@
2
2
  import { Temporal } from "@js-temporal/polyfill";
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
 
5
- import "./docloader-ZGKS1Zy-.js";
6
- import "./actor-Dsla85Uq.js";
7
- import "./lookup-Cc-KXO2K.js";
8
- import { exportJwk, fetchKey, generateCryptoKeyPair, importJwk, validateCryptoKey } from "./key-cn3BcQaB.js";
5
+ import "./docloader-xJVzq9O0.js";
6
+ import "./actor-CnVfp1Hp.js";
7
+ import "./lookup-CfU0DgLr.js";
8
+ import { exportJwk, fetchKey, generateCryptoKeyPair, importJwk, validateCryptoKey } from "./key-BRmlopJL.js";
9
9
 
10
10
  export { validateCryptoKey };
@@ -3,7 +3,7 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { CryptographicKey, Multikey } from "./type-BSR-vRXo.js";
6
+ import { CryptographicKey, Multikey } from "./type-FCer_9yh.js";
7
7
 
8
8
  //#region src/federation/keycache.ts
9
9
  var KvKeyCache = class {
@@ -3,7 +3,7 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { CryptographicKey, Multikey, importSpki } from "./type-BSR-vRXo.js";
6
+ import { CryptographicKey, Multikey, importSpki } from "./type-FCer_9yh.js";
7
7
 
8
8
  //#region src/testing/keys.ts
9
9
  const rsaPublicKey1 = new CryptographicKey({
@@ -3,8 +3,8 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { Activity, CryptographicKey, Object as Object$1, deno_default, getDocumentLoader, getTypeId } from "./type-BSR-vRXo.js";
7
- import { fetchKey, validateCryptoKey } from "./key-B057bXm0.js";
6
+ import { Activity, CryptographicKey, Object as Object$1, deno_default, getDocumentLoader, getTypeId } from "./type-FCer_9yh.js";
7
+ import { fetchKey, validateCryptoKey } from "./key-DORX19Bl.js";
8
8
  import { getLogger } from "@logtape/logtape";
9
9
  import { SpanStatusCode, trace } from "@opentelemetry/api";
10
10
  import { decodeBase64, encodeBase64 } from "byte-encodings/base64";
@@ -3,7 +3,7 @@
3
3
  const { URLPattern } = require("urlpattern-polyfill");
4
4
 
5
5
  const require_chunk = require('./chunk-DqRYRqnO.cjs');
6
- const require_docloader = require('./docloader-NJZ5ADV3.cjs');
6
+ const require_docloader = require('./docloader-B1O1Z5OK.cjs');
7
7
  const __logtape_logtape = require_chunk.__toESM(require("@logtape/logtape"));
8
8
  const __opentelemetry_api = require_chunk.__toESM(require("@opentelemetry/api"));
9
9
 
@@ -3,7 +3,7 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { Object as Object$1, deno_default, getDocumentLoader, getTypeId, lookupWebFinger } from "./type-BSR-vRXo.js";
6
+ import { Object as Object$1, deno_default, getDocumentLoader, getTypeId, lookupWebFinger } from "./type-FCer_9yh.js";
7
7
  import { cloneDeep, delay } from "es-toolkit";
8
8
  import { getLogger } from "@logtape/logtape";
9
9
  import { SpanStatusCode, trace } from "@opentelemetry/api";
@@ -2,7 +2,7 @@
2
2
  import { Temporal } from "@js-temporal/polyfill";
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
 
5
- import { UrlError, deno_default, getUserAgent, validatePublicUrl } from "./docloader-ZGKS1Zy-.js";
5
+ import { UrlError, deno_default, getUserAgent, validatePublicUrl } from "./docloader-xJVzq9O0.js";
6
6
  import { getLogger } from "@logtape/logtape";
7
7
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
8
8
 
@@ -3,23 +3,22 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { Activity, Collection, CollectionPage, CryptographicKey, Link, Multikey, Object as Object$1, OrderedCollection, OrderedCollectionPage, deno_default, getDocumentLoader, getTypeId, kvCache, lookupWebFinger } from "./type-BSR-vRXo.js";
7
- import { getNodeInfo } from "./client-KUXReLjS.js";
8
- import { RouterError, lookupObject, traverseCollection } from "./lookup-q8DeFAjR.js";
6
+ import { Activity, Collection, CollectionPage, CryptographicKey, Link, Multikey, Object as Object$1, OrderedCollection, OrderedCollectionPage, deno_default, getDocumentLoader, getTypeId, kvCache, lookupWebFinger } from "./type-FCer_9yh.js";
7
+ import { getNodeInfo } from "./client-BqyuOGiQ.js";
8
+ import { RouterError, lookupObject, traverseCollection } from "./lookup-BrhURkmj.js";
9
9
  import { nodeInfoToJson } from "./types-BSuWJsOm.js";
10
- import { exportJwk, importJwk, validateCryptoKey } from "./key-B057bXm0.js";
11
- import { verifyRequest } from "./http-CCydyMoV.js";
12
- import { getAuthenticatedDocumentLoader } from "./authdocloader-lhbaj4KA.js";
13
- import { detachSignature, hasSignature, signJsonLd, verifyJsonLd } from "./ld-CxJe2x7_.js";
14
- import { doesActorOwnKey, getKeyOwner } from "./owner-jwXilm3L.js";
15
- import { signObject, verifyObject } from "./proof-CHi36V0T.js";
16
- import { routeActivity } from "./inbox-DH8TXk1f.js";
17
- import { FederationBuilderImpl } from "./builder-B6AupxqD.js";
10
+ import { exportJwk, importJwk, validateCryptoKey } from "./key-DORX19Bl.js";
11
+ import { verifyRequest } from "./http-y7khnX5Q.js";
12
+ import { getAuthenticatedDocumentLoader } from "./authdocloader-Df2BFefL.js";
13
+ import { detachSignature, hasSignature, signJsonLd, verifyJsonLd } from "./ld-D3cq9xO1.js";
14
+ import { doesActorOwnKey, getKeyOwner } from "./owner-NFlQJyvM.js";
15
+ import { signObject, verifyObject } from "./proof-ar9xgPWi.js";
16
+ import { routeActivity } from "./inbox-DpcYOzs8.js";
17
+ import { FederationBuilderImpl } from "./builder-CMxichO9.js";
18
18
  import { buildCollectionSynchronizationHeader } from "./collection-CcnIw1qY.js";
19
- import { KvKeyCache } from "./keycache-CB_VjDe0.js";
20
- import { acceptsJsonLd } from "./negotiation-5NPJL6zp.js";
21
- import { createExponentialBackoffPolicy } from "./retry-D4GJ670a.js";
22
- import { extractInboxes, sendActivity } from "./send-CwVrwo7j.js";
19
+ import { KvKeyCache } from "./keycache-AH1uj1j-.js";
20
+ import { createExponentialBackoffPolicy } from "./retry-CfF8Gn4d.js";
21
+ import { extractInboxes, sendActivity } from "./send-DkwkMFjJ.js";
23
22
  import { getLogger, withContext } from "@logtape/logtape";
24
23
  import { SpanKind, SpanStatusCode, context, propagation, trace } from "@opentelemetry/api";
25
24
  import { ATTR_HTTP_REQUEST_HEADER, ATTR_HTTP_REQUEST_METHOD, ATTR_HTTP_RESPONSE_HEADER, ATTR_HTTP_RESPONSE_STATUS_CODE, ATTR_URL_FULL } from "@opentelemetry/semantic-conventions";
@@ -298,8 +297,73 @@ async function handleWebFingerInternal(request, { context: context$1, host, acto
298
297
  } });
299
298
  }
300
299
 
300
+ //#endregion
301
+ //#region src/federation/negotiation.ts
302
+ function compareSpecs(a, b) {
303
+ return b.q - a.q || (b.s ?? 0) - (a.s ?? 0) || (a.o ?? 0) - (b.o ?? 0) || a.i - b.i || 0;
304
+ }
305
+ function isQuality(spec) {
306
+ return spec.q > 0;
307
+ }
308
+ const simpleMediaTypeRegExp = /^\s*([^\s\/;]+)\/([^;\s]+)\s*(?:;(.*))?$/;
309
+ function splitKeyValuePair(str) {
310
+ const [key, value] = str.split("=");
311
+ return [key.toLowerCase(), value];
312
+ }
313
+ function parseMediaType(str, i) {
314
+ const match = simpleMediaTypeRegExp.exec(str);
315
+ if (!match) return;
316
+ const [, type, subtype, parameters] = match;
317
+ if (!type || !subtype) return;
318
+ const params = Object.create(null);
319
+ let q = 1;
320
+ if (parameters) {
321
+ const kvps = parameters.split(";").map((p) => p.trim()).map(splitKeyValuePair);
322
+ for (const [key, val] of kvps) {
323
+ const value = val && val[0] === `"` && val[val.length - 1] === `"` ? val.slice(1, val.length - 1) : val;
324
+ if (key === "q" && value) {
325
+ q = parseFloat(value);
326
+ break;
327
+ }
328
+ params[key] = value;
329
+ }
330
+ }
331
+ return {
332
+ type,
333
+ subtype,
334
+ params,
335
+ i,
336
+ o: void 0,
337
+ q,
338
+ s: void 0
339
+ };
340
+ }
341
+ function parseAccept(accept) {
342
+ const accepts = accept.split(",").map((p) => p.trim());
343
+ const mediaTypes = [];
344
+ for (const [index, accept$1] of accepts.entries()) {
345
+ const mediaType = parseMediaType(accept$1.trim(), index);
346
+ if (mediaType) mediaTypes.push(mediaType);
347
+ }
348
+ return mediaTypes;
349
+ }
350
+ function getFullType(spec) {
351
+ return `${spec.type}/${spec.subtype}`;
352
+ }
353
+ function preferredMediaTypes(accept) {
354
+ const accepts = parseAccept(accept === void 0 ? "*/*" : accept ?? "");
355
+ return accepts.filter(isQuality).sort(compareSpecs).map(getFullType);
356
+ }
357
+
301
358
  //#endregion
302
359
  //#region src/federation/handler.ts
360
+ function acceptsJsonLd(request) {
361
+ const accept = request.headers.get("Accept");
362
+ const types = accept ? preferredMediaTypes(accept) : ["*/*"];
363
+ if (types == null) return true;
364
+ if (types[0] === "text/html" || types[0] === "application/xhtml+xml") return false;
365
+ return types.includes("application/activity+json") || types.includes("application/ld+json") || types.includes("application/json");
366
+ }
303
367
  /**
304
368
  * Handles an actor request.
305
369
  * @template TContextData The context data to pass to the context.
@@ -307,7 +371,7 @@ async function handleWebFingerInternal(request, { context: context$1, host, acto
307
371
  * @param parameters The parameters for handling the actor.
308
372
  * @returns A promise that resolves to an HTTP response.
309
373
  */
310
- async function handleActor(request, { identifier, context: context$1, actorDispatcher, authorizePredicate, onNotFound, onUnauthorized }) {
374
+ async function handleActor(request, { identifier, context: context$1, actorDispatcher, authorizePredicate, onNotFound, onNotAcceptable, onUnauthorized }) {
311
375
  const logger$2 = getLogger([
312
376
  "fedify",
313
377
  "federation",
@@ -322,6 +386,7 @@ async function handleActor(request, { identifier, context: context$1, actorDispa
322
386
  logger$2.debug("Actor {identifier} not found.", { identifier });
323
387
  return await onNotFound(request);
324
388
  }
389
+ if (!acceptsJsonLd(request)) return await onNotAcceptable(request);
325
390
  if (authorizePredicate != null) {
326
391
  let key = await context$1.getSignedKey();
327
392
  key = key?.clone({}, { $warning: {
@@ -356,10 +421,11 @@ async function handleActor(request, { identifier, context: context$1, actorDispa
356
421
  * @param parameters The parameters for handling the object.
357
422
  * @returns A promise that resolves to an HTTP response.
358
423
  */
359
- async function handleObject(request, { values, context: context$1, objectDispatcher, authorizePredicate, onNotFound, onUnauthorized }) {
424
+ async function handleObject(request, { values, context: context$1, objectDispatcher, authorizePredicate, onNotFound, onNotAcceptable, onUnauthorized }) {
360
425
  if (objectDispatcher == null) return await onNotFound(request);
361
426
  const object = await objectDispatcher(context$1, values);
362
427
  if (object == null) return await onNotFound(request);
428
+ if (!acceptsJsonLd(request)) return await onNotAcceptable(request);
363
429
  if (authorizePredicate != null) {
364
430
  let key = await context$1.getSignedKey();
365
431
  key = key?.clone({}, { $warning: {
@@ -397,7 +463,7 @@ async function handleObject(request, { values, context: context$1, objectDispatc
397
463
  * @param parameters The parameters for handling the collection.
398
464
  * @returns A promise that resolves to an HTTP response.
399
465
  */
400
- async function handleCollection(request, { name, identifier, uriGetter, filter, filterPredicate, context: context$1, collectionCallbacks, tracerProvider, onUnauthorized, onNotFound }) {
466
+ async function handleCollection(request, { name, identifier, uriGetter, filter, filterPredicate, context: context$1, collectionCallbacks, tracerProvider, onUnauthorized, onNotFound, onNotAcceptable }) {
401
467
  const spanName = name.trim().replace(/\s+/g, "_");
402
468
  tracerProvider = tracerProvider ?? trace.getTracerProvider();
403
469
  const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
@@ -510,6 +576,7 @@ async function handleCollection(request, { name, identifier, uriGetter, filter,
510
576
  partOf
511
577
  });
512
578
  }
579
+ if (!acceptsJsonLd(request)) return await onNotAcceptable(request);
513
580
  if (collectionCallbacks.authorizePredicate != null) {
514
581
  let key = await context$1.getSignedKey();
515
582
  key = key?.clone({}, { $warning: {
@@ -847,6 +914,7 @@ async function handleInboxInternal(request, { recipient, context: ctx, inboxCont
847
914
  const handleCustomCollection = exceptWrapper(_handleCustomCollection);
848
915
  async function _handleCustomCollection(request, { name, values, context: context$1, tracerProvider, collectionCallbacks: callbacks, filterPredicate }) {
849
916
  verifyDefined(callbacks);
917
+ verifyJsonLdRequest(request);
850
918
  await authIfNeeded(context$1, values, callbacks);
851
919
  const cursor = new URL(request.url).searchParams.get("cursor");
852
920
  return await new CustomCollectionHandler(name, values, context$1, callbacks, tracerProvider, Collection, CollectionPage, filterPredicate).fetchCollection(cursor).toJsonLd().then(respondAsActivity);
@@ -865,6 +933,7 @@ async function _handleCustomCollection(request, { name, values, context: context
865
933
  const handleOrderedCollection = exceptWrapper(_handleOrderedCollection);
866
934
  async function _handleOrderedCollection(request, { name, values, context: context$1, tracerProvider, collectionCallbacks: callbacks, filterPredicate }) {
867
935
  verifyDefined(callbacks);
936
+ verifyJsonLdRequest(request);
868
937
  await authIfNeeded(context$1, values, callbacks);
869
938
  const cursor = new URL(request.url).searchParams.get("cursor");
870
939
  return await new CustomCollectionHandler(name, values, context$1, callbacks, tracerProvider, OrderedCollection, OrderedCollectionPage, filterPredicate).fetchCollection(cursor).toJsonLd().then(respondAsActivity);
@@ -1142,9 +1211,10 @@ function exceptWrapper(handler) {
1142
1211
  try {
1143
1212
  return await handler(request, handlerParams);
1144
1213
  } catch (error) {
1145
- const { onNotFound, onUnauthorized } = handlerParams;
1214
+ const { onNotFound, onNotAcceptable, onUnauthorized } = handlerParams;
1146
1215
  switch (error?.constructor) {
1147
1216
  case ItemsNotFoundError: return await onNotFound(request);
1217
+ case NotAcceptableError: return await onNotAcceptable(request);
1148
1218
  case UnauthorizedError: return await onUnauthorized(request);
1149
1219
  default: throw error;
1150
1220
  }
@@ -1162,6 +1232,15 @@ const verifyDefined = (callbacks) => {
1162
1232
  if (callbacks === void 0) throw new ItemsNotFoundError();
1163
1233
  };
1164
1234
  /**
1235
+ * Verifies that a request accepts JSON-LD content type.
1236
+ * @param request The HTTP request to verify.
1237
+ * @throws {NotAcceptableError} If the request doesn't accept JSON-LD.
1238
+ * @since 1.8.0
1239
+ */
1240
+ const verifyJsonLdRequest = (request) => {
1241
+ if (!acceptsJsonLd(request)) throw new NotAcceptableError();
1242
+ };
1243
+ /**
1165
1244
  * Performs authorization if needed based on the authorization predicate.
1166
1245
  * @template TContextData The context data type.
1167
1246
  * @param {RequestContext<TContextData>} context The request context.
@@ -1245,6 +1324,15 @@ var ItemsNotFoundError = class extends HandlerError {
1245
1324
  }
1246
1325
  };
1247
1326
  /**
1327
+ * Error thrown when the request is not acceptable (e.g., wrong content type).
1328
+ * @since 1.8.0
1329
+ */
1330
+ var NotAcceptableError = class extends HandlerError {
1331
+ constructor() {
1332
+ super("The request is not acceptable.");
1333
+ }
1334
+ };
1335
+ /**
1248
1336
  * Error thrown when access to a collection is unauthorized.
1249
1337
  * @since 1.8.0
1250
1338
  */
@@ -1923,7 +2011,6 @@ var FederationImpl = class extends FederationBuilderImpl {
1923
2011
  span,
1924
2012
  tracer
1925
2013
  });
1926
- if (acceptsJsonLd(request)) response.headers.set("Vary", "Accept");
1927
2014
  } catch (error) {
1928
2015
  span.setStatus({
1929
2016
  code: SpanStatusCode.ERROR,
@@ -1987,9 +2074,6 @@ var FederationImpl = class extends FederationBuilderImpl {
1987
2074
  context: context$1,
1988
2075
  nodeInfoDispatcher: this.nodeInfoDispatcher
1989
2076
  });
1990
- }
1991
- if (!acceptsJsonLd(request)) return await onNotAcceptable(request);
1992
- switch (routeName) {
1993
2077
  case "actor":
1994
2078
  context$1 = this.#createContext(request, contextData, { invokedFromActorDispatcher: { identifier: route.values.identifier ?? route.values.handle } });
1995
2079
  return await handleActor(request, {
@@ -1998,7 +2082,8 @@ var FederationImpl = class extends FederationBuilderImpl {
1998
2082
  actorDispatcher: this.actorCallbacks?.dispatcher,
1999
2083
  authorizePredicate: this.actorCallbacks?.authorizePredicate,
2000
2084
  onUnauthorized,
2001
- onNotFound
2085
+ onNotFound,
2086
+ onNotAcceptable
2002
2087
  });
2003
2088
  case "object": {
2004
2089
  const typeId = route.name.replace(/^object:/, "");
@@ -2014,7 +2099,8 @@ var FederationImpl = class extends FederationBuilderImpl {
2014
2099
  objectDispatcher: callbacks?.dispatcher,
2015
2100
  authorizePredicate: callbacks?.authorizePredicate,
2016
2101
  onUnauthorized,
2017
- onNotFound
2102
+ onNotFound,
2103
+ onNotAcceptable
2018
2104
  });
2019
2105
  }
2020
2106
  case "outbox": return await handleCollection(request, {
@@ -2025,7 +2111,8 @@ var FederationImpl = class extends FederationBuilderImpl {
2025
2111
  collectionCallbacks: this.outboxCallbacks,
2026
2112
  tracerProvider: this.tracerProvider,
2027
2113
  onUnauthorized,
2028
- onNotFound
2114
+ onNotFound,
2115
+ onNotAcceptable
2029
2116
  });
2030
2117
  case "inbox":
2031
2118
  if (request.method !== "POST") return await handleCollection(request, {
@@ -2036,7 +2123,8 @@ var FederationImpl = class extends FederationBuilderImpl {
2036
2123
  collectionCallbacks: this.inboxCallbacks,
2037
2124
  tracerProvider: this.tracerProvider,
2038
2125
  onUnauthorized,
2039
- onNotFound
2126
+ onNotFound,
2127
+ onNotAcceptable
2040
2128
  });
2041
2129
  context$1 = this.#createContext(request, contextData, { documentLoader: await context$1.getDocumentLoader({ identifier: route.values.identifier ?? route.values.handle }) });
2042
2130
  case "sharedInbox":
@@ -2068,7 +2156,8 @@ var FederationImpl = class extends FederationBuilderImpl {
2068
2156
  collectionCallbacks: this.followingCallbacks,
2069
2157
  tracerProvider: this.tracerProvider,
2070
2158
  onUnauthorized,
2071
- onNotFound
2159
+ onNotFound,
2160
+ onNotAcceptable
2072
2161
  });
2073
2162
  case "followers": {
2074
2163
  let baseUrl = url.searchParams.get("base-url");
@@ -2091,7 +2180,8 @@ var FederationImpl = class extends FederationBuilderImpl {
2091
2180
  collectionCallbacks: this.followersCallbacks,
2092
2181
  tracerProvider: this.tracerProvider,
2093
2182
  onUnauthorized,
2094
- onNotFound
2183
+ onNotFound,
2184
+ onNotAcceptable
2095
2185
  });
2096
2186
  }
2097
2187
  case "liked": return await handleCollection(request, {
@@ -2102,7 +2192,8 @@ var FederationImpl = class extends FederationBuilderImpl {
2102
2192
  collectionCallbacks: this.likedCallbacks,
2103
2193
  tracerProvider: this.tracerProvider,
2104
2194
  onUnauthorized,
2105
- onNotFound
2195
+ onNotFound,
2196
+ onNotAcceptable
2106
2197
  });
2107
2198
  case "featured": return await handleCollection(request, {
2108
2199
  name: "featured",
@@ -2112,7 +2203,8 @@ var FederationImpl = class extends FederationBuilderImpl {
2112
2203
  collectionCallbacks: this.featuredCallbacks,
2113
2204
  tracerProvider: this.tracerProvider,
2114
2205
  onUnauthorized,
2115
- onNotFound
2206
+ onNotFound,
2207
+ onNotAcceptable
2116
2208
  });
2117
2209
  case "featuredTags": return await handleCollection(request, {
2118
2210
  name: "featured tags",
@@ -2122,7 +2214,8 @@ var FederationImpl = class extends FederationBuilderImpl {
2122
2214
  collectionCallbacks: this.featuredTagsCallbacks,
2123
2215
  tracerProvider: this.tracerProvider,
2124
2216
  onUnauthorized,
2125
- onNotFound
2217
+ onNotFound,
2218
+ onNotAcceptable
2126
2219
  });
2127
2220
  case "collection": {
2128
2221
  const name = route.name.replace(/^collection:/, "");
@@ -2134,7 +2227,8 @@ var FederationImpl = class extends FederationBuilderImpl {
2134
2227
  collectionCallbacks: callbacks,
2135
2228
  tracerProvider: this.tracerProvider,
2136
2229
  onUnauthorized,
2137
- onNotFound
2230
+ onNotFound,
2231
+ onNotAcceptable
2138
2232
  });
2139
2233
  }
2140
2234
  case "orderedCollection": {
@@ -2147,7 +2241,8 @@ var FederationImpl = class extends FederationBuilderImpl {
2147
2241
  collectionCallbacks: callbacks,
2148
2242
  tracerProvider: this.tracerProvider,
2149
2243
  onUnauthorized,
2150
- onNotFound
2244
+ onNotFound,
2245
+ onNotAcceptable
2151
2246
  });
2152
2247
  }
2153
2248
  default: {
@@ -3115,4 +3210,4 @@ function getRequestId(request) {
3115
3210
  }
3116
3211
 
3117
3212
  //#endregion
3118
- export { ContextImpl, FederationImpl, InboxContextImpl, KvSpecDeterminer, actorDehydrator, autoIdAssigner, createFederation, handleActor, handleCollection, handleCustomCollection, handleInbox, handleNodeInfo, handleNodeInfoJrd, handleObject, handleWebFinger, respondWithObject, respondWithObjectIfAcceptable };
3213
+ export { ContextImpl, FederationImpl, InboxContextImpl, KvSpecDeterminer, acceptsJsonLd, actorDehydrator, autoIdAssigner, createFederation, handleActor, handleCollection, handleCustomCollection, handleInbox, handleNodeInfo, handleNodeInfoJrd, handleObject, handleWebFinger, respondWithObject, respondWithObjectIfAcceptable };
@@ -0,0 +1,17 @@
1
+
2
+ import { Temporal } from "@js-temporal/polyfill";
3
+ import { URLPattern } from "urlpattern-polyfill";
4
+
5
+ import "./transformers-BFT6d7J5.js";
6
+ import "./docloader-xJVzq9O0.js";
7
+ import "./actor-CnVfp1Hp.js";
8
+ import { ContextImpl, FederationImpl, InboxContextImpl, KvSpecDeterminer, createFederation } from "./middleware-DXWUGrBQ.js";
9
+ import "./lookup-CfU0DgLr.js";
10
+ import "./key-BRmlopJL.js";
11
+ import "./http-CovAm6we.js";
12
+ import "./proof-Be1oOYEh.js";
13
+ import "./types-CNWeAz8v.js";
14
+ import "./authdocloader-DWnwkjvZ.js";
15
+ import "./vocab-gpwUU9fc.js";
16
+
17
+ export { FederationImpl };
@@ -0,0 +1,17 @@
1
+
2
+ const { Temporal } = require("@js-temporal/polyfill");
3
+ const { URLPattern } = require("urlpattern-polyfill");
4
+
5
+ require('./transformers-CoBS-oFG.cjs');
6
+ require('./docloader-B1O1Z5OK.cjs');
7
+ require('./actor-C3gJhZJj.cjs');
8
+ const require_middleware = require('./middleware-Gsxukxs5.cjs');
9
+ require('./lookup-7u217Q3H.cjs');
10
+ require('./key-CzF9SAEI.cjs');
11
+ require('./http-Hw9HJp9i.cjs');
12
+ require('./proof-Gip91fK7.cjs');
13
+ require('./types-CZ_qo9KW.cjs');
14
+ require('./authdocloader-DPCGwidE.cjs');
15
+ require('./vocab-9MjZjuZb.cjs');
16
+
17
+ exports.FederationImpl = require_middleware.FederationImpl;