Paginação

Navegue por listas com offset na biblioteca e com cursor no feed de alterações.

A API tem duas listas, cada uma com o modelo de paginação adequado ao seu uso.

Offset: biblioteca

Listar roteiros usa limit e offset:

ParâmetroPadrãoFaixa
limit201 a 100
offset00 a 100.000

A resposta indica se há mais itens:

{
  "scripts": [],
  "hasMore": true,
  "nextOffset": 40
}

Enquanto hasMore for true, chame de novo com offset=nextOffset. Quando não houver mais itens, nextOffset é null.

A biblioteca é ordenada pela última alteração. Se um roteiro mudar enquanto você pagina, ele pode aparecer duas vezes ou ser pulado. Para cópias completas e consistentes, use o feed.

Cursor: feed de alterações

O feed de alterações usa cursor e limit:

ParâmetroPadrãoFaixa
cursor"0"Inteiro em texto, até 19 dígitos
limit1001 a 200
{
  "changes": [{ "cursor": "128", "script": {} }],
  "nextCursor": "128",
  "hasMore": false
}

Siga nextCursor enquanto hasMore for true. Guarde o último nextCursor para buscar apenas as novidades na próxima sincronização. Trate o cursor como texto opaco: ele pode passar do limite de inteiros seguros do JavaScript.

let cursor = loadCursor() ?? "0";
let hasMore = true;
while (hasMore) {
  const response = await fetch(
    `https://livetp.app/api/v1/scripts?cursor=${cursor}&limit=200`,
    { headers: { Authorization: `Bearer ${process.env.LIVETP_API_KEY}` } },
  );
  const page = await response.json();
  for (const { script } of page.changes) upsertLocal(script);
  cursor = page.nextCursor;
  hasMore = page.hasMore;
}
saveCursor(cursor);