From e6cb23e0b15fff4296b8ffac6356d50db2886bd8 Mon Sep 17 00:00:00 2001 From: Emmanuel Krebs Date: Wed, 25 Sep 2024 11:56:58 +0200 Subject: [PATCH] fix: pocket API is actively requesting pagination (and state) now --- src/services/pocket/get.ts | 57 ++++++++++++++++++++++++++------------ 1 file changed, 39 insertions(+), 18 deletions(-) diff --git a/src/services/pocket/get.ts b/src/services/pocket/get.ts index 0f1921f..3bb7d5e 100644 --- a/src/services/pocket/get.ts +++ b/src/services/pocket/get.ts @@ -8,25 +8,46 @@ import { itemToListItem, PocketItem } from './item'; interface PocketList { list: Record; + total: string; } +// limit from the doc +const count = 30; + export const get = async (param: GetParams): Promise => { - const response = await post({ - url: 'https://getpocket.com/v3/get', - headers, - params: { - consumer_key: getPocketKey(), - access_token: await getPocketToken(), - sort: 'newest', - search: param.type === 'search' ? param.search : undefined, - tag: param.type === 'tag' ? param.tag ?? '_untagged_' : undefined, - detailType: 'complete', - }, - }); - - if (!response.ok) throw Error("couldn't get pocket list"); - - return Object.values(response.result.list) - .sort((a, b) => (a.time_added < b.time_added ? 1 : -1)) - .map(itemToListItem); + const listItems: ListItem[] = []; + let offset = 0; + let total = 0; + + do { + const response = await post({ + url: 'https://getpocket.com/v3/get', + headers, + params: { + consumer_key: getPocketKey(), + access_token: await getPocketToken(), + sort: 'newest', + search: param.type === 'search' ? param.search : undefined, + tag: param.type === 'tag' ? param.tag ?? '_untagged_' : undefined, + detailType: 'complete', + state: 'unread', + count, + total: '1', + offset, + }, + }); + + if (!response.ok) throw Error("couldn't get pocket list"); + + listItems.push( + ...Object.values(response.result.list) + .sort((a, b) => (a.time_added < b.time_added ? 1 : -1)) + .map(itemToListItem) + ); + + total = parseInt(response.result.total); + offset += count; + } while (listItems.length < total); + + return listItems; };