@fedify/fedify 1.10.0-dev.5 → 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-BXsV2bEo.js → actor-C-FuEZU4.js} +220 -705
- package/dist/{actor-C1Euqngb.d.ts → actor-DqFajh9s.d.ts} +2 -2
- package/dist/{actor-Cn_Wo2Sr.cjs → actor-_9UN5RVT.cjs} +952 -1479
- package/dist/{actor-Ydzhc8dj.d.cts → actor-f2NtjyCg.d.cts} +2 -2
- package/dist/{actor-B1L4qxfi.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-C-PtyBzf.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-DQu9XLnH.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-Cx_DgATa.js → docloader-CE1lRhEV.js} +17 -8
- package/dist/{esm-BHq8vvU6.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-ZepHDnAP.js → http-Bmx7ea3F.js} +2 -2
- package/dist/{http-B1_DzfAU.d.cts → http-M8k5mKc0.d.cts} +2 -2
- package/dist/{http-C4Oi5eIq.js → http-Q_l4fCEE.js} +256 -6
- package/dist/{http-BtKvhGUI.cjs → http-So5V_Tgv.cjs} +289 -9
- package/dist/{inbox-D6-aBaqR.js → inbox-B9PjFn2S.js} +2 -7
- package/dist/{key-Dwqt62bf.js → key-khQpfFdw.js} +3 -2
- package/dist/{keycache-DZ51X_tY.js → keycache-BU3fsZFa.js} +1 -1
- package/dist/{keys-D9SlcZrs.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-CTGnKRt0.js → ld-BLMebnep.js} +3 -2
- package/dist/{type-BBugK2n5.js → lookup-C7SSHgK7.js} +542 -5394
- package/dist/{lookup-aQOlOGdF.cjs → lookup-CLaDFNx1.cjs} +134 -5
- package/dist/{lookup-BnxmqZLB.js → lookup-CtC3x1M6.js} +125 -2
- package/dist/middleware-BYBwqvTv.cjs +15 -0
- package/dist/{middleware-BtJedzGJ.js → middleware-Bda2JO66.js} +38 -84
- package/dist/{middleware-DHDM-Bzb.js → middleware-C3ml59Hp.js} +43 -146
- package/dist/middleware-DC7h2qq-.js +26 -0
- package/dist/{middleware-DTIx6DRv.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-DxpcLcST.js → owner-XzzTSr4S.js} +3 -2
- package/dist/{owner-BbeUDvOu.d.ts → owner-kQRGVXG1.d.ts} +3 -3
- package/dist/{proof-OAc97dy3.js → proof-B-qOSAuQ.js} +5 -4
- package/dist/{proof-ADZwDCs9.cjs → proof-BzJkFBBF.cjs} +18 -17
- package/dist/{proof-DBJnG2Jh.js → proof-C9sfVit1.js} +2 -2
- package/dist/{send-Df2mI5_D.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-J7AQVhyi.js → testing-D-nLIHkh.js} +1 -2
- package/dist/{types-C-qRy7Sr.js → types-BtUjyi5y.js} +5 -166
- package/dist/{types-BIgY6c-l.js → types-C2XVl6gj.js} +1 -3
- package/dist/{types-Bzu6UrRZ.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-BmNpY-Qt.cjs → vocab-C96aggZM.cjs} +5 -5
- package/dist/{vocab-Cfs0937i.d.cts → vocab-CeDBzu-f.d.cts} +9 -25
- package/dist/{vocab-LbNRAL-4.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-D9EszOkX.js +0 -52
- package/dist/authdocloader-Drjjh5Im.cjs +0 -58
- package/dist/denokv-D0nfNQ1x.js +0 -57
- package/dist/docloader-Bmu3XCd9.js +0 -4825
- package/dist/docloader-Ca3eoIku.cjs +0 -4891
- package/dist/docloader-CxWcuWqQ.d.ts +0 -221
- package/dist/docloader-D-MrRyHl.d.cts +0 -219
- package/dist/key-B0fFsgYk.js +0 -10
- package/dist/key-BvTvHoN1.js +0 -10
- package/dist/key-CPuhWBwH.cjs +0 -290
- package/dist/key-DUfn16_4.js +0 -260
- package/dist/key-DZieB9_P.cjs +0 -10
- package/dist/lookup-DSMnJERg.js +0 -336
- package/dist/middleware-BnRluVn4.js +0 -17
- package/dist/middleware-CkMXhJ9g.cjs +0 -17
- package/dist/middleware-DhE-His4.js +0 -26
- 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,22 +3,24 @@
|
|
|
3
3
|
import { URLPattern } from "urlpattern-polyfill";
|
|
4
4
|
globalThis.addEventListener = () => {};
|
|
5
5
|
|
|
6
|
-
import { Activity, Collection, CollectionPage, CryptographicKey, Link, Multikey, Object as Object$1, OrderedCollection, OrderedCollectionPage,
|
|
7
|
-
import { getNodeInfo } from "./client-
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import { routeActivity } from "./inbox-
|
|
17
|
-
import { FederationBuilderImpl } from "./builder-
|
|
18
|
-
import { buildCollectionSynchronizationHeader } from "./collection-
|
|
19
|
-
import { KvKeyCache } from "./keycache-
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
6
|
+
import { Activity, Collection, CollectionPage, CryptographicKey, Link, Multikey, Object as Object$1, OrderedCollection, OrderedCollectionPage, RouterError, deno_default, getTypeId, lookupObject, lookupWebFinger, traverseCollection } from "./lookup-C7SSHgK7.js";
|
|
7
|
+
import { getNodeInfo } from "./client-pY7-3icS.js";
|
|
8
|
+
import { nodeInfoToJson } from "./types-C2XVl6gj.js";
|
|
9
|
+
import { exportJwk, importJwk, validateCryptoKey } from "./key-khQpfFdw.js";
|
|
10
|
+
import { verifyRequest } from "./http-Bmx7ea3F.js";
|
|
11
|
+
import { detachSignature, hasSignature, signJsonLd, verifyJsonLd } from "./ld-BLMebnep.js";
|
|
12
|
+
import { doesActorOwnKey, getKeyOwner } from "./owner-XzzTSr4S.js";
|
|
13
|
+
import { signObject, verifyObject } from "./proof-C9sfVit1.js";
|
|
14
|
+
import { getAuthenticatedDocumentLoader } from "./docloader-CE1lRhEV.js";
|
|
15
|
+
import { kvCache } from "./kv-cache-DN9pfMBe.js";
|
|
16
|
+
import { routeActivity } from "./inbox-B9PjFn2S.js";
|
|
17
|
+
import { FederationBuilderImpl } from "./builder-hArjoWjW.js";
|
|
18
|
+
import { buildCollectionSynchronizationHeader } from "./collection-BzWsN9pB.js";
|
|
19
|
+
import { KvKeyCache } from "./keycache-BU3fsZFa.js";
|
|
20
|
+
import { acceptsJsonLd } from "./negotiation-C4nFufNk.js";
|
|
21
|
+
import { createExponentialBackoffPolicy } from "./retry-CfF8Gn4d.js";
|
|
22
|
+
import { extractInboxes, sendActivity } from "./send-yEkZlxzW.js";
|
|
23
|
+
import { getDocumentLoader } from "@fedify/vocab-runtime";
|
|
22
24
|
import { getLogger, withContext } from "@logtape/logtape";
|
|
23
25
|
import { SpanKind, SpanStatusCode, context, propagation, trace } from "@opentelemetry/api";
|
|
24
26
|
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";
|
|
@@ -297,73 +299,8 @@ async function handleWebFingerInternal(request, { context: context$1, host, acto
|
|
|
297
299
|
} });
|
|
298
300
|
}
|
|
299
301
|
|
|
300
|
-
//#endregion
|
|
301
|
-
//#region src/federation/negotiation.ts
|
|
302
|
-
function compareSpecs(a, b) {
|
|
303
|
-
return b.q - a.q || (b.s ?? 0) - (a.s ?? 0) || (a.o ?? 0) - (b.o ?? 0) || a.i - b.i || 0;
|
|
304
|
-
}
|
|
305
|
-
function isQuality(spec) {
|
|
306
|
-
return spec.q > 0;
|
|
307
|
-
}
|
|
308
|
-
const simpleMediaTypeRegExp = /^\s*([^\s\/;]+)\/([^;\s]+)\s*(?:;(.*))?$/;
|
|
309
|
-
function splitKeyValuePair(str) {
|
|
310
|
-
const [key, value] = str.split("=");
|
|
311
|
-
return [key.toLowerCase(), value];
|
|
312
|
-
}
|
|
313
|
-
function parseMediaType(str, i) {
|
|
314
|
-
const match = simpleMediaTypeRegExp.exec(str);
|
|
315
|
-
if (!match) return;
|
|
316
|
-
const [, type, subtype, parameters] = match;
|
|
317
|
-
if (!type || !subtype) return;
|
|
318
|
-
const params = Object.create(null);
|
|
319
|
-
let q = 1;
|
|
320
|
-
if (parameters) {
|
|
321
|
-
const kvps = parameters.split(";").map((p) => p.trim()).map(splitKeyValuePair);
|
|
322
|
-
for (const [key, val] of kvps) {
|
|
323
|
-
const value = val && val[0] === `"` && val[val.length - 1] === `"` ? val.slice(1, val.length - 1) : val;
|
|
324
|
-
if (key === "q" && value) {
|
|
325
|
-
q = parseFloat(value);
|
|
326
|
-
break;
|
|
327
|
-
}
|
|
328
|
-
params[key] = value;
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
return {
|
|
332
|
-
type,
|
|
333
|
-
subtype,
|
|
334
|
-
params,
|
|
335
|
-
i,
|
|
336
|
-
o: void 0,
|
|
337
|
-
q,
|
|
338
|
-
s: void 0
|
|
339
|
-
};
|
|
340
|
-
}
|
|
341
|
-
function parseAccept(accept) {
|
|
342
|
-
const accepts = accept.split(",").map((p) => p.trim());
|
|
343
|
-
const mediaTypes = [];
|
|
344
|
-
for (const [index, accept$1] of accepts.entries()) {
|
|
345
|
-
const mediaType = parseMediaType(accept$1.trim(), index);
|
|
346
|
-
if (mediaType) mediaTypes.push(mediaType);
|
|
347
|
-
}
|
|
348
|
-
return mediaTypes;
|
|
349
|
-
}
|
|
350
|
-
function getFullType(spec) {
|
|
351
|
-
return `${spec.type}/${spec.subtype}`;
|
|
352
|
-
}
|
|
353
|
-
function preferredMediaTypes(accept) {
|
|
354
|
-
const accepts = parseAccept(accept === void 0 ? "*/*" : accept ?? "");
|
|
355
|
-
return accepts.filter(isQuality).sort(compareSpecs).map(getFullType);
|
|
356
|
-
}
|
|
357
|
-
|
|
358
302
|
//#endregion
|
|
359
303
|
//#region src/federation/handler.ts
|
|
360
|
-
function acceptsJsonLd(request) {
|
|
361
|
-
const accept = request.headers.get("Accept");
|
|
362
|
-
const types = accept ? preferredMediaTypes(accept) : ["*/*"];
|
|
363
|
-
if (types == null) return true;
|
|
364
|
-
if (types[0] === "text/html" || types[0] === "application/xhtml+xml") return false;
|
|
365
|
-
return types.includes("application/activity+json") || types.includes("application/ld+json") || types.includes("application/json");
|
|
366
|
-
}
|
|
367
304
|
/**
|
|
368
305
|
* Handles an actor request.
|
|
369
306
|
* @template TContextData The context data to pass to the context.
|
|
@@ -371,7 +308,7 @@ function acceptsJsonLd(request) {
|
|
|
371
308
|
* @param parameters The parameters for handling the actor.
|
|
372
309
|
* @returns A promise that resolves to an HTTP response.
|
|
373
310
|
*/
|
|
374
|
-
async function handleActor(request, { identifier, context: context$1, actorDispatcher, authorizePredicate, onNotFound,
|
|
311
|
+
async function handleActor(request, { identifier, context: context$1, actorDispatcher, authorizePredicate, onNotFound, onUnauthorized }) {
|
|
375
312
|
const logger$2 = getLogger([
|
|
376
313
|
"fedify",
|
|
377
314
|
"federation",
|
|
@@ -386,7 +323,6 @@ async function handleActor(request, { identifier, context: context$1, actorDispa
|
|
|
386
323
|
logger$2.debug("Actor {identifier} not found.", { identifier });
|
|
387
324
|
return await onNotFound(request);
|
|
388
325
|
}
|
|
389
|
-
if (!acceptsJsonLd(request)) return await onNotAcceptable(request);
|
|
390
326
|
if (authorizePredicate != null) {
|
|
391
327
|
let key = await context$1.getSignedKey();
|
|
392
328
|
key = key?.clone({}, { $warning: {
|
|
@@ -421,11 +357,10 @@ async function handleActor(request, { identifier, context: context$1, actorDispa
|
|
|
421
357
|
* @param parameters The parameters for handling the object.
|
|
422
358
|
* @returns A promise that resolves to an HTTP response.
|
|
423
359
|
*/
|
|
424
|
-
async function handleObject(request, { values, context: context$1, objectDispatcher, authorizePredicate, onNotFound,
|
|
360
|
+
async function handleObject(request, { values, context: context$1, objectDispatcher, authorizePredicate, onNotFound, onUnauthorized }) {
|
|
425
361
|
if (objectDispatcher == null) return await onNotFound(request);
|
|
426
362
|
const object = await objectDispatcher(context$1, values);
|
|
427
363
|
if (object == null) return await onNotFound(request);
|
|
428
|
-
if (!acceptsJsonLd(request)) return await onNotAcceptable(request);
|
|
429
364
|
if (authorizePredicate != null) {
|
|
430
365
|
let key = await context$1.getSignedKey();
|
|
431
366
|
key = key?.clone({}, { $warning: {
|
|
@@ -463,7 +398,7 @@ async function handleObject(request, { values, context: context$1, objectDispatc
|
|
|
463
398
|
* @param parameters The parameters for handling the collection.
|
|
464
399
|
* @returns A promise that resolves to an HTTP response.
|
|
465
400
|
*/
|
|
466
|
-
async function handleCollection(request, { name, identifier, uriGetter, filter, filterPredicate, context: context$1, collectionCallbacks, tracerProvider, onUnauthorized, onNotFound
|
|
401
|
+
async function handleCollection(request, { name, identifier, uriGetter, filter, filterPredicate, context: context$1, collectionCallbacks, tracerProvider, onUnauthorized, onNotFound }) {
|
|
467
402
|
const spanName = name.trim().replace(/\s+/g, "_");
|
|
468
403
|
tracerProvider = tracerProvider ?? trace.getTracerProvider();
|
|
469
404
|
const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
|
|
@@ -576,7 +511,6 @@ async function handleCollection(request, { name, identifier, uriGetter, filter,
|
|
|
576
511
|
partOf
|
|
577
512
|
});
|
|
578
513
|
}
|
|
579
|
-
if (!acceptsJsonLd(request)) return await onNotAcceptable(request);
|
|
580
514
|
if (collectionCallbacks.authorizePredicate != null) {
|
|
581
515
|
let key = await context$1.getSignedKey();
|
|
582
516
|
key = key?.clone({}, { $warning: {
|
|
@@ -923,7 +857,6 @@ async function handleInboxInternal(request, parameters, span) {
|
|
|
923
857
|
const handleCustomCollection = exceptWrapper(_handleCustomCollection);
|
|
924
858
|
async function _handleCustomCollection(request, { name, values, context: context$1, tracerProvider, collectionCallbacks: callbacks, filterPredicate }) {
|
|
925
859
|
verifyDefined(callbacks);
|
|
926
|
-
verifyJsonLdRequest(request);
|
|
927
860
|
await authIfNeeded(context$1, values, callbacks);
|
|
928
861
|
const cursor = new URL(request.url).searchParams.get("cursor");
|
|
929
862
|
return await new CustomCollectionHandler(name, values, context$1, callbacks, tracerProvider, Collection, CollectionPage, filterPredicate).fetchCollection(cursor).toJsonLd().then(respondAsActivity);
|
|
@@ -942,7 +875,6 @@ async function _handleCustomCollection(request, { name, values, context: context
|
|
|
942
875
|
const handleOrderedCollection = exceptWrapper(_handleOrderedCollection);
|
|
943
876
|
async function _handleOrderedCollection(request, { name, values, context: context$1, tracerProvider, collectionCallbacks: callbacks, filterPredicate }) {
|
|
944
877
|
verifyDefined(callbacks);
|
|
945
|
-
verifyJsonLdRequest(request);
|
|
946
878
|
await authIfNeeded(context$1, values, callbacks);
|
|
947
879
|
const cursor = new URL(request.url).searchParams.get("cursor");
|
|
948
880
|
return await new CustomCollectionHandler(name, values, context$1, callbacks, tracerProvider, OrderedCollection, OrderedCollectionPage, filterPredicate).fetchCollection(cursor).toJsonLd().then(respondAsActivity);
|
|
@@ -1219,10 +1151,9 @@ function exceptWrapper(handler) {
|
|
|
1219
1151
|
try {
|
|
1220
1152
|
return await handler(request, handlerParams);
|
|
1221
1153
|
} catch (error) {
|
|
1222
|
-
const { onNotFound,
|
|
1154
|
+
const { onNotFound, onUnauthorized } = handlerParams;
|
|
1223
1155
|
switch (error?.constructor) {
|
|
1224
1156
|
case ItemsNotFoundError: return await onNotFound(request);
|
|
1225
|
-
case NotAcceptableError: return await onNotAcceptable(request);
|
|
1226
1157
|
case UnauthorizedError: return await onUnauthorized(request);
|
|
1227
1158
|
default: throw error;
|
|
1228
1159
|
}
|
|
@@ -1240,15 +1171,6 @@ const verifyDefined = (callbacks) => {
|
|
|
1240
1171
|
if (callbacks === void 0) throw new ItemsNotFoundError();
|
|
1241
1172
|
};
|
|
1242
1173
|
/**
|
|
1243
|
-
* Verifies that a request accepts JSON-LD content type.
|
|
1244
|
-
* @param request The HTTP request to verify.
|
|
1245
|
-
* @throws {NotAcceptableError} If the request doesn't accept JSON-LD.
|
|
1246
|
-
* @since 1.8.0
|
|
1247
|
-
*/
|
|
1248
|
-
const verifyJsonLdRequest = (request) => {
|
|
1249
|
-
if (!acceptsJsonLd(request)) throw new NotAcceptableError();
|
|
1250
|
-
};
|
|
1251
|
-
/**
|
|
1252
1174
|
* Performs authorization if needed based on the authorization predicate.
|
|
1253
1175
|
* @template TContextData The context data type.
|
|
1254
1176
|
* @param {RequestContext<TContextData>} context The request context.
|
|
@@ -1332,15 +1254,6 @@ var ItemsNotFoundError = class extends HandlerError {
|
|
|
1332
1254
|
}
|
|
1333
1255
|
};
|
|
1334
1256
|
/**
|
|
1335
|
-
* Error thrown when the request is not acceptable (e.g., wrong content type).
|
|
1336
|
-
* @since 1.8.0
|
|
1337
|
-
*/
|
|
1338
|
-
var NotAcceptableError = class extends HandlerError {
|
|
1339
|
-
constructor() {
|
|
1340
|
-
super("The request is not acceptable.");
|
|
1341
|
-
}
|
|
1342
|
-
};
|
|
1343
|
-
/**
|
|
1344
1257
|
* Error thrown when access to a collection is unauthorized.
|
|
1345
1258
|
* @since 1.8.0
|
|
1346
1259
|
*/
|
|
@@ -1413,7 +1326,6 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
1413
1326
|
firstKnock;
|
|
1414
1327
|
constructor(options) {
|
|
1415
1328
|
super();
|
|
1416
|
-
const logger$2 = getLogger(["fedify", "federation"]);
|
|
1417
1329
|
this.kv = options.kv;
|
|
1418
1330
|
this.kvPrefixes = {
|
|
1419
1331
|
activityIdempotence: ["_fedify", "activityIdempotence"],
|
|
@@ -1461,17 +1373,13 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
1461
1373
|
this.router.trailingSlashInsensitive = options.trailingSlashInsensitive ?? false;
|
|
1462
1374
|
this._initializeRouter();
|
|
1463
1375
|
if (options.allowPrivateAddress || options.userAgent != null) {
|
|
1464
|
-
if (options.
|
|
1465
|
-
|
|
1466
|
-
|
|
1376
|
+
if (options.documentLoaderFactory != null) throw new TypeError("Cannot set documentLoaderFactory with allowPrivateAddress or userAgent options.");
|
|
1377
|
+
if (options.contextLoaderFactory != null) throw new TypeError("Cannot set contextLoaderFactory with allowPrivateAddress or userAgent options.");
|
|
1378
|
+
if (options.authenticatedDocumentLoaderFactory != null) throw new TypeError("Cannot set authenticatedDocumentLoaderFactory with allowPrivateAddress or userAgent options.");
|
|
1467
1379
|
}
|
|
1468
1380
|
const { allowPrivateAddress, userAgent } = options;
|
|
1469
1381
|
this.allowPrivateAddress = allowPrivateAddress ?? false;
|
|
1470
|
-
|
|
1471
|
-
if (options.documentLoaderFactory != null) throw new TypeError("Cannot set both documentLoader and documentLoaderFactory options at a time; use documentLoaderFactory only.");
|
|
1472
|
-
this.documentLoaderFactory = () => options.documentLoader;
|
|
1473
|
-
logger$2.warn("The documentLoader option is deprecated; use documentLoaderFactory option instead.");
|
|
1474
|
-
} else this.documentLoaderFactory = options.documentLoaderFactory ?? ((opts) => {
|
|
1382
|
+
this.documentLoaderFactory = options.documentLoaderFactory ?? ((opts) => {
|
|
1475
1383
|
return kvCache({
|
|
1476
1384
|
loader: getDocumentLoader({
|
|
1477
1385
|
allowPrivateAddress: opts?.allowPrivateAddress ?? allowPrivateAddress,
|
|
@@ -1481,11 +1389,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
1481
1389
|
prefix: this.kvPrefixes.remoteDocument
|
|
1482
1390
|
});
|
|
1483
1391
|
});
|
|
1484
|
-
|
|
1485
|
-
if (options.contextLoaderFactory != null) throw new TypeError("Cannot set both contextLoader and contextLoaderFactory options at a time; use contextLoaderFactory only.");
|
|
1486
|
-
this.contextLoaderFactory = () => options.contextLoader;
|
|
1487
|
-
logger$2.warn("The contextLoader option is deprecated; use contextLoaderFactory option instead.");
|
|
1488
|
-
} else this.contextLoaderFactory = options.contextLoaderFactory ?? this.documentLoaderFactory;
|
|
1392
|
+
this.contextLoaderFactory = options.contextLoaderFactory ?? this.documentLoaderFactory;
|
|
1489
1393
|
this.authenticatedDocumentLoaderFactory = options.authenticatedDocumentLoaderFactory ?? ((identity) => getAuthenticatedDocumentLoader(identity, {
|
|
1490
1394
|
allowPrivateAddress,
|
|
1491
1395
|
userAgent,
|
|
@@ -2024,6 +1928,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
2024
1928
|
span,
|
|
2025
1929
|
tracer
|
|
2026
1930
|
});
|
|
1931
|
+
if (acceptsJsonLd(request)) response.headers.set("Vary", "Accept");
|
|
2027
1932
|
} catch (error) {
|
|
2028
1933
|
span.setStatus({
|
|
2029
1934
|
code: SpanStatusCode.ERROR,
|
|
@@ -2087,6 +1992,9 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
2087
1992
|
context: context$1,
|
|
2088
1993
|
nodeInfoDispatcher: this.nodeInfoDispatcher
|
|
2089
1994
|
});
|
|
1995
|
+
}
|
|
1996
|
+
if (request.method !== "POST" && !acceptsJsonLd(request)) return await onNotAcceptable(request);
|
|
1997
|
+
switch (routeName) {
|
|
2090
1998
|
case "actor":
|
|
2091
1999
|
context$1 = this.#createContext(request, contextData, { invokedFromActorDispatcher: { identifier: route.values.identifier ?? route.values.handle } });
|
|
2092
2000
|
return await handleActor(request, {
|
|
@@ -2095,8 +2003,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
2095
2003
|
actorDispatcher: this.actorCallbacks?.dispatcher,
|
|
2096
2004
|
authorizePredicate: this.actorCallbacks?.authorizePredicate,
|
|
2097
2005
|
onUnauthorized,
|
|
2098
|
-
onNotFound
|
|
2099
|
-
onNotAcceptable
|
|
2006
|
+
onNotFound
|
|
2100
2007
|
});
|
|
2101
2008
|
case "object": {
|
|
2102
2009
|
const typeId = route.name.replace(/^object:/, "");
|
|
@@ -2112,8 +2019,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
2112
2019
|
objectDispatcher: callbacks?.dispatcher,
|
|
2113
2020
|
authorizePredicate: callbacks?.authorizePredicate,
|
|
2114
2021
|
onUnauthorized,
|
|
2115
|
-
onNotFound
|
|
2116
|
-
onNotAcceptable
|
|
2022
|
+
onNotFound
|
|
2117
2023
|
});
|
|
2118
2024
|
}
|
|
2119
2025
|
case "outbox": return await handleCollection(request, {
|
|
@@ -2124,8 +2030,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
2124
2030
|
collectionCallbacks: this.outboxCallbacks,
|
|
2125
2031
|
tracerProvider: this.tracerProvider,
|
|
2126
2032
|
onUnauthorized,
|
|
2127
|
-
onNotFound
|
|
2128
|
-
onNotAcceptable
|
|
2033
|
+
onNotFound
|
|
2129
2034
|
});
|
|
2130
2035
|
case "inbox":
|
|
2131
2036
|
if (request.method !== "POST") return await handleCollection(request, {
|
|
@@ -2136,8 +2041,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
2136
2041
|
collectionCallbacks: this.inboxCallbacks,
|
|
2137
2042
|
tracerProvider: this.tracerProvider,
|
|
2138
2043
|
onUnauthorized,
|
|
2139
|
-
onNotFound
|
|
2140
|
-
onNotAcceptable
|
|
2044
|
+
onNotFound
|
|
2141
2045
|
});
|
|
2142
2046
|
context$1 = this.#createContext(request, contextData, { documentLoader: await context$1.getDocumentLoader({ identifier: route.values.identifier ?? route.values.handle }) });
|
|
2143
2047
|
case "sharedInbox":
|
|
@@ -2170,8 +2074,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
2170
2074
|
collectionCallbacks: this.followingCallbacks,
|
|
2171
2075
|
tracerProvider: this.tracerProvider,
|
|
2172
2076
|
onUnauthorized,
|
|
2173
|
-
onNotFound
|
|
2174
|
-
onNotAcceptable
|
|
2077
|
+
onNotFound
|
|
2175
2078
|
});
|
|
2176
2079
|
case "followers": {
|
|
2177
2080
|
let baseUrl = url.searchParams.get("base-url");
|
|
@@ -2194,8 +2097,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
2194
2097
|
collectionCallbacks: this.followersCallbacks,
|
|
2195
2098
|
tracerProvider: this.tracerProvider,
|
|
2196
2099
|
onUnauthorized,
|
|
2197
|
-
onNotFound
|
|
2198
|
-
onNotAcceptable
|
|
2100
|
+
onNotFound
|
|
2199
2101
|
});
|
|
2200
2102
|
}
|
|
2201
2103
|
case "liked": return await handleCollection(request, {
|
|
@@ -2206,8 +2108,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
2206
2108
|
collectionCallbacks: this.likedCallbacks,
|
|
2207
2109
|
tracerProvider: this.tracerProvider,
|
|
2208
2110
|
onUnauthorized,
|
|
2209
|
-
onNotFound
|
|
2210
|
-
onNotAcceptable
|
|
2111
|
+
onNotFound
|
|
2211
2112
|
});
|
|
2212
2113
|
case "featured": return await handleCollection(request, {
|
|
2213
2114
|
name: "featured",
|
|
@@ -2217,8 +2118,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
2217
2118
|
collectionCallbacks: this.featuredCallbacks,
|
|
2218
2119
|
tracerProvider: this.tracerProvider,
|
|
2219
2120
|
onUnauthorized,
|
|
2220
|
-
onNotFound
|
|
2221
|
-
onNotAcceptable
|
|
2121
|
+
onNotFound
|
|
2222
2122
|
});
|
|
2223
2123
|
case "featuredTags": return await handleCollection(request, {
|
|
2224
2124
|
name: "featured tags",
|
|
@@ -2228,8 +2128,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
2228
2128
|
collectionCallbacks: this.featuredTagsCallbacks,
|
|
2229
2129
|
tracerProvider: this.tracerProvider,
|
|
2230
2130
|
onUnauthorized,
|
|
2231
|
-
onNotFound
|
|
2232
|
-
onNotAcceptable
|
|
2131
|
+
onNotFound
|
|
2233
2132
|
});
|
|
2234
2133
|
case "collection": {
|
|
2235
2134
|
const name = route.name.replace(/^collection:/, "");
|
|
@@ -2241,8 +2140,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
2241
2140
|
collectionCallbacks: callbacks,
|
|
2242
2141
|
tracerProvider: this.tracerProvider,
|
|
2243
2142
|
onUnauthorized,
|
|
2244
|
-
onNotFound
|
|
2245
|
-
onNotAcceptable
|
|
2143
|
+
onNotFound
|
|
2246
2144
|
});
|
|
2247
2145
|
}
|
|
2248
2146
|
case "orderedCollection": {
|
|
@@ -2255,8 +2153,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
|
2255
2153
|
collectionCallbacks: callbacks,
|
|
2256
2154
|
tracerProvider: this.tracerProvider,
|
|
2257
2155
|
onUnauthorized,
|
|
2258
|
-
onNotFound
|
|
2259
|
-
onNotAcceptable
|
|
2156
|
+
onNotFound
|
|
2260
2157
|
});
|
|
2261
2158
|
}
|
|
2262
2159
|
default: {
|
|
@@ -3225,4 +3122,4 @@ function getRequestId(request) {
|
|
|
3225
3122
|
}
|
|
3226
3123
|
|
|
3227
3124
|
//#endregion
|
|
3228
|
-
export { ContextImpl, FederationImpl, InboxContextImpl, KvSpecDeterminer,
|
|
3125
|
+
export { ContextImpl, FederationImpl, InboxContextImpl, KvSpecDeterminer, actorDehydrator, autoIdAssigner, createFederation, handleActor, handleCollection, handleCustomCollection, handleInbox, handleNodeInfo, handleNodeInfoJrd, handleObject, handleWebFinger, respondWithObject, respondWithObjectIfAcceptable };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
|
|
2
|
+
import { Temporal } from "@js-temporal/polyfill";
|
|
3
|
+
import { URLPattern } from "urlpattern-polyfill";
|
|
4
|
+
globalThis.addEventListener = () => {};
|
|
5
|
+
|
|
6
|
+
import "./lookup-C7SSHgK7.js";
|
|
7
|
+
import { ContextImpl, FederationImpl, InboxContextImpl, KvSpecDeterminer, createFederation } from "./middleware-C3ml59Hp.js";
|
|
8
|
+
import "./client-pY7-3icS.js";
|
|
9
|
+
import "./types-C2XVl6gj.js";
|
|
10
|
+
import "./actor-rOm0sXHU.js";
|
|
11
|
+
import "./key-khQpfFdw.js";
|
|
12
|
+
import "./http-Bmx7ea3F.js";
|
|
13
|
+
import "./ld-BLMebnep.js";
|
|
14
|
+
import "./owner-XzzTSr4S.js";
|
|
15
|
+
import "./proof-C9sfVit1.js";
|
|
16
|
+
import "./docloader-CE1lRhEV.js";
|
|
17
|
+
import "./kv-cache-DN9pfMBe.js";
|
|
18
|
+
import "./inbox-B9PjFn2S.js";
|
|
19
|
+
import "./builder-hArjoWjW.js";
|
|
20
|
+
import "./collection-BzWsN9pB.js";
|
|
21
|
+
import "./keycache-BU3fsZFa.js";
|
|
22
|
+
import "./negotiation-C4nFufNk.js";
|
|
23
|
+
import "./retry-CfF8Gn4d.js";
|
|
24
|
+
import "./send-yEkZlxzW.js";
|
|
25
|
+
|
|
26
|
+
export { FederationImpl };
|