summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/endpoints/federation
diff options
context:
space:
mode:
Diffstat (limited to 'packages/backend/src/server/api/endpoints/federation')
-rw-r--r--packages/backend/src/server/api/endpoints/federation/instances.ts29
-rw-r--r--packages/backend/src/server/api/endpoints/federation/show-instance.ts9
-rw-r--r--packages/backend/src/server/api/endpoints/federation/stats.ts86
3 files changed, 113 insertions, 11 deletions
diff --git a/packages/backend/src/server/api/endpoints/federation/instances.ts b/packages/backend/src/server/api/endpoints/federation/instances.ts
index e143dcfe89..617ca65733 100644
--- a/packages/backend/src/server/api/endpoints/federation/instances.ts
+++ b/packages/backend/src/server/api/endpoints/federation/instances.ts
@@ -36,14 +36,33 @@ export const paramDef = {
blocked: { type: 'boolean', nullable: true },
notResponding: { type: 'boolean', nullable: true },
suspended: { type: 'boolean', nullable: true },
- silenced: { type: "boolean", nullable: true },
+ silenced: { type: 'boolean', nullable: true },
federating: { type: 'boolean', nullable: true },
subscribing: { type: 'boolean', nullable: true },
publishing: { type: 'boolean', nullable: true },
nsfw: { type: 'boolean', nullable: true },
limit: { type: 'integer', minimum: 1, maximum: 100, default: 30 },
offset: { type: 'integer', default: 0 },
- sort: { type: 'string' },
+ sort: {
+ type: 'string',
+ nullable: true,
+ enum: [
+ '+pubSub',
+ '-pubSub',
+ '+notes',
+ '-notes',
+ '+users',
+ '-users',
+ '+following',
+ '-following',
+ '+followers',
+ '-followers',
+ '+firstRetrievedAt',
+ '-firstRetrievedAt',
+ '+latestRequestReceivedAt',
+ '-latestRequestReceivedAt',
+ ],
+ },
},
required: [],
} as const;
@@ -112,18 +131,18 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
}
}
- if (typeof ps.silenced === "boolean") {
+ if (typeof ps.silenced === 'boolean') {
const meta = await this.metaService.fetch(true);
if (ps.silenced) {
if (meta.silencedHosts.length === 0) {
return [];
}
- query.andWhere("instance.host IN (:...silences)", {
+ query.andWhere('instance.host IN (:...silences)', {
silences: meta.silencedHosts,
});
} else if (meta.silencedHosts.length > 0) {
- query.andWhere("instance.host NOT IN (:...silences)", {
+ query.andWhere('instance.host NOT IN (:...silences)', {
silences: meta.silencedHosts,
});
}
diff --git a/packages/backend/src/server/api/endpoints/federation/show-instance.ts b/packages/backend/src/server/api/endpoints/federation/show-instance.ts
index 71eec11235..781c15e742 100644
--- a/packages/backend/src/server/api/endpoints/federation/show-instance.ts
+++ b/packages/backend/src/server/api/endpoints/federation/show-instance.ts
@@ -16,12 +16,9 @@ export const meta = {
requireCredential: false,
res: {
- oneOf: [{
- type: 'object',
- ref: 'FederationInstance',
- }, {
- type: 'null',
- }],
+ type: 'object',
+ optional: false, nullable: true,
+ ref: 'FederationInstance',
},
} as const;
diff --git a/packages/backend/src/server/api/endpoints/federation/stats.ts b/packages/backend/src/server/api/endpoints/federation/stats.ts
index e3ffea7b7e..6548142d41 100644
--- a/packages/backend/src/server/api/endpoints/federation/stats.ts
+++ b/packages/backend/src/server/api/endpoints/federation/stats.ts
@@ -18,6 +18,92 @@ export const meta = {
allowGet: true,
cacheSec: 60 * 60,
+
+ res: {
+ type: 'object',
+ optional: false,
+ nullable: false,
+ properties: {
+ topSubInstances: {
+ type: 'array',
+ optional: false,
+ nullable: false,
+ items: {
+ properties: {
+ id: { type: 'string' },
+ firstRetrievedAt: { type: 'string' },
+ host: { type: 'string' },
+ usersCount: { type: 'number' },
+ notesCount: { type: 'number' },
+ followingCount: { type: 'number' },
+ followersCount: { type: 'number' },
+ isNotResponding: { type: 'boolean' },
+ isSuspended: { type: 'boolean' },
+ isBlocked: { type: 'boolean' },
+ softwareName: { type: 'string' },
+ softwareVersion: { type: 'string' },
+ openRegistrations: { type: 'boolean' },
+ name: { type: 'string' },
+ description: { type: 'string' },
+ maintainerName: { type: 'string' },
+ maintainerEmail: { type: 'string' },
+ isSilenced: { type: 'boolean' },
+ iconUrl: { type: 'string' },
+ faviconUrl: { type: 'string' },
+ themeColor: { type: 'string' },
+ infoUpdatedAt: {
+ type: 'string',
+ nullable: true,
+ },
+ latestRequestReceivedAt: {
+ type: 'string',
+ nullable: true,
+ },
+ }
+ },
+ },
+ otherFollowersCount: { type: 'number' },
+ topPubInstances: {
+ type: 'array',
+ optional: false,
+ nullable: false,
+ items: {
+ properties: {
+ id: { type: 'string' },
+ firstRetrievedAt: { type: 'string' },
+ host: { type: 'string' },
+ usersCount: { type: 'number' },
+ notesCount: { type: 'number' },
+ followingCount: { type: 'number' },
+ followersCount: { type: 'number' },
+ isNotResponding: { type: 'boolean' },
+ isSuspended: { type: 'boolean' },
+ isBlocked: { type: 'boolean' },
+ softwareName: { type: 'string' },
+ softwareVersion: { type: 'string' },
+ openRegistrations: { type: 'boolean' },
+ name: { type: 'string' },
+ description: { type: 'string' },
+ maintainerName: { type: 'string' },
+ maintainerEmail: { type: 'string' },
+ isSilenced: { type: 'boolean' },
+ iconUrl: { type: 'string' },
+ faviconUrl: { type: 'string' },
+ themeColor: { type: 'string' },
+ infoUpdatedAt: {
+ type: 'string',
+ nullable: true,
+ },
+ latestRequestReceivedAt: {
+ type: 'string',
+ nullable: true,
+ },
+ }
+ },
+ },
+ otherFollowingCount: { type: 'number' },
+ },
+ }
} as const;
export const paramDef = {