n8cn / packages /cli /src /utils /strapi-utils.ts
gallyga's picture
Add n8n Chinese version
aec3094
import { Logger } from '@n8n/backend-common';
import { Container } from '@n8n/di';
import axios from 'axios';
import { ErrorReporter } from 'n8n-core';
interface ResponseData<T> {
data: Array<Entity<T>>;
meta: Meta;
}
interface Meta {
pagination: Pagination;
}
export interface Entity<T> {
id: number;
attributes: T;
}
interface Pagination {
page: number;
pageSize: number;
pageCount: number;
total: number;
}
export async function paginatedRequest<T>(url: string): Promise<T[]> {
let returnData: T[] = [];
let responseData: T[] | undefined = [];
const params = {
pagination: {
page: 1,
pageSize: 25,
},
};
do {
let response;
try {
response = await axios.get<ResponseData<T>>(url, {
headers: { 'Content-Type': 'application/json' },
params,
});
} catch (error) {
Container.get(ErrorReporter).error(error, {
tags: { source: 'communityNodesPaginatedRequest' },
});
Container.get(Logger).error(
`Error while fetching community nodes: ${(error as Error).message}`,
);
break;
}
responseData = response?.data?.data?.map((item) => item.attributes);
if (!responseData?.length) break;
returnData = returnData.concat(responseData);
if (response?.data?.meta?.pagination) {
const { page, pageCount } = response?.data.meta.pagination;
if (page === pageCount) {
break;
}
}
params.pagination.page++;
} while (responseData?.length);
return returnData;
}