@fedify/fedify 2.2.0-dev.606 → 2.2.0-dev.610

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 (53) hide show
  1. package/dist/{builder-CELIfoB4.js → builder-Bkqx5fo0.js} +3 -3
  2. package/dist/compat/transformers.test.js +11 -11
  3. package/dist/{deno-BOsDbqu7.js → deno-CMcbjYDs.js} +1 -1
  4. package/dist/{docloader-BcEPmNUR.js → docloader-ORTT1bPi.js} +4 -3
  5. package/dist/federation/builder.test.js +3 -3
  6. package/dist/federation/handler.test.js +11 -11
  7. package/dist/federation/idempotency.test.js +11 -11
  8. package/dist/federation/inbox.test.js +2 -2
  9. package/dist/federation/middleware.test.js +11 -11
  10. package/dist/federation/mod.cjs +4 -4
  11. package/dist/federation/mod.js +4 -4
  12. package/dist/federation/send.test.js +5 -5
  13. package/dist/federation/webfinger.test.js +11 -11
  14. package/dist/{http-BVFyeQBR.cjs → http-BDf1pBmE.cjs} +18 -6
  15. package/dist/{http-Cfw-SN_z.js → http-By9CCocC.js} +19 -6
  16. package/dist/{http-tl74Wmu6.js → http-DLQMXj_1.js} +18 -6
  17. package/dist/{inbox-Z8XmcoSP.js → inbox-CTJeEur6.js} +1 -1
  18. package/dist/{key-CZwef9_o.js → key-OaS_196P.js} +1 -1
  19. package/dist/{kv-cache-BHtrhC_A.js → kv-cache-COnBmjEC.js} +3 -2
  20. package/dist/{kv-cache-CeTLZBik.cjs → kv-cache-DG491NbS.cjs} +3 -2
  21. package/dist/{ld-BqCzzscX.js → ld-5udwE1JY.js} +2 -2
  22. package/dist/{middleware-Dw4qprvi.js → middleware-3FSu2a2W.js} +5 -5
  23. package/dist/{middleware-lJSoi8yV.js → middleware-BzcyJjau.js} +4 -4
  24. package/dist/{middleware-D0hhdxhW.cjs → middleware-CFuio6Y_.cjs} +5 -5
  25. package/dist/{middleware-C35-lW8-.js → middleware-DRWIaDqh.js} +10 -10
  26. package/dist/{middleware-DwgaVw-g.js → middleware-HlNnBIDX.js} +11 -11
  27. package/dist/middleware-i-8IYJwY.cjs +12 -0
  28. package/dist/{mod-Cs2dYEwI.d.ts → mod-DCbh1JQ5.d.ts} +1 -0
  29. package/dist/{mod-Bx9jcLB8.d.cts → mod-jfnweK2w.d.cts} +1 -0
  30. package/dist/mod.cjs +4 -4
  31. package/dist/mod.d.cts +1 -1
  32. package/dist/mod.d.ts +1 -1
  33. package/dist/mod.js +4 -4
  34. package/dist/nodeinfo/handler.test.js +11 -11
  35. package/dist/{owner-Bx4dZ83W.js → owner-DuRG_QYg.js} +1 -1
  36. package/dist/{proof-Fy5Gl4Ca.js → proof-DFffIwhK.js} +2 -2
  37. package/dist/{proof-CeR_dKsx.js → proof-DG0_Hm4d.js} +2 -2
  38. package/dist/{proof-BYXeAOLF.cjs → proof-WJjJMjvC.cjs} +2 -2
  39. package/dist/{send-CGZHxQYq.js → send-CJAMZwWu.js} +2 -2
  40. package/dist/sig/http.test.js +66 -3
  41. package/dist/sig/key.test.js +2 -2
  42. package/dist/sig/ld.test.js +3 -3
  43. package/dist/sig/mod.cjs +2 -2
  44. package/dist/sig/mod.js +2 -2
  45. package/dist/sig/owner.test.js +3 -3
  46. package/dist/sig/proof.test.js +3 -3
  47. package/dist/utils/docloader.test.js +20 -4
  48. package/dist/utils/mod.cjs +2 -2
  49. package/dist/utils/mod.d.cts +1 -1
  50. package/dist/utils/mod.d.ts +1 -1
  51. package/dist/utils/mod.js +2 -2
  52. package/package.json +5 -5
  53. package/dist/middleware-BdQCsXP6.cjs +0 -12
@@ -3,9 +3,9 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { deno_default } from "./deno-BOsDbqu7.js";
6
+ import { deno_default } from "./deno-CMcbjYDs.js";
7
7
  import { Router, RouterError } from "./router-D9eI0s4b.js";
8
- import { InboxListenerSet } from "./inbox-Z8XmcoSP.js";
8
+ import { InboxListenerSet } from "./inbox-CTJeEur6.js";
9
9
  import { getTypeId } from "@fedify/vocab";
10
10
  import { getLogger } from "@logtape/logtape";
11
11
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
@@ -46,7 +46,7 @@ var FederationBuilderImpl = class {
46
46
  this.collectionTypeIds = {};
47
47
  }
