export async function paginate({ fetchData, pageSize, delay, }: { fetchData: (offset: number, count: number) => Promise; pageSize: number; delay?: { onDelay: (message: string) => void; milliseconds: number }; }): Promise { const result: TData[] = []; let offset = 0; let data: TData[] = []; do { data = await fetchData(offset, pageSize); result.push(...data); offset += pageSize; if (delay && data.length >= pageSize) { delay.onDelay(`Waiting ${delay.milliseconds / 1000} seconds`); await new Promise((resolve) => setTimeout(resolve, delay.milliseconds)); } } while (data.length >= pageSize); return result; }