UNPKG

@fedify/fedify

Version:

An ActivityPub server framework

51 lines (47 loc) 2.36 kB
import { Temporal } from "@js-temporal/polyfill"; import { URLPattern } from "urlpattern-polyfill"; globalThis.addEventListener = () => {}; import { formatSemVer } from "./semver-DWClQt_5.js"; //#region nodeinfo/types.ts /** * Converts a {@link NodeInfo} object to a JSON value. * @param nodeInfo The {@link NodeInfo} object to convert. * @returns The JSON value that complies with the NodeInfo schema. * @throws {TypeError} If the {@link NodeInfo} object is invalid. */ function nodeInfoToJson(nodeInfo) { if (!nodeInfo.software.name.match(/^[a-z0-9-]+$/)) throw new TypeError("Invalid software name."); if (nodeInfo.protocols.length < 1) throw new TypeError("At least one protocol must be supported."); if (nodeInfo.usage.users.total != null && (nodeInfo.usage.users.total < 0 || !Number.isInteger(nodeInfo.usage.users.total))) throw new TypeError("Invalid total users."); if (nodeInfo.usage.users.activeHalfyear != null && (nodeInfo.usage.users.activeHalfyear < 0 || !Number.isInteger(nodeInfo.usage.users.activeHalfyear))) throw new TypeError("Invalid active halfyear users."); if (nodeInfo.usage.users.activeMonth != null && (nodeInfo.usage.users.activeMonth < 0 || !Number.isInteger(nodeInfo.usage.users.activeMonth))) throw new TypeError("Invalid active month users."); if (nodeInfo.usage.localPosts < 0 || !Number.isInteger(nodeInfo.usage.localPosts)) throw new TypeError("Invalid local posts."); if (nodeInfo.usage.localComments < 0 || !Number.isInteger(nodeInfo.usage.localComments)) throw new TypeError("Invalid local comments."); return { "$schema": "http://nodeinfo.diaspora.software/ns/schema/2.1#", version: "2.1", software: { name: nodeInfo.software.name, version: formatSemVer(nodeInfo.software.version), repository: nodeInfo.software.repository?.href, homepage: nodeInfo.software.homepage?.href }, protocols: nodeInfo.protocols, services: nodeInfo.services == null ? { inbound: [], outbound: [] } : { inbound: nodeInfo.services.inbound ?? [], outbound: nodeInfo.services.outbound ?? [] }, openRegistrations: nodeInfo.openRegistrations ?? false, usage: { users: nodeInfo.usage.users, localPosts: nodeInfo.usage.localPosts, localComments: nodeInfo.usage.localComments }, metadata: nodeInfo.metadata ?? {} }; } //#endregion export { nodeInfoToJson };