48
48
  async build(options) {
49
- const { FederationImpl } = await import("./middleware-DwgaVw-g.js");
49
+ const { FederationImpl } = await import("./middleware-HlNnBIDX.js");
50
50
  const f = new FederationImpl(options);
51
51
  const trailingSlashInsensitiveValue = f.router.trailingSlashInsensitive;
52
52
  f.router = this.router.clone();
@@ -7,26 +7,26 @@ import { assertEquals } from "../assert_equals-DSbWqCm3.js";
7
7
  import { assert } from "../assert-MZs1qjMx.js";
8
8
  import { assertInstanceOf } from "../assert_instance_of-DHz7EHNU.js";
9
9
  import { MemoryKvStore } from "../kv-QzKcOQgP.js";
10
- import "../deno-BOsDbqu7.js";
11
- import { FederationImpl, actorDehydrator, autoIdAssigner } from "../middleware-C35-lW8-.js";
10
+ import "../deno-CMcbjYDs.js";
11
+ import { FederationImpl, actorDehydrator, autoIdAssigner } from "../middleware-DRWIaDqh.js";
12
12
  import "../client-CoCIaTNO.js";
13
13
  import "../router-D9eI0s4b.js";
14
14
  import "../types-CPz01LGH.js";
15
15
  import "../accept-D7sAxyNa.js";
16
- import "../key-CZwef9_o.js";
17
- import "../http-Cfw-SN_z.js";
18
- import "../ld-BqCzzscX.js";
19
- import "../owner-Bx4dZ83W.js";
20
- import "../proof-Fy5Gl4Ca.js";
21
- import "../docloader-BcEPmNUR.js";
16
+ import "../key-OaS_196P.js";
17
+ import "../http-By9CCocC.js";
18
+ import "../ld-5udwE1JY.js";
19
+ import "../owner-DuRG_QYg.js";
20
+ import "../proof-DFffIwhK.js";
21
+ import "../docloader-ORTT1bPi.js";
22
22
  import "../kv-cache-Bw2F2ABq.js";
23
- import "../inbox-Z8XmcoSP.js";
24
- import "../builder-CELIfoB4.js";
23
+ import "../inbox-CTJeEur6.js";
24
+ import "../builder-Bkqx5fo0.js";
25
25
  import "../collection-CSzG2j1P.js";
26
26
  import "../keycache-CpGWAUbj.js";
27
27
  import "../negotiation-BlAuS_nr.js";
28
28
  import "../retry-mqLf4b-R.js";
29
- import "../send-CGZHxQYq.js";
29
+ import "../send-CJAMZwWu.js";
30
30
  import { test } from "@fedify/fixture";
31
31
  import { Follow, Person } from "@fedify/vocab";
32
32
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  //#region deno.json
7
7
  var name = "@fedify/fedify";
8
- var version = "2.2.0-dev.606+3a976326";
8
+ var version = "2.2.0-dev.610+2d418352";
9
9
  var license = "MIT";
10
10
  var exports = {
11
11
  ".": "./src/mod.ts",
@@ -3,8 +3,8 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { validateCryptoKey } from "./key-CZwef9_o.js";
7
- import { doubleKnock } from "./http-Cfw-SN_z.js";
6
+ import { validateCryptoKey } from "./key-OaS_196P.js";
7
+ import { doubleKnock } from "./http-By9CCocC.js";
8
8
  import { curry } from "es-toolkit";
9
9
  import { UrlError, createActivityPubRequest, getRemoteDocument, logRequest, validatePublicUrl } from "@fedify/vocab-runtime";
10
10
  import { getLogger } from "@logtape/logtape";
@@ -26,7 +26,7 @@ const logger = getLogger([
26
26
  * @throws {TypeError} If the key is invalid or unsupported.
27
27
  * @since 0.4.0
28
28
  */
29
- function getAuthenticatedDocumentLoader(identity, { allowPrivateAddress, userAgent, specDeterminer, tracerProvider } = {}) {
29
+ function getAuthenticatedDocumentLoader(identity, { allowPrivateAddress, maxRedirection, userAgent, specDeterminer, tracerProvider } = {}) {
30
30
  validateCryptoKey(identity.privateKey);
31
31
  async function load(url, options) {
32
32
  if (!allowPrivateAddress) try {
@@ -40,6 +40,7 @@ function getAuthenticatedDocumentLoader(identity, { allowPrivateAddress, userAge
40
40
  }
41
41
  const originalRequest = createActivityPubRequest(url, { userAgent });
42
42
  const response = await doubleKnock(originalRequest, identity, {
43
+ maxRedirection,
43
44
  specDeterminer,
44
45
  log: curry(logRequest)(logger),
45
46
  tracerProvider,
@@ -7,10 +7,10 @@ import { assertEquals } from "../assert_equals-DSbWqCm3.js";
7
7
  import "../assert-MZs1qjMx.js";
8
8
  import "../assert_instance_of-DHz7EHNU.js";
9
9
  import { MemoryKvStore } from "../kv-QzKcOQgP.js";
10
- import "../deno-BOsDbqu7.js";
10
+ import "../deno-CMcbjYDs.js";
11
11
  import "../router-D9eI0s4b.js";
12
- import "../inbox-Z8XmcoSP.js";
13
- import { createFederationBuilder } from "../builder-CELIfoB4.js";
12
+ import "../inbox-CTJeEur6.js";
13
+ import { createFederationBuilder } from "../builder-Bkqx5fo0.js";
14
14
  import { assertExists } from "../std__assert-X-_kMxKM.js";
15
15
  import "../assert_rejects-0h7I2Esa.js";
16
16
  import { assertThrows } from "../assert_throws-rjdMBf31.js";
@@ -7,26 +7,26 @@ import { assertEquals } from "../assert_equals-DSbWqCm3.js";
7
7
  import { assert } from "../assert-MZs1qjMx.js";
8
8
  import "../assert_instance_of-DHz7EHNU.js";
9
9
  import { MemoryKvStore } from "../kv-QzKcOQgP.js";
10
- import "../deno-BOsDbqu7.js";
11
- import { createFederation, handleActor, handleCollection, handleCustomCollection, handleInbox, handleObject, respondWithObject, respondWithObjectIfAcceptable } from "../middleware-C35-lW8-.js";
10
+ import "../deno-CMcbjYDs.js";
11
+ import { createFederation, handleActor, handleCollection, handleCustomCollection, handleInbox, handleObject, respondWithObject, respondWithObjectIfAcceptable } from "../middleware-DRWIaDqh.js";
12
12
  import "../client-CoCIaTNO.js";
13
13
  import "../router-D9eI0s4b.js";
14
14
  import "../types-CPz01LGH.js";
15
15
  import { parseAcceptSignature } from "../accept-D7sAxyNa.js";
16
- import "../key-CZwef9_o.js";
17
- import { signRequest } from "../http-Cfw-SN_z.js";
18
- import "../ld-BqCzzscX.js";
19
- import "../owner-Bx4dZ83W.js";
20
- import "../proof-Fy5Gl4Ca.js";
21
- import "../docloader-BcEPmNUR.js";
16
+ import "../key-OaS_196P.js";
17
+ import { signRequest } from "../http-By9CCocC.js";
18
+ import "../ld-5udwE1JY.js";
19
+ import "../owner-DuRG_QYg.js";
20
+ import "../proof-DFffIwhK.js";
21
+ import "../docloader-ORTT1bPi.js";
22
22
  import "../kv-cache-Bw2F2ABq.js";
23
- import { InboxListenerSet } from "../inbox-Z8XmcoSP.js";
24
- import "../builder-CELIfoB4.js";
23
+ import { InboxListenerSet } from "../inbox-CTJeEur6.js";
24
+ import "../builder-Bkqx5fo0.js";
25
25
  import "../collection-CSzG2j1P.js";
26
26
  import "../keycache-CpGWAUbj.js";
27
27
  import "../negotiation-BlAuS_nr.js";
28
28
  import "../retry-mqLf4b-R.js";
29
- import "../send-CGZHxQYq.js";
29
+ import "../send-CJAMZwWu.js";
30
30
  import "../std__assert-X-_kMxKM.js";
31
31
  import "../assert_rejects-0h7I2Esa.js";
32
32
  import "../assert_throws-rjdMBf31.js";
@@ -7,26 +7,26 @@ import { assertEquals } from "../assert_equals-DSbWqCm3.js";
7
7
  import "../assert-MZs1qjMx.js";
8
8
  import "../assert_instance_of-DHz7EHNU.js";
9
9
  import { MemoryKvStore } from "../kv-QzKcOQgP.js";
10
- import "../deno-BOsDbqu7.js";
11
- import { createFederation } from "../middleware-C35-lW8-.js";
10
+ import "../deno-CMcbjYDs.js";
11
+ import { createFederation } from "../middleware-DRWIaDqh.js";
12
12
  import "../client-CoCIaTNO.js";
13
13
  import "../router-D9eI0s4b.js";
14
14
  import "../types-CPz01LGH.js";
15
15
  import "../accept-D7sAxyNa.js";
16
- import "../key-CZwef9_o.js";
17
- import "../http-Cfw-SN_z.js";
18
- import "../ld-BqCzzscX.js";
19
- import "../owner-Bx4dZ83W.js";
20
- import { signObject } from "../proof-Fy5Gl4Ca.js";
21
- import "../docloader-BcEPmNUR.js";
16
+ import "../key-OaS_196P.js";
17
+ import "../http-By9CCocC.js";
18
+ import "../ld-5udwE1JY.js";
19
+ import "../owner-DuRG_QYg.js";
20
+ import { signObject } from "../proof-DFffIwhK.js";
21
+ import "../docloader-ORTT1bPi.js";
22
22
  import "../kv-cache-Bw2F2ABq.js";
23
- import "../inbox-Z8XmcoSP.js";
24
- import "../builder-CELIfoB4.js";
23
+ import "../inbox-CTJeEur6.js";
24
+ import "../builder-Bkqx5fo0.js";
25
25
  import "../collection-CSzG2j1P.js";
26
26
  import "../keycache-CpGWAUbj.js";
27
27
  import "../negotiation-BlAuS_nr.js";
28
28
  import "../retry-mqLf4b-R.js";
29
- import "../send-CGZHxQYq.js";
29
+ import "../send-CJAMZwWu.js";
30
30
  import "../std__assert-X-_kMxKM.js";
31
31
  import "../assert_rejects-0h7I2Esa.js";
32
32
  import "../assert_throws-rjdMBf31.js";
@@ -4,8 +4,8 @@
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
6
  import { assertEquals } from "../assert_equals-DSbWqCm3.js";
7
- import "../deno-BOsDbqu7.js";
8
- import { InboxListenerSet } from "../inbox-Z8XmcoSP.js";
7
+ import "../deno-CMcbjYDs.js";
8
+ import { InboxListenerSet } from "../inbox-CTJeEur6.js";
9
9
  import { assertThrows } from "../assert_throws-rjdMBf31.js";
10
10
  import { test } from "@fedify/fixture";
11
11
  import { Activity, Create, Invite, Offer, Update } from "@fedify/vocab";
@@ -8,26 +8,26 @@ import { assertEquals } from "../assert_equals-DSbWqCm3.js";
8
8
  import { assert } from "../assert-MZs1qjMx.js";
9
9
  import { assertInstanceOf } from "../assert_instance_of-DHz7EHNU.js";
10
10
  import { MemoryKvStore } from "../kv-QzKcOQgP.js";
11
- import "../deno-BOsDbqu7.js";
12
- import { ContextImpl, FederationImpl, InboxContextImpl, KvSpecDeterminer, createFederation } from "../middleware-C35-lW8-.js";
11
+ import "../deno-CMcbjYDs.js";
12
+ import { ContextImpl, FederationImpl, InboxContextImpl, KvSpecDeterminer, createFederation } from "../middleware-DRWIaDqh.js";
13
13
  import "../client-CoCIaTNO.js";
14
14
  import { RouterError } from "../router-D9eI0s4b.js";
15
15
  import "../types-CPz01LGH.js";
16
16
  import "../accept-D7sAxyNa.js";
17
- import "../key-CZwef9_o.js";
18
- import { signRequest, verifyRequest } from "../http-Cfw-SN_z.js";
19
- import { detachSignature, signJsonLd, verifyJsonLd } from "../ld-BqCzzscX.js";
20
- import { doesActorOwnKey } from "../owner-Bx4dZ83W.js";
21
- import { signObject, verifyObject } from "../proof-Fy5Gl4Ca.js";
22
- import { getAuthenticatedDocumentLoader } from "../docloader-BcEPmNUR.js";
17
+ import "../key-OaS_196P.js";
18
+ import { signRequest, verifyRequest } from "../http-By9CCocC.js";
19
+ import { detachSignature, signJsonLd, verifyJsonLd } from "../ld-5udwE1JY.js";
20
+ import { doesActorOwnKey } from "../owner-DuRG_QYg.js";
21
+ import { signObject, verifyObject } from "../proof-DFffIwhK.js";
22
+ import { getAuthenticatedDocumentLoader } from "../docloader-ORTT1bPi.js";
23
23
  import "../kv-cache-Bw2F2ABq.js";
24
- import "../inbox-Z8XmcoSP.js";
25
- import "../builder-CELIfoB4.js";
24
+ import "../inbox-CTJeEur6.js";
25
+ import "../builder-Bkqx5fo0.js";
26
26
  import "../collection-CSzG2j1P.js";
27
27
  import "../keycache-CpGWAUbj.js";
28
28
  import "../negotiation-BlAuS_nr.js";
29
29
  import "../retry-mqLf4b-R.js";
30
- import "../send-CGZHxQYq.js";
30
+ import "../send-CJAMZwWu.js";
31
31
  import { assertStrictEquals } from "../std__assert-X-_kMxKM.js";
32
32
  import { assertFalse, assertRejects } from "../assert_rejects-0h7I2Esa.js";
33
33
  import { assertThrows } from "../assert_throws-rjdMBf31.js";
@@ -3,12 +3,12 @@
3
3
  const { URLPattern } = require("urlpattern-polyfill");
4
4
 
5
5
  require('../transformers-3g8GZwkZ.cjs');
6
- require('../http-BVFyeQBR.cjs');
7
- const require_middleware = require('../middleware-D0hhdxhW.cjs');
8
- require('../proof-BYXeAOLF.cjs');
6
+ require('../http-BDf1pBmE.cjs');
7
+ const require_middleware = require('../middleware-CFuio6Y_.cjs');
8
+ require('../proof-WJjJMjvC.cjs');
9
9
  const require_federation = require('../federation-Bp3HI26G.cjs');
10
10
  require('../types-Cd_hszr_.cjs');
11
- require('../kv-cache-CeTLZBik.cjs');
11
+ require('../kv-cache-DG491NbS.cjs');
12
12
 
13
13
  exports.InProcessMessageQueue = require_federation.InProcessMessageQueue;
14
14
  exports.MemoryKvStore = require_federation.MemoryKvStore;
@@ -3,11 +3,11 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
 
5
5
  import "../transformers-C3FLHUd6.js";
6
- import "../http-tl74Wmu6.js";
7
- import { Router, RouterError, SendActivityError, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, handleWebFinger, respondWithObject, respondWithObjectIfAcceptable } from "../middleware-Dw4qprvi.js";
8
- import "../proof-CeR_dKsx.js";
6
+ import "../http-DLQMXj_1.js";
7
+ import { Router, RouterError, SendActivityError, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, handleWebFinger, respondWithObject, respondWithObjectIfAcceptable } from "../middleware-3FSu2a2W.js";
8
+ import "../proof-DG0_Hm4d.js";
9
9
  import { InProcessMessageQueue, MemoryKvStore, ParallelMessageQueue } from "../federation-DaMfqRm4.js";
10
10
  import "../types-C93Ob9cU.js";
11
- import "../kv-cache-BHtrhC_A.js";
11
+ import "../kv-cache-COnBmjEC.js";
12
12
 
13
13
  export { InProcessMessageQueue, MemoryKvStore, ParallelMessageQueue, Router, RouterError, SendActivityError, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, handleWebFinger, respondWithObject, respondWithObjectIfAcceptable };
@@ -7,12 +7,12 @@ import { esm_default } from "../esm-nLm00z9V.js";
7
7
  import { assertEquals } from "../assert_equals-DSbWqCm3.js";
8
8
  import { assert } from "../assert-MZs1qjMx.js";
9
9
  import { assertInstanceOf } from "../assert_instance_of-DHz7EHNU.js";
10
- import "../deno-BOsDbqu7.js";
10
+ import "../deno-CMcbjYDs.js";
11
11
  import "../accept-D7sAxyNa.js";
12
- import "../key-CZwef9_o.js";
13
- import { verifyRequest } from "../http-Cfw-SN_z.js";
14
- import { doesActorOwnKey } from "../owner-Bx4dZ83W.js";
15
- import { SendActivityError, extractInboxes, sendActivity } from "../send-CGZHxQYq.js";
12
+ import "../key-OaS_196P.js";
13
+ import { verifyRequest } from "../http-By9CCocC.js";
14
+ import { doesActorOwnKey } from "../owner-DuRG_QYg.js";
15
+ import { SendActivityError, extractInboxes, sendActivity } from "../send-CJAMZwWu.js";
16
16
  import "../std__assert-X-_kMxKM.js";
17
17
  import { assertFalse, assertRejects } from "../assert_rejects-0h7I2Esa.js";
18
18
  import "../assert_throws-rjdMBf31.js";
@@ -7,26 +7,26 @@ import { assertEquals } from "../assert_equals-DSbWqCm3.js";
7
7
  import "../assert-MZs1qjMx.js";
8
8
  import "../assert_instance_of-DHz7EHNU.js";
9
9
  import { MemoryKvStore } from "../kv-QzKcOQgP.js";
10
- import "../deno-BOsDbqu7.js";
11
- import { createFederation, handleWebFinger } from "../middleware-C35-lW8-.js";
10
+ import "../deno-CMcbjYDs.js";
11
+ import { createFederation, handleWebFinger } from "../middleware-DRWIaDqh.js";
12
12
  import "../client-CoCIaTNO.js";
13
13
  import "../router-D9eI0s4b.js";
14
14
  import "../types-CPz01LGH.js";
15
15
  import "../accept-D7sAxyNa.js";
16
- import "../key-CZwef9_o.js";
17
- import "../http-Cfw-SN_z.js";
18
- import "../ld-BqCzzscX.js";
19
- import "../owner-Bx4dZ83W.js";
20
- import "../proof-Fy5Gl4Ca.js";
21
- import "../docloader-BcEPmNUR.js";
16
+ import "../key-OaS_196P.js";
17
+ import "../http-By9CCocC.js";
18
+ import "../ld-5udwE1JY.js";
19
+ import "../owner-DuRG_QYg.js";
20
+ import "../proof-DFffIwhK.js";
21
+ import "../docloader-ORTT1bPi.js";
22
22
  import "../kv-cache-Bw2F2ABq.js";
23
- import "../inbox-Z8XmcoSP.js";
24
- import "../builder-CELIfoB4.js";
23
+ import "../inbox-CTJeEur6.js";
24
+ import "../builder-Bkqx5fo0.js";
25
25
  import "../collection-CSzG2j1P.js";
26
26
  import "../keycache-CpGWAUbj.js";
27
27
  import "../negotiation-BlAuS_nr.js";
28
28
  import "../retry-mqLf4b-R.js";
29
- import "../send-CGZHxQYq.js";
29
+ import "../send-CJAMZwWu.js";
30
30
  import "../std__assert-X-_kMxKM.js";
31
31
  import "../assert_rejects-0h7I2Esa.js";
32
32
  import "../assert_throws-rjdMBf31.js";
@@ -8,13 +8,13 @@ const __fedify_vocab = require_chunk.__toESM(require("@fedify/vocab"));
8
8
  const __opentelemetry_api = require_chunk.__toESM(require("@opentelemetry/api"));
9
9
  const byte_encodings_hex = require_chunk.__toESM(require("byte-encodings/hex"));
10
10
  const structured_field_values = require_chunk.__toESM(require("structured-field-values"));
11
+ const __fedify_vocab_runtime = require_chunk.__toESM(require("@fedify/vocab-runtime"));
11
12
  const __opentelemetry_semantic_conventions = require_chunk.__toESM(require("@opentelemetry/semantic-conventions"));
12
13
  const byte_encodings_base64 = require_chunk.__toESM(require("byte-encodings/base64"));
13
- const __fedify_vocab_runtime = require_chunk.__toESM(require("@fedify/vocab-runtime"));
14
14
 
15
15
  //#region deno.json
16
16
  var name = "@fedify/fedify";
17
- var version = "2.2.0-dev.606+3a976326";
17
+ var version = "2.2.0-dev.610+2d418352";
18
18
  var license = "MIT";
19
19
  var exports$1 = {
20
20
  ".": "./src/mod.ts",
@@ -610,6 +610,7 @@ async function fetchKeyInternal(keyId, cls, options = {}) {
610
610
 
611
611
  //#endregion
612
612
  //#region src/sig/http.ts
613
+ const DEFAULT_MAX_REDIRECTION = 20;
613
614
  /**
614
615
  * Signs a request using the given private key.
615
616
  * @param request The request to sign.
@@ -1460,7 +1461,12 @@ function createRedirectRequest(request, location, body) {
1460
1461
  * @since 1.6.0
1461
1462
  */
1462
1463
  async function doubleKnock(request, identity, options = {}) {
1464
+ return await doubleKnockInternal(request, identity, options);
1465
+ }
1466
+ async function doubleKnockInternal(request, identity, options, redirected = 0, visited = /* @__PURE__ */ new Set()) {
1463
1467
  const { specDeterminer, log, tracerProvider, signal } = options;
1468
+ const maximumRedirection = options.maxRedirection ?? DEFAULT_MAX_REDIRECTION;
1469
+ visited.add(request.url);
1464
1470
  const origin = new URL(request.url).origin;
1465
1471
  const firstTrySpec = specDeterminer == null ? "rfc9421" : await specDeterminer.determineSpec(origin);
1466
1472
  const body = options.body !== void 0 ? options.body : request.method !== "GET" && request.method !== "HEAD" ? await request.clone().arrayBuffer() : null;
@@ -1475,11 +1481,14 @@ async function doubleKnock(request, identity, options = {}) {
1475
1481
  signal
1476
1482
  });
1477
1483
  if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
1484
+ if (redirected >= maximumRedirection) throw new __fedify_vocab_runtime.FetchError(request.url, `Too many redirections (${redirected + 1})`);
1478
1485
  const location = response.headers.get("Location");
1479
- return doubleKnock(createRedirectRequest(request, location, body), identity, {
1486
+ const redirectRequest = createRedirectRequest(request, location, body);
1487
+ if (visited.has(redirectRequest.url)) throw new __fedify_vocab_runtime.FetchError(request.url, `Redirect loop detected: ${redirectRequest.url}`);
1488
+ return doubleKnockInternal(redirectRequest, identity, {
1480
1489
  ...options,
1481
1490
  body
1482
- });
1491
+ }, redirected + 1, visited);
1483
1492
  } else if (response.status === 400 || response.status === 401 || response.status > 401) {
1484
1493
  const logger = (0, __logtape_logtape.getLogger)([
1485
1494
  "fedify",
@@ -1554,11 +1563,14 @@ async function doubleKnock(request, identity, options = {}) {
1554
1563
  signal
1555
1564
  });
1556
1565
  if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
1566
+ if (redirected >= maximumRedirection) throw new __fedify_vocab_runtime.FetchError(request.url, `Too many redirections (${redirected + 1})`);
1557
1567
  const location = response.headers.get("Location");
1558
- return doubleKnock(createRedirectRequest(request, location, body), identity, {
1568
+ const redirectRequest = createRedirectRequest(request, location, body);
1569
+ if (visited.has(redirectRequest.url)) throw new __fedify_vocab_runtime.FetchError(request.url, `Redirect loop detected: ${redirectRequest.url}`);
1570
+ return doubleKnockInternal(redirectRequest, identity, {
1559
1571
  ...options,
1560
1572
  body
1561
- });
1573
+ }, redirected + 1, visited);
1562
1574
  } else if (response.status !== 400 && response.status !== 401) await specDeterminer?.rememberSpec(origin, spec);
1563
1575
  } else await specDeterminer?.rememberSpec(origin, firstTrySpec);
1564
1576
  return response;
@@ -3,10 +3,11 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { deno_default } from "./deno-BOsDbqu7.js";
6
+ import { deno_default } from "./deno-CMcbjYDs.js";
7
7
  import { fulfillAcceptSignature, parseAcceptSignature, validateAcceptSignature } from "./accept-D7sAxyNa.js";
8
- import { fetchKeyDetailed, validateCryptoKey } from "./key-CZwef9_o.js";
8
+ import { fetchKeyDetailed, validateCryptoKey } from "./key-OaS_196P.js";
9
9
  import { CryptographicKey } from "@fedify/vocab";
10
+ import { FetchError } from "@fedify/vocab-runtime";
10
11
  import { getLogger } from "@logtape/logtape";
11
12
  import { SpanStatusCode, trace } from "@opentelemetry/api";
12
13
  import { ATTR_HTTP_REQUEST_HEADER, ATTR_HTTP_REQUEST_METHOD, ATTR_URL_FULL } from "@opentelemetry/semantic-conventions";
@@ -15,6 +16,7 @@ import { encodeHex } from "byte-encodings/hex";
15
16
  import { Item, decodeDict, encodeItem } from "structured-field-values";
16
17
 
17
18
  //#region src/sig/http.ts
19
+ const DEFAULT_MAX_REDIRECTION = 20;
18
20
  /**
19
21
  * Signs a request using the given private key.
20
22
  * @param request The request to sign.
@@ -865,7 +867,12 @@ function createRedirectRequest(request, location, body) {
865
867
  * @since 1.6.0
866
868
  */
867
869
  async function doubleKnock(request, identity, options = {}) {
870
+ return await doubleKnockInternal(request, identity, options);
871
+ }
872
+ async function doubleKnockInternal(request, identity, options, redirected = 0, visited = /* @__PURE__ */ new Set()) {
868
873
  const { specDeterminer, log, tracerProvider, signal } = options;
874
+ const maximumRedirection = options.maxRedirection ?? DEFAULT_MAX_REDIRECTION;
875
+ visited.add(request.url);
869
876
  const origin = new URL(request.url).origin;
870
877
  const firstTrySpec = specDeterminer == null ? "rfc9421" : await specDeterminer.determineSpec(origin);
871
878
  const body = options.body !== void 0 ? options.body : request.method !== "GET" && request.method !== "HEAD" ? await request.clone().arrayBuffer() : null;
@@ -880,11 +887,14 @@ async function doubleKnock(request, identity, options = {}) {
880
887
  signal
881
888
  });
882
889
  if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
890
+ if (redirected >= maximumRedirection) throw new FetchError(request.url, `Too many redirections (${redirected + 1})`);
883
891
  const location = response.headers.get("Location");
884
- return doubleKnock(createRedirectRequest(request, location, body), identity, {
892
+ const redirectRequest = createRedirectRequest(request, location, body);
893
+ if (visited.has(redirectRequest.url)) throw new FetchError(request.url, `Redirect loop detected: ${redirectRequest.url}`);
894
+ return doubleKnockInternal(redirectRequest, identity, {
885
895
  ...options,
886
896
  body
887
- });
897
+ }, redirected + 1, visited);
888
898
  } else if (response.status === 400 || response.status === 401 || response.status > 401) {
889
899
  const logger = getLogger([
890
900
  "fedify",
@@ -959,11 +969,14 @@ async function doubleKnock(request, identity, options = {}) {
959
969
  signal
960
970
  });
961
971
  if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
972
+ if (redirected >= maximumRedirection) throw new FetchError(request.url, `Too many redirections (${redirected + 1})`);
962
973
  const location = response.headers.get("Location");
963
- return doubleKnock(createRedirectRequest(request, location, body), identity, {
974
+ const redirectRequest = createRedirectRequest(request, location, body);
975
+ if (visited.has(redirectRequest.url)) throw new FetchError(request.url, `Redirect loop detected: ${redirectRequest.url}`);
976
+ return doubleKnockInternal(redirectRequest, identity, {
964
977
  ...options,
965
978
  body
966
- });
979
+ }, redirected + 1, visited);
967
980
  } else if (response.status !== 400 && response.status !== 401) await specDeterminer?.rememberSpec(origin, spec);
968
981
  } else await specDeterminer?.rememberSpec(origin, firstTrySpec);
969
982
  return response;
@@ -7,13 +7,13 @@ import { CryptographicKey, Object as Object$1, isActor } from "@fedify/vocab";
7
7
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
8
8
  import { encodeHex } from "byte-encodings/hex";
9
9
  import { Item, decodeDict, encodeDict, encodeItem } from "structured-field-values";
10
+ import { FetchError, getDocumentLoader } from "@fedify/vocab-runtime";
10
11
  import { ATTR_HTTP_REQUEST_HEADER, ATTR_HTTP_REQUEST_METHOD, ATTR_URL_FULL } from "@opentelemetry/semantic-conventions";
11
12
  import { decodeBase64, encodeBase64 } from "byte-encodings/base64";
12
- import { FetchError, getDocumentLoader } from "@fedify/vocab-runtime";
13
13
 
14
14
  //#region deno.json
15
15
  var name = "@fedify/fedify";
16
- var version = "2.2.0-dev.606+3a976326";
16
+ var version = "2.2.0-dev.610+2d418352";
17
17
  var license = "MIT";
18
18
  var exports = {
19
19
  ".": "./src/mod.ts",
@@ -609,6 +609,7 @@ async function fetchKeyInternal(keyId, cls, options = {}) {
609
609
 
610
610
  //#endregion
611
611
  //#region src/sig/http.ts
612
+ const DEFAULT_MAX_REDIRECTION = 20;
612
613
  /**
613
614
  * Signs a request using the given private key.
614
615
  * @param request The request to sign.
@@ -1459,7 +1460,12 @@ function createRedirectRequest(request, location, body) {
1459
1460
  * @since 1.6.0
1460
1461
  */
1461
1462
  async function doubleKnock(request, identity, options = {}) {
1463
+ return await doubleKnockInternal(request, identity, options);
1464
+ }
1465
+ async function doubleKnockInternal(request, identity, options, redirected = 0, visited = /* @__PURE__ */ new Set()) {
1462
1466
  const { specDeterminer, log, tracerProvider, signal } = options;
1467
+ const maximumRedirection = options.maxRedirection ?? DEFAULT_MAX_REDIRECTION;
1468
+ visited.add(request.url);
1463
1469
  const origin = new URL(request.url).origin;
1464
1470
  const firstTrySpec = specDeterminer == null ? "rfc9421" : await specDeterminer.determineSpec(origin);
1465
1471
  const body = options.body !== void 0 ? options.body : request.method !== "GET" && request.method !== "HEAD" ? await request.clone().arrayBuffer() : null;
@@ -1474,11 +1480,14 @@ async function doubleKnock(request, identity, options = {}) {
1474
1480
  signal
1475
1481
  });
1476
1482
  if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
1483
+ if (redirected >= maximumRedirection) throw new FetchError(request.url, `Too many redirections (${redirected + 1})`);
1477
1484
  const location = response.headers.get("Location");
1478
- return doubleKnock(createRedirectRequest(request, location, body), identity, {
1485
+ const redirectRequest = createRedirectRequest(request, location, body);
1486
+ if (visited.has(redirectRequest.url)) throw new FetchError(request.url, `Redirect loop detected: ${redirectRequest.url}`);
1487
+ return doubleKnockInternal(redirectRequest, identity, {
1479
1488
  ...options,
1480
1489
  body
1481
- });
1490
+ }, redirected + 1, visited);
1482
1491
  } else if (response.status === 400 || response.status === 401 || response.status > 401) {
1483
1492
  const logger = getLogger([
1484
1493
  "fedify",
@@ -1553,11 +1562,14 @@ async function doubleKnock(request, identity, options = {}) {
1553
1562
  signal
1554
1563
  });
1555
1564
  if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
1565
+ if (redirected >= maximumRedirection) throw new FetchError(request.url, `Too many redirections (${redirected + 1})`);
1556
1566
  const location = response.headers.get("Location");
1557
- return doubleKnock(createRedirectRequest(request, location, body), identity, {
1567
+ const redirectRequest = createRedirectRequest(request, location, body);
1568
+ if (visited.has(redirectRequest.url)) throw new FetchError(request.url, `Redirect loop detected: ${redirectRequest.url}`);
1569
+ return doubleKnockInternal(redirectRequest, identity, {
1558
1570
  ...options,
1559
1571
  body
1560
- });
1572
+ }, redirected + 1, visited);
1561
1573
  } else if (response.status !== 400 && response.status !== 401) await specDeterminer?.rememberSpec(origin, spec);
1562
1574
  } else await specDeterminer?.rememberSpec(origin, firstTrySpec);
1563
1575
  return response;
@@ -3,7 +3,7 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { deno_default } from "./deno-BOsDbqu7.js";
6
+ import { deno_default } from "./deno-CMcbjYDs.js";
7
7
  import { Activity, getTypeId } from "@fedify/vocab";
8
8
  import { getLogger } from "@logtape/logtape";
9
9
  import { SpanKind, SpanStatusCode, context, propagation, trace } from "@opentelemetry/api";
@@ -3,7 +3,7 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { deno_default } from "./deno-BOsDbqu7.js";
6
+ import { deno_default } from "./deno-CMcbjYDs.js";
7
7
  import { CryptographicKey, Object as Object$1, isActor } from "@fedify/vocab";
8
8
  import { FetchError, getDocumentLoader } from "@fedify/vocab-runtime";
9
9
  import { getLogger } from "@logtape/logtape";
@@ -2,7 +2,7 @@
2
2
  import { Temporal } from "@js-temporal/polyfill";
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
 
5
- import { doubleKnock, validateCryptoKey } from "./http-tl74Wmu6.js";
5
+ import { doubleKnock, validateCryptoKey } from "./http-DLQMXj_1.js";
6
6
  import { getLogger } from "@logtape/logtape";
7
7
  import { curry } from "es-toolkit";
8
8
  import { UrlError, createActivityPubRequest, getRemoteDocument, logRequest, preloadedContexts, validatePublicUrl } from "@fedify/vocab-runtime";
@@ -24,7 +24,7 @@ const logger$1 = getLogger([
24
24
  * @throws {TypeError} If the key is invalid or unsupported.
25
25
  * @since 0.4.0
26
26
  */
27
- function getAuthenticatedDocumentLoader(identity, { allowPrivateAddress, userAgent, specDeterminer, tracerProvider } = {}) {
27
+ function getAuthenticatedDocumentLoader(identity, { allowPrivateAddress, maxRedirection, userAgent, specDeterminer, tracerProvider } = {}) {
28
28
  validateCryptoKey(identity.privateKey);
29
29
  async function load(url, options) {
30
30
  if (!allowPrivateAddress) try {
@@ -38,6 +38,7 @@ function getAuthenticatedDocumentLoader(identity, { allowPrivateAddress, userAge
38
38
  }
39
39
  const originalRequest = createActivityPubRequest(url, { userAgent });
40
40
  const response = await doubleKnock(originalRequest, identity, {
41
+ maxRedirection,
41
42
  specDeterminer,
42
43
  log: curry(logRequest)(logger$1),
43
44
  tracerProvider,
@@ -3,7 +3,7 @@
3
3
  const { URLPattern } = require("urlpattern-polyfill");
4
4
 
5
5
  const require_chunk = require('./chunk-CGaQZ11T.cjs');
6
- const require_http = require('./http-BVFyeQBR.cjs');
6
+ const require_http = require('./http-BDf1pBmE.cjs');
7
7
  const __logtape_logtape = require_chunk.__toESM(require("@logtape/logtape"));
8
8
  const es_toolkit = require_chunk.__toESM(require("es-toolkit"));
9
9
  const __fedify_vocab_runtime = require_chunk.__toESM(require("@fedify/vocab-runtime"));
@@ -25,7 +25,7 @@ const logger$1 = (0, __logtape_logtape.getLogger)([
25
25
  * @throws {TypeError} If the key is invalid or unsupported.
26
26
  * @since 0.4.0
27
27
  */
28
- function getAuthenticatedDocumentLoader(identity, { allowPrivateAddress, userAgent, specDeterminer, tracerProvider } = {}) {
28
+ function getAuthenticatedDocumentLoader(identity, { allowPrivateAddress, maxRedirection, userAgent, specDeterminer, tracerProvider } = {}) {
29
29
  require_http.validateCryptoKey(identity.privateKey);
30
30
  async function load(url, options) {
31
31
  if (!allowPrivateAddress) try {
@@ -39,6 +39,7 @@ function getAuthenticatedDocumentLoader(identity, { allowPrivateAddress, userAge
39
39
  }
40
40
  const originalRequest = (0, __fedify_vocab_runtime.createActivityPubRequest)(url, { userAgent });
41
41
  const response = await require_http.doubleKnock(originalRequest, identity, {
42
+ maxRedirection,
42
43
  specDeterminer,
43
44
  log: (0, es_toolkit.curry)(__fedify_vocab_runtime.logRequest)(logger$1),
44
45
  tracerProvider,
@@ -3,8 +3,8 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { deno_default } from "./deno-BOsDbqu7.js";
7
- import { fetchKey, validateCryptoKey } from "./key-CZwef9_o.js";
6
+ import { deno_default } from "./deno-CMcbjYDs.js";
7
+ import { fetchKey, validateCryptoKey } from "./key-OaS_196P.js";
8
8
  import { Activity, CryptographicKey, Object as Object$1, getTypeId } from "@fedify/vocab";
9
9
  import { getDocumentLoader } from "@fedify/vocab-runtime";
10
10
  import { getLogger } from "@logtape/logtape";