@fedify/fedify
Version:
An ActivityPub server framework
132 lines (128 loc) • 4.02 kB
JavaScript
import { Temporal } from "@js-temporal/polyfill";
import { URLPattern } from "urlpattern-polyfill";
globalThis.addEventListener = () => {};
import { assertEquals } from "../assert_equals-CTYbeopb.js";
import "../assert-DmFG7ppO.js";
import "../assert_instance_of-CF09JHYM.js";
import { MemoryKvStore } from "../kv-BMY6Qf_A.js";
import { createFederation, handleNodeInfo, handleNodeInfoJrd } from "../middleware-DlU2_Djj.js";
import "../docloader-C8mmLN-Y.js";
import "../url-kTAI6_KP.js";
import { parseSemVer } from "../semver-DWClQt_5.js";
import "../client-rv6n0nKR.js";
import "../router-D_aVZZUc.js";
import "../types-C7C_l-jz.js";
import "../multibase-DeCHcK8L.js";
import "../vocab-dDpPQ0fF.js";
import "../langstr-DbWheeIS.js";
import "../lookup-Ozuw-rxN.js";
import "../type-D2s5lmbZ.js";
import "../actor-BP-NTJ2m.js";
import "../key-CPSlDkCj.js";
import "../http-BmfI6U39.js";
import "../authdocloader-Banw__l6.js";
import "../ld-D9kk1Uy2.js";
import "../owner-DF6Fg4-s.js";
import "../proof-13QPysOU.js";
import "../lookup-DNXR408t.js";
import "../inbox-AwdJVoMZ.js";
import "../builder-EdzpUb9N.js";
import "../collection-Dfb0TPno.js";
import "../keycache-BPwY_Up0.js";
import "../retry-BiIhZWgD.js";
import "../send-CaL5Xv1F.js";
import { test } from "../testing-BZ0dJ4qn.js";
import "../std__assert-vp0TKMS1.js";
import "../assert_rejects-C-sxEMM5.js";
import "../assert_is_error-nrwA1GeT.js";
import "../assert_not_equals-Dc7y-V5Q.js";
import "../assert_throws-Cn9C6Jur.js";
import "../docloader-09nVWLAZ.js";
import { createRequestContext } from "../context-Buzj1YKD.js";
//#region nodeinfo/handler.test.ts
test("handleNodeInfo()", async () => {
const request = new Request("https://example.com/nodeinfo/2.1");
const federation = createFederation({ kv: new MemoryKvStore() });
const context = createRequestContext({
federation,
data: void 0,
request,
url: new URL(request.url)
});
const nodeInfoDispatcher = (_ctx) => ({
software: {
name: "test",
version: parseSemVer("1.2.3")
},
protocols: ["activitypub"],
usage: {
users: {
total: 3,
activeHalfyear: 2,
activeMonth: 1
},
localPosts: 123,
localComments: 456
}
});
const response = await handleNodeInfo(request, {
context,
nodeInfoDispatcher
});
assertEquals(response.status, 200);
assertEquals(response.headers.get("Content-Type"), "application/json; profile=\"http://nodeinfo.diaspora.software/ns/schema/2.1#\"");
const json = await response.json();
assertEquals(json, {
"$schema": "http://nodeinfo.diaspora.software/ns/schema/2.1#",
version: "2.1",
software: {
name: "test",
version: "1.2.3"
},
protocols: ["activitypub"],
services: {
inbound: [],
outbound: []
},
openRegistrations: false,
usage: {
users: {
total: 3,
activeHalfyear: 2,
activeMonth: 1
},
localPosts: 123,
localComments: 456
},
metadata: {}
});
});
test("handleNodeInfoJrd()", async () => {
const request = new Request("https://example.com/.well-known/nodeinfo");
const federation = createFederation({ kv: new MemoryKvStore() });
let context = createRequestContext({
federation,
data: void 0,
request,
url: new URL(request.url)
});
let response = await handleNodeInfoJrd(request, context);
assertEquals(response.status, 200);
assertEquals(response.headers.get("Content-Type"), "application/jrd+json");
assertEquals(await response.json(), { links: [] });
context = createRequestContext({
...context,
getNodeInfoUri() {
return new URL("https://example.com/nodeinfo/2.1");
}
});
response = await handleNodeInfoJrd(request, context);
assertEquals(response.status, 200);
assertEquals(response.headers.get("Content-Type"), "application/jrd+json");
assertEquals(await response.json(), { links: [{
href: "https://example.com/nodeinfo/2.1",
rel: "http://nodeinfo.diaspora.software/ns/schema/2.1",
type: "application/json; profile=\"http://nodeinfo.diaspora.software/ns/schema/2.1#\""
}] });
});
//#endregion