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