Saltar al contenido principal
El SDK proporciona utilidades de paginación genéricas que puedes usar con cualquier endpoint que devuelva respuestas paginadas. Los métodos devuelven respuestas en bruto que luego puedes envolver con un paginador.

Paginación básica

quick-start.ts
import { Client, UserPaginator, PaginatedResponse, Schemas } from '@xdevplatform/xdk';

const client: Client = new Client({ bearerToken: 'your-bearer-token' });

// Envuelve cualquier endpoint de lista con el tipo adecuado
const followers: UserPaginator = new UserPaginator(
  async (token?: string): Promise<PaginatedResponse<Schemas.User>> => {
    const res = await client.users.getFollowers('<userId>', {
      maxResults: 100,
      paginationToken: token,
      userFields: ['id','name','username'],
    });
    return { 
      data: res.data ?? [], 
      meta: res.meta, 
      includes: res.includes, 
      errors: res.errors 
    };
  }
);

Paginación manual

import { UserPaginator, Schemas } from '@xdevplatform/xdk';

await followers.fetchNext();          // primera página
while (!followers.done) {
  await followers.fetchNext();        // páginas siguientes
}

const userCount: number = followers.users.length;  // todos los usuarios recuperados
const firstUser: Schemas.User | undefined = followers.users[0];
const nextToken: string | undefined = followers.meta?.nextToken;

Iteración asíncrona

import { Schemas } from '@xdevplatform/xdk';

for await (const user of followers) {
  const typedUser: Schemas.User = user;
  console.log(typedUser.username);  // acceso con tipado completo
}

Siguiente página como una nueva instancia

import { UserPaginator } from '@xdevplatform/xdk';

await followers.fetchNext();
if (!followers.done) {
  const page2: UserPaginator = await followers.next(); // paginador independiente que comienza en la siguiente página
  await page2.fetchNext();
  console.log(page2.users.length);  // elementos de la segunda página
}

Manejo de errores y límites de tasa

import { UserPaginator, Schemas } from '@xdevplatform/xdk';

try {
  for await (const item of followers) {
    const user: Schemas.User = item;
    // procesar usuario...
  }
} catch (err: unknown) {
  if (followers.rateLimited) {
    console.error('Se alcanzó el límite de tasa, es necesario esperar antes de reintentar');
    // esperar / volver a intentarlo más tarde
  } else {
    console.error('Error de paginación:', err);
    throw err;
  }
}
Para ver ejemplos de código detallados que utilizan el XDK de JavaScript/TypeScript, consulta nuestro repositorio de ejemplos de código en GitHub.