fedicrawl/application/src/Fediverse/Providers/Misskey/retrieveInstancesPage.ts

47 wiersze
1.1 KiB
TypeScript
Czysty Zwykły widok Historia

2022-01-08 18:13:56 +00:00
import { assertSuccessJsonResponse } from '../../assertSuccessJsonResponse'
import { z } from 'zod'
2022-11-29 13:11:27 +00:00
import getTimeoutMilliseconds from '../../getTimeoutMilliseconds.js'
import { NodeProviderMethod } from '../NodeProviderMethod'
import { NoMoreNodesError } from '../NoMoreNodesError'
2022-01-08 18:13:56 +00:00
const limit = 100
const schema = z.array(
z.object({
host: z.string()
})
)
2022-09-18 11:32:25 +00:00
export const retrieveInstancesPage: NodeProviderMethod = async (
domain,
2022-11-22 15:37:11 +00:00
page,
robotsTxt
2022-09-18 11:32:25 +00:00
) => {
2022-11-22 15:37:11 +00:00
const response = await robotsTxt.postIfAllowed(
2022-11-29 13:11:27 +00:00
new URL(`https://${domain}/api/federation/instances`),
2022-09-18 11:32:25 +00:00
{
host: null,
blocked: null,
notResponding: null,
suspended: null,
federating: null,
subscribing: null,
publishing: null,
limit,
offset: page * limit,
sort: '+id'
},
{
2022-11-29 13:11:27 +00:00
timeout: getTimeoutMilliseconds(domain)
2022-09-18 11:32:25 +00:00
}
)
assertSuccessJsonResponse(response)
const responseData = schema.parse(response.data)
if (responseData.length === 0) {
throw new NoMoreNodesError('instance')
2022-01-08 18:13:56 +00:00
}
2022-09-18 11:32:25 +00:00
return responseData.map((item) => {
return item.host
})
2022-01-08 18:13:56 +00:00
}