@fedify/fedify 2.4.0-dev.1832 → 2.4.0-dev.1867
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.
- package/dist/{builder-DPsTwE3s.mjs → builder-jhGmiXB5.mjs} +2 -2
- package/dist/{circuit-breaker-BT7CiPbz.mjs → circuit-breaker-C5NqoLBJ.mjs} +25 -5
- package/dist/{circuit-breaker-test-utils-BYIHoliq.mjs → circuit-breaker-test-utils-DW6YC_Pe.mjs} +1 -1
- package/dist/compat/mod.d.cts +1 -1
- package/dist/compat/mod.d.ts +1 -1
- package/dist/compat/transformers.test.mjs +1 -1
- package/dist/{context-B-dsBjZ9.d.cts → context-BOnn653X.d.cts} +3 -2
- package/dist/{context-DrLXudbA.d.ts → context-CmjP-cgJ.d.ts} +3 -2
- package/dist/{deno-HRycs54o.mjs → deno-B5Jy0IH5.mjs} +1 -1
- package/dist/{docloader-CqYFM6-s.mjs → docloader-RO5dmEG1.mjs} +13 -9
- package/dist/federation/builder.test.mjs +1 -1
- package/dist/federation/circuit-breaker.test.mjs +184 -21
- package/dist/federation/handler.test.mjs +3 -3
- package/dist/federation/idempotency.test.mjs +2 -2
- package/dist/federation/metrics.test.mjs +1 -1
- package/dist/federation/middleware.test.mjs +10 -9
- package/dist/federation/mod.cjs +1 -1
- package/dist/federation/mod.d.cts +2 -2
- package/dist/federation/mod.d.ts +2 -2
- package/dist/federation/mod.js +1 -1
- package/dist/federation/send.test.mjs +3 -3
- package/dist/federation/tasks/enqueue.test.mjs +1 -1
- package/dist/federation/tasks/tasks.test.mjs +2 -2
- package/dist/federation/temporal.test.mjs +1 -1
- package/dist/federation/webfinger.test.mjs +1 -1
- package/dist/{federation-DL4R5aHV.cjs → federation-D4wc67AQ.cjs} +28 -8
- package/dist/{http-Cc4z7keO.js → http-ByQYBoMk.js} +8 -6
- package/dist/{http-CFWb7us8.mjs → http-CI_W79n9.mjs} +9 -7
- package/dist/{http-CE1k_azr.cjs → http-DaCIe27S.cjs} +8 -6
- package/dist/{key-DBAd5Alw.mjs → key-Dx1gDplp.mjs} +3 -3
- package/dist/{kv-cache-PvEfOS71.js → kv-cache-C3ffIesH.js} +12 -8
- package/dist/{kv-cache-CWpU9ryt.mjs → kv-cache-D6L7jCkB.mjs} +1 -1
- package/dist/{kv-cache-eSsOzO14.cjs → kv-cache-LBXR3jN5.cjs} +12 -8
- package/dist/{ld-D6QZCkDJ.mjs → ld-jRq6FLRU.mjs} +3 -3
- package/dist/{metrics-CZKhCz2S.mjs → metrics-DB_aJ3d7.mjs} +1 -1
- package/dist/{middleware-D8aOs8i6.mjs → middleware-BZGAqnv7.mjs} +13 -13
- package/dist/{middleware-DxfRRHhZ.js → middleware-DXabWqen.js} +28 -8
- package/dist/{middleware-Bxq5z3Hv.mjs → middleware-FSACqVKD.mjs} +1 -1
- package/dist/{mod-D6O8C7eN.d.ts → mod-BYuZ0WXt.d.ts} +1 -1
- package/dist/{mod-D-abvu2C.d.cts → mod-kUSY5n3f.d.cts} +1 -1
- package/dist/mod.cjs +4 -4
- package/dist/mod.d.cts +2 -2
- package/dist/mod.d.ts +2 -2
- package/dist/mod.js +4 -4
- package/dist/nodeinfo/handler.test.mjs +1 -1
- package/dist/{owner-32hqLs84.mjs → owner-B8wSl5D1.mjs} +2 -2
- package/dist/{proof-DTdKMoMy.js → proof-CCnQdjNX.js} +1 -1
- package/dist/{proof-BH5eExL_.mjs → proof-Dwx8Yb1A.mjs} +4 -4
- package/dist/{proof-CsjmqnGU.cjs → proof-FLTH3GQo.cjs} +1 -1
- package/dist/{send-B0bVhwKq.mjs → send-DoVP-yHD.mjs} +3 -3
- package/dist/sig/http.test.mjs +65 -3
- package/dist/sig/key.test.mjs +46 -1
- package/dist/sig/ld.test.mjs +2 -2
- package/dist/sig/mod.cjs +2 -2
- package/dist/sig/mod.js +2 -2
- package/dist/sig/owner.test.mjs +1 -1
- package/dist/sig/proof.test.mjs +1 -1
- package/dist/{temporal-BFt5VzLm.mjs → temporal-BRO-1oR_.mjs} +1 -1
- package/dist/testing/mod.d.mts +3 -2
- package/dist/utils/docloader.test.mjs +35 -2
- package/dist/utils/kv-cache.test.mjs +1 -1
- package/dist/utils/mod.cjs +1 -1
- package/dist/utils/mod.js +1 -1
- package/package.json +6 -6
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference lib="esnext.temporal" />
|
|
2
|
-
import { $ as MessageQueueDepth, A as OutboxListenerSetters, At as ObjectAuthorizePredicate, B as TaskEnqueueOptions, Bt as SendActivityError, C as FederationStartQueueOptions, Ct as CustomCollectionCounter, D as InboxListenerSetters, Dt as InboxListener, E as InboxChallengePolicy, Et as InboxErrorHandler, F as createFederation, Ft as OutboxPermanentFailureHandler, G as RetryPolicy, H as TaskRegistry, Ht as PageItems, I as Message, It as SharedInboxKeyDispatcher, J as respondWithObject, K as createExponentialBackoffPolicy, L as createFederationBuilder, Lt as UnverifiedActivityHandler, M as FederationKvPrefixes, Mt as OutboxErrorHandler, N as FederationOrigin, Nt as OutboxListener, O as MediaUploaderSetters, Ot as MediaUploaderCallback, P as FederationQueueOptions, Pt as OutboxListenerErrorHandler, Q as MessageQueue, R as TaskDefinition, Rt as UnverifiedActivityReason, S as FederationOptions, St as CollectionDispatcher, T as IdempotencyStrategy, Tt as CustomCollectionDispatcher, U as CreateExponentialBackoffPolicyOptions, Ut as buildCollectionSynchronizationHeader, V as TaskHandler, Vt as SenderKeyPair, W as RetryContext, Wt as digest, X as InProcessMessageQueue, Y as respondWithObjectIfAcceptable, Z as InProcessMessageQueueOptions, _ as Federatable, _t as ActorHandleMapper, a as GetSignedKeyOptions, at as CircuitBreakerBeforeSendDecision, b as FederationBuilder, bt as CollectionCounter, c as ParseUriResult, ct as CircuitBreakerKvState, d as SendActivityOptions, dt as CircuitBreakerStateChange, et as MessageQueueEnqueueOptions, f as SendActivityOptionsForCollection, ft as NormalizedCircuitBreakerOptions, g as CustomCollectionCallbackSetters, gt as ActorDispatcher, h as ConstructorWithTypeId, ht as ActorAliasMapper, i as GetActorOptions, it as CircuitBreakerActivityDrop, j as Rfc6570Expression, jt as ObjectDispatcher, k as ObjectCallbackSetters, kt as NodeInfoDispatcher, l as RequestContext, lt as CircuitBreakerOptions, m as CollectionCallbackSetters, mt as parseCircuitBreakerKvState, n as Context, nt as ParallelMessageQueue, o as InboxContext, ot as CircuitBreakerCreateOptions, p as ActorCallbackSetters, pt as normalizeCircuitBreakerOptions, q as RespondWithObjectOptions, r as ForwardActivityOptions, rt as CircuitBreaker, s as OutboxContext, st as CircuitBreakerFailurePolicy, t as ActorKeyPair, tt as MessageQueueListenOptions, u as RouteActivityOptions, ut as CircuitBreakerState, v as Federation, vt as ActorKeyPairsDispatcher, w as IdempotencyKeyCallback, wt as CustomCollectionCursor, x as FederationFetchOptions, xt as CollectionCursor, y as FederationBenchmarkOptions, yt as AuthorizePredicate, z as TaskDefinitionOptions, zt as WebFingerLinksDispatcher } from "../context-
|
|
2
|
+
import { $ as MessageQueueDepth, A as OutboxListenerSetters, At as ObjectAuthorizePredicate, B as TaskEnqueueOptions, Bt as SendActivityError, C as FederationStartQueueOptions, Ct as CustomCollectionCounter, D as InboxListenerSetters, Dt as InboxListener, E as InboxChallengePolicy, Et as InboxErrorHandler, F as createFederation, Ft as OutboxPermanentFailureHandler, G as RetryPolicy, H as TaskRegistry, Ht as PageItems, I as Message, It as SharedInboxKeyDispatcher, J as respondWithObject, K as createExponentialBackoffPolicy, L as createFederationBuilder, Lt as UnverifiedActivityHandler, M as FederationKvPrefixes, Mt as OutboxErrorHandler, N as FederationOrigin, Nt as OutboxListener, O as MediaUploaderSetters, Ot as MediaUploaderCallback, P as FederationQueueOptions, Pt as OutboxListenerErrorHandler, Q as MessageQueue, R as TaskDefinition, Rt as UnverifiedActivityReason, S as FederationOptions, St as CollectionDispatcher, T as IdempotencyStrategy, Tt as CustomCollectionDispatcher, U as CreateExponentialBackoffPolicyOptions, Ut as buildCollectionSynchronizationHeader, V as TaskHandler, Vt as SenderKeyPair, W as RetryContext, Wt as digest, X as InProcessMessageQueue, Y as respondWithObjectIfAcceptable, Z as InProcessMessageQueueOptions, _ as Federatable, _t as ActorHandleMapper, a as GetSignedKeyOptions, at as CircuitBreakerBeforeSendDecision, b as FederationBuilder, bt as CollectionCounter, c as ParseUriResult, ct as CircuitBreakerKvState, d as SendActivityOptions, dt as CircuitBreakerStateChange, et as MessageQueueEnqueueOptions, f as SendActivityOptionsForCollection, ft as NormalizedCircuitBreakerOptions, g as CustomCollectionCallbackSetters, gt as ActorDispatcher, h as ConstructorWithTypeId, ht as ActorAliasMapper, i as GetActorOptions, it as CircuitBreakerActivityDrop, j as Rfc6570Expression, jt as ObjectDispatcher, k as ObjectCallbackSetters, kt as NodeInfoDispatcher, l as RequestContext, lt as CircuitBreakerOptions, m as CollectionCallbackSetters, mt as parseCircuitBreakerKvState, n as Context, nt as ParallelMessageQueue, o as InboxContext, ot as CircuitBreakerCreateOptions, p as ActorCallbackSetters, pt as normalizeCircuitBreakerOptions, q as RespondWithObjectOptions, r as ForwardActivityOptions, rt as CircuitBreaker, s as OutboxContext, st as CircuitBreakerFailurePolicy, t as ActorKeyPair, tt as MessageQueueListenOptions, u as RouteActivityOptions, ut as CircuitBreakerState, v as Federation, vt as ActorKeyPairsDispatcher, w as IdempotencyKeyCallback, wt as CustomCollectionCursor, x as FederationFetchOptions, xt as CollectionCursor, y as FederationBenchmarkOptions, yt as AuthorizePredicate, z as TaskDefinitionOptions, zt as WebFingerLinksDispatcher } from "../context-BOnn653X.cjs";
|
|
3
3
|
import { a as MemoryKvStore, i as KvStoreSetOptions, n as KvStore, r as KvStoreListEntry, t as KvKey } from "../kv-BhNbN8Ed.cjs";
|
|
4
|
-
import { a as RouterOptions, i as RouterError, n as handleWebFinger, o as RouterRouteResult, r as Router, t as WebFingerHandlerParameters } from "../mod-
|
|
4
|
+
import { a as RouterOptions, i as RouterError, n as handleWebFinger, o as RouterRouteResult, r as Router, t as WebFingerHandlerParameters } from "../mod-kUSY5n3f.cjs";
|
|
5
5
|
export { ActorAliasMapper, ActorCallbackSetters, ActorDispatcher, ActorHandleMapper, ActorKeyPair, ActorKeyPairsDispatcher, AuthorizePredicate, CircuitBreaker, CircuitBreakerActivityDrop, CircuitBreakerBeforeSendDecision, CircuitBreakerCreateOptions, CircuitBreakerFailurePolicy, CircuitBreakerKvState, CircuitBreakerOptions, CircuitBreakerState, CircuitBreakerStateChange, CollectionCallbackSetters, CollectionCounter, CollectionCursor, CollectionDispatcher, ConstructorWithTypeId, Context, CreateExponentialBackoffPolicyOptions, CustomCollectionCallbackSetters, CustomCollectionCounter, CustomCollectionCursor, CustomCollectionDispatcher, Federatable, Federation, FederationBenchmarkOptions, FederationBuilder, FederationFetchOptions, FederationKvPrefixes, FederationOptions, FederationOrigin, FederationQueueOptions, FederationStartQueueOptions, ForwardActivityOptions, GetActorOptions, GetSignedKeyOptions, IdempotencyKeyCallback, IdempotencyStrategy, InProcessMessageQueue, InProcessMessageQueueOptions, InboxChallengePolicy, InboxContext, InboxErrorHandler, InboxListener, InboxListenerSetters, KvKey, KvStore, KvStoreListEntry, KvStoreSetOptions, MediaUploaderCallback, MediaUploaderSetters, MemoryKvStore, Message, MessageQueue, MessageQueueDepth, MessageQueueEnqueueOptions, MessageQueueListenOptions, NodeInfoDispatcher, NormalizedCircuitBreakerOptions, ObjectAuthorizePredicate, ObjectCallbackSetters, ObjectDispatcher, OutboxContext, OutboxErrorHandler, OutboxListener, OutboxListenerErrorHandler, OutboxListenerSetters, OutboxPermanentFailureHandler, PageItems, ParallelMessageQueue, ParseUriResult, RequestContext, RespondWithObjectOptions, RetryContext, RetryPolicy, Rfc6570Expression, RouteActivityOptions, Router, RouterError, RouterOptions, RouterRouteResult, SendActivityError, SendActivityOptions, SendActivityOptionsForCollection, SenderKeyPair, SharedInboxKeyDispatcher, TaskDefinition, TaskDefinitionOptions, TaskEnqueueOptions, TaskHandler, TaskRegistry, UnverifiedActivityHandler, UnverifiedActivityReason, WebFingerHandlerParameters, WebFingerLinksDispatcher, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, handleWebFinger, normalizeCircuitBreakerOptions, parseCircuitBreakerKvState, respondWithObject, respondWithObjectIfAcceptable };
|
package/dist/federation/mod.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference lib="esnext.temporal" />
|
|
2
|
-
import { $ as MessageQueueDepth, A as OutboxListenerSetters, At as ObjectAuthorizePredicate, B as TaskEnqueueOptions, Bt as SendActivityError, C as FederationStartQueueOptions, Ct as CustomCollectionCounter, D as InboxListenerSetters, Dt as InboxListener, E as InboxChallengePolicy, Et as InboxErrorHandler, F as createFederation, Ft as OutboxPermanentFailureHandler, G as RetryPolicy, H as TaskRegistry, Ht as PageItems, I as Message, It as SharedInboxKeyDispatcher, J as respondWithObject, K as createExponentialBackoffPolicy, L as createFederationBuilder, Lt as UnverifiedActivityHandler, M as FederationKvPrefixes, Mt as OutboxErrorHandler, N as FederationOrigin, Nt as OutboxListener, O as MediaUploaderSetters, Ot as MediaUploaderCallback, P as FederationQueueOptions, Pt as OutboxListenerErrorHandler, Q as MessageQueue, R as TaskDefinition, Rt as UnverifiedActivityReason, S as FederationOptions, St as CollectionDispatcher, T as IdempotencyStrategy, Tt as CustomCollectionDispatcher, U as CreateExponentialBackoffPolicyOptions, Ut as buildCollectionSynchronizationHeader, V as TaskHandler, Vt as SenderKeyPair, W as RetryContext, Wt as digest, X as InProcessMessageQueue, Y as respondWithObjectIfAcceptable, Z as InProcessMessageQueueOptions, _ as Federatable, _t as ActorHandleMapper, a as GetSignedKeyOptions, at as CircuitBreakerBeforeSendDecision, b as FederationBuilder, bt as CollectionCounter, c as ParseUriResult, ct as CircuitBreakerKvState, d as SendActivityOptions, dt as CircuitBreakerStateChange, et as MessageQueueEnqueueOptions, f as SendActivityOptionsForCollection, ft as NormalizedCircuitBreakerOptions, g as CustomCollectionCallbackSetters, gt as ActorDispatcher, h as ConstructorWithTypeId, ht as ActorAliasMapper, i as GetActorOptions, it as CircuitBreakerActivityDrop, j as Rfc6570Expression, jt as ObjectDispatcher, k as ObjectCallbackSetters, kt as NodeInfoDispatcher, l as RequestContext, lt as CircuitBreakerOptions, m as CollectionCallbackSetters, mt as parseCircuitBreakerKvState, n as Context, nt as ParallelMessageQueue, o as InboxContext, ot as CircuitBreakerCreateOptions, p as ActorCallbackSetters, pt as normalizeCircuitBreakerOptions, q as RespondWithObjectOptions, r as ForwardActivityOptions, rt as CircuitBreaker, s as OutboxContext, st as CircuitBreakerFailurePolicy, t as ActorKeyPair, tt as MessageQueueListenOptions, u as RouteActivityOptions, ut as CircuitBreakerState, v as Federation, vt as ActorKeyPairsDispatcher, w as IdempotencyKeyCallback, wt as CustomCollectionCursor, x as FederationFetchOptions, xt as CollectionCursor, y as FederationBenchmarkOptions, yt as AuthorizePredicate, z as TaskDefinitionOptions, zt as WebFingerLinksDispatcher } from "../context-
|
|
2
|
+
import { $ as MessageQueueDepth, A as OutboxListenerSetters, At as ObjectAuthorizePredicate, B as TaskEnqueueOptions, Bt as SendActivityError, C as FederationStartQueueOptions, Ct as CustomCollectionCounter, D as InboxListenerSetters, Dt as InboxListener, E as InboxChallengePolicy, Et as InboxErrorHandler, F as createFederation, Ft as OutboxPermanentFailureHandler, G as RetryPolicy, H as TaskRegistry, Ht as PageItems, I as Message, It as SharedInboxKeyDispatcher, J as respondWithObject, K as createExponentialBackoffPolicy, L as createFederationBuilder, Lt as UnverifiedActivityHandler, M as FederationKvPrefixes, Mt as OutboxErrorHandler, N as FederationOrigin, Nt as OutboxListener, O as MediaUploaderSetters, Ot as MediaUploaderCallback, P as FederationQueueOptions, Pt as OutboxListenerErrorHandler, Q as MessageQueue, R as TaskDefinition, Rt as UnverifiedActivityReason, S as FederationOptions, St as CollectionDispatcher, T as IdempotencyStrategy, Tt as CustomCollectionDispatcher, U as CreateExponentialBackoffPolicyOptions, Ut as buildCollectionSynchronizationHeader, V as TaskHandler, Vt as SenderKeyPair, W as RetryContext, Wt as digest, X as InProcessMessageQueue, Y as respondWithObjectIfAcceptable, Z as InProcessMessageQueueOptions, _ as Federatable, _t as ActorHandleMapper, a as GetSignedKeyOptions, at as CircuitBreakerBeforeSendDecision, b as FederationBuilder, bt as CollectionCounter, c as ParseUriResult, ct as CircuitBreakerKvState, d as SendActivityOptions, dt as CircuitBreakerStateChange, et as MessageQueueEnqueueOptions, f as SendActivityOptionsForCollection, ft as NormalizedCircuitBreakerOptions, g as CustomCollectionCallbackSetters, gt as ActorDispatcher, h as ConstructorWithTypeId, ht as ActorAliasMapper, i as GetActorOptions, it as CircuitBreakerActivityDrop, j as Rfc6570Expression, jt as ObjectDispatcher, k as ObjectCallbackSetters, kt as NodeInfoDispatcher, l as RequestContext, lt as CircuitBreakerOptions, m as CollectionCallbackSetters, mt as parseCircuitBreakerKvState, n as Context, nt as ParallelMessageQueue, o as InboxContext, ot as CircuitBreakerCreateOptions, p as ActorCallbackSetters, pt as normalizeCircuitBreakerOptions, q as RespondWithObjectOptions, r as ForwardActivityOptions, rt as CircuitBreaker, s as OutboxContext, st as CircuitBreakerFailurePolicy, t as ActorKeyPair, tt as MessageQueueListenOptions, u as RouteActivityOptions, ut as CircuitBreakerState, v as Federation, vt as ActorKeyPairsDispatcher, w as IdempotencyKeyCallback, wt as CustomCollectionCursor, x as FederationFetchOptions, xt as CollectionCursor, y as FederationBenchmarkOptions, yt as AuthorizePredicate, z as TaskDefinitionOptions, zt as WebFingerLinksDispatcher } from "../context-CmjP-cgJ.js";
|
|
3
3
|
import { a as MemoryKvStore, i as KvStoreSetOptions, n as KvStore, r as KvStoreListEntry, t as KvKey } from "../kv-BhNbN8Ed.js";
|
|
4
|
-
import { a as RouterOptions, i as RouterError, n as handleWebFinger, o as RouterRouteResult, r as Router, t as WebFingerHandlerParameters } from "../mod-
|
|
4
|
+
import { a as RouterOptions, i as RouterError, n as handleWebFinger, o as RouterRouteResult, r as Router, t as WebFingerHandlerParameters } from "../mod-BYuZ0WXt.js";
|
|
5
5
|
export { ActorAliasMapper, ActorCallbackSetters, ActorDispatcher, ActorHandleMapper, ActorKeyPair, ActorKeyPairsDispatcher, AuthorizePredicate, CircuitBreaker, CircuitBreakerActivityDrop, CircuitBreakerBeforeSendDecision, CircuitBreakerCreateOptions, CircuitBreakerFailurePolicy, CircuitBreakerKvState, CircuitBreakerOptions, CircuitBreakerState, CircuitBreakerStateChange, CollectionCallbackSetters, CollectionCounter, CollectionCursor, CollectionDispatcher, ConstructorWithTypeId, Context, CreateExponentialBackoffPolicyOptions, CustomCollectionCallbackSetters, CustomCollectionCounter, CustomCollectionCursor, CustomCollectionDispatcher, Federatable, Federation, FederationBenchmarkOptions, FederationBuilder, FederationFetchOptions, FederationKvPrefixes, FederationOptions, FederationOrigin, FederationQueueOptions, FederationStartQueueOptions, ForwardActivityOptions, GetActorOptions, GetSignedKeyOptions, IdempotencyKeyCallback, IdempotencyStrategy, InProcessMessageQueue, InProcessMessageQueueOptions, InboxChallengePolicy, InboxContext, InboxErrorHandler, InboxListener, InboxListenerSetters, KvKey, KvStore, KvStoreListEntry, KvStoreSetOptions, MediaUploaderCallback, MediaUploaderSetters, MemoryKvStore, Message, MessageQueue, MessageQueueDepth, MessageQueueEnqueueOptions, MessageQueueListenOptions, NodeInfoDispatcher, NormalizedCircuitBreakerOptions, ObjectAuthorizePredicate, ObjectCallbackSetters, ObjectDispatcher, OutboxContext, OutboxErrorHandler, OutboxListener, OutboxListenerErrorHandler, OutboxListenerSetters, OutboxPermanentFailureHandler, PageItems, ParallelMessageQueue, ParseUriResult, RequestContext, RespondWithObjectOptions, RetryContext, RetryPolicy, Rfc6570Expression, RouteActivityOptions, Router, RouterError, RouterOptions, RouterRouteResult, SendActivityError, SendActivityOptions, SendActivityOptionsForCollection, SenderKeyPair, SharedInboxKeyDispatcher, TaskDefinition, TaskDefinitionOptions, TaskEnqueueOptions, TaskHandler, TaskRegistry, UnverifiedActivityHandler, UnverifiedActivityReason, WebFingerHandlerParameters, WebFingerLinksDispatcher, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, handleWebFinger, normalizeCircuitBreakerOptions, parseCircuitBreakerKvState, respondWithObject, respondWithObjectIfAcceptable };
|
package/dist/federation/mod.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Temporal } from "temporal-polyfill";
|
|
2
2
|
import { URLPattern } from "urlpattern-polyfill";
|
|
3
|
-
import { a as respondWithObject, c as digest, d as parseCircuitBreakerKvState, f as createFederationBuilder, i as SendActivityError, l as CircuitBreaker, n as handleWebFinger, o as respondWithObjectIfAcceptable, r as createExponentialBackoffPolicy, s as buildCollectionSynchronizationHeader, t as createFederation, u as normalizeCircuitBreakerOptions } from "../middleware-
|
|
3
|
+
import { a as respondWithObject, c as digest, d as parseCircuitBreakerKvState, f as createFederationBuilder, i as SendActivityError, l as CircuitBreaker, n as handleWebFinger, o as respondWithObjectIfAcceptable, r as createExponentialBackoffPolicy, s as buildCollectionSynchronizationHeader, t as createFederation, u as normalizeCircuitBreakerOptions } from "../middleware-DXabWqen.js";
|
|
4
4
|
import { getLogger } from "@logtape/logtape";
|
|
5
5
|
import { Router as Router$1, RouterError as RouterError$1, assertPath, isPath } from "@fedify/uri-template";
|
|
6
6
|
import { isEqual } from "es-toolkit";
|
|
@@ -10,10 +10,10 @@ import { t as assertNotEquals } from "../assert_not_equals-BN7yDMWe.mjs";
|
|
|
10
10
|
import "../std__assert-CxFT0MNt.mjs";
|
|
11
11
|
import { t as assertRejects } from "../assert_rejects-wFbSPn1O.mjs";
|
|
12
12
|
import { t as assert } from "../assert-CebeUf0C.mjs";
|
|
13
|
-
import { l as verifyRequest } from "../http-
|
|
13
|
+
import { l as verifyRequest } from "../http-CI_W79n9.mjs";
|
|
14
14
|
import { i as rsaPrivateKey2, n as ed25519PrivateKey, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-DIJNHW-Y.mjs";
|
|
15
|
-
import { t as doesActorOwnKey } from "../owner-
|
|
16
|
-
import { n as extractInboxes, r as sendActivity, t as SendActivityError } from "../send-
|
|
15
|
+
import { t as doesActorOwnKey } from "../owner-B8wSl5D1.mjs";
|
|
16
|
+
import { n as extractInboxes, r as sendActivity, t as SendActivityError } from "../send-DoVP-yHD.mjs";
|
|
17
17
|
import { Activity, Application, Endpoints, Group, Person, Service } from "@fedify/vocab";
|
|
18
18
|
import { createTestMeterProvider, createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
|
|
19
19
|
import { FetchError } from "@fedify/vocab-runtime";
|
|
@@ -3,7 +3,7 @@ import "urlpattern-polyfill";
|
|
|
3
3
|
globalThis.addEventListener = () => {};
|
|
4
4
|
import { t as MemoryKvStore } from "../../kv-DCHkaJ9-.mjs";
|
|
5
5
|
import { a as numberSchema, i as makeSchema, n as baseOptions, o as stringSchema, t as MockQueue } from "../../testing-BX0Nicyq.mjs";
|
|
6
|
-
import { o as createFederation } from "../../middleware-
|
|
6
|
+
import { o as createFederation } from "../../middleware-BZGAqnv7.mjs";
|
|
7
7
|
import { n as ParallelMessageQueue } from "../../mq-Dm1Wmtm-.mjs";
|
|
8
8
|
import { configure, reset } from "@logtape/logtape";
|
|
9
9
|
import { delay } from "es-toolkit";
|
|
@@ -3,8 +3,8 @@ import "urlpattern-polyfill";
|
|
|
3
3
|
globalThis.addEventListener = () => {};
|
|
4
4
|
import { t as MemoryKvStore } from "../../kv-DCHkaJ9-.mjs";
|
|
5
5
|
import { a as numberSchema, i as makeSchema, n as baseOptions, o as stringSchema, t as MockQueue } from "../../testing-BX0Nicyq.mjs";
|
|
6
|
-
import { o as createFederation } from "../../middleware-
|
|
7
|
-
import { r as createFederationBuilder } from "../../builder-
|
|
6
|
+
import { o as createFederation } from "../../middleware-BZGAqnv7.mjs";
|
|
7
|
+
import { r as createFederationBuilder } from "../../builder-jhGmiXB5.mjs";
|
|
8
8
|
import { t as TaskCodec } from "../../codec-peqOdBaE.mjs";
|
|
9
9
|
import { t as InProcessMessageQueue } from "../../mq-Dm1Wmtm-.mjs";
|
|
10
10
|
import { W3CTraceContextPropagator } from "@opentelemetry/core";
|
|
@@ -4,7 +4,7 @@ globalThis.addEventListener = () => {};
|
|
|
4
4
|
import { t as assertFalse } from "../assert_false-3pLLLsO4.mjs";
|
|
5
5
|
import "../std__assert-CxFT0MNt.mjs";
|
|
6
6
|
import { t as assert } from "../assert-CebeUf0C.mjs";
|
|
7
|
-
import { t as hasMalformedKnownTemporalLiteral } from "../temporal-
|
|
7
|
+
import { t as hasMalformedKnownTemporalLiteral } from "../temporal-BRO-1oR_.mjs";
|
|
8
8
|
import { test } from "@fedify/fixture";
|
|
9
9
|
//#region src/federation/temporal.test.ts
|
|
10
10
|
test("hasMalformedKnownTemporalLiteral() detects expanded proof timestamps", async () => {
|
|
@@ -6,7 +6,7 @@ import { t as MemoryKvStore } from "../kv-DCHkaJ9-.mjs";
|
|
|
6
6
|
import { t as assertEquals } from "../assert_equals-CBlRfA-_.mjs";
|
|
7
7
|
import { t as assertNotEquals } from "../assert_not_equals-BN7yDMWe.mjs";
|
|
8
8
|
import "../std__assert-CxFT0MNt.mjs";
|
|
9
|
-
import { o as createFederation, s as handleWebFinger } from "../middleware-
|
|
9
|
+
import { o as createFederation, s as handleWebFinger } from "../middleware-BZGAqnv7.mjs";
|
|
10
10
|
import { Image, Link, Person, Tombstone } from "@fedify/vocab";
|
|
11
11
|
import { createTestMeterProvider, test } from "@fedify/fixture";
|
|
12
12
|
//#region src/federation/webfinger.test.ts
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
const { URLPattern } = require("urlpattern-polyfill");
|
|
2
2
|
const require_rolldown_runtime = require("./rolldown-runtime-Dmm3t92W.cjs");
|
|
3
3
|
const require_transformers = require("./transformers-BalCrSsr.cjs");
|
|
4
|
-
const require_http = require("./http-
|
|
5
|
-
const require_proof = require("./proof-
|
|
4
|
+
const require_http = require("./http-DaCIe27S.cjs");
|
|
5
|
+
const require_proof = require("./proof-FLTH3GQo.cjs");
|
|
6
6
|
const require_types = require("./types-RXm5YxpC.cjs");
|
|
7
|
-
const require_kv_cache = require("./kv-cache-
|
|
7
|
+
const require_kv_cache = require("./kv-cache-LBXR3jN5.cjs");
|
|
8
8
|
let _logtape_logtape = require("@logtape/logtape");
|
|
9
9
|
let _fedify_uri_template = require("@fedify/uri-template");
|
|
10
10
|
let _fedify_vocab = require("@fedify/vocab");
|
|
@@ -725,10 +725,11 @@ function createFederationBuilder() {
|
|
|
725
725
|
//#endregion
|
|
726
726
|
//#region src/federation/circuit-breaker.ts
|
|
727
727
|
const Temporal$9 = require_http.Temporal;
|
|
728
|
-
const LEGACY_SWEEP_MARKER = ["__fedify_meta", "
|
|
728
|
+
const LEGACY_SWEEP_MARKER = ["__fedify_meta", "circuit_breaker_state_ttl_sweep_v2"];
|
|
729
729
|
const LEGACY_SWEEP_DELETING_MARKER = { __fedifyDeletingCircuitBreakerLegacyState: true };
|
|
730
730
|
const CIRCUIT_BREAKER_STATE_VERSION = 1;
|
|
731
731
|
const LEGACY_SWEEP_LOCK_TTL = Temporal$9.Duration.from({ minutes: 5 });
|
|
732
|
+
const LEGACY_SWEEP_RENEW_INTERVAL = Temporal$9.Duration.from({ minutes: 1 });
|
|
732
733
|
const LEGACY_SWEEP_RETRY_WINDOW = Temporal$9.Duration.from({ hours: 168 });
|
|
733
734
|
const LEGACY_SWEEP_WAIT_INTERVAL = 10;
|
|
734
735
|
const LEGACY_SWEEP_CAS_ATTEMPTS = 3;
|
|
@@ -943,12 +944,20 @@ var CircuitBreaker = class {
|
|
|
943
944
|
}
|
|
944
945
|
async #sweepLegacyStatesImpl() {
|
|
945
946
|
const markerKey = this.#legacySweepMarkerKey();
|
|
946
|
-
const
|
|
947
|
-
if (
|
|
947
|
+
const acquired = await this.#acquireLegacySweep(markerKey);
|
|
948
|
+
if (acquired === "done") return;
|
|
949
|
+
let marker = acquired;
|
|
950
|
+
let leaseRenewedAt = this.#now();
|
|
948
951
|
try {
|
|
949
952
|
for await (const { key, value } of this.#kv.list(this.#prefix)) {
|
|
950
953
|
if (key.length !== this.#prefix.length + 1) continue;
|
|
951
954
|
await this.#migrateLegacyState(key, value);
|
|
955
|
+
if (Temporal$9.Instant.compare(this.#now(), leaseRenewedAt.add(LEGACY_SWEEP_RENEW_INTERVAL)) >= 0) {
|
|
956
|
+
const renewed = await this.#renewLegacySweep(markerKey, marker);
|
|
957
|
+
if (renewed == null) return;
|
|
958
|
+
marker = renewed;
|
|
959
|
+
leaseRenewedAt = this.#now();
|
|
960
|
+
}
|
|
952
961
|
}
|
|
953
962
|
} catch (error) {
|
|
954
963
|
await this.#deleteIfUnchanged(markerKey, marker);
|
|
@@ -957,6 +966,14 @@ var CircuitBreaker = class {
|
|
|
957
966
|
const finishedMarker = this.#finishLegacySweepMarker(marker);
|
|
958
967
|
if (await this.#kv.cas(markerKey, marker, finishedMarker)) this.#rememberLegacySweepMarker(finishedMarker);
|
|
959
968
|
}
|
|
969
|
+
async #renewLegacySweep(markerKey, marker) {
|
|
970
|
+
const renewed = {
|
|
971
|
+
state: "sweeping",
|
|
972
|
+
started: this.#now().toString(),
|
|
973
|
+
retryUntil: getLegacySweepRetryUntil(marker) ?? this.#now().add(LEGACY_SWEEP_RETRY_WINDOW).toString()
|
|
974
|
+
};
|
|
975
|
+
if (await this.#kv.cas(markerKey, marker, renewed, { ttl: LEGACY_SWEEP_LOCK_TTL })) return renewed;
|
|
976
|
+
}
|
|
960
977
|
#finishLegacySweepMarker(marker) {
|
|
961
978
|
const retryUntil = getLegacySweepRetryUntil(marker);
|
|
962
979
|
if (retryUntil != null && Temporal$9.Instant.compare(this.#now(), Temporal$9.Instant.from(retryUntil)) < 0) return {
|
|
@@ -966,7 +983,10 @@ var CircuitBreaker = class {
|
|
|
966
983
|
return { state: "final" };
|
|
967
984
|
}
|
|
968
985
|
async #migrateLegacyState(key, value) {
|
|
969
|
-
if (isCurrentCircuitBreakerState(value))
|
|
986
|
+
if (isCurrentCircuitBreakerState(value)) {
|
|
987
|
+
await this.#kv.cas(key, value, value, this.#setOptions());
|
|
988
|
+
return;
|
|
989
|
+
}
|
|
970
990
|
const state = parseCircuitBreakerKvState(value);
|
|
971
991
|
if (state != null) {
|
|
972
992
|
await this.#kv.cas(key, value, markCircuitBreakerState(state), this.#setOptions());
|
|
@@ -1103,7 +1123,7 @@ function normalizeCircuitBreakerOptions(options) {
|
|
|
1103
1123
|
} else {
|
|
1104
1124
|
failure = options.failure;
|
|
1105
1125
|
pruneFailures = (timestamps) => timestamps.slice(-100);
|
|
1106
|
-
stateTtl = configuredStateTtl;
|
|
1126
|
+
stateTtl = configuredStateTtl ?? recoveryDelay.add(heldActivityTtl);
|
|
1107
1127
|
}
|
|
1108
1128
|
return {
|
|
1109
1129
|
failure,
|
|
@@ -10,7 +10,7 @@ import { ATTR_HTTP_REQUEST_HEADER, ATTR_HTTP_REQUEST_METHOD, ATTR_URL_FULL } fro
|
|
|
10
10
|
import { decodeBase64, encodeBase64 } from "byte-encodings/base64";
|
|
11
11
|
//#region deno.json
|
|
12
12
|
var name = "@fedify/fedify";
|
|
13
|
-
var version = "2.4.0-dev.
|
|
13
|
+
var version = "2.4.0-dev.1867+ac08358f";
|
|
14
14
|
//#endregion
|
|
15
15
|
//#region src/sig/accept.ts
|
|
16
16
|
/**
|
|
@@ -1258,7 +1258,7 @@ async function resolveFetchedKey(document, cacheKey, keyId, cls, { documentLoade
|
|
|
1258
1258
|
}
|
|
1259
1259
|
}
|
|
1260
1260
|
let key = null;
|
|
1261
|
-
if (object instanceof cls) key = object;
|
|
1261
|
+
if (object instanceof cls && (object.id == null || object.id.href === keyId)) key = object;
|
|
1262
1262
|
else if (isActor(object)) {
|
|
1263
1263
|
const keys = cls === CryptographicKey ? object.getPublicKeys({
|
|
1264
1264
|
documentLoader,
|
|
@@ -2266,10 +2266,12 @@ async function verifyRequestRfc9421(request, span, metricsContext, { documentLoa
|
|
|
2266
2266
|
* @param request The original request.
|
|
2267
2267
|
* @param location The redirect location.
|
|
2268
2268
|
* @param body The request body as ArrayBuffer or null.
|
|
2269
|
+
* @param validateRedirect The function to validate the redirect URL.
|
|
2269
2270
|
* @returns A new Request object for the redirect.
|
|
2270
2271
|
*/
|
|
2271
|
-
function createRedirectRequest(request, location, body) {
|
|
2272
|
+
async function createRedirectRequest(request, location, body, validateRedirect) {
|
|
2272
2273
|
const url = new URL(location, request.url);
|
|
2274
|
+
await validateRedirect?.(url.href);
|
|
2273
2275
|
return new Request(url, {
|
|
2274
2276
|
method: request.method,
|
|
2275
2277
|
headers: request.headers,
|
|
@@ -2367,7 +2369,7 @@ async function doubleKnockInternal(request, identity, options, redirected = 0, v
|
|
|
2367
2369
|
let response = await fetchDoubleKnockRequest(request, signedRequest, signal);
|
|
2368
2370
|
if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
|
|
2369
2371
|
if (redirected >= maximumRedirection) throw new FetchError(request.url, `Too many redirections (${redirected + 1})`);
|
|
2370
|
-
const redirectRequest = createRedirectRequest(request, response.headers.get("Location"), body);
|
|
2372
|
+
const redirectRequest = await createRedirectRequest(request, response.headers.get("Location"), body, options.validateRedirect);
|
|
2371
2373
|
if (visited.has(redirectRequest.url)) throw new FetchError(request.url, `Redirect loop detected: ${redirectRequest.url}`);
|
|
2372
2374
|
return doubleKnockInternal(redirectRequest, identity, {
|
|
2373
2375
|
...options,
|
|
@@ -2415,7 +2417,7 @@ async function doubleKnockInternal(request, identity, options, redirected = 0, v
|
|
|
2415
2417
|
redirect: "manual",
|
|
2416
2418
|
signal
|
|
2417
2419
|
});
|
|
2418
|
-
if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) return doubleKnock(createRedirectRequest(request, response.headers.get("Location"), body), identity, {
|
|
2420
|
+
if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) return doubleKnock(await createRedirectRequest(request, response.headers.get("Location"), body, options.validateRedirect), identity, {
|
|
2419
2421
|
...options,
|
|
2420
2422
|
body
|
|
2421
2423
|
});
|
|
@@ -2442,7 +2444,7 @@ async function doubleKnockInternal(request, identity, options, redirected = 0, v
|
|
|
2442
2444
|
response = await fetchDoubleKnockRequest(request, signedRequest, signal);
|
|
2443
2445
|
if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
|
|
2444
2446
|
if (redirected >= maximumRedirection) throw new FetchError(request.url, `Too many redirections (${redirected + 1})`);
|
|
2445
|
-
const redirectRequest = createRedirectRequest(request, response.headers.get("Location"), body);
|
|
2447
|
+
const redirectRequest = await createRedirectRequest(request, response.headers.get("Location"), body, options.validateRedirect);
|
|
2446
2448
|
if (visited.has(redirectRequest.url)) throw new FetchError(request.url, `Redirect loop detected: ${redirectRequest.url}`);
|
|
2447
2449
|
return doubleKnockInternal(redirectRequest, identity, {
|
|
2448
2450
|
...options,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Temporal } from "temporal-polyfill";
|
|
2
2
|
import "urlpattern-polyfill";
|
|
3
3
|
globalThis.addEventListener = () => {};
|
|
4
|
-
import { n as version, t as name } from "./deno-
|
|
5
|
-
import { n as getDurationMs, r as getFederationMetrics, s as measureSignatureKeyFetch } from "./metrics-
|
|
4
|
+
import { n as version, t as name } from "./deno-B5Jy0IH5.mjs";
|
|
5
|
+
import { n as getDurationMs, r as getFederationMetrics, s as measureSignatureKeyFetch } from "./metrics-DB_aJ3d7.mjs";
|
|
6
6
|
import { i as validateAcceptSignature, n as fulfillAcceptSignature, r as parseAcceptSignature } from "./accept-CPVqki78.mjs";
|
|
7
|
-
import { o as validateCryptoKey, r as fetchKeyDetailed } from "./key-
|
|
7
|
+
import { o as validateCryptoKey, r as fetchKeyDetailed } from "./key-Dx1gDplp.mjs";
|
|
8
8
|
import { getLogger } from "@logtape/logtape";
|
|
9
9
|
import { CryptographicKey } from "@fedify/vocab";
|
|
10
10
|
import { SpanStatusCode, trace } from "@opentelemetry/api";
|
|
@@ -875,10 +875,12 @@ async function verifyRequestRfc9421(request, span, metricsContext, { documentLoa
|
|
|
875
875
|
* @param request The original request.
|
|
876
876
|
* @param location The redirect location.
|
|
877
877
|
* @param body The request body as ArrayBuffer or null.
|
|
878
|
+
* @param validateRedirect The function to validate the redirect URL.
|
|
878
879
|
* @returns A new Request object for the redirect.
|
|
879
880
|
*/
|
|
880
|
-
function createRedirectRequest(request, location, body) {
|
|
881
|
+
async function createRedirectRequest(request, location, body, validateRedirect) {
|
|
881
882
|
const url = new URL(location, request.url);
|
|
883
|
+
await validateRedirect?.(url.href);
|
|
882
884
|
return new Request(url, {
|
|
883
885
|
method: request.method,
|
|
884
886
|
headers: request.headers,
|
|
@@ -976,7 +978,7 @@ async function doubleKnockInternal(request, identity, options, redirected = 0, v
|
|
|
976
978
|
let response = await fetchDoubleKnockRequest(request, signedRequest, signal);
|
|
977
979
|
if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
|
|
978
980
|
if (redirected >= maximumRedirection) throw new FetchError(request.url, `Too many redirections (${redirected + 1})`);
|
|
979
|
-
const redirectRequest = createRedirectRequest(request, response.headers.get("Location"), body);
|
|
981
|
+
const redirectRequest = await createRedirectRequest(request, response.headers.get("Location"), body, options.validateRedirect);
|
|
980
982
|
if (visited.has(redirectRequest.url)) throw new FetchError(request.url, `Redirect loop detected: ${redirectRequest.url}`);
|
|
981
983
|
return doubleKnockInternal(redirectRequest, identity, {
|
|
982
984
|
...options,
|
|
@@ -1024,7 +1026,7 @@ async function doubleKnockInternal(request, identity, options, redirected = 0, v
|
|
|
1024
1026
|
redirect: "manual",
|
|
1025
1027
|
signal
|
|
1026
1028
|
});
|
|
1027
|
-
if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) return doubleKnock(createRedirectRequest(request, response.headers.get("Location"), body), identity, {
|
|
1029
|
+
if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) return doubleKnock(await createRedirectRequest(request, response.headers.get("Location"), body, options.validateRedirect), identity, {
|
|
1028
1030
|
...options,
|
|
1029
1031
|
body
|
|
1030
1032
|
});
|
|
@@ -1051,7 +1053,7 @@ async function doubleKnockInternal(request, identity, options, redirected = 0, v
|
|
|
1051
1053
|
response = await fetchDoubleKnockRequest(request, signedRequest, signal);
|
|
1052
1054
|
if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
|
|
1053
1055
|
if (redirected >= maximumRedirection) throw new FetchError(request.url, `Too many redirections (${redirected + 1})`);
|
|
1054
|
-
const redirectRequest = createRedirectRequest(request, response.headers.get("Location"), body);
|
|
1056
|
+
const redirectRequest = await createRedirectRequest(request, response.headers.get("Location"), body, options.validateRedirect);
|
|
1055
1057
|
if (visited.has(redirectRequest.url)) throw new FetchError(request.url, `Redirect loop detected: ${redirectRequest.url}`);
|
|
1056
1058
|
return doubleKnockInternal(redirectRequest, identity, {
|
|
1057
1059
|
...options,
|
|
@@ -9,7 +9,7 @@ let _opentelemetry_semantic_conventions = require("@opentelemetry/semantic-conve
|
|
|
9
9
|
let byte_encodings_base64 = require("byte-encodings/base64");
|
|
10
10
|
//#region deno.json
|
|
11
11
|
var name = "@fedify/fedify";
|
|
12
|
-
var version = "2.4.0-dev.
|
|
12
|
+
var version = "2.4.0-dev.1867+ac08358f";
|
|
13
13
|
//#endregion
|
|
14
14
|
//#region ../../node_modules/.pnpm/temporal-polyfill@1.0.1/node_modules/temporal-polyfill/chunks/root.js
|
|
15
15
|
const NativeTemporal = globalThis.Temporal;
|
|
@@ -4821,7 +4821,7 @@ async function resolveFetchedKey(document, cacheKey, keyId, cls, { documentLoade
|
|
|
4821
4821
|
}
|
|
4822
4822
|
}
|
|
4823
4823
|
let key = null;
|
|
4824
|
-
if (object instanceof cls) key = object;
|
|
4824
|
+
if (object instanceof cls && (object.id == null || object.id.href === keyId)) key = object;
|
|
4825
4825
|
else if ((0, _fedify_vocab.isActor)(object)) {
|
|
4826
4826
|
const keys = cls === _fedify_vocab.CryptographicKey ? object.getPublicKeys({
|
|
4827
4827
|
documentLoader,
|
|
@@ -5830,10 +5830,12 @@ async function verifyRequestRfc9421(request, span, metricsContext, { documentLoa
|
|
|
5830
5830
|
* @param request The original request.
|
|
5831
5831
|
* @param location The redirect location.
|
|
5832
5832
|
* @param body The request body as ArrayBuffer or null.
|
|
5833
|
+
* @param validateRedirect The function to validate the redirect URL.
|
|
5833
5834
|
* @returns A new Request object for the redirect.
|
|
5834
5835
|
*/
|
|
5835
|
-
function createRedirectRequest(request, location, body) {
|
|
5836
|
+
async function createRedirectRequest(request, location, body, validateRedirect) {
|
|
5836
5837
|
const url = new URL(location, request.url);
|
|
5838
|
+
await validateRedirect?.(url.href);
|
|
5837
5839
|
return new Request(url, {
|
|
5838
5840
|
method: request.method,
|
|
5839
5841
|
headers: request.headers,
|
|
@@ -5931,7 +5933,7 @@ async function doubleKnockInternal(request, identity, options, redirected = 0, v
|
|
|
5931
5933
|
let response = await fetchDoubleKnockRequest(request, signedRequest, signal);
|
|
5932
5934
|
if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
|
|
5933
5935
|
if (redirected >= maximumRedirection) throw new _fedify_vocab_runtime.FetchError(request.url, `Too many redirections (${redirected + 1})`);
|
|
5934
|
-
const redirectRequest = createRedirectRequest(request, response.headers.get("Location"), body);
|
|
5936
|
+
const redirectRequest = await createRedirectRequest(request, response.headers.get("Location"), body, options.validateRedirect);
|
|
5935
5937
|
if (visited.has(redirectRequest.url)) throw new _fedify_vocab_runtime.FetchError(request.url, `Redirect loop detected: ${redirectRequest.url}`);
|
|
5936
5938
|
return doubleKnockInternal(redirectRequest, identity, {
|
|
5937
5939
|
...options,
|
|
@@ -5979,7 +5981,7 @@ async function doubleKnockInternal(request, identity, options, redirected = 0, v
|
|
|
5979
5981
|
redirect: "manual",
|
|
5980
5982
|
signal
|
|
5981
5983
|
});
|
|
5982
|
-
if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) return doubleKnock(createRedirectRequest(request, response.headers.get("Location"), body), identity, {
|
|
5984
|
+
if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) return doubleKnock(await createRedirectRequest(request, response.headers.get("Location"), body, options.validateRedirect), identity, {
|
|
5983
5985
|
...options,
|
|
5984
5986
|
body
|
|
5985
5987
|
});
|
|
@@ -6006,7 +6008,7 @@ async function doubleKnockInternal(request, identity, options, redirected = 0, v
|
|
|
6006
6008
|
response = await fetchDoubleKnockRequest(request, signedRequest, signal);
|
|
6007
6009
|
if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
|
|
6008
6010
|
if (redirected >= maximumRedirection) throw new _fedify_vocab_runtime.FetchError(request.url, `Too many redirections (${redirected + 1})`);
|
|
6009
|
-
const redirectRequest = createRedirectRequest(request, response.headers.get("Location"), body);
|
|
6011
|
+
const redirectRequest = await createRedirectRequest(request, response.headers.get("Location"), body, options.validateRedirect);
|
|
6010
6012
|
if (visited.has(redirectRequest.url)) throw new _fedify_vocab_runtime.FetchError(request.url, `Redirect loop detected: ${redirectRequest.url}`);
|
|
6011
6013
|
return doubleKnockInternal(redirectRequest, identity, {
|
|
6012
6014
|
...options,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import "temporal-polyfill";
|
|
2
2
|
import "urlpattern-polyfill";
|
|
3
3
|
globalThis.addEventListener = () => {};
|
|
4
|
-
import { n as version, t as name } from "./deno-
|
|
5
|
-
import { _ as recordKeyLookup, n as getDurationMs, t as classifyFetchError } from "./metrics-
|
|
4
|
+
import { n as version, t as name } from "./deno-B5Jy0IH5.mjs";
|
|
5
|
+
import { _ as recordKeyLookup, n as getDurationMs, t as classifyFetchError } from "./metrics-DB_aJ3d7.mjs";
|
|
6
6
|
import { getLogger } from "@logtape/logtape";
|
|
7
7
|
import { CryptographicKey, Multikey, Object as Object$1, isActor } from "@fedify/vocab";
|
|
8
8
|
import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
|
|
@@ -304,7 +304,7 @@ async function resolveFetchedKey(document, cacheKey, keyId, cls, { documentLoade
|
|
|
304
304
|
}
|
|
305
305
|
}
|
|
306
306
|
let key = null;
|
|
307
|
-
if (object instanceof cls) key = object;
|
|
307
|
+
if (object instanceof cls && (object.id == null || object.id.href === keyId)) key = object;
|
|
308
308
|
else if (isActor(object)) {
|
|
309
309
|
const keys = cls === CryptographicKey ? object.getPublicKeys({
|
|
310
310
|
documentLoader,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Temporal } from "temporal-polyfill";
|
|
2
2
|
import { URLPattern } from "urlpattern-polyfill";
|
|
3
|
-
import { C as recordDocumentCache, d as validateCryptoKey, t as doubleKnock } from "./http-
|
|
3
|
+
import { C as recordDocumentCache, d as validateCryptoKey, t as doubleKnock } from "./http-ByQYBoMk.js";
|
|
4
4
|
import { getLogger } from "@logtape/logtape";
|
|
5
5
|
import { curry } from "es-toolkit";
|
|
6
6
|
import { UrlError, createActivityPubRequest, getRemoteDocument, logRequest, preloadedContexts, validatePublicUrl } from "@fedify/vocab-runtime";
|
|
@@ -24,6 +24,17 @@ const logger$1 = getLogger([
|
|
|
24
24
|
function getAuthenticatedDocumentLoader(identity, { allowPrivateAddress, maxRedirection, userAgent, specDeterminer, tracerProvider } = {}) {
|
|
25
25
|
validateCryptoKey(identity.privateKey);
|
|
26
26
|
async function load(url, options) {
|
|
27
|
+
await validateUrl(url);
|
|
28
|
+
return getRemoteDocument(url, await doubleKnock(createActivityPubRequest(url, { userAgent }), identity, {
|
|
29
|
+
maxRedirection,
|
|
30
|
+
specDeterminer,
|
|
31
|
+
log: curry(logRequest)(logger$1),
|
|
32
|
+
tracerProvider,
|
|
33
|
+
signal: options?.signal,
|
|
34
|
+
validateRedirect: validateUrl
|
|
35
|
+
}), load);
|
|
36
|
+
}
|
|
37
|
+
async function validateUrl(url) {
|
|
27
38
|
if (!allowPrivateAddress) try {
|
|
28
39
|
await validatePublicUrl(url);
|
|
29
40
|
} catch (error) {
|
|
@@ -33,13 +44,6 @@ function getAuthenticatedDocumentLoader(identity, { allowPrivateAddress, maxRedi
|
|
|
33
44
|
});
|
|
34
45
|
throw error;
|
|
35
46
|
}
|
|
36
|
-
return getRemoteDocument(url, await doubleKnock(createActivityPubRequest(url, { userAgent }), identity, {
|
|
37
|
-
maxRedirection,
|
|
38
|
-
specDeterminer,
|
|
39
|
-
log: curry(logRequest)(logger$1),
|
|
40
|
-
tracerProvider,
|
|
41
|
-
signal: options?.signal
|
|
42
|
-
}), load);
|
|
43
47
|
}
|
|
44
48
|
return load;
|
|
45
49
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Temporal } from "temporal-polyfill";
|
|
2
2
|
import { URLPattern } from "urlpattern-polyfill";
|
|
3
3
|
globalThis.addEventListener = () => {};
|
|
4
|
-
import { p as recordDocumentCache } from "./metrics-
|
|
4
|
+
import { p as recordDocumentCache } from "./metrics-DB_aJ3d7.mjs";
|
|
5
5
|
import { getLogger } from "@logtape/logtape";
|
|
6
6
|
import { preloadedContexts } from "@fedify/vocab-runtime";
|
|
7
7
|
//#region src/utils/kv-cache.ts
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const { URLPattern } = require("urlpattern-polyfill");
|
|
2
|
-
const require_http = require("./http-
|
|
2
|
+
const require_http = require("./http-DaCIe27S.cjs");
|
|
3
3
|
let _logtape_logtape = require("@logtape/logtape");
|
|
4
4
|
let es_toolkit = require("es-toolkit");
|
|
5
5
|
let _fedify_vocab_runtime = require("@fedify/vocab-runtime");
|
|
@@ -23,6 +23,17 @@ const logger$1 = (0, _logtape_logtape.getLogger)([
|
|
|
23
23
|
function getAuthenticatedDocumentLoader(identity, { allowPrivateAddress, maxRedirection, userAgent, specDeterminer, tracerProvider } = {}) {
|
|
24
24
|
require_http.validateCryptoKey(identity.privateKey);
|
|
25
25
|
async function load(url, options) {
|
|
26
|
+
await validateUrl(url);
|
|
27
|
+
return (0, _fedify_vocab_runtime.getRemoteDocument)(url, await require_http.doubleKnock((0, _fedify_vocab_runtime.createActivityPubRequest)(url, { userAgent }), identity, {
|
|
28
|
+
maxRedirection,
|
|
29
|
+
specDeterminer,
|
|
30
|
+
log: (0, es_toolkit.curry)(_fedify_vocab_runtime.logRequest)(logger$1),
|
|
31
|
+
tracerProvider,
|
|
32
|
+
signal: options?.signal,
|
|
33
|
+
validateRedirect: validateUrl
|
|
34
|
+
}), load);
|
|
35
|
+
}
|
|
36
|
+
async function validateUrl(url) {
|
|
26
37
|
if (!allowPrivateAddress) try {
|
|
27
38
|
await (0, _fedify_vocab_runtime.validatePublicUrl)(url);
|
|
28
39
|
} catch (error) {
|
|
@@ -32,13 +43,6 @@ function getAuthenticatedDocumentLoader(identity, { allowPrivateAddress, maxRedi
|
|
|
32
43
|
});
|
|
33
44
|
throw error;
|
|
34
45
|
}
|
|
35
|
-
return (0, _fedify_vocab_runtime.getRemoteDocument)(url, await require_http.doubleKnock((0, _fedify_vocab_runtime.createActivityPubRequest)(url, { userAgent }), identity, {
|
|
36
|
-
maxRedirection,
|
|
37
|
-
specDeterminer,
|
|
38
|
-
log: (0, es_toolkit.curry)(_fedify_vocab_runtime.logRequest)(logger$1),
|
|
39
|
-
tracerProvider,
|
|
40
|
-
signal: options?.signal
|
|
41
|
-
}), load);
|
|
42
46
|
}
|
|
43
47
|
return load;
|
|
44
48
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import "temporal-polyfill";
|
|
2
2
|
import "urlpattern-polyfill";
|
|
3
3
|
globalThis.addEventListener = () => {};
|
|
4
|
-
import { n as version, t as name } from "./deno-
|
|
5
|
-
import { n as getDurationMs, r as getFederationMetrics, s as measureSignatureKeyFetch } from "./metrics-
|
|
6
|
-
import { n as fetchKey, o as validateCryptoKey } from "./key-
|
|
4
|
+
import { n as version, t as name } from "./deno-B5Jy0IH5.mjs";
|
|
5
|
+
import { n as getDurationMs, r as getFederationMetrics, s as measureSignatureKeyFetch } from "./metrics-DB_aJ3d7.mjs";
|
|
6
|
+
import { n as fetchKey, o as validateCryptoKey } from "./key-Dx1gDplp.mjs";
|
|
7
7
|
import { getLogger } from "@logtape/logtape";
|
|
8
8
|
import { Activity, CryptographicKey, Object as Object$1, getTypeId } from "@fedify/vocab";
|
|
9
9
|
import { SpanStatusCode, trace } from "@opentelemetry/api";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "temporal-polyfill";
|
|
2
2
|
import "urlpattern-polyfill";
|
|
3
3
|
globalThis.addEventListener = () => {};
|
|
4
|
-
import { n as version, t as name } from "./deno-
|
|
4
|
+
import { n as version, t as name } from "./deno-B5Jy0IH5.mjs";
|
|
5
5
|
import { metrics } from "@opentelemetry/api";
|
|
6
6
|
import { FetchError } from "@fedify/vocab-runtime";
|
|
7
7
|
//#region src/federation/metrics.ts
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
import { Temporal } from "temporal-polyfill";
|
|
2
2
|
import "urlpattern-polyfill";
|
|
3
3
|
globalThis.addEventListener = () => {};
|
|
4
|
-
import { n as version, t as name } from "./deno-
|
|
5
|
-
import { a as instrumentDocumentLoader, b as recordWebFingerHandle, c as recordCircuitBreakerStateChange, d as recordCollectionRequest, f as recordCollectionTotalItems, g as recordInboxActivity, h as recordFanoutRecipients, i as getRemoteHost, l as recordCollectionDispatchDuration, n as getDurationMs, o as isAbortError, r as getFederationMetrics, u as recordCollectionPageItems, v as recordOutboxActivity, x as registerQueueDepthGauge, y as recordOutboxEnqueue } from "./metrics-
|
|
4
|
+
import { n as version, t as name } from "./deno-B5Jy0IH5.mjs";
|
|
5
|
+
import { a as instrumentDocumentLoader, b as recordWebFingerHandle, c as recordCircuitBreakerStateChange, d as recordCollectionRequest, f as recordCollectionTotalItems, g as recordInboxActivity, h as recordFanoutRecipients, i as getRemoteHost, l as recordCollectionDispatchDuration, n as getDurationMs, o as isAbortError, r as getFederationMetrics, u as recordCollectionPageItems, v as recordOutboxActivity, x as registerQueueDepthGauge, y as recordOutboxEnqueue } from "./metrics-DB_aJ3d7.mjs";
|
|
6
6
|
import { t as formatAcceptSignature } from "./accept-CPVqki78.mjs";
|
|
7
|
-
import { a as importJwk, o as validateCryptoKey, t as exportJwk } from "./key-
|
|
8
|
-
import { l as verifyRequest, o as parseRfc9421SignatureInput, u as verifyRequestDetailed } from "./http-
|
|
9
|
-
import { t as getAuthenticatedDocumentLoader } from "./docloader-
|
|
10
|
-
import { n as kvCache } from "./kv-cache-
|
|
11
|
-
import { _ as wrapContextLoaderForJsonLd, a as compactJsonLd, c as getNormalizationContextLoader, d as isClearlyMalformedContextReference, f as isInvalidUrlTypeError, l as hasSignature, m as verifyCompactJsonLd, p as signJsonLd, r as assertSafeJsonLd, s as detachSignature, t as InvalidContextReferenceError, u as hasSignatureLike } from "./ld-
|
|
12
|
-
import { n as getKeyOwner, t as doesActorOwnKey } from "./owner-
|
|
7
|
+
import { a as importJwk, o as validateCryptoKey, t as exportJwk } from "./key-Dx1gDplp.mjs";
|
|
8
|
+
import { l as verifyRequest, o as parseRfc9421SignatureInput, u as verifyRequestDetailed } from "./http-CI_W79n9.mjs";
|
|
9
|
+
import { t as getAuthenticatedDocumentLoader } from "./docloader-RO5dmEG1.mjs";
|
|
10
|
+
import { n as kvCache } from "./kv-cache-D6L7jCkB.mjs";
|
|
11
|
+
import { _ as wrapContextLoaderForJsonLd, a as compactJsonLd, c as getNormalizationContextLoader, d as isClearlyMalformedContextReference, f as isInvalidUrlTypeError, l as hasSignature, m as verifyCompactJsonLd, p as signJsonLd, r as assertSafeJsonLd, s as detachSignature, t as InvalidContextReferenceError, u as hasSignatureLike } from "./ld-jRq6FLRU.mjs";
|
|
12
|
+
import { n as getKeyOwner, t as doesActorOwnKey } from "./owner-B8wSl5D1.mjs";
|
|
13
13
|
import { r as normalizeOutgoingActivityJsonLd } from "./outgoing-jsonld-BQSHRLhg.mjs";
|
|
14
|
-
import { i as verifyObject, n as hasProofLike, r as signObject } from "./proof-
|
|
14
|
+
import { i as verifyObject, n as hasProofLike, r as signObject } from "./proof-Dwx8Yb1A.mjs";
|
|
15
15
|
import { t as getNodeInfo } from "./client-CtxvmazV.mjs";
|
|
16
16
|
import { t as nodeInfoToJson } from "./types-DE_LV1JB.mjs";
|
|
17
|
-
import { n as extractInboxes, r as sendActivity, t as SendActivityError } from "./send-
|
|
18
|
-
import { n as FederationBuilderImpl, t as ACTOR_ALIAS_PREFIX } from "./builder-
|
|
19
|
-
import { t as CircuitBreaker } from "./circuit-breaker-
|
|
17
|
+
import { n as extractInboxes, r as sendActivity, t as SendActivityError } from "./send-DoVP-yHD.mjs";
|
|
18
|
+
import { n as FederationBuilderImpl, t as ACTOR_ALIAS_PREFIX } from "./builder-jhGmiXB5.mjs";
|
|
19
|
+
import { t as CircuitBreaker } from "./circuit-breaker-C5NqoLBJ.mjs";
|
|
20
20
|
import { t as buildCollectionSynchronizationHeader } from "./collection-CnnP1UAv.mjs";
|
|
21
21
|
import { t as KvKeyCache } from "./keycache-0Jk78XmB.mjs";
|
|
22
22
|
import { t as acceptsJsonLd } from "./negotiation-CCocWT_N.mjs";
|
|
23
|
-
import { t as hasMalformedKnownTemporalLiteral } from "./temporal-
|
|
23
|
+
import { t as hasMalformedKnownTemporalLiteral } from "./temporal-BRO-1oR_.mjs";
|
|
24
24
|
import { t as createExponentialBackoffPolicy } from "./retry-zX5xw5e0.mjs";
|
|
25
25
|
import { t as TaskCodec } from "./codec-peqOdBaE.mjs";
|
|
26
26
|
import { getLogger, withContext } from "@logtape/logtape";
|