@fedify/fedify 1.10.0-dev.2 → 2.0.0-dev.12
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/README.md +3 -0
- package/dist/{actor-eIATKOh7.js → actor-C-FuEZU4.js} +220 -705
- package/dist/{actor-C1Euqngb.d.ts → actor-DqFajh9s.d.ts} +2 -2
- package/dist/{actor-8zynMl2a.cjs → actor-_9UN5RVT.cjs} +952 -1479
- package/dist/{actor-Ydzhc8dj.d.cts → actor-f2NtjyCg.d.cts} +2 -2
- package/dist/{actor-Bv7llTFW.js → actor-rOm0sXHU.js} +1 -1
- package/dist/{assert_rejects-DiIiJbZn.js → assert_rejects-Ce45JcFg.js} +1 -1
- package/dist/{assert_is_error-BPGph1Jx.js → assert_throws-BNXdRGWP.js} +31 -1
- package/dist/{builder-C7fApQY_.js → builder-hArjoWjW.js} +3 -4
- package/dist/{client-DjT_tegg.d.cts → client-94iWEfQa.d.cts} +3 -75
- package/dist/{client-DF8anIB5.d.ts → client-BsGzbnV-.d.ts} +3 -75
- package/dist/{client-Bwnrdh_A.js → client-pY7-3icS.js} +3 -22
- package/dist/compat/mod.d.cts +10 -12
- package/dist/compat/mod.d.ts +10 -12
- package/dist/compat/transformers.test.js +20 -20
- package/dist/{context-CwUAkopp.d.cts → context-PxGADCsD.d.cts} +152 -27
- package/dist/{context-CXUibY4L.d.ts → context-V-XS2_6O.d.ts} +152 -27
- package/dist/{authdocloader-TNeksncq.js → docloader-CE1lRhEV.js} +17 -8
- package/dist/{esm-aj4vkb76.js → esm-BEFbR5eN.js} +32 -17
- package/dist/federation/builder.test.js +9 -12
- package/dist/federation/collection.test.js +7 -9
- package/dist/federation/handler.test.js +28 -149
- package/dist/federation/idempotency.test.js +26 -27
- package/dist/federation/inbox.test.js +4 -6
- package/dist/federation/keycache.test.js +3 -4
- package/dist/federation/kv.test.js +6 -8
- package/dist/federation/middleware.test.js +270 -93
- package/dist/federation/mod.cjs +9 -11
- package/dist/federation/mod.d.cts +10 -12
- package/dist/federation/mod.d.ts +10 -12
- package/dist/federation/mod.js +9 -11
- package/dist/federation/mq.test.js +10 -10
- package/dist/federation/negotiation.test.js +26 -0
- package/dist/federation/retry.test.js +4 -5
- package/dist/federation/router.test.js +6 -8
- package/dist/federation/send.test.js +14 -16
- package/dist/{http-wsGR6KkT.d.ts → http-BbO0ejuk.d.ts} +2 -2
- package/dist/{http-DXmKLE1t.js → http-Bmx7ea3F.js} +2 -2
- package/dist/{http-B1_DzfAU.d.cts → http-M8k5mKc0.d.cts} +2 -2
- package/dist/{http-DMJrVRf0.js → http-Q_l4fCEE.js} +256 -6
- package/dist/{http-CK80ff9S.cjs → http-So5V_Tgv.cjs} +289 -9
- package/dist/{inbox-Dt-Q2rJt.js → inbox-B9PjFn2S.js} +2 -7
- package/dist/{key-Tt9B2Qkj.js → key-khQpfFdw.js} +3 -2
- package/dist/{keycache-CXF4YAON.js → keycache-BU3fsZFa.js} +1 -1
- package/dist/{keys-CAUbEZtV.js → keys-BaMFfIdL.js} +2 -1
- package/dist/kv-cache-DN9pfMBe.js +94 -0
- package/dist/kv-cache-R1oW382l.js +122 -0
- package/dist/kv-cache-X2ggcnHI.cjs +134 -0
- package/dist/{ld-CqoYKNwB.js → ld-BLMebnep.js} +3 -2
- package/dist/{type-E_91dusN.js → lookup-C7SSHgK7.js} +542 -5394
- package/dist/{lookup-BXlOCJsH.cjs → lookup-CLaDFNx1.cjs} +134 -5
- package/dist/{lookup-8Ik9lSMm.js → lookup-CtC3x1M6.js} +125 -2
- package/dist/middleware-BYBwqvTv.cjs +15 -0
- package/dist/{middleware-DnXc8LK4.js → middleware-Bda2JO66.js} +38 -84
- package/dist/{middleware-nSw7nWf8.js → middleware-C3ml59Hp.js} +43 -146
- package/dist/middleware-DC7h2qq-.js +26 -0
- package/dist/{middleware-bN29Orv5.cjs → middleware-DFLterpx.cjs} +58 -104
- package/dist/middleware-mQR2SM7T.js +15 -0
- package/dist/{mod-CDObsV1d.d.ts → mod-BlVovdcy.d.ts} +2 -2
- package/dist/{mod-mXx9V0q5.d.cts → mod-BoRKfJPE.d.cts} +2 -2
- package/dist/{mod-BUbqxBev.d.cts → mod-BxRCHTz-.d.cts} +2 -2
- package/dist/{mod-jQ4OODsl.d.cts → mod-C58MZ7Wx.d.cts} +1 -1
- package/dist/{mod-BcObK1Lz.d.ts → mod-Cdo6SYlJ.d.ts} +2 -2
- package/dist/{mod-DgcYoyZK.d.ts → mod-D5Z2tISD.d.ts} +3 -3
- package/dist/mod-DMpuiKXi.d.cts +107 -0
- package/dist/{mod-fjqfsrty.d.cts → mod-DgxG-byT.d.cts} +3 -3
- package/dist/{mod-DBzN0aCM.d.ts → mod-Ds0mpFZU.d.ts} +1 -1
- package/dist/mod-aAE2wOWV.d.ts +109 -0
- package/dist/mod.cjs +19 -34
- package/dist/mod.d.cts +15 -17
- package/dist/mod.d.ts +15 -17
- package/dist/mod.js +14 -16
- package/dist/negotiation-C4nFufNk.js +71 -0
- package/dist/nodeinfo/client.test.js +30 -111
- package/dist/nodeinfo/handler.test.js +25 -26
- package/dist/nodeinfo/mod.cjs +3 -6
- package/dist/nodeinfo/mod.d.cts +3 -5
- package/dist/nodeinfo/mod.d.ts +3 -5
- package/dist/nodeinfo/mod.js +3 -4
- package/dist/nodeinfo/types.test.js +8 -15
- package/dist/{owner-6KSEp9eV.d.cts → owner-B4HbyP8s.d.cts} +3 -3
- package/dist/{owner-9jSx_21P.js → owner-XzzTSr4S.js} +3 -2
- package/dist/{owner-BbeUDvOu.d.ts → owner-kQRGVXG1.d.ts} +3 -3
- package/dist/{proof-BT3OPhWQ.js → proof-B-qOSAuQ.js} +5 -4
- package/dist/{proof-BuLnngRI.cjs → proof-BzJkFBBF.cjs} +18 -17
- package/dist/{proof-B5YI7sn5.js → proof-C9sfVit1.js} +2 -2
- package/dist/{send-DlPE7bKe.js → send-yEkZlxzW.js} +2 -2
- package/dist/sig/http.test.js +12 -13
- package/dist/sig/key.test.js +9 -11
- package/dist/sig/ld.test.js +8 -10
- package/dist/sig/mod.cjs +9 -11
- package/dist/sig/mod.d.cts +5 -7
- package/dist/sig/mod.d.ts +5 -7
- package/dist/sig/mod.js +5 -7
- package/dist/sig/owner.test.js +11 -13
- package/dist/sig/proof.test.js +13 -14
- package/dist/src/vocab/accept.yaml +1 -1
- package/dist/src/vocab/activity.yaml +1 -1
- package/dist/src/vocab/add.yaml +1 -1
- package/dist/src/vocab/announce.yaml +1 -1
- package/dist/src/vocab/application.yaml +1 -1
- package/dist/src/vocab/arrive.yaml +1 -1
- package/dist/src/vocab/article.yaml +1 -1
- package/dist/src/vocab/audio.yaml +1 -1
- package/dist/src/vocab/block.yaml +1 -1
- package/dist/src/vocab/chatmessage.yaml +1 -1
- package/dist/src/vocab/collection.yaml +1 -1
- package/dist/src/vocab/collectionpage.yaml +1 -1
- package/dist/src/vocab/create.yaml +1 -1
- package/dist/src/vocab/dataintegrityproof.yaml +1 -1
- package/dist/src/vocab/delete.yaml +1 -1
- package/dist/src/vocab/didservice.yaml +1 -1
- package/dist/src/vocab/dislike.yaml +1 -1
- package/dist/src/vocab/document.yaml +1 -1
- package/dist/src/vocab/emoji.yaml +1 -1
- package/dist/src/vocab/emojireact.yaml +1 -1
- package/dist/src/vocab/endpoints.yaml +1 -1
- package/dist/src/vocab/event.yaml +1 -1
- package/dist/src/vocab/export.yaml +1 -1
- package/dist/src/vocab/flag.yaml +1 -1
- package/dist/src/vocab/follow.yaml +1 -1
- package/dist/src/vocab/group.yaml +1 -1
- package/dist/src/vocab/hashtag.yaml +1 -1
- package/dist/src/vocab/ignore.yaml +1 -1
- package/dist/src/vocab/image.yaml +1 -1
- package/dist/src/vocab/intransitiveactivity.yaml +1 -1
- package/dist/src/vocab/invite.yaml +1 -1
- package/dist/src/vocab/join.yaml +1 -1
- package/dist/src/vocab/key.yaml +1 -1
- package/dist/src/vocab/leave.yaml +1 -1
- package/dist/src/vocab/like.yaml +1 -1
- package/dist/src/vocab/link.yaml +1 -1
- package/dist/src/vocab/listen.yaml +1 -1
- package/dist/src/vocab/mention.yaml +1 -1
- package/dist/src/vocab/move.yaml +1 -1
- package/dist/src/vocab/multikey.yaml +1 -1
- package/dist/src/vocab/note.yaml +1 -1
- package/dist/src/vocab/object.yaml +1 -1
- package/dist/src/vocab/offer.yaml +1 -1
- package/dist/src/vocab/orderedcollection.yaml +1 -1
- package/dist/src/vocab/orderedcollectionpage.yaml +1 -1
- package/dist/src/vocab/organization.yaml +1 -1
- package/dist/src/vocab/page.yaml +1 -1
- package/dist/src/vocab/person.yaml +1 -1
- package/dist/src/vocab/place.yaml +1 -1
- package/dist/src/vocab/profile.yaml +1 -1
- package/dist/src/vocab/propertyvalue.yaml +1 -1
- package/dist/src/vocab/question.yaml +1 -1
- package/dist/src/vocab/read.yaml +1 -1
- package/dist/src/vocab/reject.yaml +1 -1
- package/dist/src/vocab/relationship.yaml +1 -1
- package/dist/src/vocab/remove.yaml +1 -1
- package/dist/src/vocab/service.yaml +1 -1
- package/dist/src/vocab/source.yaml +1 -1
- package/dist/src/vocab/tentativeaccept.yaml +1 -1
- package/dist/src/vocab/tentativereject.yaml +1 -1
- package/dist/src/vocab/tombstone.yaml +1 -1
- package/dist/src/vocab/travel.yaml +1 -1
- package/dist/src/vocab/undo.yaml +1 -1
- package/dist/src/vocab/update.yaml +1 -1
- package/dist/src/vocab/video.yaml +1 -1
- package/dist/src/vocab/view.yaml +1 -1
- package/dist/testing/docloader.test.js +6 -8
- package/dist/testing/mod.d.ts +10 -119
- package/dist/testing/mod.js +2 -3
- package/dist/{testing-B17zODFD.js → testing-D-nLIHkh.js} +1 -2
- package/dist/{types-By5LByL1.js → types-BtUjyi5y.js} +5 -166
- package/dist/{types-BIgY6c-l.js → types-C2XVl6gj.js} +1 -3
- package/dist/{types-Ci8XKEfO.cjs → types-CWgzGaqk.cjs} +6 -179
- package/dist/{runtime/authdocloader.test.js → utils/docloader.test.js} +14 -15
- package/dist/utils/kv-cache.test.js +209 -0
- package/dist/utils/mod.cjs +12 -0
- package/dist/utils/mod.d.cts +5 -0
- package/dist/utils/mod.d.ts +7 -0
- package/dist/utils/mod.js +11 -0
- package/dist/vocab/actor.test.js +8 -10
- package/dist/vocab/lookup.test.js +8 -10
- package/dist/vocab/mod.cjs +3 -4
- package/dist/vocab/mod.d.cts +3 -5
- package/dist/vocab/mod.d.ts +3 -5
- package/dist/vocab/mod.js +3 -4
- package/dist/vocab/type.test.js +2 -3
- package/dist/vocab/vocab.test.js +7618 -1973
- package/dist/{vocab-CDHNj5zp.d.ts → vocab-BCWe1Ih5.d.ts} +9 -25
- package/dist/{vocab-BjnZ49Xt.cjs → vocab-C96aggZM.cjs} +5 -5
- package/dist/{vocab-Cfs0937i.d.cts → vocab-CeDBzu-f.d.cts} +9 -25
- package/dist/{vocab-CthegyUc.js → vocab-axlR_8k0.js} +3 -3
- package/dist/webfinger/handler.test.js +24 -25
- package/dist/webfinger/lookup.test.js +7 -9
- package/dist/webfinger/mod.cjs +2 -3
- package/dist/webfinger/mod.d.cts +1 -3
- package/dist/webfinger/mod.d.ts +1 -3
- package/dist/webfinger/mod.js +2 -3
- package/package.json +20 -51
- package/dist/assert_throws-BOO88avQ.js +0 -39
- package/dist/authdocloader-BEPeTSD8.cjs +0 -58
- package/dist/authdocloader-BNIyrORx.js +0 -52
- package/dist/denokv-D0nfNQ1x.js +0 -57
- package/dist/docloader-CLYexeNv.js +0 -4825
- package/dist/docloader-CdsuyjrU.cjs +0 -4891
- package/dist/docloader-CxWcuWqQ.d.ts +0 -221
- package/dist/docloader-D-MrRyHl.d.cts +0 -219
- package/dist/key-BL8DRhuI.js +0 -10
- package/dist/key-BU1Vsq8S.cjs +0 -290
- package/dist/key-DTzAk78O.js +0 -10
- package/dist/key-DWDJFZzD.js +0 -260
- package/dist/key-gZEWdYwT.cjs +0 -10
- package/dist/lookup-Co4Y1ycg.js +0 -336
- package/dist/middleware-09gZVY21.cjs +0 -17
- package/dist/middleware-B8Q9c1ys.js +0 -26
- package/dist/middleware-DHUCp8iq.js +0 -17
- package/dist/mod-CIbqfZW0.d.ts +0 -104
- package/dist/mod-Dt-G9ZOS.d.cts +0 -102
- package/dist/mq-B7R1Q-M5.d.cts +0 -140
- package/dist/mq-CRGm1e_F.d.ts +0 -143
- package/dist/nodeinfo/semver.test.js +0 -143
- package/dist/runtime/docloader.test.js +0 -588
- package/dist/runtime/key.test.d.ts +0 -3
- package/dist/runtime/key.test.js +0 -103
- package/dist/runtime/langstr.test.d.ts +0 -3
- package/dist/runtime/langstr.test.js +0 -40
- package/dist/runtime/link.test.d.ts +0 -3
- package/dist/runtime/link.test.js +0 -61
- package/dist/runtime/mod.cjs +0 -25
- package/dist/runtime/mod.d.cts +0 -6
- package/dist/runtime/mod.d.ts +0 -8
- package/dist/runtime/mod.js +0 -13
- package/dist/runtime/multibase/multibase.test.d.ts +0 -3
- package/dist/runtime/multibase/multibase.test.js +0 -358
- package/dist/runtime/url.test.d.ts +0 -3
- package/dist/runtime/url.test.js +0 -45
- package/dist/semver-dArNLkR9.js +0 -149
- package/dist/vocab/schema.yaml +0 -247
- package/dist/x/cfworkers.cjs +0 -100
- package/dist/x/cfworkers.d.cts +0 -59
- package/dist/x/cfworkers.d.ts +0 -61
- package/dist/x/cfworkers.js +0 -98
- package/dist/x/cfworkers.test.d.ts +0 -3
- package/dist/x/cfworkers.test.js +0 -179
- package/dist/x/hono.cjs +0 -61
- package/dist/x/hono.d.cts +0 -54
- package/dist/x/hono.d.ts +0 -56
- package/dist/x/hono.js +0 -60
- package/dist/x/sveltekit.cjs +0 -69
- package/dist/x/sveltekit.d.cts +0 -46
- package/dist/x/sveltekit.d.ts +0 -48
- package/dist/x/sveltekit.js +0 -68
- /package/dist/{assert_not_equals-f3m3epl3.js → assert_not_equals-C80BG-_5.js} +0 -0
- /package/dist/{collection-CSzG2j1P.js → collection-BzWsN9pB.js} +0 -0
- /package/dist/{nodeinfo/semver.test.d.ts → federation/negotiation.test.d.ts} +0 -0
- /package/dist/{federation-H2_En3j5.cjs → federation-CRpdnOMS.cjs} +0 -0
- /package/dist/{federation-D1U8YY9t.js → federation-jcR8-ZxP.js} +0 -0
- /package/dist/{kv-C7sopW2E.d.ts → kv-BKNZ-Tb-.d.ts} +0 -0
- /package/dist/{kv-63Cil1MD.d.cts → kv-Bxr0Q87_.d.cts} +0 -0
- /package/dist/{mod-C2tOeRkN.d.cts → mod-B-hUPT2N.d.cts} +0 -0
- /package/dist/{mod-1pDWKvUL.d.ts → mod-CVgZgliM.d.ts} +0 -0
- /package/dist/{mod-FZd39qVq.d.cts → mod-CcDPcLJW.d.cts} +0 -0
- /package/dist/{mod-g0xFzAP9.d.ts → mod-bjzj5QIb.d.ts} +0 -0
- /package/dist/{nodeinfo-DfycQ8Wf.js → nodeinfo-BnthBobC.js} +0 -0
- /package/dist/{nodeinfo-Co9lJrWl.cjs → nodeinfo-CdN0rEnZ.cjs} +0 -0
- /package/dist/{otel-Chy5T2Xh.js → otel-1BmGPuZc.js} +0 -0
- /package/dist/{retry-D4GJ670a.js → retry-CfF8Gn4d.js} +0 -0
- /package/dist/{runtime-DPYEDf-o.js → sig-C34-oHBl.js} +0 -0
- /package/dist/{runtime-C58AJWSv.cjs → sig-YYj5tCnr.cjs} +0 -0
- /package/dist/{std__assert-X-_kMxKM.js → std__assert-DWivtrGR.js} +0 -0
- /package/dist/{runtime → utils}/docloader.test.d.ts +0 -0
- /package/dist/{runtime/authdocloader.test.d.ts → utils/kv-cache.test.d.ts} +0 -0
- /package/dist/{sig-Cj3tk-ig.js → utils-D-Va7aXC.js} +0 -0
- /package/dist/{sig-ByHXzqUi.cjs → utils-DyRU1gdZ.cjs} +0 -0
- /package/dist/{webfinger-De_bU0iE.js → webfinger-C72Y8lrh.js} +0 -0
- /package/dist/{webfinger-BjOEdFPs.cjs → webfinger-vAtLmxOF.cjs} +0 -0
|
@@ -3,21 +3,20 @@
|
|
|
3
3
|
import { URLPattern } from "urlpattern-polyfill";
|
|
4
4
|
|
|
5
5
|
import { getDefaultActivityTransformers } from "./transformers-BFT6d7J5.js";
|
|
6
|
-
import { deno_default,
|
|
7
|
-
import { Activity, Collection, CollectionPage, CryptographicKey, Link, Multikey, Object as Object$1, OrderedCollection, OrderedCollectionPage, getTypeId } from "./actor-
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import { getAuthenticatedDocumentLoader } from "./authdocloader-BNIyrORx.js";
|
|
14
|
-
import { lookupObject, traverseCollection } from "./vocab-CthegyUc.js";
|
|
6
|
+
import { deno_default, lookupWebFinger } from "./lookup-CtC3x1M6.js";
|
|
7
|
+
import { Activity, Collection, CollectionPage, CryptographicKey, Link, Multikey, Object as Object$1, OrderedCollection, OrderedCollectionPage, getTypeId } from "./actor-C-FuEZU4.js";
|
|
8
|
+
import { doubleKnock, exportJwk, importJwk, validateCryptoKey, verifyRequest } from "./http-Q_l4fCEE.js";
|
|
9
|
+
import { detachSignature, doesActorOwnKey, getKeyOwner, hasSignature, signJsonLd, signObject, verifyJsonLd, verifyObject } from "./proof-B-qOSAuQ.js";
|
|
10
|
+
import { getNodeInfo, nodeInfoToJson } from "./types-BtUjyi5y.js";
|
|
11
|
+
import { getAuthenticatedDocumentLoader, kvCache } from "./kv-cache-R1oW382l.js";
|
|
12
|
+
import { lookupObject, traverseCollection } from "./vocab-axlR_8k0.js";
|
|
15
13
|
import { getLogger, withContext } from "@logtape/logtape";
|
|
16
14
|
import { SpanKind, SpanStatusCode, context, propagation, trace } from "@opentelemetry/api";
|
|
17
|
-
import {
|
|
15
|
+
import { getDocumentLoader } from "@fedify/vocab-runtime";
|
|
18
16
|
import { cloneDeep } from "es-toolkit";
|
|
19
17
|
import { Router } from "uri-template-router";
|
|
20
18
|
import { parseTemplate } from "url-template";
|
|
19
|
+
import { encodeHex } from "byte-encodings/hex";
|
|
21
20
|
import { ATTR_HTTP_REQUEST_HEADER, ATTR_HTTP_REQUEST_METHOD, ATTR_HTTP_RESPONSE_HEADER, ATTR_HTTP_RESPONSE_STATUS_CODE, ATTR_URL_FULL } from "@opentelemetry/semantic-conventions";
|
|
22
21
|
import { domainToASCII } from "node:url";
|
|
23
22
|
|
|
@@ -55,7 +54,6 @@ var InboxListenerSet = class InboxListenerSet {
|
|
|
55
54
|
return this.dispatchWithClass(activity)?.listener ?? null;
|
|
56
55
|
}
|
|
57
56
|
};
|
|
58
|
-
let warnedAboutDefaultIdempotency = false;
|
|
59
57
|
async function routeActivity({ context: ctx, json, activity, recipient, inboxListeners, inboxContextFactory, inboxErrorHandler, kv, kvPrefixes, queue, span, tracerProvider, idempotencyStrategy }) {
|
|
60
58
|
const logger$1 = getLogger([
|
|
61
59
|
"fedify",
|
|
@@ -65,11 +63,7 @@ async function routeActivity({ context: ctx, json, activity, recipient, inboxLis
|
|
|
65
63
|
let cacheKey = null;
|
|
66
64
|
if (activity.id != null) {
|
|
67
65
|
const inboxContext = inboxContextFactory(recipient, json, activity.id?.href, getTypeId(activity).href);
|
|
68
|
-
const strategy = idempotencyStrategy ?? "per-
|
|
69
|
-
if (idempotencyStrategy === void 0 && !warnedAboutDefaultIdempotency) {
|
|
70
|
-
logger$1.warn("Using default idempotency strategy 'per-origin'. This default will change to 'per-inbox' in Fedify 2.0. Please explicitly set the idempotency strategy using .withIdempotency().");
|
|
71
|
-
warnedAboutDefaultIdempotency = true;
|
|
72
|
-
}
|
|
66
|
+
const strategy = idempotencyStrategy ?? "per-inbox";
|
|
73
67
|
let keyString;
|
|
74
68
|
if (typeof strategy === "function") {
|
|
75
69
|
const result = await strategy(inboxContext, activity);
|
|
@@ -344,7 +338,7 @@ var FederationBuilderImpl = class {
|
|
|
344
338
|
this.collectionTypeIds = {};
|
|
345
339
|
}
|
|
346
340
|
async build(options) {
|
|
347
|
-
const { FederationImpl: FederationImpl$1 } = await import("./middleware-
|
|
341
|
+
const { FederationImpl: FederationImpl$1 } = await import("./middleware-mQR2SM7T.js");
|
|
348
342
|
const f = new FederationImpl$1(options);
|
|
349
343
|
const trailingSlashInsensitiveValue = f.router.trailingSlashInsensitive;
|
|
350
344
|
f.router = this.router.clone();
|
|
@@ -1007,9 +1001,6 @@ function preferredMediaTypes(accept) {
|
|
|
1007
1001
|
const accepts = parseAccept(accept === void 0 ? "*/*" : accept ?? "");
|
|
1008
1002
|
return accepts.filter(isQuality).sort(compareSpecs).map(getFullType);
|
|
1009
1003
|
}
|
|
1010
|
-
|
|
1011
|
-
//#endregion
|
|
1012
|
-
//#region src/federation/handler.ts
|
|
1013
1004
|
function acceptsJsonLd(request) {
|
|
1014
1005
|
const accept = request.headers.get("Accept");
|
|
1015
1006
|
const types = accept ? preferredMediaTypes(accept) : ["*/*"];
|
|
@@ -1017,6 +1008,9 @@ function acceptsJsonLd(request) {
|
|
|
1017
1008
|
if (types[0] === "text/html" || types[0] === "application/xhtml+xml") return false;
|
|
1018
1009
|
return types.includes("application/activity+json") || types.includes("application/ld+json") || types.includes("application/json");
|
|
1019
1010
|
}
|
|
1011
|
+
|
|
1012
|
+
//#endregion
|
|
1013
|
+
//#region src/federation/handler.ts
|
|
1020
1014
|
/**
|
|
1021
1015
|
* Handles an actor request.
|
|
1022
1016
|
* @template TContextData The context data to pass to the context.
|
|
@@ -1024,7 +1018,7 @@ function acceptsJsonLd(request) {
|
|
|
1024
1018
|
* @param parameters The parameters for handling the actor.
|
|
1025
1019
|
* @returns A promise that resolves to an HTTP response.
|
|
1026
1020
|
*/
|
|
1027
|
-
async function handleActor(request, { identifier, context: context$1, actorDispatcher, authorizePredicate, onNotFound,
|
|
1021
|
+
async function handleActor(request, { identifier, context: context$1, actorDispatcher, authorizePredicate, onNotFound, onUnauthorized }) {
|
|
1028
1022
|
const logger$1 = getLogger([
|
|
1029
1023
|
"fedify",
|
|
1030
1024
|
"federation",
|
|
@@ -1039,7 +1033,6 @@ async function handleActor(request, { identifier, context: context$1, actorDispa
|
|
|
1039
1033
|
logger$1.debug("Actor {identifier} not found.", { identifier });
|
|
1040
1034
|
return await onNotFound(request);
|
|
1041
1035
|
}
|
|
1042
|
-
if (!acceptsJsonLd(request)) return await onNotAcceptable(request);
|
|
1043
1036
|
if (authorizePredicate != null) {
|
|
1044
1037
|
let key = await context$1.getSignedKey();
|
|
1045
1038
|
key = key?.clone({}, { $warning: {
|
|
@@ -1074,11 +1067,10 @@ async function handleActor(request, { identifier, context: context$1, actorDispa
|
|
|
1074
1067
|
* @param parameters The parameters for handling the object.
|
|
1075
1068
|
* @returns A promise that resolves to an HTTP response.
|
|
1076
1069
|
*/
|
|
1077
|
-
async function handleObject(request, { values, context: context$1, objectDispatcher, authorizePredicate, onNotFound,
|
|
1070
|
+
async function handleObject(request, { values, context: context$1, objectDispatcher, authorizePredicate, onNotFound, onUnauthorized }) {
|
|
1078
1071
|
if (objectDispatcher == null) return await onNotFound(request);
|
|
1079
1072
|
const object = await objectDispatcher(context$1, values);
|
|
1080
1073
|
if (object == null) return await onNotFound(request);
|
|
1081
|
-
if (!acceptsJsonLd(request)) return await onNotAcceptable(request);
|
|
1082
1074
|
if (authorizePredicate != null) {
|
|
1083
1075
|
let key = await context$1.getSignedKey();
|
|
1084
1076
|
key = key?.clone({}, { $warning: {
|
|
@@ -1116,7 +1108,7 @@ async function handleObject(request, { values, context: context$1, objectDispatc
|
|
|
1116
1108
|
* @param parameters The parameters for handling the collection.
|
|
1117
1109
|
* @returns A promise that resolves to an HTTP response.
|
|
1118
1110
|
*/
|
|
1119
|
-
async function handleCollection(request, { name, identifier, uriGetter, filter, filterPredicate, context: context$1, collectionCallbacks, tracerProvider, onUnauthorized, onNotFound
|
|
1111
|
+
async function handleCollection(request, { name, identifier, uriGetter, filter, filterPredicate, context: context$1, collectionCallbacks, tracerProvider, onUnauthorized, onNotFound }) {
|
|
1120
1112
|
const spanName = name.trim().replace(/\s+/g, "_");
|
|
1121
1113
|
tracerProvider = tracerProvider ?? trace.getTracerProvider();
|
|
1122
1114
|
const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
|
|
@@ -1229,7 +1221,6 @@ async function handleCollection(request, { name, identifier, uriGetter, filter,
|
|
|
1229
1221
|
partOf
|
|
1230
1222
|
});
|
|
1231
1223
|
}
|
|
1232
|
-
if (!acceptsJsonLd(request)) return await onNotAcceptable(request);
|
|
1233
1224
|
if (collectionCallbacks.authorizePredicate != null) {
|
|
1234
1225
|
let key = await context$1.getSignedKey();
|
|
1235
1226
|
key = key?.clone({}, { $warning: {
|
|
@@ -1576,7 +1567,6 @@ async function handleInboxInternal(request, parameters, span) {
|
|
|
1576
1567
|
const handleCustomCollection = exceptWrapper(_handleCustomCollection);
|
|
1577
1568
|
async function _handleCustomCollection(request, { name, values, context: context$1, tracerProvider, collectionCallbacks: callbacks, filterPredicate }) {
|
|
1578
1569
|
verifyDefined(callbacks);
|
|
1579
|
-
verifyJsonLdRequest(request);
|
|
1580
1570
|
await authIfNeeded(context$1, values, callbacks);
|
|
1581
1571
|
const cursor = new URL(request.url).searchParams.get("cursor");
|
|
1582
1572
|
return await new CustomCollectionHandler(name, values, context$1, callbacks, tracerProvider, Collection, CollectionPage, filterPredicate).fetchCollection(cursor).toJsonLd().then(respondAsActivity);
|
|
@@ -1595,7 +1585,6 @@ async function _handleCustomCollection(request, { name, values, context: context
|
|
|
1595
1585
|
const handleOrderedCollection = exceptWrapper(_handleOrderedCollection);
|
|
1596
1586
|
async function _handleOrderedCollection(request, { name, values, context: context$1, tracerProvider, collectionCallbacks: callbacks, filterPredicate }) {
|
|
1597
1587
|
verifyDefined(callbacks);
|
|
1598
|
-
verifyJsonLdRequest(request);
|
|
1599
1588
|
await authIfNeeded(context$1, values, callbacks);
|
|
1600
1589
|
const cursor = new URL(request.url).searchParams.get("cursor");
|
|
1601
1590
|
return await new CustomCollectionHandler(name, values, context$1, callbacks, tracerProvider, OrderedCollection, OrderedCollectionPage, filterPredicate).fetchCollection(cursor).toJsonLd().then(respondAsActivity);
|
|
@@ -1872,10 +1861,9 @@ function exceptWrapper(handler) {
|
|
|
1872
1861
|
try {
|
|
1873
1862
|
return await handler(request, handlerParams);
|
|
1874
1863
|
} catch (error) {
|
|
1875
|
-
const { onNotFound,
|
|
1864
|
+
const { onNotFound, onUnauthorized } = handlerParams;
|
|
1876
1865
|
switch (error?.constructor) {
|
|
1877
1866
|
case ItemsNotFoundError: return await onNotFound(request);
|
|
1878
|
-
case NotAcceptableError: return await onNotAcceptable(request);
|
|
1879
1867
|
case UnauthorizedError: return await onUnauthorized(request);
|
|
1880
1868
|
default: throw error;
|
|
1881
1869
|
}
|
|
@@ -1893,15 +1881,6 @@ const verifyDefined = (callbacks) => {
|
|
|
1893
1881
|
if (callbacks === void 0) throw new ItemsNotFoundError();
|
|
1894
1882
|
};
|
|
1895
1883
|
/**
|
|
1896
|
-
* Verifies that a request accepts JSON-LD content type.
|
|
1897
|
-
* @param request The HTTP request to verify.
|
|
1898
|
-
* @throws {NotAcceptableError} If the request doesn't accept JSON-LD.
|
|
1899
|
-
* @since 1.8.0
|
|
1900
|
-
*/
|
|
1901
|
-
const verifyJsonLdRequest = (request) => {
|
|
1902
|
-
if (!acceptsJsonLd(request)) throw new NotAcceptableError();
|
|
1903
|
-
};
|
|
1904
|
-
/**
|
|
1905
1884
|
* Performs authorization if needed based on the authorization predicate.
|
|
1906
1885
|
* @template TContextData The context data type.
|
|
1907
1886
|
* @param {RequestContext<TContextData>} context The request context.
|
|
@@ -1985,15 +1964,6 @@ var ItemsNotFoundError = class extends HandlerError {
|
|
|
1985
1964
|
}
|
|
1986
1965
|
};
|
|
1987
1966
|
/**
|
|
1988
|
-
* Error thrown when the request is not acceptable (e.g., wrong content type).
|
|
1989
|
-
* @since 1.8.0
|
|
1990
|
-
*/
|
|
1991
|
-
var NotAcceptableError = class extends HandlerError {
|
|
1992
|
-
constructor() {
|
|
1993
|
-
super("The request is not acceptable.");
|
|
1994
|
-
}
|
|
1995
|
-
};
|
|
1996
|
-
/**
|
|
1997
1967
|
* Error thrown when access to a collection is unauthorized.
|
|
1998
1968
|
* @since 1.8.0
|
|
1999
1969
|
*/
|
|
@@ -2390,7 +2360,6 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
2390
2360
|
firstKnock;
|
|
2391
2361
|
constructor(options) {
|
|
2392
2362
|
super();
|
|
2393
|
-
const logger$1 = getLogger(["fedify", "federation"]);
|
|
2394
2363
|
this.kv = options.kv;
|
|
2395
2364
|
this.kvPrefixes = {
|
|
2396
2365
|
activityIdempotence: ["_fedify", "activityIdempotence"],
|
|
@@ -2438,17 +2407,13 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
2438
2407
|
this.router.trailingSlashInsensitive = options.trailingSlashInsensitive ?? false;
|
|
2439
2408
|
this._initializeRouter();
|
|
2440
2409
|
if (options.allowPrivateAddress || options.userAgent != null) {
|
|
2441
|
-
if (options.
|
|
2442
|
-
|
|
2443
|
-
|
|
2410
|
+
if (options.documentLoaderFactory != null) throw new TypeError("Cannot set documentLoaderFactory with allowPrivateAddress or userAgent options.");
|
|
2411
|
+
if (options.contextLoaderFactory != null) throw new TypeError("Cannot set contextLoaderFactory with allowPrivateAddress or userAgent options.");
|
|
2412
|
+
if (options.authenticatedDocumentLoaderFactory != null) throw new TypeError("Cannot set authenticatedDocumentLoaderFactory with allowPrivateAddress or userAgent options.");
|
|
2444
2413
|
}
|
|
2445
2414
|
const { allowPrivateAddress, userAgent } = options;
|
|
2446
2415
|
this.allowPrivateAddress = allowPrivateAddress ?? false;
|
|
2447
|
-
|
|
2448
|
-
if (options.documentLoaderFactory != null) throw new TypeError("Cannot set both documentLoader and documentLoaderFactory options at a time; use documentLoaderFactory only.");
|
|
2449
|
-
this.documentLoaderFactory = () => options.documentLoader;
|
|
2450
|
-
logger$1.warn("The documentLoader option is deprecated; use documentLoaderFactory option instead.");
|
|
2451
|
-
} else this.documentLoaderFactory = options.documentLoaderFactory ?? ((opts) => {
|
|
2416
|
+
this.documentLoaderFactory = options.documentLoaderFactory ?? ((opts) => {
|
|
2452
2417
|
return kvCache({
|
|
2453
2418
|
loader: getDocumentLoader({
|
|
2454
2419
|
allowPrivateAddress: opts?.allowPrivateAddress ?? allowPrivateAddress,
|
|
@@ -2458,11 +2423,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
2458
2423
|
prefix: this.kvPrefixes.remoteDocument
|
|
2459
2424
|
});
|
|
2460
2425
|
});
|
|
2461
|
-
|
|
2462
|
-
if (options.contextLoaderFactory != null) throw new TypeError("Cannot set both contextLoader and contextLoaderFactory options at a time; use contextLoaderFactory only.");
|
|
2463
|
-
this.contextLoaderFactory = () => options.contextLoader;
|
|
2464
|
-
logger$1.warn("The contextLoader option is deprecated; use contextLoaderFactory option instead.");
|
|
2465
|
-
} else this.contextLoaderFactory = options.contextLoaderFactory ?? this.documentLoaderFactory;
|
|
2426
|
+
this.contextLoaderFactory = options.contextLoaderFactory ?? this.documentLoaderFactory;
|
|
2466
2427
|
this.authenticatedDocumentLoaderFactory = options.authenticatedDocumentLoaderFactory ?? ((identity) => getAuthenticatedDocumentLoader(identity, {
|
|
2467
2428
|
allowPrivateAddress,
|
|
2468
2429
|
userAgent,
|
|
@@ -3001,6 +2962,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
3001
2962
|
span,
|
|
3002
2963
|
tracer
|
|
3003
2964
|
});
|
|
2965
|
+
if (acceptsJsonLd(request)) response.headers.set("Vary", "Accept");
|
|
3004
2966
|
} catch (error) {
|
|
3005
2967
|
span.setStatus({
|
|
3006
2968
|
code: SpanStatusCode.ERROR,
|
|
@@ -3064,6 +3026,9 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
3064
3026
|
context: context$1,
|
|
3065
3027
|
nodeInfoDispatcher: this.nodeInfoDispatcher
|
|
3066
3028
|
});
|
|
3029
|
+
}
|
|
3030
|
+
if (request.method !== "POST" && !acceptsJsonLd(request)) return await onNotAcceptable(request);
|
|
3031
|
+
switch (routeName) {
|
|
3067
3032
|
case "actor":
|
|
3068
3033
|
context$1 = this.#createContext(request, contextData, { invokedFromActorDispatcher: { identifier: route.values.identifier ?? route.values.handle } });
|
|
3069
3034
|
return await handleActor(request, {
|
|
@@ -3072,8 +3037,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
3072
3037
|
actorDispatcher: this.actorCallbacks?.dispatcher,
|
|
3073
3038
|
authorizePredicate: this.actorCallbacks?.authorizePredicate,
|
|
3074
3039
|
onUnauthorized,
|
|
3075
|
-
onNotFound
|
|
3076
|
-
onNotAcceptable
|
|
3040
|
+
onNotFound
|
|
3077
3041
|
});
|
|
3078
3042
|
case "object": {
|
|
3079
3043
|
const typeId = route.name.replace(/^object:/, "");
|
|
@@ -3089,8 +3053,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
3089
3053
|
objectDispatcher: callbacks?.dispatcher,
|
|
3090
3054
|
authorizePredicate: callbacks?.authorizePredicate,
|
|
3091
3055
|
onUnauthorized,
|
|
3092
|
-
onNotFound
|
|
3093
|
-
onNotAcceptable
|
|
3056
|
+
onNotFound
|
|
3094
3057
|
});
|
|
3095
3058
|
}
|
|
3096
3059
|
case "outbox": return await handleCollection(request, {
|
|
@@ -3101,8 +3064,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
3101
3064
|
collectionCallbacks: this.outboxCallbacks,
|
|
3102
3065
|
tracerProvider: this.tracerProvider,
|
|
3103
3066
|
onUnauthorized,
|
|
3104
|
-
onNotFound
|
|
3105
|
-
onNotAcceptable
|
|
3067
|
+
onNotFound
|
|
3106
3068
|
});
|
|
3107
3069
|
case "inbox":
|
|
3108
3070
|
if (request.method !== "POST") return await handleCollection(request, {
|
|
@@ -3113,8 +3075,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
3113
3075
|
collectionCallbacks: this.inboxCallbacks,
|
|
3114
3076
|
tracerProvider: this.tracerProvider,
|
|
3115
3077
|
onUnauthorized,
|
|
3116
|
-
onNotFound
|
|
3117
|
-
onNotAcceptable
|
|
3078
|
+
onNotFound
|
|
3118
3079
|
});
|
|
3119
3080
|
context$1 = this.#createContext(request, contextData, { documentLoader: await context$1.getDocumentLoader({ identifier: route.values.identifier ?? route.values.handle }) });
|
|
3120
3081
|
case "sharedInbox":
|
|
@@ -3147,8 +3108,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
3147
3108
|
collectionCallbacks: this.followingCallbacks,
|
|
3148
3109
|
tracerProvider: this.tracerProvider,
|
|
3149
3110
|
onUnauthorized,
|
|
3150
|
-
onNotFound
|
|
3151
|
-
onNotAcceptable
|
|
3111
|
+
onNotFound
|
|
3152
3112
|
});
|
|
3153
3113
|
case "followers": {
|
|
3154
3114
|
let baseUrl = url.searchParams.get("base-url");
|
|
@@ -3171,8 +3131,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
3171
3131
|
collectionCallbacks: this.followersCallbacks,
|
|
3172
3132
|
tracerProvider: this.tracerProvider,
|
|
3173
3133
|
onUnauthorized,
|
|
3174
|
-
onNotFound
|
|
3175
|
-
onNotAcceptable
|
|
3134
|
+
onNotFound
|
|
3176
3135
|
});
|
|
3177
3136
|
}
|
|
3178
3137
|
case "liked": return await handleCollection(request, {
|
|
@@ -3183,8 +3142,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
3183
3142
|
collectionCallbacks: this.likedCallbacks,
|
|
3184
3143
|
tracerProvider: this.tracerProvider,
|
|
3185
3144
|
onUnauthorized,
|
|
3186
|
-
onNotFound
|
|
3187
|
-
onNotAcceptable
|
|
3145
|
+
onNotFound
|
|
3188
3146
|
});
|
|
3189
3147
|
case "featured": return await handleCollection(request, {
|
|
3190
3148
|
name: "featured",
|
|
@@ -3194,8 +3152,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
3194
3152
|
collectionCallbacks: this.featuredCallbacks,
|
|
3195
3153
|
tracerProvider: this.tracerProvider,
|
|
3196
3154
|
onUnauthorized,
|
|
3197
|
-
onNotFound
|
|
3198
|
-
onNotAcceptable
|
|
3155
|
+
onNotFound
|
|
3199
3156
|
});
|
|
3200
3157
|
case "featuredTags": return await handleCollection(request, {
|
|
3201
3158
|
name: "featured tags",
|
|
@@ -3205,8 +3162,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
3205
3162
|
collectionCallbacks: this.featuredTagsCallbacks,
|
|
3206
3163
|
tracerProvider: this.tracerProvider,
|
|
3207
3164
|
onUnauthorized,
|
|
3208
|
-
onNotFound
|
|
3209
|
-
onNotAcceptable
|
|
3165
|
+
onNotFound
|
|
3210
3166
|
});
|
|
3211
3167
|
case "collection": {
|
|
3212
3168
|
const name = route.name.replace(/^collection:/, "");
|
|
@@ -3218,8 +3174,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
3218
3174
|
collectionCallbacks: callbacks,
|
|
3219
3175
|
tracerProvider: this.tracerProvider,
|
|
3220
3176
|
onUnauthorized,
|
|
3221
|
-
onNotFound
|
|
3222
|
-
onNotAcceptable
|
|
3177
|
+
onNotFound
|
|
3223
3178
|
});
|
|
3224
3179
|
}
|
|
3225
3180
|
case "orderedCollection": {
|
|
@@ -3232,8 +3187,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
3232
3187
|
collectionCallbacks: callbacks,
|
|
3233
3188
|
tracerProvider: this.tracerProvider,
|
|
3234
3189
|
onUnauthorized,
|
|
3235
|
-
onNotFound
|
|
3236
|
-
onNotAcceptable
|
|
3190
|
+
onNotFound
|
|
3237
3191
|
});
|
|
3238
3192
|
}
|
|
3239
3193
|
default: {
|